mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90CAN128, Receive Interrupt


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich versuche gerade erfolglos den Receiver Interrupt des AT90CAN128
auszulösen. Ich nutze den ImageCraft Compiler und die Library die ich
gerade in der Codesammlung gepostet habe. Sonst klappt bis jetzt schon
einiges ;)
Ich schicke kontinuierlich mit einem Dongle Daten an den Controller.
Jedoch wird die ISR nicht aufgerufen.
Das einzigste was passiert das meine Tx Funktion gestört wird seit dem.
Die CAN IDs werden verfälscht.

Initialisierung:

CANGIE = 0x00100000;


ISR:

#pragma interrupt_handler can_transfer_complete_isr:19
void can_transfer_complete_isr(void)
{
  PORTA++;
}



Gruß und Danke,

Christian

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das scheint mir etwas mager als Can-Initialisierung..

Autor: chbr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Das soll auch gar nicht die ganze Initialisierung sein. Das ist ein nur
ein Ausschnitt was ich nun speziell für den Interrupt enable
ausprobiere.

Der Rest klappt alles soweit. Die Funktionen für den Empfang per
Abfrage oder zum versenden klappen schon gut.

Ich weiß bloß gerade hierbei nicht weiter. Welche anderen Einstellungen
muss ich denn da noch beachten? Was kommt mir da sonst in die quere?

Gruß Christian

Autor: chbr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens, falls das weiter hilft

Ich habe nebenbei noch den Timer0, ADC und die UART am laufen. Gibt es
da komplikationen?


Christian

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich das recht in Erinnerung habe musst du mindestens 2 oder 3
Register beschreiben um einen Interrupt zuzulassen, und es braucht ein
paar schleifen um die für alle Mailboxen zu aktivieren.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

etwas spät... aber Ich habe nun wieder Zeit dafür gefunden :-)

Ich probiere es zur Zeit so aus, und es klappt immer noch kein
bisschen. Leider weiß Ich da auch nun nicht mehr weiter. Die ganzen CAN
Register im Datenblatt machen mich noch zu schaffen ;)

Init:

  CANGIE = (1<<ENIT) | (1<<ENRX);      //enable receive interrupt

  CANIE1 = 0;
  CANIE2 = (1<<0);              //enable MOb0 interrupt

  CANSIT1 = 0;
  CANSIT2 = 0;



ISR:

#pragma interrupt_handler can_transfer_complete_isr:19
void can_transfer_complete_isr(void)
{
  PORTA++;


 CANSTMOB &= ~(1<<RXOK);          //clear interrupt flag
}


Wäre echt super wenn mir da jemand noch helfen könnte.

Schönen Tag euch, Christian

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Atmel gibts Codebeispiele für die CAN-Controller, allerdings nur für
die 8051er Serie (t89c51cc01). Da ist auch eins fürs Interrupt-Handling
dabei.

http://www.atmel.com/dyn/products/tools_card.asp?t...

Die CAN-Controller der beiden uC sind annähernd identisch!

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Ingo,


irgendwie hat mich das nun dazu geleitet das richtige auszuprobieren
und es geht nun :-)
Es waren ein paar dumme fehler noch drin...


Danke, Christian

Autor: Jon O. (Firma: Student) (jon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

kannst Du mir bitte sagen wie Du dein Problem gelöst hast.

Ich kämpfe schon seit 3 Wochen mit CAN und suche vergeblich nach dem
Fehler. Das Sende- und Empfangsprogramm geht bis der Warteschleife und
bleibt da hängen, da RXOK und TXOK nie auf eins gesetzt werden. Seit
zwei Wochen suche ich vergeblich, wo das Problem liegt und kann immer
noch nicht den Fehler einzugrenzen.

Ich habe 2 Boards mit je einem AT90CAN128, wobei einer Sender und
der andere Empfänger ist. Baudrate ist 250 kbit/s. Bit Timing habe ich
nicht selbst gerechnet sondern aus dem Datenblatt genommen. Weiss nicht,
ob es stimmt. Auch mit anderen Baudraten habe ich ausgetestet.
Im Internet habe ich einige Beispiele gefunden und habe da nichts
anderes gefunden. Die habe ich auch getestet. Geht auch nicht.

Hardwarefehler? Aber es ist alles richtig angeschlossen. Ich benutze
zwei Drähte je 2m mit 120 Ohm Abschlusswiderständen. Hast Du GND auch
benutzt? Braucht man den unbedingt? Welche Kabel hast Du angewendet?

Mich interessiert vor allem, ob Du mit AT90CAN128 die CAN-Nachrichten 
senden und empfangen kannst? Wießt Du vielleicht, wo kann bei mir der 
Fehler liegen?

Mit freundlichen Grüssen

Jon

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.