www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SJA1000 senden keine Nachricht


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aufbau: CAN Controller an LPT angeschlossen
Betriebssystem: Win2000
Ok so wie es aussieht funktioniert die CAN Initialisierung.
Jetzt bin ich gerade dabei eine Botschaft auf den CAN Bus zu senden.
Das habe ich bis jetzt nicht zum laufen gebracht.
Das Programm bleibt bei "warten bis Sendung ausgelöst" stehen.
Es kann auch sein das die Initialisierung doch nicht richtig ist. Wie
gesagt den SJA1000 habe ich zusammen mit einem ATMEL Controller
am laufen. Klappt wunderbar.

/*----CAN Botschaft
senden------------------------------------------------*/
void TForm1::canmessage_write(struct message *ptransmit)
{
   unsigned int id_1,id_2,id_3;
   unsigned int id_1_hilf,id_2_hilf,id_3_hilf;
   unsigned int trdscr_wert;
   unsigned int i;

   id_3=(ptransmit->id)&0x0f;
   id_2=((ptransmit->id)/16)&0x0f;
   id_1=((ptransmit->id)/256)&0x0f;

   id_1_hilf=id_1*32;
   id_2_hilf=id_2*2;
   id_3_hilf=id_3/8;

   trdscr_wert=(id_1_hilf)|(id_2_hilf)|(id_3_hilf);
   canreg_write(10,trdscr_wert);


   id_3=(ptransmit->dlc)&0x0f;
   id_2=(ptransmit->rtr)*16;
   id_1=((ptransmit->id)&0x0f)*32;

   trdscr_wert =(id_3)|(id_2)|(id_1);
   canreg_write(11,trdscr_wert);

   for (i=0;i<=7;i++)
    {
     canreg_write (12+i,ptransmit->byte[i]);
    }
   canreg_write (1,0x01);                //Sendung auslösen

   do
    {
    }
   while (((canreg_read(2))&0x08)==0);    //warten bis Sendung fertig

}

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nochmals meine Schaltung sowie das Programm überprüft. Ich
konnte keine Fehler feststellen.

Das programm verlässt die wihle Schleife nicht.
while (((canreg_read(2))&0x08)==0);    //warten bis Sendung fertig

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joe,

hast du einen anderen Teilnehmer am Can-Bus hängen. Wenn ich mich recht
erinnere, benötigt der sja1000 von irgend einem anderen Teilnehmer ein
Acknowledge um eine Nachricht als "efolgreich" gesendet
zu interpretieren. Wenn er dieses nicht bekommt, bleibt dein Programm
natürlich in der while-Schleife hängen.

Im Datenblatt steht auch:

(Bit 2 des Canreg 0)

0 normal; an acknowledge is required for successful
transmission

Gruß Volker

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Volker am CAN Bus hängt noch ein anderer Teilnehmer drann.

Hast du eine Application SJA1000 an LPT Port aufgebaut?
Wenn ja, wie sieht dein Programm unter Windows aus?

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joe,

nein habe vor etwa 2 Jahren nur ein Can-Netzerk aus 20 Teilnehmern mit
8051 Derivat gebaut.

Aber geh doch zum Testen folgendermaßen vor:
Wenn du nicht sicher bist, ob deine Initialisierung richtig ist, lese
einfach alle Can-Register wieder aus und vergleiche mit dem
Registerinhalt der funktionierenden Avr-Schaltung.

Bist du dir sicher, daß die canreg_read Funktion auch wirklich den
Registerinhalt ausliest? Wie sehen die 8 Bit des Can-Registers 2 aus
(ohne Maskierung mit 0x08)? Einfach mal in der while-Schleife irgendwo
sichtbar machen.
Vielleicht kann man daraus etwas folgern.

Gruß Volker

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Im Anhang habe ich mal die beiden Funktionen canreg_read und
canreg_write zur Verfügung gestellt.

Ich benutze Borland Builder C++ 5.0

Autor: Atlan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus Joe,
hatte auch ein prob mit dem sja dass er nicht gesendet hat.
Machst du bevor du die Initialisierungsroutine ablaufen lässt einen
hardwaremäßigen Reset über den RST pin ? falls nein - dann ist das der
Grund - wenn das nicht gemacht wird kann die gesamte Initialisierung
korrekt sein, aber der Chip sendet und empfängt nicht...
grüßle

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.