Здравствуйте! Имеется ELM 327 одноплатный адаптер на pic18f25k80. Моя задача отправить 1 пакет данных раз в 50мс.
Код работает, но отправляет не корректный id. Проверяю пакеты через Canhacker(arduino). canhacker видит: 00,000 019E1CEF 8 00 00 FF BF 00 44 00 FF а должен видеть 00,000 0CEE1CEF 8 00 00 FF BF 00 44 00 FF. Может можете помочь с корректировкой отправки id?
Код:
#"includemcc_generated_files/mcc.h"
// Opredelyaem pins dlya svyetodiodov
#define LED1 LATBbits.LATB4 // Svyetodiod, kotoryy dolzhen postoyanno migat'
#define LED2 LATBbits.LATB6 // Svyetodiod, kotoryy dolzhen migat' pri uspeshnoy otpravke
// Prototipy funktsiy
void initLEDs(void);
void blinkLED1(void);
void sendCANMessage(void);
void initCANMessage(uint8_t *data);
void initLEDs(void) {
TRISBbits.TRISB4 = 0; // Nastroivaem RB4 kak vyhod
TRISBbits.TRISB6 = 0; // Nastroivaem RB6 kak vyhod
LED1 = 0; // Vyklyuchayem svyetodiody
LED2 = 0; // Vyklyuchayem svyetodiody
}
void blinkLED1(void) {
LED1 = 1; // Vkluchayem svyetodiod 1
__delay_ms(16); // Zaderzhka
LED1 = 0; // Vyklyuchayem svyetodiod 1
__delay_ms(16); // Zaderzhka
}
void sendCANMessage(void) {
// Проверяем, доступен ли буфер для отправки
if (!(TXB0CON & 0x08)) { // Проверяем, свободен ли буфер TXB0
uint8_t data[8] = {0x00, 0x00, 0xFF, 0xBF, 0x00, 0x44, 0x00, 0xFF}; // Данные
// Заполняем идентификатор и данные
TXB0SIDH = 0x0C; // Старшие 8 бит
TXB0SIDL = 0xEE | 0x08; // Следующие 8 бит + EXIDE
TXB0EIDH = 0x1C; // Старшие 8 бит расширенного идентификатора
TXB0EIDL = 0xEF; // Младшие 8 бит расширенного идентификатора
// Заполняем данные
TXB0D0 = data[0];
TXB0D1 = data[1];
TXB0D2 = data[2];
TXB0D3 = data[3];
TXB0D4 = data[4];
TXB0D5 = data[5];
TXB0D6 = data[6];
TXB0D7 = data[7];
// Устанавливаем длину сообщения
TXB0DLC = 0x08; // Длина сообщения 8 байт
// Отправляем сообщение
TXB0CONbits.TXREQ = 1; // Запрос на отправку
// Ждем, пока сообщение не будет отправлено
while (TXB0CONbits.TXREQ); // Ждем, пока TXREQ не станет 0
// Проверяем статус отправки
if (!TXB0CONbits.TXREQ) {
LED2 = 1; // Включаем светодиод 2 (RB6)
__delay_ms(5); // Задержка для видимости
LED2 = 0; // Выключаем светодиод 2
}
}
}
void main(void) {
SYSTEM_Initialize(); // Inicializatsiya sistemy (vklyuchayet inicializatsiyu CAN)
initLEDs(); // Inicializatsiya svyetodiodov
while (1) {
blinkLED1(); // Postoyannoye miganiye svyetodioda 1
sendCANMessage(); // Otpravka CAN-soobsheniya
__delay_ms(13); // Zaderzhka
}
}