PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AT90CAN sendet dauernd Nachrichten über CAN



loukumas
07.08.2008, 12:43
Hallo Leute,

ich habe eine Schaltung mit dem AT90CAN128 und habe eine CAN-Schnittstelle zusammengestellt. Ich hab den Code bzw. die lib. von www.kreatives-chaos.de genutzt. Klappt eigentlich auch ganz gut. Ich habe aber das Problem, dass mein Controller dauernd Nachrichten rausschickt, obwohl er die Nachricht eigentlich nur einmal senden sollte. Anbei mein Code. Er soll eine Nachricht schicken, dann soll die LED dauerhaft blinken. Das tut sie auch, aber wenn man am Scope den Ausgang misst, stellt man fest dass er immer weiter CAN-Nachrichten raushaut.
Hat jemand ne Idee wie es funktioniert, dass man nur eine Nachricht rausschickt????????

CODE:

#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <util/delay.h>
#include "can.h"

int main(void)
{
DDRA |= (1<<PA1);
static tCAN msg;
msg.id = 0x0DC;
msg.flags.rtr = 0;
msg.flags.extended = 0;
msg.length = 4;
msg.data[0] = 0x0;
msg.data[1] = 0xfe;
msg.data[2] = 0xcb;
msg.data[3] = 0xa5;
can_set_mode(Normal_MODE);
can_init(BITRATE_100_KBPS);
if(can_check_free_buffer())
can_send_message(&msg);
while (1)
{
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
PORTA = 0x02;
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
_delay_ms(35);
PORTA = 0x00;
//while (1) {
}
}


Wäre super, wenn jemand ne Idee hätte.

Servus Uli

McJenso
08.08.2008, 13:46
Hallo,

hast du am Bus einen weiteren Teilnehmer? Wenn der At90Can kein ACK bekommt, wird er unzufrieden.

Gruß

Jens

loukumas
08.08.2008, 16:45
Hy Jens,

ja ich hab viele Teilnehmer :-) .........
Und diese Teilnehmer können dann nicht mehr senden, weil der Bus quasi "blockiert" wird durch meine Nachricht.....

Gruß Uli

drew
08.08.2008, 19:24
Hallo,
ich denke auch,daß das mit dem fehlenden ACK zu tun hat. Deine anderen Teilnehmer verstehen Deinen AT90 nicht und senden darum kein ACK. Darum sendet der AT90 immer weiter. Die anderen Teilnehmer gehen dann in BUSOFF.
Überprüf doch mal Deine Fuses. Wahrscheinlich läuft das Ding mit einer falschen Frequenz, dann hast Du auch keine 100kBaud.
Du könntest auch die richtigen Botschaften der anderen Teilnehmer mit dem Oszi anschauen und mit denen vom AT90 vergleichen. Pass aber auf, CAN-Msg sind je nach dlc unterschiedlich lang.
Drew

drew
08.08.2008, 19:25
Hallo,
ich denke auch,daß das mit dem fehlenden ACK zu tun hat. Deine anderen Teilnehmer verstehen Deinen AT90 nicht und senden darum kein ACK. Darum sendet der AT90 immer weiter. Die anderen Teilnehmer gehen dann in BUSOFF.
Überprüf doch mal Deine Fuses. Wahrscheinlich läuft das Ding mit einer falschen Frequenz, dann hast Du auch keine 100kBaud.
Du könntest auch die richtigen Botschaften der anderen Teilnehmer mit dem Oszi anschauen und mit denen vom AT90 vergleichen. Pass aber auf, CAN-Msg sind je nach dlc unterschiedlich lang.
Drew

loukumas
08.08.2008, 19:34
Hallo Drew,

dass mit dem ACK kann ich nicht beurteilen.


Überprüf doch mal Deine Fuses. Wahrscheinlich läuft das Ding mit einer falschen Frequenz, dann hast Du auch keine 100kBaud.

Hmmm, da bin ich mir eigentlich fast sicher dass es 100k sind. war ganz schön am Oszi einsehbar. Ich hatte davor ne falsche Baudrate und dann hat er Errorframes auf den Bus geschickt. Die jetzige Baudrate müßte also passen, da ich ja die Nachricht übertragen bekomme.

Gruß Uli

PS: Danke an euch für die Unterstützung

T.J.
18.08.2008, 10:00
Hallo,

ich habe auch ein Problem mit der Bibliothek. Ich finde sie sehr gut, aber ich komme schon am Anfang damit nicht klar.

1. wie muss ich die Dateien libcan.a erstellen? Mir ist unklar wo und wie ich make lib eigeben soll unter Win XP. Wohl kaum in der cmd???
2. welche Dateien muss ich in mein Projekt kopieren? fehlt da nicht noch bool.h und config.h (laut tut muss man ja nur can.h und libcan.a kopieren)

vielen Dank schonmal!

Kjion
22.08.2008, 11:56
ich habe auch ein Problem mit der Bibliothek.

Warum fragst du dann nicht bei den Leute nach die die Bibliothek geschrieben haben?


1. wie muss ich die Dateien libcan.a erstellen? Mir ist unklar wo und wie ich make lib eigeben soll unter Win XP. Wohl kaum in der cmd???

Doch genau da. Alternativ kannst du auch ein "make all" ausführen, das sollte dein Programmers Notepad schon als "Tool" installiert haben. Einfach eine Datei aus dem src/-Ordner öffnen und Make All anklicken.

Ich hab die Beschreibung mal ergänzt.


2. welche Dateien muss ich in mein Projekt kopieren? fehlt da nicht noch bool.h und config.h (laut tut muss man ja nur can.h und libcan.a kopieren)

Das stimmt, das ist ein Fehler auf der Seite, ist korrigiert.

MfG Kjion

T.J.
22.08.2008, 17:13
vielen Dank, sorry ich hätte dir auch ne Mail schreiben können, stimmt. Ging halt hier grad darum

ich hatte allerdings das notepad nicht mit installiert, da ich AVR Studio 4 nutze und in der Windows cmd make eingegeben. Da kennt der den Befehlt nicht. Daher mein Problem, auch wenn es recht gut beschrieben ist!

Kjion
22.08.2008, 17:34
Hi,


ich hatte allerdings das notepad nicht mit installiert, da ich AVR Studio 4 nutze und in der Windows cmd make eingegeben. Da kennt der den Befehlt nicht. Daher mein Problem, auch wenn es recht gut beschrieben ist!

wenn du WinAVR installiert hast sollte er das Kommando aber eigentlich kennen. Eventuell musst du PATH anpassen so dass er auf WINAVRDIR/bin zeigt.

MfG Kjion