значит видимо не судьба 29 бит через ардуинский кан хакер принимать. Может не вывозит атмега, когда сообщения слишком быстро летят. Покупайте заводской канхакер.
Во, видно сразу разбирающегося человека, та-же митсубишка. С кан модулем, конечно просто, тут больше интеллектуально-спортивный интерес и вообще хочется в кан-тему въехать. Хочу найти команду на складывание зеркал. Спасибо за ссылку.
ну если буду кому в ближайшее время сигу ставить, заснифлю от сигнлаки лог команд закрытия с кофмортом (поднятие стекол и складывание зеркал) и закрытия без комфорта.
UPDATE: сигналкой не заявляено управление комфортом. Видимо информации и команд о складывании зеркал в CAN шине нет.
Возможно это просто настройка в блоке бортовой электроники (ETACS). и если она активна, то при команде "закрыть замки" ETACS складывает зеркала, а "открыть замки" - раскладывает. Не факт, что при этом в CANe есть команды отдельно на зеркала. Так что вы можете их там и не найти.
Учтём! А с дилерского неполучилось включить. Я тут сейчас библиот. Can h. Заменил на mcp can h. И вс[ё прошилось и даже работает. Завтра попробую к машине подкл.
Зеркала стали складываться,после подключения программатора LEXSI и однаго умного человека.2 нажатия складываются,а если 3- наж.то ещё и стёкла закр. А кан-хак. на пежо так и не заработал.Подключил его ещё к Солярису,заработал,но с торможениями.
к мерену Е213 там шина А на 250к .Выводит несколько сообщений и умерает.
Подтверждаю . Канхакер на ардуине только для тестов на столе или собственных устройств. На автомобиле кан шина гораздо больше загружена и пакеты чаще летят. Поэтому дуня не вывозит.
Я наверно не правильно обосновал проблемму Скеч переделан с использования в других целях Хотелось-бы чтобы адресом 280 запускалась передача шины и опять-же при пропадания этого адреса посылки шли неизменно Спасибо
#include <SPI.h>
#include <mcp2515.h>
struct can_frame canMsg;
struct can_frame canMsg1;
MCP2515 mcp2515(10);
void setup() {
SPI.begin();
mcp2515.reset();
mcp2515.setBitrate(CAN_1000KBPS);
mcp2515.setNormalMode();
}
void loop() {
if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK)
объясните мне бестолковому что значит "передача шины" и "посылки шли неизменно"? Откуда и куда шли? Неужели это так трудно, подробно написать что вам нужно. и прочитайте головную тему песочницы.
смею предположить, что вам нужно при получении из шины пакета с ID 0x280 отправить ваш созданный пакет с ID 0x420.
в стеапе настройки шины у вас 1000 Мбит/с что очень врядли. Редкая это скорость. Скорее всего 500кБит/с. И модуль наверняка у вас скварцем 8 Мгц. Поэтому нужно так
mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
и вы не написали что конкретно не получается. Как вы проверяете в итоге заработала ли ваша хотелка?
Столкнулся с эффектом "китайского MCP2515", немного поисследовал проблему, рассказываю.
Так, как ардуинщики сами библиотеки не только не пишут самостоятельно, но и, часто, не читают, то берут первую попавшуюся. Или несколько.
А библиотеки (драйверы) встречаются самые разнообразные: авторы одних считают, что после реинициализации контроллера маски/фильтры сбрасывать не нужно и этим должен заниматься программист, авторы других придерживаются противоположного мнения и в процедуру реинициализации добавляют функционал обнуления фильтров/масок. Нередко в драйверах встречается и специальный метод(функция) установки фильтра или маски.
И те и другие авторы делятся на максималистов - тех, кто уверен в необходимости использования Extended ID (29 bit) и минималистов, которым достаточно Standart ID (11 bit). Обе разновидности авторов могут быть очень заботливыми и скрывать от пользователя ненужное знание, не демонстрируя способы установки фильтра/маски в примерах и/или используя внутри какой-либо тип ID, наиболее сильно им понравившийся.
Это приводит к ситуации, когда где-то внутри драйвера что-то как-то устанавливается с неким типом ID (установленным или сброшенным битом EXIDE). Писатели скетчей так же добавляют неопределённости, то используя сброс масок/фильтров, то не используя его.
Итак, что делает среднестатистический ардуинщик? Он идет по результатам поиска в гугле/яндексе/etc, скачивает кучу сретчей и библиотек. Устанавливает и начинает запускать подряд все экзамплы и сретчи, немедленно оказываясь в ловушке: библиотека/пример/скетч сбрасывает фильтры/маски, например, одновременно устанавливая бит EXIDE (активация Extended ID). Но пользователю что-то не нравится, он зашивает второй скетч и... он оказывается рассчитанным под Standart ID и фильтры/маски не чистит. EXIDE сбросить некому. Таким образом MCP переходит в режим глухаря и "не работает" даже в Loopback Mode. Потом следует ещё одна прошивка, другой скетч, третий, восьмой, под столом валяется уже опустошённая бутылка водки, пальцы сбиты в кровь на форумах, в глазах тоска, в руке молоток...
Эта вакханалия продолжается до тех пор, пока случайным образом не будет найден и зашит скетч, который сбросит наконец тиранию EXIDE (или напротив - установит). Либо пользователь, устав, обесточит всё и забудется тревожным сном. А на следующий день включит свою ардуинку с MCP и она, естественно, начнёт работать - ведь сброс питания обнуляет фильтры/маски и не устанавливает автоматически в них бит EXIDE. Внутренний голос сразу подсказывает: "Проклятые китайцы, подсунули, бл..". А они, вобщем-то, и не подсовывали.
Отсюда мораль - ходите в библиотеки. Или ищите в них способ сразу же сбросить фильтр/маску с расчётом на тот тип ID, который требуется в дальнейшей работе.
Напоминаю, что данная операция производится в специальном режиме "Configuration Mode", который, к слову, доступен сразу после реинициализации модуля (инструкция RESET), о чём написано в datasheet. Там ж указано, что "The mask essentially determines which bits to apply the acceptance filters to. If any mask bit is set to a zero, that bit will automatically be accepted, regardless of the filter bit."
Хорошего вам психического здоровья и берегите печень от расстройств.
Кан хакер собственного написания через сериал порт. Команды отправляются в порт. После загрузки порта на монитор выводятся все сообщения, гуляющие в шине в данный момент. С левой стороны – присвоенный порядковый номер сообщения, крайний с правой стороны – контрольная сумма байт даты сообщения. При желании посмотреть отдельные сообщения в режиме он-лайн, посылаем команду N(порядковый номер сообщения можно вводить без нулей), в монитор выводится данное сообщение (следим за контрольной суммой, чтобы понять меняются значения байт или нет). После ввода команды Rвыводятся все сообщения. Можем отфильтровать их по следующим данным:
1. ID-адресу. Для этого отсылаем команду I(номер сообщения в десятичном виде)
2. Количеству байт даты. Для этого вводим команду L(количество байт 1-8)
Лучше использовать Ардуинку Мега, т.к. ее оперативная память в четыре раза больше, чем у всех остальных. С Мегой параметр MEM_Xможет быть 500 и более (максимальное число сообщений, которое может запомнить кан хакер). MEM_X 200 – это максимальное значение для UNO, NANO, MICRO. Не забываем про частоту кварца в MCP 2515, скорость шины и порта.
ПРОГА по колхозному написана,но РАБОЧАЯ – 100%!!!
#include <mcp_can.h>
#include <SPI.h>
#define MEM_X 200 // КОЛ-ВО ЯЧЕЕК ПАМЯТИ ДЛЯ СООБЩЕНИЙ
#define SPID CAN_100KBPS // СКОРОСТЬ КАН-ШИНЫ
#define SER_S 115200 //скорость порта
int SUM= 0;
long unsigned int x;
long unsigned int rec[MEM_X];
long unsigned int rxId;
byte len = 0;
unsigned char rxBuf[8];
char msgString [50];
byte a;
byte b;
byte y;
byte c;
byte e;
int n;
MCP_CAN CAN0(10);
void setup()
{
Serial.begin(SER_S);
a=1;
b=1;
y=8;
if(CAN0.begin(MCP_ANY, SPID, MCP_8MHZ) == CAN_OK)
{}
CAN0.setMode(MCP_NORMAL);
Serial.print(" ");
Serial.println("------------- CAN Read ---------------");
for(int i = 0; i<MEM_X ; i++)
{
rec[i]=0;
}
}
void loop()
{
CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
Добрый день.
Подскажите пожалуйста, мне нужно чтобы при получении сообщения ID 206 data 01 91 00 загорался светодиод на пине 13, а при получении ID 206 DATA 01 92 00 загорался светодиод на пине 12.
Хочу с кнопками на руле побаловаться, есть полноценный канхакер на атмеге162, ардуино уно и can-bus shield v1.1 с 16мгц кварцем, библиотека из 201 поста. Нужно ли использовать фильтр у MCP ?
Спасибо.
Добрый день. Подскажите пожалуйста, мне нужно чтобы при получении сообщения ID 206 data 01 91 00 загорался светодиод на пине 13, а при получении ID 206 DATA 01 92 00 загорался светодиод на пине 12.
и в чем проблема? Вон выше в ветке в сообщении #171 есть готовый пример чтения сообщения и проверки ID. Остается только считать данные... с чтением пары байтов и сверки их с константами сами попробуйте разобраться.
Он, поди, начитался про фильтры в чипе и хочет на него переложить работу обдурины.
я в первом сообщении как раз и спрашивал, нужно ли использовать фильтр.
b707 пишет:
ну, если сможет - то флаг в руки. А пока человек задает такие вопросы, что похоже он с условным оператором if() не вполне знает, как обращаться...
Тогда я бы посоветовался не выпендриваться с фильтрами и для начала сделать как проще.
Вы правы, не в полне знаю как обращатся, поэтому и спрашиваю.. просто заливаю этот скетч, в мониторе порта пишет Enter setting mode success set rate success!! Enter Normal Mode Success!! CAN BUS Shield init ok! Begin to set Filter!! set Filter success!!, канхакером отправляю ID 206 data 00 00 00 00 (наобум), в мониторе порта Get Data From id: 518 0x00x00x00x0 и на ардуине моргает светодиод. А почему он моргает сообщение ведь не подходит ?
скетч почти не переделывал
// demo: CAN-BUS Shield, receive data with interrupt mode, and set mask and filter
//
// when in interrupt mode, the data coming can't be too fast, must >20ms, or else you can use check mode
// loovee, 2014-7-8
#include <SPI.h>
#include "mcp_can.h"
// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 10;
MCP_CAN CAN(SPI_CS_PIN); // Set CS pin
unsigned char flagRecv = 0;
unsigned char len = 0;
unsigned char buf[8];
#define ledPin_4H 12
#define ledPin_4L 6
#define ledPin_4WD_CHECK 7
void setup()
{
Serial.begin(115200);
START_INIT:
if(CAN_OK == CAN.begin(CAN_500KBPS)) // init can bus : baudrate = 500k
{
Serial.println("CAN BUS Shield init ok!");
}
else
{
Serial.println("CAN BUS Shield init fail");
Serial.println("Init CAN BUS Shield again");
delay(100);
goto START_INIT;
}
attachInterrupt(0, MCP2515_ISR, FALLING); // start interrupt
CAN.init_Filt(0, 0, 0x3E8);// аппаратный фильтр контроллера CAN, будет поступать только сообщение с ID 0x3E8
pinMode(ledPin_4H,OUTPUT); digitalWrite (ledPin_4H, LOW);
pinMode(ledPin_4L,OUTPUT); digitalWrite (ledPin_4L, LOW);
pinMode(ledPin_4WD_CHECK,OUTPUT); digitalWrite (ledPin_4WD_CHECK, LOW);
}
void MCP2515_ISR()
{
flagRecv = 1;
}
void loop()
{
if(flagRecv) // если сообщение из CAN поступило на прерывание
{
flagRecv = 0; // clear flag
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
Serial.println("\r\n------------------------------------------------------------------");
Serial.print("Get Data From id: ");
Serial.println(CAN.getCanId()); // напечатаем ID CAN сообщения
for(int i = 0; i<len; i++) //напечатаем все байты поля данных CAN сообщения
{
Serial.print("0x");
Serial.print(buf[i], HEX);
Serial.print("\t");
}
Serial.println();
if (CAN.getCanId()==0x3E8) { // если поступило CAN сообщение с ID 0x3E8
//все выходы ардино не активны, если байт 0х00
if (buf[0]==0x00) {
digitalWrite(ledPin_4H,LOW);
digitalWrite(ledPin_4L,LOW);
digitalWrite(ledPin_4WD_CHECK,LOW);
}
//включаем ledPin_4H, если байт 0х01
if (buf[0]==0x01) {
digitalWrite(ledPin_4H,HIGH);
digitalWrite(ledPin_4L,LOW);
digitalWrite(ledPin_4WD_CHECK,LOW);
}
//включаем ledPin_4L, если байт 0х02
if (buf[0]==0x02) {
digitalWrite(ledPin_4H,LOW);
digitalWrite(ledPin_4L,HIGH);
digitalWrite(ledPin_4WD_CHECK,LOW);
}
//включаем ledPin_4WD_CHECK, если байт 0х04
if (buf[0]==0x04) {
digitalWrite(ledPin_4H,LOW);
digitalWrite(ledPin_4L,LOW);
digitalWrite(ledPin_4WD_CHECK,HIGH);
}
}
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
выложите, плиз, свой "почти не переделанный" код, а не этот скетч. В этом скетче при ID = 518 светодиоды мигать не будут, Вы что-то напутали.
Вы правы! Просто поменял пин светодиода (проверял одним, подключенным к 12 пину) и все заработало, видно UNO глючит. Потом долго мучился со скоростью (в канхакере нужно выставить вручную С34Е, а как ее выставить для ардуино и мср не знал).
Сейчас проблемма следующая, у кнопки вверх ID 206 data 01 91 00, у кнопки вниз ID 206 data 01 92 00, когда они отпущены ID 206 data 00 91 00. Т.е. 1-й бит значит нажата кнопка или нет, 2-й какая кнопка была нажата, 3-й время удержания. В отпущеном состоянии сохраняется какая кнопка была нажата.
как сделать чтоб еще 2-й бит учитывался? в таком варианте когда нажимаю, вверх светодиод загарается и не гаснет, пока не нажму вниз (или любую другую). А хотелось бы нажал - загорелся, отпустил - потух.
Спасибо!
// demo: CAN-BUS Shield, receive data with interrupt mode, and set mask and filter
//
// when in interrupt mode, the data coming can't be too fast, must >20ms, or else you can use check mode
// loovee, 2014-7-8
#include <SPI.h>
#include "mcp_can.h"
// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 10;
MCP_CAN CAN(SPI_CS_PIN); // Set CS pin
unsigned char flagRecv = 0;
unsigned char len = 0;
unsigned char buf[8];
#define ledPin_4H 3
#define ledPin_4L 5
#define ledPin_4WD_CHECK 8
void setup()
{
// Serial.begin(115200);
// START_INIT:
if(CAN_OK == CAN.begin(CAN_95KBPS)) // init can bus : baudrate = 500k
// {
// Serial.println("CAN BUS Shield init ok!");
// }
// else
// {
// Serial.println("CAN BUS Shield init fail");
// Serial.println("Init CAN BUS Shield again");
// delay(100);
// goto START_INIT;
// }
attachInterrupt(0, MCP2515_ISR, FALLING); // start interrupt
CAN.init_Filt(0, 0, 0x206);// аппаратный фильтр контроллера CAN, будет поступать только сообщение с ID 0x206
pinMode(ledPin_4H,OUTPUT); digitalWrite (ledPin_4H, LOW);
pinMode(ledPin_4L,OUTPUT); digitalWrite (ledPin_4L, LOW);
pinMode(ledPin_4WD_CHECK,OUTPUT); digitalWrite (ledPin_4WD_CHECK, LOW);
}
void MCP2515_ISR()
{
flagRecv = 1;
}
void loop()
{
// if(flagRecv) // если сообщение из CAN поступило на прерывание
// {
flagRecv = 0; // clear flag
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
// Serial.println("\r\n------------------------------------------------------------------");
// Serial.print("Get Data From id: ");
// Serial.println(CAN.getCanId(), HEX); // напечатаем ID CAN сообщения
// for(int i = 0; i<len; i++) //напечатаем все байты поля данных CAN сообщения
// {
// Serial.print("0x");
// Serial.print(buf[i], HEX);
// Serial.print("\t");
// }
// Serial.println();
if (CAN.getCanId()==0x206) { // если поступило CAN сообщение с ID 0x206
//все выходы ардино не активны, если байт 0х00
if (buf[0]==0x00) {
digitalWrite(ledPin_4H,LOW);
digitalWrite(ledPin_4L,LOW);
digitalWrite(ledPin_4WD_CHECK,LOW);
}
//включаем ledPin_4H, если байт 0х01
if (buf[0]==0x02) {
digitalWrite(ledPin_4H,HIGH);
digitalWrite(ledPin_4L,LOW);
digitalWrite(ledPin_4WD_CHECK,LOW);
}
//включаем ledPin_4L, если байт 0х02
if (buf[0]==0x03) {
digitalWrite(ledPin_4H,LOW);
digitalWrite(ledPin_4L,HIGH);
digitalWrite(ledPin_4WD_CHECK,LOW);
}
//включаем ledPin_4WD_CHECK, если байт 0х01
if (buf[0]==0x01, buf[1]==0x91) {
digitalWrite(ledPin_4H,LOW);
digitalWrite(ledPin_4L,LOW);
digitalWrite(ledPin_4WD_CHECK,HIGH);
}
}
}
// }
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
с победой! Теперь канхакер без глюков, надеюсь. Буду всех на этот скетч теперь отправлять.
Ой ёйёй, опять проблема, на столе всё огонь, подключаю к авто-тишина!? А прога которая в сериал всё видит....
скорость точно правильная?
Побега по всем скоростях, короче все варианты, перепроштвки и тд. А срессивером в порт, на том же железе всё ок!
значит видимо не судьба 29 бит через ардуинский кан хакер принимать. Может не вывозит атмега, когда сообщения слишком быстро летят. Покупайте заводской канхакер.
Тогда бы и в порт неработало-бы
ну не знаю, библу канхакер то простой чел тоже писал с ситроен клуба, может накосячил чего с 29бит. ведь вы не первый (читай выше).
Эх ёлки ёлки(ситроены) всегда с ними одни проблемы... Попробую сам чё нить изобразить с выходом в с. порт. Если будет какая нить инфа, поделитесь.
может убрать резистор когда к авто подключаетесь.
машина какая?
Да пробовал. Пежо 4007 10-ти летнее салонная шина на 100к работает
ну это скорее митсу аутлендер. там только шильдик пежо. может тут конечно чтонибудь найдёте.
По поводу управляющих сигналов можно с кан модуля сигнализации узнать как рулить тем или иным.
Что из шины хотите взять?
Во, видно сразу разбирающегося человека, та-же митсубишка. С кан модулем, конечно просто, тут больше интеллектуально-спортивный интерес и вообще хочется в кан-тему въехать. Хочу найти команду на складывание зеркал. Спасибо за ссылку.
ну если буду кому в ближайшее время сигу ставить, заснифлю от сигнлаки лог команд закрытия с кофмортом (поднятие стекол и складывание зеркал) и закрытия без комфорта.
UPDATE: сигналкой не заявляено управление комфортом. Видимо информации и команд о складывании зеркал в CAN шине нет.
Возможно это просто настройка в блоке бортовой электроники (ETACS). и если она активна, то при команде "закрыть замки" ETACS складывает зеркала, а "открыть замки" - раскладывает. Не факт, что при этом в CANe есть команды отдельно на зеркала. Так что вы можете их там и не найти.
настройки зеркал делаются с дилерского МУТ
UPDATE:UPDATE: посмотрел на outlander XL - заявлено с сигналки закрытие зеркал. Может вам все таки и повезёт и там есть что-то в CANе про зеркала.
Учтём! А с дилерского неполучилось включить. Я тут сейчас библиот. Can h. Заменил на mcp can h. И вс[ё прошилось и даже работает. Завтра попробую к машине подкл.
Подскажите Скеч пост #7 работает ок ! но хочу чтобы при получении пакета 0f6 был запуск ,и при пропадании его оставалась отправка в шину данных
а теперь перечитайте своё сообщение с такой колокольни, что как будто вы не в теме, что у вас там вообще творится.
Запуск на Луну?
UPDATE:UPDATE: посмотрел на outlander XL - заявлено с сигналки закрытие зеркал. Может вам все таки и повезёт и там есть что-то в CANе про зеркала.
не знаю, через КАН или еще как - но у меня на Ауте ХЛ зеркала с сигналки складываются, если на брелке кнопку закрытия придержать
Зеркала стали складываться,после подключения программатора LEXSI и однаго умного человека.2 нажатия складываются,а если 3- наж.то ещё и стёкла закр. А кан-хак. на пежо так и не заработал.Подключил его ещё к Солярису,заработал,но с торможениями.
к мерену Е213 там шина А на 250к .Выводит несколько сообщений и умерает.
Подтверждаю . Канхакер на ардуине только для тестов на столе или собственных устройств. На автомобиле кан шина гораздо больше загружена и пакеты чаще летят. Поэтому дуня не вывозит.
Я наверно не правильно обосновал проблемму Скеч переделан с использования в других целях Хотелось-бы чтобы адресом 280 запускалась передача шины и опять-же при пропадания этого адреса посылки шли неизменно Спасибо
объясните мне бестолковому что значит "передача шины" и "посылки шли неизменно"? Откуда и куда шли? Неужели это так трудно, подробно написать что вам нужно. и прочитайте головную тему песочницы.
и вы не написали что конкретно не получается. Как вы проверяете в итоге заработала ли ваша хотелка?
да дейсвительно в скече стоит 1000 с кан хакера посылаю на скорости 500 все работает если в скече 500 то работает на 250
Это Вы правильно сказали
смею предположить, что вам нужно при получении из шины пакета с ID 0x280 отправить ваш созданный пакет с ID 0x420.
то, о чём я и говорил:
mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
а как же это? :
mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
ок заработало как надо
Столкнулся с эффектом "китайского MCP2515", немного поисследовал проблему, рассказываю.
Так, как ардуинщики сами библиотеки не только не пишут самостоятельно, но и, часто, не читают, то берут первую попавшуюся. Или несколько.
А библиотеки (драйверы) встречаются самые разнообразные: авторы одних считают, что после реинициализации контроллера маски/фильтры сбрасывать не нужно и этим должен заниматься программист, авторы других придерживаются противоположного мнения и в процедуру реинициализации добавляют функционал обнуления фильтров/масок. Нередко в драйверах встречается и специальный метод(функция) установки фильтра или маски.
И те и другие авторы делятся на максималистов - тех, кто уверен в необходимости использования Extended ID (29 bit) и минималистов, которым достаточно Standart ID (11 bit). Обе разновидности авторов могут быть очень заботливыми и скрывать от пользователя ненужное знание, не демонстрируя способы установки фильтра/маски в примерах и/или используя внутри какой-либо тип ID, наиболее сильно им понравившийся.
Это приводит к ситуации, когда где-то внутри драйвера что-то как-то устанавливается с неким типом ID (установленным или сброшенным битом EXIDE). Писатели скетчей так же добавляют неопределённости, то используя сброс масок/фильтров, то не используя его.
Итак, что делает среднестатистический ардуинщик? Он идет по результатам поиска в гугле/яндексе/etc, скачивает кучу сретчей и библиотек. Устанавливает и начинает запускать подряд все экзамплы и сретчи, немедленно оказываясь в ловушке: библиотека/пример/скетч сбрасывает фильтры/маски, например, одновременно устанавливая бит EXIDE (активация Extended ID). Но пользователю что-то не нравится, он зашивает второй скетч и... он оказывается рассчитанным под Standart ID и фильтры/маски не чистит. EXIDE сбросить некому. Таким образом MCP переходит в режим глухаря и "не работает" даже в Loopback Mode. Потом следует ещё одна прошивка, другой скетч, третий, восьмой, под столом валяется уже опустошённая бутылка водки, пальцы сбиты в кровь на форумах, в глазах тоска, в руке молоток...
Эта вакханалия продолжается до тех пор, пока случайным образом не будет найден и зашит скетч, который сбросит наконец тиранию EXIDE (или напротив - установит). Либо пользователь, устав, обесточит всё и забудется тревожным сном. А на следующий день включит свою ардуинку с MCP и она, естественно, начнёт работать - ведь сброс питания обнуляет фильтры/маски и не устанавливает автоматически в них бит EXIDE. Внутренний голос сразу подсказывает: "Проклятые китайцы, подсунули, бл..". А они, вобщем-то, и не подсовывали.
Отсюда мораль - ходите в библиотеки. Или ищите в них способ сразу же сбросить фильтр/маску с расчётом на тот тип ID, который требуется в дальнейшей работе.
Напоминаю, что данная операция производится в специальном режиме "Configuration Mode", который, к слову, доступен сразу после реинициализации модуля (инструкция RESET), о чём написано в datasheet. Там ж указано, что "The mask essentially determines which bits to apply the acceptance filters to. If any mask bit is set to a zero, that bit will automatically be accepted, regardless of the filter bit."
Хорошего вам психического здоровья и берегите печень от расстройств.
Кан хакер собственного написания через сериал порт. Команды отправляются в порт. После загрузки порта на монитор выводятся все сообщения, гуляющие в шине в данный момент. С левой стороны – присвоенный порядковый номер сообщения, крайний с правой стороны – контрольная сумма байт даты сообщения. При желании посмотреть отдельные сообщения в режиме он-лайн, посылаем команду N(порядковый номер сообщения можно вводить без нулей), в монитор выводится данное сообщение (следим за контрольной суммой, чтобы понять меняются значения байт или нет). После ввода команды Rвыводятся все сообщения. Можем отфильтровать их по следующим данным:
1. ID-адресу. Для этого отсылаем команду I(номер сообщения в десятичном виде)
2. Количеству байт даты. Для этого вводим команду L(количество байт 1-8)
Лучше использовать Ардуинку Мега, т.к. ее оперативная память в четыре раза больше, чем у всех остальных. С Мегой параметр MEM_Xможет быть 500 и более (максимальное число сообщений, которое может запомнить кан хакер). MEM_X 200 – это максимальное значение для UNO, NANO, MICRO. Не забываем про частоту кварца в MCP 2515, скорость шины и порта.
ПРОГА по колхозному написана,но РАБОЧАЯ – 100%!!!
Добрый день.
Подскажите пожалуйста, мне нужно чтобы при получении сообщения ID 206 data 01 91 00 загорался светодиод на пине 13, а при получении ID 206 DATA 01 92 00 загорался светодиод на пине 12.
Хочу с кнопками на руле побаловаться, есть полноценный канхакер на атмеге162, ардуино уно и can-bus shield v1.1 с 16мгц кварцем, библиотека из 201 поста. Нужно ли использовать фильтр у MCP ?
Спасибо.
и в чем проблема? Вон выше в ветке в сообщении #171 есть готовый пример чтения сообщения и проверки ID. Остается только считать данные... с чтением пары байтов и сверки их с константами сами попробуйте разобраться.
Не могу фильтр по Id настоить срабатывает на любые сообщения
Скетч такой писал MaksVV за что ему низкий поклон
Не могу фильтр по Id настоить срабатывает на любые сообщения
Скетч такой писал MaksVV за что ему низкий поклон
ерунду какую-то пишете
В том скетче, что по вашей ссылке - строка 33
четко фильтрует по ID. какой еще фильтр вам нужен?
Или может вы код от Макса переработали по своему? - тогда выложите именно свой код
Он, поди, начитался про фильтры в чипе и хочет на него переложить работу обдурины.
Он, поди, начитался про фильтры в чипе и хочет на него переложить работу обдурины.
ну, если сможет - то флаг в руки. А пока человек задает такие вопросы, что похоже он с условным оператором if() не вполне знает, как обращаться...
Тогда я бы посоветовался не выпендриваться с фильтрами и для начала сделать как проще.
Он, поди, начитался про фильтры в чипе и хочет на него переложить работу обдурины.
я в первом сообщении как раз и спрашивал, нужно ли использовать фильтр.
ну, если сможет - то флаг в руки. А пока человек задает такие вопросы, что похоже он с условным оператором if() не вполне знает, как обращаться...
Тогда я бы посоветовался не выпендриваться с фильтрами и для начала сделать как проще.
Вы правы, не в полне знаю как обращатся, поэтому и спрашиваю.. просто заливаю этот скетч, в мониторе порта пишет Enter setting mode success set rate success!! Enter Normal Mode Success!! CAN BUS Shield init ok! Begin to set Filter!! set Filter success!!, канхакером отправляю ID 206 data 00 00 00 00 (наобум), в мониторе порта Get Data From id: 518 0x0 0x0 0x0 0x0 и на ардуине моргает светодиод. А почему он моргает сообщение ведь не подходит ?
скетч почти не переделывал
скетч почти не переделывал
выложите, плиз, свой "почти не переделанный" код, а не этот скетч. В этом скетче при ID = 518 светодиоды мигать не будут, Вы что-то напутали.
выложите, плиз, свой "почти не переделанный" код, а не этот скетч. В этом скетче при ID = 518 светодиоды мигать не будут, Вы что-то напутали.
Вы правы! Просто поменял пин светодиода (проверял одним, подключенным к 12 пину) и все заработало, видно UNO глючит. Потом долго мучился со скоростью (в канхакере нужно выставить вручную С34Е, а как ее выставить для ардуино и мср не знал).
Сейчас проблемма следующая, у кнопки вверх ID 206 data 01 91 00, у кнопки вниз ID 206 data 01 92 00, когда они отпущены ID 206 data 00 91 00. Т.е. 1-й бит значит нажата кнопка или нет, 2-й какая кнопка была нажата, 3-й время удержания. В отпущеном состоянии сохраняется какая кнопка была нажата.
как сделать чтоб еще 2-й бит учитывался? в таком варианте когда нажимаю, вверх светодиод загарается и не гаснет, пока не нажму вниз (или любую другую). А хотелось бы нажал - загорелся, отпустил - потух.
Спасибо!
КАН МОДУЛЬ
https://youtu.be/m-LZRsB-0pA
Вот накидал на днях... Если тема интересна могу выложить прошивку..
http://www.fayton.com.ua/img/htm3.html
offline морда
https://youtu.be/AZFR1FNyuGQ
https://youtu.be/AZFR1FNyuGQ
Спасибо, уже смотрю..
П.с. со своими вопросами разобрался
https://youtu.be/AZFR1FNyuGQ
Спасибо, уже смотрю..
П.с. со своими вопросами разобрался
Fayton - а можете в двух словах пояснить - что это? А то я как-то по видео не привык учиться. мне бы лучше книжку какую
https://drive.google.com/file/d/1-2Wh0xmmAMF7XsPLxijPGwMp01JOt-5k/view?u...
Принимаю пожелания по добавлению функционала пока в процессе разработки.
Принимаю пожелания по добавлению функционала пока в процессе разработки.
Спасибо. Хорошая штука. Думаю, проблем не будет, если собрать на ESP-12 + NANO? Ну и соответственно MCP2515.
НОВАЯ версия CANSAN-V3
Реализован полноценный канхакер(LAWICEL) в режиме работы по USB! Только скорость сана и битность выставятся через морду..
Работает одновременно с мордой.
Добавлен вывод байт бомбера в статус.
Увеличил скорость работы.
https://drive.google.com/file/d/1UN0KiB_6-9-9GEQ0Yp_sWoz5zRxkxVSS/view?usp=sharing
Закажу ка и я себе ноду, раз такое дело. А по юсб с программой canhacker работает?
Fayton - а можете в двух словах пояснить - что это? А то я как-то по видео не привык учиться. мне бы лучше книжку какую
Я так понимаю это анализатор кан шины, аля инструмент для реверса, подобный этому , но на открытой аппаратной платформе.