Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Код для обработки CAN сообщений AT90CAN128

Непрочитано 02.08.2010, 16:01  
LexaryStyle
Частый гость
 
Регистрация: 16.09.2006
Сообщений: 15
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LexaryStyle на пути к лучшему
По умолчанию Код для обработки CAN сообщений AT90CAN128

Приветствую, немогу разобраться в коде, прошу помощи знающих:

Нашел следующую информацию:

http://forum.ocp.su/attachment.php?a...4&d=1210780934
http://caxapa.ru/167896.html
http://www.micromax.ru/articles/arti...an_kvazer_2#05
http://www.atmel.com/dyn/resources/p...nts/AVR452.zip

Я новичок, сейчас уперся в то что немогу найти библиотеку interrupt.h..

AT90CAN128 запустил с кварцем 16Мгц
Реклама:
LexaryStyle вне форума  
Непрочитано 02.08.2010, 16:26  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

Сообщение от LexaryStyle Посмотреть сообщение
По умолчанию Код для обработки CAN сообщений AT90CAN128
Приветствую, немогу разобраться в коде, прошу помощи знающих:

Нашел следующую информацию:

http://forum.ocp.su/attachment.php?a...4&d=1210780934
http://caxapa.ru/167896.html
http://www.micromax.ru/articles/arti...an_kvazer_2#05
http://www.atmel.com/dyn/resources/p...nts/AVR452.zip

Я новичок, сейчас уперся в то что немогу найти библиотеку interrupt.h..
А что у Вас за компилятор?
harchenko_pavel вне форума  
Непрочитано 02.08.2010, 16:57  
LexaryStyle
Частый гость
 
Регистрация: 16.09.2006
Сообщений: 15
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LexaryStyle на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

CodeVisionAVR

Если я скопирую это библиотеку из WinAVR в CodeVisionAVR inc это будет корректно?
LexaryStyle вне форума  
Непрочитано 02.08.2010, 16:58  
LexaryStyle
Частый гость
 
Регистрация: 16.09.2006
Сообщений: 15
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LexaryStyle на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

Вот код для 16Мгц варианта, в WinAVR работает, его сложно портировать на CodeVision?


Цитата:
#define F_CPU 16000
#define DLC_MAX 8
#define PAGE_MAX 16

#define BRP_100_16 9
#define SJW_100_16 0
#define PRS_100_16 6
#define PHS2_100_16 3
#define PHS1_100_16 3
#define SMP_100_16 1

#include ‹avr/io.h›
#include ‹avr/interrupt.h›
#include ‹util/delay.h›
#include ‹string.h›

typedef struct {
uint32_t IDT; /* Nachrichten ID Tag */
uint8_t DLC; /* DATA LENGTH CODE */
uint8_t data[8];
}CAN_Message_t;

void CAN_INIT(){
CANGCON |= (1‹‹SWRES); /* Reset */
CANGCON = 0x00; /* DISABLE CAN */
while(CANGSTA&(1‹‹ENFG)); /* AUF DISABLE WARTEN */
CANGIT = 0x00; CANSIT2 = 0x00;CANSIT1 = 0x00; /* Aufgetretene Interrupts Lцschen */
for (uint8_t PAGE_INDEX=0;PAGE_INDEX‹PAGE_MAX;PAGE_INDEX++){ /* FOR ALL MOBS DO */
CANPAGE = PAGE_INDEX ‹‹ 4; /* SELESCT MOB*/
CANCDMOB=0x00; /* DISABLE MOB*/
CANSTMOB=0x00; /* CLEAR STATUS*/
for (uint8_t MSG_INDEX=0;MSG_INDEX‹DLC_MAX;MSG_INDEX++){CANMSG= 0x00;};} /* CLEAR MESSAGE*/
CANBT1 = (BRP_100_16 ‹‹ 1); /* BIT TIMING*/
CANBT2 = (PRS_100_16 ‹‹ 1) | (SJW_100_16 ‹‹ 5);
CANBT3 = (PHS2_100_16 ‹‹ 4) | (PHS1_100_16 ‹‹ 1) | (SMP_100_16);
CANGIE = (1‹‹ENIT) | (1‹‹ENRX) | (1‹‹ENBX) ; /* ENABLE Interrupt Eingдnge*/
CANIE1 = 0x7F; CANIE2 = 0xFF;
CANGCON = (1‹‹1); /* ENABLE CAN*/
while(!(CANGSTA&(1‹‹ENFG))); /* AUF ENABLE WARTEN*/
}

