помогите со скетчем, вроде все просто, но как написать не знаю (пытался из двух примеров слепить один)
кнопка без фиксации
Алгоритм такой. Подключили к шине, сразу отправляется canMsg1. Нажали кнопку – отправляем canMsg2. Отпустили кнопку – продолжает отправлятся canMsg2. Для того чтобы отправить canMsg1 нужно повторно нажать кнопку.
Т.е. сразу отправляется canMsg1, нажали – canMsg2, отпустили, нажали – canMsg1.
// Алгоритм такой. Подключили к шине, сразу отправляется canMsg1
// Нажали кнопку – отправляем canMsg2, удерживаем кнопку – ничего не происходит (отправляется canMsg2). Отпустили кнопку – отправляется canMsg2.
// Для того чтобы отправить canMsg1 нужно повторно нажать кнопку.
// Т.е. сразу отправляется canMsg1, нажали – canMsg2, отпустили, нажали – canMsg1.
#include <SPI.h>
#include <mcp2515.h>
struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);
int flag=0;
void setup() {
canMsg1.can_id = 0x100;
canMsg1.can_dlc = 1;
canMsg1.data[0] = 0x10;
canMsg2.can_id = 0x100;
canMsg2.can_dlc = 1;
canMsg2.data[0] = 0x99;
while (!Serial);
Serial.begin(115200);
SPI.begin();
mcp2515.reset();
mcp2515.setBitrate(CAN_500KBPS);
mcp2515.setNormalMode();
Serial.println("Example: Write to CAN");
}
void loop()
{
if(digitalRead(5)==HIGH&&flag==0)//если кнопка нажата
// и перемення flag равна 0 , то ...
{
mcp2515.sendMessage(&canMsg2);
//digitalWrite(13,!digitalRead(13));
flag=1;
}
if(digitalRead(5)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
{
flag=0;//обнуляем переменную flag
mcp2515.sendMessage(&canMsg1);
}
}
// mcp2515.sendMessage(&canMsg1);
// mcp2515.sendMessage(&canMsg2);
Cho1s - ваша проблема не в программировании, а в том что вы мысли формулировать не умеете. А когда задача нечетко сформулирована, запрограммировать ее трудно.
Почитайте себя сами - сначала пишете, что при нажатии отправляется canMsg2, потом - что canMsg1. Про удержание вообще написана какая-то чушь - "ничего не происходит, то есть отправляется canMsg2" -??? так ничего или все-таки отправляется?
Когда вы сами себя поймете - тогда и код получится.
ну так, подключил ардуино к шине, сразу отправляется canMsg1.
нажал/отпустил - вместо canMsg1 отправляется canMsg2 (и продолжает отправляться)
следующее нажал/отпустил - вместо canMsg2 отправляется canMsg1
как в этом примере со светодиодом
int flag=0;
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата
// и перемення flag равна 0 , то ...
{
digitalWrite(13,!digitalRead(13));
flag=1;
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие
// плюс защита от "дребезга" 100%
}
if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
{
flag=0;//обнуляем переменную flag
}
}
Cho1s - увы, понятнее не стало. "Нажал/отпустил/ - это два события, в какой момент отправляем месседж? А если нажали и держим 5 минут подряд? - программист должен продумать все ситуации
при включении питания ардуино, сразу отправляется canMsg1. нажали – НЕ отправляет, отпустили – отправляет canMsg2. Повторно нажали - Не отправляет, отпустили – отправляет canMsg1
при включении питания ардуино, сразу отправляется canMsg1. нажали – НЕ отправляет, отпустили – отправляет canMsg2. Повторно нажали - Не отправляет, отпустили – отправляет canMsg1
Изучить работу с библиотекой титановый велосипед и пример write из библиотеки CAN
Такой вроде: https://static.chipdip.ru/lib/205/DOC000205042.pdf
Вообще - CAN предполагает питание модулей от разных источников (при расстоянии в сотню метров, например). По физике это как RS-485 - диффпара без обязательной земли.
От 220 мы такие не питали, но от разных БП - да. Один около трехфазного двигателя, второй в силовом щите... Не горели покашто. Но с машиной - это пусть Макс напишет, я тут нибэнимэ.
если БП норм качества, то можно. Но сейчас очень много в продаже говнеца. С таким БП я б лучше не стал к машине подключать. А что проблема от юсб компа запитать или от DC-DC (7805 например)? В китайском can модуле CAN Трансивер стоит tja1050, можно почитать в даташите на что он способен, но гальваноразвязка врядли там присутствует.
Вообще - CAN предполагает питание модулей от разных источников (при расстоянии в сотню метров, например). От 220 мы такие не питали, но от разных БП - да. .
По логике развязка должна быть. От разных БП и я питал. Но там цена ошибки в крайнем случае была ардуина да модуль :) А ЭБУ в машине как-то неохота пожечь, это дорого.... :(
если БП норм качества, то можно. Но сейчас очень много в продаже говнеца. С таким БП я б лучше не стал к машине подключать. А что проблема от юсб компа запитать
Насчет БП понял. Но думаю, от USB ноута, работающего от своей батарейки - должно быть безопасно?
Вопрос связан с тем, что практически все схемы, что видел - КАН-модуль и ардуина питаются от бортовой сети того же авто...
ну какбэ это логично. В основном эти самодельные девайсы предназначены, чтобы ездить на борту машины, а там нет 220В, потому от бортсети и питаются, а если нужно стационарно CAN автомобиля потестить (в гараже например), то обычно компьютер при этом присутствует и питание от юсб берётся.
Насчет БП понял. Но думаю, от USB ноута, работающего от своей батарейки - должно быть безопасно?
да, конечно. Я много раз так делал, всё норм.
На самом деле на современных CAN шинах защита прям хорошая, не так легко шину убить. Но береженого...
UPD. Главное скорость правильную выбрать, (ну и помним что у китайского кварц 8MHz). Потому что если скорость выбрать неправильную и подключиться к шине, будет лёгкий испуг в виде новогодней елки на панели. Страшного ничего нет, но если ошибки потереть не чем, то пару чеков может и остаться, даже когда отключимся нашим мегадевайсом, гадящим в шину.
UPD. Главное скорость правильную выбрать, (ну и помним что у китайского кварц 8MHz). Потому что если скорость выбрать неправильную и подключиться к шине, будет лёгкий испуг в виде новогодней елки на панели. Страшного ничего нет, но если ошибки потереть не чем, то пару чеков может и остаться, даже когда отключимся нашим мегадевайсом, гадящим в шину.
я для начала "гадить в шину" ардуиной :) не собираюсь. Хочу подключиться и просто послушать, что там летает. Если ничего не прочитается (читал, что в некоторых авто сообщения на диагностический разъем идут только по запросу) - то тогда попробовать "погадить" готовым OBD-2 сканером, а ардуиной почитать ответы...
по-моему я даже как то все лампы зажёг, когда просто подключиться нажал CANхакером (та же ардуина+mcp+программа на ноуте), но вот только не помню был ли там выбран режим listen only , скорость при этом не угадал.
А машина то какая? чаще всего моторный CAN 500кбит/с (контакты OBD 6 и 14). Низкоскоростной салонный CAN 125 кбит/с. (контакты OBD могут быть например 3 и 11, также салонный CAN иногда вообще в OBD не выводится)
Ну, вообще, MCP будет слать ACK на каждый принятый пакет (вернее - тот, который посчитает принятым). Так что в ответку может в шину бахнуть пару килобайт...
по-моему я даже как то все лампы зажёг, когда просто подключиться нажал CANхакером (та же ардуина+mcp+программа на ноуте), но вот только не помню был ли там выбран режим listen only , скорость при этом не угадал.
А машина то какая?
пробовать буду на Аут ХЛ, а вообще задача читать параметры CVT на ASX-е. Инфа по PID-ам, адресу ЭБУ. расшифровке сообщений вся есть.
Хотел начать вообще без КанХакера, просто скетчем в ардуине...
MaksVV пишет:
чаще всего моторный CAN 500кбит/с (контакты OBD 6 и 14). Низкоскоростной салонный CAN 125 кбит/с
Салонная шина у Митсу 83.3, но меня она не интересует. Моторную думал пробовать 250. Но я не знал. что оно даже в режиме чтения будет гадить - тогда надо подготовится получше.
чаще всего это должно поддерживаться аппаратно адаптером. Например некоторые адаптеры убирают из функционала 10 и 20 кбит/с и ставят вместо них 33.3 и 83.3 . А в программе вы все также выбираете 10 и 20 соответственно. Ну и на user def вроде тоже может быть скорость аппаратно назначена какая либо.
да че там готовится, ну не ту выберешь, ну зажгутся лампы , выберешь другую, перевключишь зажигание и всё гуд. а можно ссылку на скорость в 250? странно не должна такая маленькая быть для быстрых блоков.
вот и у меня также, через мср могу подключится, а вот канхакером с sja1000, ни как не получается
Параметр UserDef в кан-хакере - это значение регистров BTR0 и BTR1 для SJA1000. Там довольно замудрено считается, это подробно описано в разделе 6.5 даташита. Например, 83FE - это 83.3кбс для частоты контроллера 16 МГц
попробовал по даташиту прикинуть для 33,3кбс - UserDef получается 89FE
Для одной и той же частоты можно придумать несколько значений UserDef. Напримепр, для 33,3 в дополнение к 89FE можно еще попробовать 5D14 - это тоже должно давать 33,3
Макс, а я в свою очередь спрощу - а как кан-хакер (в смысле программа, а не железка) настраивает нестандартные скорости для ардуино -mcp2515 ? - Я смотрю регистры настройки скорости у mcp2515 - и формат у них несколько другой, чем на SJA1000. Или в программе можно выбрать тип чипа?
сорри за ламерские вопросы - я программу пока не видел
просто подумалось - то, что кан-хакер не работает со скоростью 83,3 на mcp2515 8MHz - может это связно с тем, что народ вводит параметр 83FE - а ведь для 8МГц тут значение будет другое
да, именно он. не работает ни 89FE, ни 5D14, спасибо за подсказки, завтра буду курить даташит. сам подсчитывать пробовал, но не смог разобраться как это делается....
да, именно он. не работает ни 89FE, ни 5D14, спасибо за подсказки, завтра буду курить даташит. сам подсчитывать пробовал, но не смог разобраться как это делается....
это параметры для работы адаптера на 16 МГц, может у вас другая частота?
Вообще, если автор пишет, что 4В14 для 83,3 работает, то и 5D14 для 33.3 должно...
Для дробных и/или нестандартных скоростей действительно лучше кварц на 16 перепаять. А то библиотеки возможно криво для 8мгц скорость рассчитывают. Как было тут
Обратитесь
Добрый день.
помогите со скетчем, вроде все просто, но как написать не знаю (пытался из двух примеров слепить один)
кнопка без фиксации
Алгоритм такой. Подключили к шине, сразу отправляется canMsg1. Нажали кнопку – отправляем canMsg2. Отпустили кнопку – продолжает отправлятся canMsg2. Для того чтобы отправить canMsg1 нужно повторно нажать кнопку.
Т.е. сразу отправляется canMsg1, нажали – canMsg2, отпустили, нажали – canMsg1.
Cho1s - ваша проблема не в программировании, а в том что вы мысли формулировать не умеете. А когда задача нечетко сформулирована, запрограммировать ее трудно.
Почитайте себя сами - сначала пишете, что при нажатии отправляется canMsg2, потом - что canMsg1. Про удержание вообще написана какая-то чушь - "ничего не происходит, то есть отправляется canMsg2" -??? так ничего или все-таки отправляется?
Когда вы сами себя поймете - тогда и код получится.
согласен, некорректно написал.
просто кнопка без фиксации)
просто кнопка без фиксации)
у такой кнопки только два состояния - нажата и отпущена. И два перехода между состояниями.
А теперь сядьте и подумайте - в какой момент какая мессадж отправляется
ну так, подключил ардуино к шине, сразу отправляется canMsg1.
нажал/отпустил - вместо canMsg1 отправляется canMsg2 (и продолжает отправляться)
следующее нажал/отпустил - вместо canMsg2 отправляется canMsg1
как в этом примере со светодиодом
Ардуина не обладает способностью определения момента подключения к шине.
Ардуина не обладает способностью определения момента подключения к шине.
это я знаю
при включении питания ардуино, сразу отправляется canMsg1
Cho1s - увы, понятнее не стало. "Нажал/отпустил/ - это два события, в какой момент отправляем месседж? А если нажали и держим 5 минут подряд? - программист должен продумать все ситуации
a... теперь понял (наверно)
при включении питания ардуино, сразу отправляется canMsg1. нажали – НЕ отправляет, отпустили – отправляет canMsg2. Повторно нажали - Не отправляет, отпустили – отправляет canMsg1
В общем сам смог разобраться со своим скетчем) но все равно спасибо и извиняюсь за беспокойство)) позже выложу что получилось и что именно делал.
a... теперь понял (наверно)
при включении питания ардуино, сразу отправляется canMsg1. нажали – НЕ отправляет, отпустили – отправляет canMsg2. Повторно нажали - Не отправляет, отпустили – отправляет canMsg1
Изучить работу с библиотекой титановый велосипед и пример write из библиотеки CAN
Как с Вами связаться MaksVV ? Я только зарегистрировался. Требуется помощь по ардуино и штатному джойстику автомобиля. Посоветовали обратится к Вам
maks-vv@e1.ru
maks-vv@e1.ru
Написал в почту посмотрите
MaksVV, привет.
Можно совсем глупый вопрос? Не могу понять, в китайском модуле на mcp2515
H- и L-CAN входы развязаны от питания и логики или нет?
Можно подключать H и L к машине, если КАН-модуль и ардуину питаешь от БП 220в?
Вопрос связан с тем, что практически все схемы, что видел - КАН-модуль и ардуина питаются от бортовой сети того же авто...
Вход там идёт не на сам МСП, а на мелкий конвертер физ.среды.
ну то есть можно ? - спасибо
А то я зачастую в железе нуб-нубом....
Такой вроде: https://static.chipdip.ru/lib/205/DOC000205042.pdf
Вообще - CAN предполагает питание модулей от разных источников (при расстоянии в сотню метров, например). По физике это как RS-485 - диффпара без обязательной земли.
От 220 мы такие не питали, но от разных БП - да. Один около трехфазного двигателя, второй в силовом щите... Не горели покашто. Но с машиной - это пусть Макс напишет, я тут нибэнимэ.
если БП норм качества, то можно. Но сейчас очень много в продаже говнеца. С таким БП я б лучше не стал к машине подключать. А что проблема от юсб компа запитать или от DC-DC (7805 например)? В китайском can модуле CAN Трансивер стоит tja1050, можно почитать в даташите на что он способен, но гальваноразвязка врядли там присутствует.
По логике развязка должна быть. От разных БП и я питал. Но там цена ошибки в крайнем случае была ардуина да модуль :) А ЭБУ в машине как-то неохота пожечь, это дорого.... :(
Норм - это, видимо, трансформаторный , а не импульсный ;)
На последних тут у каждого второго фейерверк при подключении к юсб.
если БП норм качества, то можно. Но сейчас очень много в продаже говнеца. С таким БП я б лучше не стал к машине подключать. А что проблема от юсб компа запитать
Насчет БП понял. Но думаю, от USB ноута, работающего от своей батарейки - должно быть безопасно?
ну какбэ это логично. В основном эти самодельные девайсы предназначены, чтобы ездить на борту машины, а там нет 220В, потому от бортсети и питаются, а если нужно стационарно CAN автомобиля потестить (в гараже например), то обычно компьютер при этом присутствует и питание от юсб берётся.
да, конечно. Я много раз так делал, всё норм.
На самом деле на современных CAN шинах защита прям хорошая, не так легко шину убить. Но береженого...
UPD. Главное скорость правильную выбрать, (ну и помним что у китайского кварц 8MHz). Потому что если скорость выбрать неправильную и подключиться к шине, будет лёгкий испуг в виде новогодней елки на панели. Страшного ничего нет, но если ошибки потереть не чем, то пару чеков может и остаться, даже когда отключимся нашим мегадевайсом, гадящим в шину.
UPD. Главное скорость правильную выбрать, (ну и помним что у китайского кварц 8MHz). Потому что если скорость выбрать неправильную и подключиться к шине, будет лёгкий испуг в виде новогодней елки на панели. Страшного ничего нет, но если ошибки потереть не чем, то пару чеков может и остаться, даже когда отключимся нашим мегадевайсом, гадящим в шину.
я для начала "гадить в шину" ардуиной :) не собираюсь. Хочу подключиться и просто послушать, что там летает. Если ничего не прочитается (читал, что в некоторых авто сообщения на диагностический разъем идут только по запросу) - то тогда попробовать "погадить" готовым OBD-2 сканером, а ардуиной почитать ответы...
по-моему я даже как то все лампы зажёг, когда просто подключиться нажал CANхакером (та же ардуина+mcp+программа на ноуте), но вот только не помню был ли там выбран режим listen only , скорость при этом не угадал.
А машина то какая? чаще всего моторный CAN 500кбит/с (контакты OBD 6 и 14). Низкоскоростной салонный CAN 125 кбит/с. (контакты OBD могут быть например 3 и 11, также салонный CAN иногда вообще в OBD не выводится)
Ну, вообще, MCP будет слать ACK на каждый принятый пакет (вернее - тот, который посчитает принятым). Так что в ответку может в шину бахнуть пару килобайт...
дак да, говорю ошибки будут, а вот listen only у меня чёто глючил (девайс не хотел ничего сниффить на этом режиме) и я его отключил.
по-моему я даже как то все лампы зажёг, когда просто подключиться нажал CANхакером (та же ардуина+mcp+программа на ноуте), но вот только не помню был ли там выбран режим listen only , скорость при этом не угадал.
А машина то какая?
пробовать буду на Аут ХЛ, а вообще задача читать параметры CVT на ASX-е. Инфа по PID-ам, адресу ЭБУ. расшифровке сообщений вся есть.
Хотел начать вообще без КанХакера, просто скетчем в ардуине...
чаще всего моторный CAN 500кбит/с (контакты OBD 6 и 14). Низкоскоростной салонный CAN 125 кбит/с
Салонная шина у Митсу 83.3, но меня она не интересует. Моторную думал пробовать 250. Но я не знал. что оно даже в режиме чтения будет гадить - тогда надо подготовится получше.
UPdate - нашел в сети, моторная 250
а не подскажите что нужно писать в программе canhacker в строке user def. чтобы подключиться к 33.333, или как считать ?
чаще всего это должно поддерживаться аппаратно адаптером. Например некоторые адаптеры убирают из функционала 10 и 20 кбит/с и ставят вместо них 33.3 и 83.3 . А в программе вы все также выбираете 10 и 20 соответственно. Ну и на user def вроде тоже может быть скорость аппаратно назначена какая либо.
думаю моторная всё же 500 кбит/с. На паджеро точно могу сказать , именно такая.
а не подскажите что нужно писать в программе canhacker в строке user def. чтобы подключиться к 33.333, или как считать ?
так вроде 33.3 - это стандартная скорость для Кан-хакера, туи USER-DEF не нужен
у меня в списке 10 , 20, 50 , 100, 125, 250, 500 , 800, 1000
вот и у меня также, через мср могу подключится, а вот канхакером с sja1000, ни как не получается
UPdate - нашел в сети, моторная 250
да че там готовится, ну не ту выберешь, ну зажгутся лампы , выберешь другую, перевключишь зажигание и всё гуд. а можно ссылку на скорость в 250? странно не должна такая маленькая быть для быстрых блоков.
вот и у меня также, через мср могу подключится, а вот канхакером с sja1000, ни как не получается
на адаптерах от Артема из Новосиба
http://can.web-box.ru/work_with_can/gmlan-opel/ 33.3 выбирать в программе как 10 кбит/с
https://www.youtube.com/watch?v=9LiGgevHuWs 83.3 выбирать в программе как 20 кбит/с
на адаптере SJA1000 возможно нужно выбрать usr def и в активном окне написать 33FE (для скорости 33,3), а для 83,3 соответственно 83FE
спасибо за ссылки, я их видел, но у меня адаптер старой версии, еще на атмеле..
вот и у меня также, через мср могу подключится, а вот канхакером с sja1000, ни как не получается
Параметр UserDef в кан-хакере - это значение регистров BTR0 и BTR1 для SJA1000. Там довольно замудрено считается, это подробно описано в разделе 6.5 даташита. Например, 83FE - это 83.3кбс для частоты контроллера 16 МГц
попробовал по даташиту прикинуть для 33,3кбс - UserDef получается 89FE
вот ещё скорее всего ваш адаптер
на адаптере SJA1000 возможно нужно выбрать usr def и в активном окне написать 33FE (для скорости 33,3), а для 83,3 соответственно 83FE
Не Макс, там сильно сложнее. как считать - описано в разд 6,5 даташита на SJA1000
А то что "83FE" похоже на 83.3 - это чисто случайно:)
ага, уже понял. пост не могу поправить
ага, уже понял. пост не могу поправить
сорри, это потому что я цитировал :(
Для одной и той же частоты можно придумать несколько значений UserDef. Напримепр, для 33,3 в дополнение к 89FE можно еще попробовать 5D14 - это тоже должно давать 33,3
Макс, а я в свою очередь спрощу - а как кан-хакер (в смысле программа, а не железка) настраивает нестандартные скорости для ардуино -mcp2515 ? - Я смотрю регистры настройки скорости у mcp2515 - и формат у них несколько другой, чем на SJA1000. Или в программе можно выбрать тип чипа?
сорри за ламерские вопросы - я программу пока не видел
просто подумалось - то, что кан-хакер не работает со скоростью 83,3 на mcp2515 8MHz - может это связно с тем, что народ вводит параметр 83FE - а ведь для 8МГц тут значение будет другое
вот ещё скорее всего ваш адаптер
да, именно он. не работает ни 89FE, ни 5D14, спасибо за подсказки, завтра буду курить даташит. сам подсчитывать пробовал, но не смог разобраться как это делается....
да, именно он. не работает ни 89FE, ни 5D14, спасибо за подсказки, завтра буду курить даташит. сам подсчитывать пробовал, но не смог разобраться как это делается....
это параметры для работы адаптера на 16 МГц, может у вас другая частота?
Вообще, если автор пишет, что 4В14 для 83,3 работает, то и 5D14 для 33.3 должно...
да нет, специально смотрел что кварц на 16мгц стоит, завтра на машине еще раз перепроверю
для скорости 95.2 ввожу С34Е
для скорости 95.2 ввожу С34Е
все так, С34Е = делитель частоты 8, длина фрейма одного бита 21
16 МГц / (21 * 8) = 95,23 КГц
не знаю, почему 89FE не работает... делитель 20, фрейм 24
16 МГц / (20*24) = 33,3 КГц
Для дробных и/или нестандартных скоростей действительно лучше кварц на 16 перепаять. А то библиотеки возможно криво для 8мгц скорость рассчитывают. Как было тут