www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Protokollverarbeitung des SJA1000


Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
manchmal muss man wohl auch auf Interrupts reagieren...

Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon klar ;o)

Aber muß man auch so Dinge tun wie CRC berechnen, Acknowledge
Nachrichten verschicken, etc

Autor: Peter Mahler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank
Falk S.

Autor: Toxic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Peter Mahler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Toxic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Toxic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Interrupt vom SJA1000 auf den Externen-Interrupt vom
ATMEAG8535 gelegt. Ist dies so richtig?

Autor: Toxic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Wie muss ich das Error- und Bus-Status -Flag per Software überprüfen
überprüfen?

Autor: Toxic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter....

Autor: Toxic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pull-Up-Widerstand bei der Interruptleitung nicht vergessen!!

Autor: Toxic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian!

Was soll jetzt dieser Posting genau?
Da ist keine Antwort auf meine Fragen.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

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.