int CAN_SEND (CAN_Message_t Nachricht){
uint8_t Error=0;
cli(); /* Interrupts Aus*/
/* 1. Freien MOB suchen */
for (uint8_t PAGE_INDEX=0;PAGE_INDEX‹PAGE_MAX;PAGE_INDEX++){ /* FOR ALL MOBS DO */
uint8_t Error=1;
CANPAGE = PAGE_INDEX ‹‹ 4;
if (!(CANCDMOB)) { /* MOB Disabled ergo frei */
Error=0; /* No Error, wir hams gefunden */
break;};}; /* einfach for verlassen, page bleibt erhalten */
if (Error) {sei();return Error;} /* Im Fehlerfall funktion verlassen */
CANSTMOB = 0x00; /* Status Lцschen*/
/* 2. IDE und IDT*/
if (Nachricht.IDT‹=0x7FF) { /* 11 Bit*/
CANCDMOB &= ~(0‹‹IDE);
CANIDT4=0x00;
CANIDT3=0x00;
CANIDT2=(uint8_t)(Nachricht.IDT ‹‹ 5);
CANIDT1=(uint8_t)(Nachricht.IDT ›› 3);
}
else if (Nachricht.IDT‹=0x1FFFFFFF) { /* 29 Bit*/
CANCDMOB |= (1‹‹IDE);
CANIDT4=(uint8_t)(Nachricht.IDT ‹‹ 3);
CANIDT3=(uint8_t)(Nachricht.IDT ›› 5);
CANIDT2=(uint8_t)(Nachricht.IDT ›› 13);
CANIDT1=(uint8_t)(Nachricht.IDT ›› 21);
}
else {Error=2;}
if (Error) {sei();return Error;} /* Im Fehlerfall funktion verlassen */
/* 3. DLC und Daten Setzen */
if (Nachricht.DLC ‹= 0) {Error=3;}
else if (Nachricht.DLC ‹ DLC_MAX){
CANCDMOB |= DLC_MAX;
for (uint8_t MSG_INDEX=0;MSG_INDEX‹DLC_MAX;MSG_INDEX++){
CANMSG = Nachricht.data[MSG_INDEX];};}
else {
CANCDMOB |= Nachricht.DLC;
for (uint8_t MSG_INDEX=0;MSG_INDEX‹DLC_MAX;MSG_INDEX++){
if (MSG_INDEX‹Nachricht.DLC){
CANMSG = Nachricht.data[MSG_INDEX];}
else {CANMSG = 0x00;};};}; /* Sicherheitshalber den Rest mit Nullen zuschreiben*/
if (Error) {sei();return Error;} /* Im Fehlerfall funktion verlassen */
CANCDMOB |= (1‹‹CONMOB0); /* Sendeauftrag */
while (CANGSTA & (1‹‹TXBSY)); /* Abwarten solange Busy */
if (CANSTMOB & (1‹‹TXOK)){} /* ALLES IST GUT WOOHOOOO */
else if (CANSTMOB) {Error = 4;} /* Irgendein Fehler Error 4 */
else {Error = 5;}; /* Status immer noch Null Error 5 */
CANSTMOB = 0x00;
CANCDMOB = 0x00;
sei();
return Error;
}

int main (void){
CAN_Message_t MyMessage;
MyMessage.IDT = 0x0F7AF0F4;
MyMessage.DLC = 5;
strncpy (&MyMessage.data[0], "Hallo", MyMessage.DLC);
CAN_INIT();
while(1){CAN_SEND (MyMessage);};
return 0;
}



Последний раз редактировалось LexaryStyle; 02.08.2010 в 20:16.
LexaryStyle вне форума  
Непрочитано 02.08.2010, 18:10  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

