Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
1

AT90CAN128. Примеры работы с CAN шиной

25.03.2014, 13:45. Просмотров 5882. Ответов 7
Метки нет (Все метки)

T90CAN128 ,ищу примеры( на С ), статьи итп итд по CAN шине, даташитом мозг уже сломал
буду очень благодарен за помощь
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2014, 13:45
Ответы с готовыми решениями:

Помогитес контроллером AT90CAN128
Вобщем суть проблемы такая: нужна подробная инфа по этому контроллеру...

Циклическая отправка сообщений с МК AT90CAN128 по CAN
Всем привет! Возник вопрос по кен протоколу. Сейчас реализую программу,...

Выход из прерывания для CAN (AT90CAN128)
Всем привет! Столкнулся с такой проблемой: Вот моя мейновая функция: void...

профи по AT90CAN128. к вам вопрос
доброго времени суток я начал использование сети can. прием передача итд....

Сохранение структур в EEPROM AT90CAN128 (CVAVR 1.25)
Добрый день, у меня такой вопрос: есть структура struct st { unsigned char...

7
raxp
10188 / 6571 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
25.03.2014, 14:46 2
Лучший ответ Сообщение было отмечено dzrkot как решение

Решение

CAN Article with source code for AVR microcontrollers
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/* Description:    This program demonstrates how to make a CAN network using mikroElektronika
                   CANSPI boards and mikroC compiler.
   Target device:  Atmel ATMEGA16
   Oscillator:     8MHz crystal */
 
char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags;                           // can flags
char Rx_Data_Len;                                                             // received data length in bytes
char RxTx_Data[8];                                                            // can rx/tx data buffer
char Msg_Rcvd;                                                                // reception flag
long Tx_ID, Rx_ID;                                                            // can rx and tx ID
char ErrorCount;
// CANSPI module connections
sbit CanSpi_CS at PORTB.B0;                                                   // Chip select (CS) pin for CANSPI board
sbit CanSpi_CS_Direction at DDRB.B0;                                          // Direction register for CS pin
sbit CanSpi_Rst at PORTB.B2;                                                  // Reset pin for CANSPI board
sbit CanSpi_Rst_Direction at DDRB.B2;                                         // Direction register for Reset pin
// End CANSPI module connections
void main(){
  ADCSRA.B7 = 0;                                                              // Configure analog pins as digital I/O
  PORTB  = 0; DDRB = 255;                                                     // Initialize ports
  PORTD  = 0; DDRD = 255;
  PORTC  = 0; DDRC = 255;
 
  ErrorCount     = 0;                                                         // Error flag
  Can_Init_Flags = 0; Can_Send_Flags = 0; Can_Rcv_Flags = 0;                  // clear flags
 
  Can_Send_Flags = _CANSPI_TX_PRIORITY_0 &                                    // form value to be used
                   _CANSPI_TX_XTD_FRAME &                                     // with CANSPIWrite
                   _CANSPI_TX_NO_RTR_FRAME;
 
  Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE &                             // form value to be used
                   _CANSPI_CONFIG_PHSEG2_PRG_ON &                             // with CANSPIInit
                   _CANSPI_CONFIG_XTD_MSG &
                   _CANSPI_CONFIG_DBL_BUFFER_ON &
                   _CANSPI_CONFIG_VALID_XTD_MSG;
 
  SPI1_Init();
  Spi_Rd_Ptr = SPI1_Read;                                                     // initialize SPI module
  CANSPIInitialize(1, 3, 3, 3, 1, Can_Init_Flags);                            // Initialize external CANSPI module
  CANSPISetOperationMode(_CANSPI_MODE_CONFIG, 0xFF);                          // set CONFIGURATION mode
  CANSPISetMask(_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG);                 // set all mask1 bits to ones
  CANSPISetMask(_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG);                 // set all mask2 bits to ones
 
  CANSPISetFilter(_CANSPI_FILTER_B2_F4, 0x12, _CANSPI_CONFIG_XTD_MSG);        // Node1 accepts messages with ID 0x12
  CANSPISetFilter(_CANSPI_FILTER_B1_F1, 0x13, _CANSPI_CONFIG_XTD_MSG);        // Node1 accepts messages with ID 0x13
 
  CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF);                           // set NORMAL mode
  RxTx_Data[0] = 0x40;                                                        // set initial data to be sent
 
  Tx_ID = 0x10;                                                               // set transmit ID for CAN message
 
  CANSPIWrite(Tx_ID, &RxTx_Data, 1, Can_Send_Flags);                          // Node1 sends initial message
 
  while (1)                                                                   // endless loop
    {
      Msg_Rcvd = CANSPIRead(&Rx_ID, RxTx_Data, &Rx_Data_Len, &Can_Rcv_Flags); // attempt receive message
      if (Msg_Rcvd) {                                                         // if message is received then check id
 
          if (Rx_ID == 0x12)                                                  // check ID
              PORTC = RxTx_Data[0];                                           // output data at PORTC
          else
              PORTD = RxTx_Data[0];                                           // output data at PORTD
          Delay_ms(50);                                                       // wait for a while between messages
          CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags);                   // send one byte of data
          Tx_ID++;                                                            // switch to next message
          if (Tx_ID > 0x11) Tx_ID = 0x10;                                     // check overflow
 
 
        }
      else {                                                                  // an error occured, wait for a while
 
          ErrorCount++;                                                       // increment error indicator
          Delay_ms(10);                                                       // wait for 10ms
          if (ErrorCount > 10) {                                              // timeout expired - process errors
            ErrorCount = 0;                                                   // reset error counter
            Tx_ID++;                                                          // switch to another message
            if (Tx_ID > 0x11) Tx_ID = 0x10;                                   // check overflow
            CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags);                 // send new message
          }
 
        }
    }
}
1
Вложения
Тип файла: pdf 707_ru_mikroe_article_basic_avr.pdf (1.02 Мб, 147 просмотров)
Тип файла: pdf Программа самообучения по-русски. Обмен данным посредством шины CAN.pdf (1.05 Мб, 290 просмотров)
Тип файла: zip source_codes_avr_05_09.zip (59.7 Кб, 138 просмотров)
Voland_
1677 / 1022 / 97
Регистрация: 04.01.2010
Сообщений: 3,426
26.03.2014, 10:46 3
Цитата Сообщение от raxp Посмотреть сообщение
Target device: *Atmel ATMEGA16
это не оно. в at90can128 hw-ерный CAN, и работа идет через регистры.

