21.02.2015, 22:52 | #11 |
Пользователь
Регистрация: 16.03.2009
Возраст: 40
Город: Baku
Регион: другой - для добавления сообщить ab
Машина: 2011\Opel Insignia
Сообщений: 45
|
У меня все это нормально работает. Срежте дорожку которая терминирует резистор на 120 ом. Гже он есть на вики у сиидсьудио.
|
21.02.2015, 23:21 | #12 |
Новый Пользователь
Регистрация: 20.02.2015
Возраст: 43
Регион: 77, 97, 99, 177
Машина: Passat b6
Сообщений: 11
|
На этом шилде (sparkfun, а не seedstudio, я указал в первом сообщении) нет этого резистора в принципе. Эти два шилда не совсем идентичны
Вроде нано ещё где-то валялась ... И сама Мега32 ... Не покупать же ещё одну плату. Попробую наваять из меги32 Хотя не верю, что причина в этом |
21.02.2015, 23:43 | #13 |
Пользователь
Регистрация: 16.03.2009
Возраст: 40
Город: Baku
Регион: другой - для добавления сообщить ab
Машина: 2011\Opel Insignia
Сообщений: 45
|
Тогда сорри, у меня от сиидстудио
|
21.02.2015, 23:48 | #14 |
Новый Пользователь
Регистрация: 20.02.2015
Возраст: 43
Регион: 77, 97, 99, 177
Машина: Passat b6
Сообщений: 11
|
А работает с мегой?
|
22.02.2015, 12:58 | #15 |
Старший Пользователь
Регистрация: 12.01.2014
Возраст: 41
Город: Москва
Регион: 77, 97, 99, 177
Машина: Skoda Superb II
Сообщений: 473
|
У меня с терминирующим резистором вообще ничего не работало, а тут сначала работает, а потом нет.
__________________
Skoda SamSony (закрыт) Skoda Superb 2012 Nexus 7 (Завершен ввиду смерти планшета) |
22.02.2015, 21:39 | #16 |
Пользователь
Регистрация: 16.03.2009
Возраст: 40
Город: Baku
Регион: другой - для добавления сообщить ab
Машина: 2011\Opel Insignia
Сообщений: 45
|
|
23.02.2015, 07:05 | #17 | |
Старший Пользователь
Регистрация: 03.10.2006
Возраст: 51
Город: Moscow
Регион: 77, 97, 99, 177
Машина: Nissan Elgrand
Сообщений: 246
|
Цитата:
Осциллографом смотрел? |
|
23.02.2015, 09:23 | #18 |
Новый Пользователь
Регистрация: 20.02.2015
Возраст: 43
Регион: 77, 97, 99, 177
Машина: Passat b6
Сообщений: 11
|
Шина продолжает работать, шилд не видит данные. Чтобы увидел, нужно его обесточить и вытащить ключ зажигания. Потом включить шилд и вставить ключ. Если сначала вставить ключ, а потом включить шилд - ничего не примет. Можно ещё вместо ключа нажать на кнопки ключа, тогда шилд тоже принимает пакеты (6 штук). Причём для кнопок открытия и закрытия - разные
Осцилом (USB) посмотрел, как смог. Данные бегают |
23.02.2015, 23:33 | #19 |
Старший Пользователь
Регистрация: 03.10.2006
Возраст: 51
Город: Moscow
Регион: 77, 97, 99, 177
Машина: Nissan Elgrand
Сообщений: 246
|
А можно взглянуть на код прошивки?
|
24.02.2015, 11:45 | #20 |
Новый Пользователь
Регистрация: 20.02.2015
Возраст: 43
Регион: 77, 97, 99, 177
Машина: Passat b6
Сообщений: 11
|
Библиотека почти стандартная - я добавил только скорость 83.333 для мерса (там несколько таких скоростей - экспериментировал, на 3м варианте приём стабильный)
Скетч содержит элементы для вывода информации на I2C дисплей и использование джойстика, но я их почти сразу заремил и оставил только консоль. Попробовал сейчас на столе ещё с elm327 его скрестить. От elm'a пакеты приходят. Но тоже только один раз. т.е. запускаю elm на автоопределение протокола и шилд принимает пару пакетов (на соот-ей текущей выбранной скорости). elm ничего не находит, что и понятно, и отключается. Запускаю сканирование ещё раз - и шилд уже ничего не принимает. Помогает reset. Код скетча (он же есть и в архиве) Код:
// demo: CAN-BUS Shield, receive data #include "mcp_can.h" #include <SPI.h> #include <stdio.h> //#include <LiquidCrystal_I2C.h> //#include <Wire.h> #define INT8U unsigned char /*"Joystick" Init*/ #define UP A1 /*Analog Pin 1*/ #define DOWN A3 /*Analog Pin 3*/ #define LEFT A5 /*Analog Pin 5*/ #define RIGHT A2 /*Analog Pin 2*/ #define CLICK A4 /*Analog Pin 4*/ #define JSP 0 /*Joystick Pressed*/ #define JSNP 1 /*Joystick Not Pressed*/ /*Status LED's*/ #ifndef LED_2 int LED_2 = 8; #endif #ifndef LED_3 int LED_3 = 7; #endif //LiquidCrystal_I2C lcd(0x27,20,4); // set address of lcd to 0x27 and count of char to 20, of rows to 4 (20х4) INT8U Flag_Recv = 0; INT8U len = 0; INT8U buf[16]; char str[20]; INT8U speedCAN; int speedCANtext; int countPckg = 0; //char speedInput; //Timer 2 - blinking LED unsigned int toggle = 0; //used to keep the state of the LED unsigned int count = 0; //used to keep count of how many interrupts were fired //Timer2 Overflow Interrupt Vector, called every 1ms ISR(TIMER2_OVF_vect) { count++; //Increments the interrupt counter if(count > 999){ toggle = !toggle; //toggles the LED state count = 0; //Resets the interrupt counter } digitalWrite(LED_3,toggle); TCNT2 = 130; //Reset Timer to 130 out of 255 TIFR2 = 0x00; //Timer2 INT Flag Reg: Clear Timer Overflow Flag }; /* void init_LCD (void) { lcd.init(); // инициализация LCD lcd.backlight(); // включаем подсветку lcd.clear(); // очистка дисплея lcd.setCursor(0, 0); } */ void init_JoyStick(void) { pinMode(UP,INPUT); pinMode(DOWN,INPUT); pinMode(LEFT,INPUT); pinMode(RIGHT,INPUT); pinMode(CLICK,INPUT); digitalWrite(UP, HIGH); //enabled input pull-up resistor digitalWrite(DOWN, HIGH); //enabled input pull-up resistor digitalWrite(LEFT, HIGH); //enabled input pull-up resistor digitalWrite(RIGHT, HIGH); //enabled input pull-up resistor digitalWrite(CLICK, HIGH); //enabled input pull-up resistor } void init_Status_LED(void) { pinMode(LED_2, OUTPUT);//communication LED pinMode(LED_3, OUTPUT); //Status LED digitalWrite(LED_2,LOW); digitalWrite(LED_3,LOW); } void init_CAN(void) { if (CAN.begin(speedCAN) == 0) // init can bus at baudrate { /* lcd.clear(); lcd.print ("CAN init on "); lcd.print (speedCANtext); lcd.print ("KBPS"); */ Serial.print("CAN init on "); Serial.print(speedCANtext); Serial.println("KBPS"); } else { /* lcd.clear(); lcd.print ("CAN init FAIL"); */ Serial.println("CAN init FAIL"); } } void select_CAN_speed(void) { int speedInput = Serial.read (); switch (speedInput) { case '1': speedCAN = CAN_83_1KBPS; speedCANtext = 831; break; case '2': speedCAN = CAN_83_2KBPS; speedCANtext = 832; break; case '3': speedCAN = CAN_83_3KBPS; speedCANtext = 833; break; case '4': speedCAN = CAN_83_4KBPS; speedCANtext = 834; break; case '5': speedCAN = CAN_83_5KBPS; speedCANtext = 835; break; case '6': speedCAN = CAN_500KBPS; speedCANtext = 500; break; case '7': speedCAN = CAN_100KBPS; speedCANtext = 100; break; case '8': speedCAN = CAN_125KBPS; speedCANtext = 125; break; default: Serial.println ("Speed error"); speedCANtext = -1; } } void setup() { Serial.begin(115200); // init_LCD(); // init_JoyStick(); init_Status_LED(); //Setup Timer2 to fire every 1ms TCCR2B = 0x00; //Disbale Timer2 while we set it up TCNT2 = 130; //Reset Timer Count to 130 out of 255 TIFR2 = 0x00; //Timer2 INT Flag Reg: Clear Timer Overflow Flag TIMSK2 = 0x01; //Timer2 INT Reg: Timer2 Overflow Interrupt Enable TCCR2A = 0x00; //Timer2 Control Reg A: Normal port operation, Wave Gen Mode normal TCCR2B = 0x05; //Timer2 Control Reg B: Timer Prescaler set to 128 //for use with mega2560 pinMode(10, OUTPUT); digitalWrite(10, HIGH); pinMode(11, INPUT); digitalWrite(11, LOW); pinMode(12, INPUT); digitalWrite(12, LOW); pinMode(13, INPUT); digitalWrite(13, LOW); // lcd.print ("Press Joy to start"); // Serial.println("Press Joy to start..."); Serial.println("Enter CAN-BUS speed:"); Serial.println("1 - 83.333 (1)"); Serial.println("2 - 83.333 (2)"); Serial.println("3 - 83.333 (3)"); Serial.println("4 - 83.333 (4)"); Serial.println("5 - 83.333 (5)"); Serial.println("6 - 500"); Serial.println("7 - 100"); Serial.println("8 - 125"); speedCANtext = -1; while (speedCANtext < 0) { if (Serial.available() > 0) { select_CAN_speed(); } } /* // while (digitalRead(CLICK)); while (1) { if(!digitalRead(DOWN)) { speedCAN = CAN_83_1KBPS; speedCANtext = 831; break; } else if(!digitalRead(UP)) { speedCAN = CAN_83_2KBPS; speedCANtext = 832; break; } else if(!digitalRead(LEFT)) { speedCAN = CAN_500KBPS; speedCANtext = 500; break; } else if(!digitalRead(RIGHT)) { speedCAN = CAN_100KBPS; speedCANtext = 100; break; } } */ init_CAN (); attachInterrupt(0, MCP2515_ISR, FALLING); // start interrupt } void MCP2515_ISR() { Flag_Recv = 1; digitalWrite(LED_2,HIGH); } void loop() { // digitalWrite(LED_3,HIGH); if(Flag_Recv) // check if get data { Flag_Recv = 0; // clear flag ++countPckg; // count of packages CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf Serial.print(countPckg); // Serial.println(": CAN_BUS GET DATA!"); /* lcd.setCursor(0, 1); lcd.print (countPckg); lcd.print (": CANBUS GET DATA"); */ Serial.print(": data len = "); Serial.print(len, HEX); Serial.print("\t"); for(int i = 0; i<len; i++) // print the data { Serial.print(buf[i], HEX); Serial.print("\t"); } Serial.println(); digitalWrite(LED_2,LOW); } } |
Метки |
arduino, canbus |
Здесь присутствуют: 4 (пользователей: 0 , гостей: 4) | |
|
|