| Форум РадиоКот https://radiokot.ru/forum/ |
|
| PIC18f25k80 отправка сообщения в Can https://radiokot.ru/forum/viewtopic.php?f=58&t=197330 |
Страница 1 из 1 |
| Автор: | Dergnol [ Вс мар 30, 2025 09:27:25 ] |
| Заголовок сообщения: | PIC18f25k80 отправка сообщения в Can |
Здравствуйте! Имеется 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 } } |
|
| Автор: | sc0rpy [ Пн июн 23, 2025 13:46:59 ] |
| Заголовок сообщения: | Re: PIC18f25k80 отправка сообщения в Can |
в ДШ указано что старшие байты расшыренного иднтификатора сдвинуты влево, что впрочем тожэ показывает и канхакер соотвецтвенно в коде это тожэ надо учитывать |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