Скомпилил в кодевижене 2.04, работоспособность не проверял!
Миниатюры:
Нажмите на изображение для увеличения
Название: Clipboard03.jpg
Просмотров: 141
Размер:	532.8 Кб
ID:	10501  
Вложения:
Тип файла: rar can128.rar (35.8 Кб, 182 просмотров)
harchenko_pavel вне форума  
Непрочитано 02.08.2010, 19:49  
LexaryStyle
Частый гость
 
Регистрация: 16.09.2006
Сообщений: 15
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LexaryStyle на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

Не хватает чего то... (CV 2.03.4)
Миниатюры:
Нажмите на изображение для увеличения
Название: Копия 3440.JPG
Просмотров: 125
Размер:	208.5 Кб
ID:	10508  

Последний раз редактировалось LexaryStyle; 02.08.2010 в 21:19.
LexaryStyle вне форума  
Непрочитано 02.08.2010, 21:26  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

А зачем Вы заменили
PHP код:
typedef struct 
{
    uint32_t IDT; /* Nachrichten ID Tag */
    uint8_t DLC; /* DATA LENGTH CODE */
    uint8_t data[8];
}CAN_Message_t; 
на
PHP код:
typedef struct 
{
    uint32_t IDT; /* Nachrichten ID Tag */
    uint8_t DLC; /* DATA LENGTH CODE */
    uint8_t data[8];
    CAN_Message_t;
} 
Почитайте Программирование на языке С для AVR и PIC микроконтроллеров (Ю.А. Шпак, 2006), C Programming for microcontrollers (Joe Pardue, 2005), Липпман - С++ для начинающих.

В данном случае CAN_Message_t это имя структуры и записано оно правильно:
PHP код:
typedef struct _struct_name
{
  int param1;
  int param2;
}
STRUCT_NAME; 
Скриншоты лучше не менять, а добавлять в новом посте!
Дабы избежать глупых ситуаций.


Проблема не в коде, а в настройках компилятора. У меня компилится без ошибок.
Как вариант поставьте версию 2.04 evaluation

Последний раз редактировалось harchenko_pavel; 02.08.2010 в 21:32.
harchenko_pavel вне форума  
Сказали "Спасибо" harchenko_pavel
LexaryStyle (02.08.2010)
Непрочитано 02.08.2010, 22:08  
LexaryStyle
Частый гость
 
Регистрация: 16.09.2006
Сообщений: 15
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LexaryStyle на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

Все компилируется без ошибок, подскажите в чем заключалось портирование?

Осциллографом проверил, сигнал на Tx бегает...

Последний раз редактировалось LexaryStyle; 02.08.2010 в 22:16.
LexaryStyle вне форума  
Непрочитано 02.08.2010, 22:23  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

Сообщение от LexaryStyle Посмотреть сообщение
Все компилируется без ошибок, подскажите в чем заключалось портирование?
В проекте есть macros.h - Кроссплатформенная библиотека макросов для обеспечения совместимости компиляторов CVAVR, IAR, IMAGECRAFT, SDCC, FEDPICC с проектами написанными на WinAVR (AVR GCC), скачанная с http://www.avrfreaks.net/ и дополненная.
Плюс подключение стандартных библиотек кодевижна и устранение мелких несоотвествий, например конструкция
PHP код:
for (uint8_t MSG_INDEX=0;MSG_INDEX‹DLC_MAX;MSG_INDEX++) 
здесь не работает.
Надо объявлять переменную вне оператора for
PHP код:
uint8_t MSG_INDEX;
for (MSG_INDEX=0;MSG_INDEX‹DLC_MAX;MSG_INDEX++) 
harchenko_pavel вне форума  
Непрочитано 02.08.2010, 22:26  
XoDoK11
Гражданин KAZUS.RUN
 
Аватар для XoDoK11
 
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
XoDoK11 на пути к лучшему
По умолчанию Re: Код для обработки CAN сообщений AT90CAN128

В Протеусе или еще где проект можно смоделировать?
XoDoK11 вне форума  
 
Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33
Помогите с ЦАП AD7708/AD7718 или их аналогами ST_Senya Микроконтроллеры, АЦП, память и т.д 9 30.11.2009 19:03


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.