PCCar.ru - Ваш автомобильный компьютер


Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > Общение с машиной

Ответ
 
Опции темы
Старый 24.06.2015, 14:58   #11
Gorynch
Старший Пользователь
 
Аватар для Gorynch
 
Регистрация: 22.04.2009
Возраст: 35
Город: Москва
Регион: 77, 97, 99, 177
Машина: 2005\Nissan\X-Trail
Сообщений: 779
Gorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to behold
По умолчанию

покажи весь скетч и либу для шилда
При передачи данных шилду (по SPI) нет аппаратного подтверждения принятых данных, поэтому нужно проверять программно, например, прочитать один из регистров cnf и сравнить с тем, что туда было записано. Если совпадает, значит соединение прошло успешно. Не во всех либах это сделано.
Ещё момент, у тебя перемычка J1 (рядом с контактом Тх) открыта, а это значит, что питание для платы 3.3В, а не 5В. По крайней мере, для настоящего Pro Micro. Проверь напряжение на Vcc.
И чем питается шилд?
Судя по фотке, кварц на шилде 8Мгц, это влияет на значения регистров CNF, с помощью которых устанавливается скорость CAN шины в шилде. Чаще всего используется 16МГц, поэтому в либе значения могут быть рассчитаны для 16, а не для 8
__________________
В детстве, чтобы маленький Змей Горыныч был как все, мама заплетала его в косичку
Gorynch вне форума   Ответить с цитированием
Старый 24.06.2015, 16:17   #12
Disgraced
Пользователь
 
Регистрация: 17.02.2015
Возраст: 30
Город: surgut
Регион: 86
Машина: miata
Сообщений: 34
Disgraced is on a distinguished road
По умолчанию

Gorynch
либа отсюда https://github.com/Seeed-Studio/CAN_BUS_Shield
напряжение на vcc 4.64 - на китайских про микро перемычка открыта
как я понимаю, шилд питается от ардуины, которая в свою очередь от usb порта ноутбука
шилд соединял с ардуиной по инструкции от iti1 у которого всё работает (правда с другим шилдом)
скетчи пробовал разные вот один и зних:
Код:
// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way
// loovee, 2014-6-13


#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

void setup()
{
    Serial.begin(9600);

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;
    }
}


