Hallo,
hast du am Bus einen weiteren Teilnehmer? Wenn der At90Can kein ACK bekommt, wird er unzufrieden.
Gruß
Jens
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:
Wäre super, wenn jemand ne Idee hätte.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) { } }
Servus Uli
Hallo,
hast du am Bus einen weiteren Teilnehmer? Wenn der At90Can kein ACK bekommt, wird er unzufrieden.
Gruß
Jens
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
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
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
Hallo Drew,
dass mit dem ACK kann ich nicht beurteilen.
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.Überprüf doch mal Deine Fuses. Wahrscheinlich läuft das Ding mit einer falschen Frequenz, dann hast Du auch keine 100kBaud.
Gruß Uli
PS: Danke an euch für die Unterstützung
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!
Warum fragst du dann nicht bei den Leute nach die die Bibliothek geschrieben haben?Zitat von T.J.
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.Zitat von T.J.
Ich hab die Beschreibung mal ergänzt.
Das stimmt, das ist ein Fehler auf der Seite, ist korrigiert.Zitat von T.J.
MfG Kjion
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!
Hi,
wenn du WinAVR installiert hast sollte er das Kommando aber eigentlich kennen. Eventuell musst du PATH anpassen so dass er auf WINAVRDIR/bin zeigt.Zitat von T.J.
MfG Kjion
Lesezeichen