ТС порекомендую использовать, опять же, 32х-битные кортексы, т.к. цена их (с КАНом) куда приятнее, а возможностей больше. Примеры на поверхности.
2
raxp
10188 / 6571 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
26.03.2014, 12:04 4
Это так. Но TC просил примеры работы по CAN-шине и принципу ее работы. Задействовать аппаратный CAN придется по даташиту.
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
26.03.2014, 12:32  [ТС] 5
Цитата Сообщение от Voland_ Посмотреть сообщение
ТС порекомендую использовать, опять же, 32х-битные кортексы, т.к. цена их (с КАНом) куда приятнее, а возможностей больше.
Мне под готовое изделие надо прошивку написать на новой работе, так что stm-ки уже использовать не получится))
0
Voland_
1677 / 1022 / 97
Регистрация: 04.01.2010
Сообщений: 3,426
26.03.2014, 13:32 6
Лучший ответ Сообщение было отмечено raxp как решение

Решение

dzrkot, лично не проверял. Но вот здесь можно покопаться.
0
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
26.03.2014, 14:34  [ТС] 7
сейчас другая беда, AVR910 не читает 90can128, а тестовую мегу8 читает....)
0
Zombie47
2 / 2 / 0
Регистрация: 14.05.2012
Сообщений: 51
15.12.2018, 02:50 8
CANSPISetFilter(_CANSPI_FILTER_B2_F4, 0x12, _CANSPI_CONFIG_XTD_MSG); // Node1 accepts messages with ID 0x12
CANSPISetFilter(_CANSPI_FILTER_B1_F1, 0x13, _CANSPI_CONFIG_XTD_MSG); // Node1 accepts messages with ID 0x13
Поясните пожалуйста что означают эти строчки в частности _B1_F1 и _B2_F4
меняю у себя их в проге вижу что то меняется при получении но не пойму что.
0
15.12.2018, 02:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2018, 02:50

Сниффер CAN шины на AT90CAN128 (нужна критика)
Добрый день, впринципе я первый раз занимаюсь разработкой схемы, устройство для...

AT90CAN128 (Atmel Studio 6). Перевод символов для ЖКИ
здравствуйте есть такой код для перевода символов для ЖКИ, если подставлять...

Ищу СБИС для сопряжения 7-сегментных индикаторов с шиной ISA
Доброго времени суток Собственно задание: разработать контроллер индикации для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru