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


von Joe (Gast)


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

}

von Joe (Gast)


Lesenswert?

Ich habe noch vergessen zu sagen, dass ich die DLL "inpout32.dll"
verwende!

MFG Joe

von Falk S. (Gast)


Lesenswert?

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

Gruß
Falk

von Volker (Gast)


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

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
Noch kein Account? Hier anmelden.