www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN: 82C250 an SJA1000


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte mit dem SJA1000 und 82C250 einen CAN-Bus Knoten aufbauen.
Wenn ich dem SJA1000 per 8515 ein Senderequest schicke, setzt der
SJA1000 das Statusregister auf 0x00 (-> SJA1000 beschäftigt). Und der
SJA1000 nimmt das 0x00 nicht mehr zurück, d.h. ist nach dem ersten
Senden von zwei Bytes dauernd beschäftigt .

Hier der Codingausschnitt, um den den SJA1000 zu initialisieren:

   while (!CAN_CTRL & RESREQ)   // sja in reset-mode setzen
        CAN_CTRL = RESREQ;
   CAN_AC      = OWN_ID;  // eigene ID (=0x00) setzen, höchste Prio
    CAN_AM      = ACCEPTMASK;  // (0xFF) jede Nachricht akzeptieren
    CAN_TMG_0   = 0x03;
    CAN_TMG_1   = 0x1c;
    CAN_OCR     = 0xde;
    CAN_CLKDIV  = 0x07;
    CAN_CTRL    = 0x5e;
    CAN_CMD     = 0x0c;

Folgendes Codinig soll den SJA1000 zum Absetzen von zwei Bytes auf den
Bus bewegen:

    id  = 0x500;  //
    len = 2;    //  Nachrichtenlänge
    CAN_TX_ID = id >> 3;  // CAN_TX_ID Bit 10 bis 3 des Identifiers
    CAN_TX_LEN = ((id & 0x07) << 5) | len;
// in CAN_TX_LEN (Bit7 bis 5) steht Bit2-0 des Identifiers
    CAN_TX_BUF0 = 'J';
    CAN_TX_BUF1 = 'R';
    CAN_CMD     = TXREQ;

Kann es an der Hardware liegen? Mir ist noch so ganz klar, wieso der
SJA zwei Sende- und zwei Empfangspins hat (TX0, TX1 und RX0, RX1). Habe
einfach das TX0 (SJA) mit dem TxD (82C250) verbunden einschließlich
R=470 gegen +5V. TX1 (SJA) offen gelassen, RX0 (SJA) an  RxD (82C250),
wieder mit R=470 gegen +5V. RX1 (SJA) über R=6,2k gegen +5V und R=über
3,3k gegen GND gelegt.

Gibt es irgendwo Infos wie der 82C250 an den SJA1000 angeschlossen
werden kann und wozu die TX1 und RX1 des SJA1000 da sind? Die
Datenblätter beider IC's geben da nicht soviel her.

Vielen Dank.

Gruß,
  Jan

Autor: Bernd Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du 2 Controller am Bus ?
Falls nicht wartet der SJA das die Daten ma Bus quittiert werden. Wenn
nicht wird irgend ein Fehlerbit gesetzt.

Bernd

Autor: Uwe Bleile (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wieso brauchst du Pullup Widerstände für RX u. TX ?
Schau dir mal den Anhang an.

MfG  Uwe

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du nur einen Kontroller hast solltest du den SJA1000 erstmal in den
self test mode schicken. DAnn kannste nämlich auch Messages verschicken
ohne das der Controller dafür von einem einandern auf dem Bus nen Ack
erwartet. So und dann wäre es warscheinlich noch gut die nachricht mit
dem self reception request zu verschicken, dann kannste die nämlich
gleich aus dem Empfangspuffer holen und ansehen ob das angekommen ist
was du auch verschickt hast.
Desweiteren wäre es interessant ob du das Ding im Basic CAN oder
PeliCAN Modus betreiben willst.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für die Antworten und den Schaltplan. Guter Tip mit dem
self test mode, werd ich gleich mal ausprobieren. Das ganze soll im
Basic-CAN Modus laufen.
Gruß,
  Jan

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok im BasicCAN Mode kann ich dir nicht groß helfen, aber hast du den
Controller richtig konfiguriert? Baud Rate Prescaler, etc.

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm kann mir vielleicht einer sagen wie man auf die initalisierung und
eine read/write routine kommt? ich schlag mich auch mit einem sja1000 +
82c250 herum. die beiden sind mit einem stk500 verbunden auf dem ein
8515er mikrocontroller dranhängt.

ausserdem frag ich mich auch ob ich mit dem 82c250er im BasicCan modus
laufen kann, da es ja heißt dieser sei 82c200 kompatibel. is da jetzt
ein prob für den 250er und muss ich deswegen den "erweiterten"
PeliCan modus verwenden?

thx bye Tom

Autor: Max Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit ich weis, kannst du die TX0 TX1 und RX0 RX1 konfigurieren.
Das heisst, die Ausgnge können als Opendrain benützt weren, was dann
die Pullups braucht. Es geht natürlich auch push-Pull, dann braucht man
keine WIderstände beim Treiber (TX).
Ebenfalls kann man TX1 im gleichtakt oder gegentakt zu zum TX2
betreiben.

Und natürlich brauchst du mindestens 2 Teilnehmer am Bus, da sonst bei
einem gesendeten Identifier kein Acknowledge vom Bus kommt.

Ach ja und vergiß die 2 Terminatoren von a 120Ohm nicht, das sonst der
Rezesive Pegel vom Bus nicht angenommen werden kann.

Gruß

Max

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.