void loop()
{
    unsigned char len = 0;
    unsigned char buf[8];

    if(CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

        unsigned char canId = CAN.getCanId();
        
        Serial.println("-----------------------------");
        Serial.println("get data from ID: ");
        Serial.println(canId);

        for(int i = 0; i<len; i++)    // print the data
        {
            Serial.print(buf[i]);
            Serial.print("\t");
        }
        Serial.println();
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/
то что в предыдущем посте я писал - фигня


по факту, на данный момент - шилда/ардуино подключены к проводке авто и как только на них поступает питание - шилда начинает безостановки что-то принимать (светодиод rx мерцает, почти непрерывно светится) но ардуино нихрена не получает от шилды - даже сообщение из START_INIT (не появляется в мониторе порта ни при каких условиях, и на ардуине светодиод rx не моргает вообще)
Disgraced вне форума   Ответить с цитированием
Старый 24.06.2015, 16:56   #13
Gorynch
Старший Пользователь
 
Аватар для Gorynch
 
Регистрация: 22.04.2009
Возраст: 35
Город: Москва
Регион: 77, 97, 99, 177
Машина: 2005\Nissan\X-Trail
Сообщений: 779
Gorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to behold
По умолчанию

ПрОвода питания от ардуины к шилду на картинке нет. Есть земля и данные
В данном скетче для проверки наличия нового сообщения идёт обращения к шилду через SPI, по идее для этого нужно использовать прерывание от шилда по пину 2 (в твоём случае), это будет быстрее
Увеличь скорость rs232 до 115200 (и в скетче, и на компе)
Добавь обработку прихода данных от компа: пришла "1" (т.е. ты в терминале нажал 1 и Enter) - инициализировать шилд, пришла "2" - запустить приём данных от шилда
Светодиод rx на ардуине связан с rs232, а не с шилдом. Когда пойдут данные должен моргать Tx
Самое главное - в скетче значения регистров CNF рассчитаны для 16МГц. Нужно пересчитывать для 8, или менять кварц
__________________
В детстве, чтобы маленький Змей Горыныч был как все, мама заплетала его в косичку
Gorynch вне форума   Ответить с цитированием
Старый 24.06.2015, 17:22   #14
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 41
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 443
lti1 is a splendid one to beholdlti1 is a splendid one to beholdlti1 is a splendid one to beholdlti1 is a splendid one to beholdlti1 is a splendid one to beholdlti1 is a splendid one to beholdlti1 is a splendid one to behold
По умолчанию

Disgraced, попробуйте этот скетч, я им сканировал FF3, только скорость CAN поменяйте:
PHP код:
#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len 0;
unsigned char rxBuf[8];

MCP_CAN CAN0(10);

void setup()
{
  
Serial.begin(115200);
  
CAN0.begin(CAN_125KBPS);
  
pinMode(2INPUT); 
}

void loop()
{
    if(!
digitalRead(2))                         
    {
      
CAN0.readMsgBuf(&lenrxBuf);              
      
rxId CAN0.getCanId();                    
//      if (rxId == 0x3A) //фильтр по ID, при необходимости раскомментировать
//      {  //фильтр по ID, при необходимости раскомментировать
      
Serial.println(); 
      
Serial.print("ID: ");
      
Serial.print(rxIdHEX);
      
Serial.print("  Data: ");
      for(
int i 0i<leni++)
      {
      if(
rxBuf[i] < 0x10Serial.print("0");
      
Serial.print(rxBuf[i], HEX);
      
Serial.print(" ");
      }
//     } //фильтр по ID, при необходимости раскомментировать
   
}

И питания шилда действительно на фото нет. Соедините +5v шилда и микро.

Последний раз редактировалось lti1; 25.06.2015 в 17:09.
lti1 вне форума   Ответить с цитированием
Старый 25.06.2015, 15:44   #15
Disgraced
Пользователь
 
Регистрация: 17.02.2015
Возраст: 30
Город: surgut
Регион: 86
Машина: miata
Сообщений: 34
Disgraced is on a distinguished road
По умолчанию

Итак, по порядку: соединил разъем шилда 5V и разъем VCC ардуины - никакого эффекта.
Скетч в посте от lti1 не дал результата, в мониторе порта по прежнему тишина.

Gorynch, по вашей подсказке поменял кварц - впаял на 16mhz.
Что получилось - скетч из моего поста, шилда запитана, кварц на 16mhz - в мониторе порта поток сообщений:
Код:
CAN BUS Shield init fail
Init CAN BUS Shield again
А вот что это может значить - не пойму.
Т.е. до этого не было никаких сообщений, а теперь сообщает что всё плохо.
По поводу
Цитата:
Сообщение от Gorynch Посмотреть сообщение
Добавь обработку прихода данных от компа: пришла "1" (т.е. ты в терминале нажал 1 и Enter) - инициализировать шилд, пришла "2" - запустить приём данных от шилда
можете помочь со скетчем?
Disgraced вне форума   Ответить с цитированием
Старый 25.06.2015, 16:38   #16
Gorynch
Старший Пользователь
 
Аватар для Gorynch
 
Регистрация: 22.04.2009
Возраст: 35
Город: Москва
Регион: 77, 97, 99, 177
Машина: 2005\Nissan\X-Trail
Сообщений: 779
Gorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to beholdGorynch is a splendid one to behold
По умолчанию

в ардуино не силён, но что-то вроде
PHP код:
void loop() {
    if (
Serial.available() > 0) {
        
incomingByte Serial.read();
        if (
incomingByte == 1) {
            do 
somthing ....
        }
        if (
incomingByte == 2) {
            do 
somthing else ....
        }
    }

можно использовать switch, но синтаксиса не знаю для ардуины

в либе на mcp2515 добавь своих отладочных сообщений в терминал, чтобы понять где именно затык
__________________
В детстве, чтобы маленький Змей Горыныч был как все, мама заплетала его в косичку
Gorynch вне форума   Ответить с цитированием
Старый 03.07.2015, 19:15   #17
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 305
T_r_D is on a distinguished road
По умолчанию

У меня таже проблема!
На шилде светодиод RX аж светится, а на Arduino данные не идут.
Кварц тоже кстати 8MhZ.

Gorynch Спасибо что направил в нужную сторону!

Такс, Выдернул отсюда https://github.com/Flori1989/MCP2515_lib
с поддержкой 8MhZ.

Теперь вопрос как установить 8MhZ в скетче.
Вот так нужно? Или она сама определит?
if(CAN_OK == CAN.begin(CAN_500KBPS,MCP_8MHz))

Вот так данные пошли
Цитата:
// demo: CAN-BUS Shield, receive data with interrupt mode
// when in interrupt mode, the data coming can't be too fast, must >20ms, or else you can use check mode
// loovee, 2014-6-13

#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];
char str[20];

void setup()
{
Serial.begin(115200);
START_INIT:

if(CAN_OK == CAN.begin(CAN_500KBPS,MCP_8MHz)) // 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
}

void MCP2515_ISR()
{
flagRecv = 1;
}

void loop()
{
if(flagRecv)
{ // check if get data

flagRecv = 0; // clear flag

// iterate over all pending messages
// If either the bus is saturated or the MCU is busy,
// both RX buffers may be in use and reading a single
// message does not clear the IRQ conditon.
while (CAN_MSGAVAIL == CAN.checkReceive())
{
// read data, len: data length, buf: data buf
CAN.readMsgBuf(&len, buf);

// print the data
for(int i = 0; i<len; i++)
{
Serial.print(buf[i]);Serial.print("\t");
}
Serial.println();
}
}
}
А теперь ответте мне кто нить на вопрос!
На диагностической колодке CAN-Comfort нету чтоль?
Я невижу нажатий кнопок на руле в упор!

Последний раз редактировалось T_r_D; 03.07.2015 в 22:56.
T_r_D вне форума   Ответить с цитированием
Старый 04.07.2015, 17:47   #18
Disgraced
Пользователь
 
Регистрация: 17.02.2015
Возраст: 30
Город: surgut
Регион: 86
Машина: miata
Сообщений: 34
Disgraced is on a distinguished road
По умолчанию

T_r_D, скетч который ты выложил - у тебя работает? у тебя кварц 8MHz? А шилд, как у меня на фото?

Цитата:
Сообщение от T_r_D Посмотреть сообщение
На диагностической колодке CAN-Comfort нету чтоль?
Я невижу нажатий кнопок на руле в упор!
Комфорт если и выведен в диагностическую колодку, то на другие контакты. Проще к контактам идущим на магнитолу подцепить для проверки.
Disgraced вне форума   Ответить с цитированием
Старый 04.07.2015, 23:04   #19
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 305
T_r_D is on a distinguished road
По умолчанию

Disgraced у меня шилд с кнопками вообще.
Но это не важно! Кварц у меня 8мегагерц так что качай по ссылке библиотеку и заливай мой скетч.
И да, у меня после этого заработало, но только я увидел то что мне не нужно

На магнитоле FT CAN так что надо шилд допилить. Микруху уже заказал, через пару недель приедет.

Последний раз редактировалось T_r_D; 05.07.2015 в 22:01.
T_r_D вне форума   Ответить с цитированием
Старый 05.07.2015, 12:58   #20
Disgraced
Пользователь
 
Регистрация: 17.02.2015
Возраст: 30
Город: surgut
Регион: 86
Машина: miata
Сообщений: 34
Disgraced is on a distinguished road
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
Disgraced у меня шилд с кнопками вообще.
Но это не важно! Кварц у меня 8мегагерц так что качай по ссылке библиотеку и заливай мой скетч.
Не помогло. В отличии от предыдущих скетчей - в этот раз постоянно горел светодиод INT на шилде, помимо рх тх, но в мониторе порта пустота.
Я уже в отчаянии.
Disgraced вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 03:38.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Яндекс.Метрика