mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik >CAN Botschaft senden macht Probleme<


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Da ich am verzweifeln bin, wende ich mich zum letzten mal an Euch!
Zur Zeit bin ich gerade dabei den SJA1000 an einem LPT Port unter
Win2000 mit Borland Builder C++ zu betreiben.
Den LPT Port kann ich ohne Probleme ansprechen. So wie es aussieht
funktioniert auch die Initialisierung des CAN Controllers.
Nur beim Senden einer CAN Botschaft, bleibt das Programm (siehe
Funktion unten)immer in der do...while Schleife hängen. Einen CAN
Teilnehmer habe ich auch angehängt mit der gleichen Baudrate von
100kBit/s.
Wie gesagt den SJA1000 habe ich zusammen mit einem ATMEL Controller
am laufen. Klappt wunderbar. Ich weiss einfach nicht mehr weiter.
Gibt es hier in diesem Forum jemand der schon einmal einen CAN Baustein
an einem LPT Port unter Win2000 bzw. WinXP betrieben hat?

/*----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 noch vergessen zu sagen, dass ich die DLL "inpout32.dll"
verwende!

MFG Joe

Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klappt denn die prinzipielle Kommunikation über den LPT  Port? Also mal
Register im SJA beschreiben und zurücklesen?

Gruß
Falk

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joe,

lies mal in der do-while Schleife das Can-Register 2 komplett aus und
zeige alle 8 Bits an und poste diese hier.

Hast du mal mit dem Oszi auf den Can-Leitungen nachgeprüft, ob sich da
was tut wenn du eine Botschaft abschickst?

Volker

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.