Hallo zusammen! meine Frage: Wieviel Arbeit nimmt einem der SJA1000 bei der Kommunikation über den CAN Bus ab? Also ich meine: Muß man nach der Initialisierung mehr machen als den Sendepuffer füllen und die Empfangspuffer auslesen? Falls nein:Gibt es CAN-controller, die einem mehr Arbeit abnehmen? Viele Grüße, Falk S.
Schon klar ;o) Aber muß man auch so Dinge tun wie CRC berechnen, Acknowledge Nachrichten verschicken, etc
Hallo, eigentlich musst du nichts tun. Die Frage ist eher was du dabei tun kannst. Der SJA1000 kan in 2 unterschiedlichen Modis betrieben werden. 1. PeliCAN-Modus für erweiterte (29-Bit) CAN-ID. Dort hast du die Möglichkeit über Register die verschiedene Fehlerzustände abzufragen. 2. BasicCAN Modus als Kompatibilitäts-Modus für den das CAN Urgestein 82C200. Ausser dem globalen Error-Flag hast du dort kaum eine Möglichkeit irgendwelche Fehler genauer nachzuvollziehen. Interessant sind zum Beispiel solche Zustände wie ein Bus-OFF, z.B wenn sich kein Empfänger die versendete Nachricht versteht. Man sieht dann zwar, dass die Kommunikation nicht funktioniert, kann aber meist nicht beurteilen an was es liegt. Ansonsten gilt : Nach Initialisierung nur noch die RX-/TX-/Error-Flags überprüfen (bzw. ISR), Daten reinschreiben und rauslesen. CRC, Arbitirierung, Framing, usw. übernimmt der SJA1000 Gruss, Peter
Hallo! Ich habe einen SJA1000 zusammen mit einem AVR ohne Interrupts am laufen. Interrupts muss man nicht verwenden. Was mich jetzt nur noch Interressiert ist, wie muss ich das mit BUS-OFF, AKTIV bzw. PASSIV realisieren? Wie muss man dies programmieren?
Herzlichen Glückwunsch ;-) 1. Einstellen der Baudrate über die Bittiming-Register. Online-Berechnung unter : www.port.de/deutsch/canprod/content/sv_req_form.html 1a. Eventuelles Einstellen der Akzeptanz-Register 2. Du bringst den CAN-Controller über das Control-Register in Operating Mode 3. Zyklisches Senden und Empfangen von CAN-Daten über Status- und Command-Register, dabei zyklisch das Error- und Bus-Status -Flag überprüfen. Der SJA1000 verfügt über ein internes FiFo(64 Bytes), welches mehrere CAN-Pakete enthalten kann. Beim Lesen, insbesondere ohne ISR, sollten wenn möglich alle Pakete abgeholt werden, bis der Receive-Buffer-Status 'empty' meldet Gruss, Peter peter(punkt)mahler(ät)web(punkt)de
Hallo Peter! Danke für die Info! Ok ich habe mal versucht die ganze Geschicht mit dem ISR zu realisieren. Leider klappt es nicht. Kannst du mir ein Beispiel Code in C geben? Das würde mir sehr weiterhelfen. In der Sende und Empfansroutine verwende ich den "Receive-Buffer-Status" nicht. Wie muss ich dies implementieren?
Ich habe den Interrupt vom SJA1000 auf den Externen-Interrupt vom ATMEAG8535 gelegt. Ist dies so richtig?
Hallo! Wie muss ich das Error- und Bus-Status -Flag per Software überprüfen überprüfen?
Hallo! Und zwar möchte ich meine Anwendung so ähnlich wie von Vector gestalten. Die Software soll die Errorframes, Chip state sowie Std. Data [fr/s] anzeigen. Wie könnte ich dies realisieren? Welche Register vom SJA1000 sind dafür zuständig?
Hallo Florian! Was soll jetzt dieser Posting genau? Da ist keine Antwort auf meine Fragen.
@Toxic Du hast geschrieben: Ich habe den Interrupt vom SJA1000 auf den Externen-Interrupt vom ATMEAG8535 gelegt. Ist dies so richtig? Und ich habe geschrieben: Pull-Up-Widerstand bei der Interruptleitung nicht vergessen!! Im Klartext heißt das, daß Du eben nicht nur den Interrupt vom SJA1000 an eine externen Interruptport des AVRs anschließen mußt, sondern diese Leitung zusätzlich mit einem Widerstand (z.B. 10k) gegen 5V schalten mußt. Ansonsten wird das mit der Auslösung des Interrupts nicht funktionieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.