MIKROPROZESSOREN
CAN-Bus-Praxis
mit BASIC537
Wer sich zum ersten
Mal mit dem CAN-Bus
beschäftigt, der hat
einiges zu tun, bis er
die ersten Erfolge
sieht. Es müssen
immerhin mindestens
zwei Mikrocontroller-
Systeme korrekt mit den Controllern verbunden und eine Bus-Datenver-
bindung aufgebaut werden, wobei zwei Programme zum Einsatz kom-
men. Wenn das erste Mal Daten über den Bus flitzen, geht alles Weitere
ganz einfach. Dieser Beitrag soll die ersten praktischen Schritte für den
Anwender so weit wie möglich vereinfachen.
Das in Elektor 11/99 vorgestellte CAN- ler 80C535 und 80C537 noch ausführli-
Bus-Interface kann problemlos in cher eingegangen. Ein EPC (Ein-Plati-
BASIC537 angesteuert werden. nen-Computer) mit dem Mikrocon-
BASIC537 ist eine an den 80C537 ange- troller 80C537 wurde unter der
passte und erweiterte EPROM-Version Bezeichnung 80C537-Compuboard
des bekannten Intel-MCS51-BASICs, bereits in Elektor 6/97 veröffentlicht.
das vielen Elektor-Lesern bereits ver- Für die praktische Anwendung in Ver-
traut sein dürfte. Dieser BASIC-Inter- bindung mit dem CAN-Bus-Interface
preter war ursprünglich für den wird hier aber das neue, wesentlich
(inzwischen nicht mehr gefertigten) kompaktere und kostengünstigere 537-
BASIC-Mikrocontroller 8052AH-BASIC Lite-Board verwendet, das ebenfalls in
entwickelt worden und eignet sich in dieser Ausgabe (und auch auf dem
Verbindung mit einem externen ROM Titelbild) zu finden ist.
auch für andere Controller der 80xx-
Familie (siehe auch 80C32-BASIC-Steu- H ARDWARE
ercomputer, Elektor 2 und 3/98). In der Für die einfache Verbindung zwischen
nächsten Ausgabe wird auf die neuen der mit dem BASIC537 EPROM
Von Burkhard Kainka
BASIC-Varianten für die Mikrocontrol- bestückten 537-Lite-Platine und der
Elektor 1/2000
66
CAN-Interface-Platine wurde eine
K6
K5
PFI INT4
Adapterplatine entwickelt. Bild 1 zeigt
5V
1
PFO INT3
den Schaltplan dieses Adapters, Layout
RESET INT6
und Bestückungsplan sind in Bild 2 zu 5V
K4
RESET INT5
VOUT
sehen. Wie auf dem Foto zu sehen ist,
K3
ALE INT2
VBATT
lässt sich das 537-Board direkt auf die
D7 1 2 T2EX
Adapterplatine aufstecken, so dass die
D6 3 4 WR CLKO
D5 5 6 RD T2
Verdrahtung keinerlei Probleme berei-
D4 7 8 CS2 T1
tet. Die Verbindung zum CAN-Inter-
D3 9 10 ALE T0
face-Board erfolgt dann einfach über
D2 11 12 INT2 INT1
ein Flachbandkabel (siehe Foto am
D1 13 14 RESET INT0
Artikelanfang).
D0 15 16 VAREFF
Um das leidige Problem der Stromver- A7 P47
A6 P46
sorgung ebenfalls einfach zu lösen,
A5 P45
wurde auf der Adapterplatine auch ein
A4 P44
5-V-Spannungsregler mit Verpol-
A3 P43
schutzdiode am Eingang unterge-
K1
A2 P42
bracht, so dass die Adapterplatine die
A1 P41
+5V
beiden anderen Platinen mit +5 V ver- A0 P40
A15 P67
sorgt. An K2 braucht man dafür nur
A14 P66
ein Steckernetzteil von der preiswerten
A13 P65
Sorte (300 mA ist mehr als ausrei-
A12 P63
IC1
chend) anzuschließen, das eine unsta-
A11 P64
D1
bilisierte Gleichspannung von 9-12 V
1N4001 5V
A10 7805 P60
zur Verfügung stellt. Wenn man schon A9 P50
K2
A8 P51
stabilisierte 5 V zur Verfügung hat,
+9V
PSEN P52
kann man IC1, D1, C1 und C2 auf der
WR C1 C3 P53
C2 C4
Adapterplatine auch weglassen und
RD P54
die 5-V-Betriebsspannung an die Klem- 10µ 100n 10µ 100n
CS0 P55
16V 16V
men von K1 auf der Adapterplatine
CS1 P56
CS2 P57
anschließen.
Aus Kostengründen hat die Adapter- 990066 - 4 - 14
platine wesentlich klei-
nere Abmessungen als
Bild 1. Schaltbild der
das (aufzusteckende)
Adapterplatine für die
537-Board. Wenn man gen werden durch die Abschlusswiderstände angeschlos-
einfache Verbindung
die Adapterplatine ent- zwischen 537-Lite-Board das Programm fest sen sind oder nicht.
lang der im Aufdruck und CAN-Bus-Interface. vorgegeben. Die
angegebenen Linie in Übertragung erfolgt
zwei Teile trennt und mit 20 kBit/s. Nach- S ENDEPROGRAMM
diese im richtigen Abstand auf einer richten werden ohne RTR-Bit gesen- UND T EST
Trägerplatte (z.B. Alublech) montiert, det, das heißt, es wird keine Rückant- In Listing 1 ist das Sendeprogramm für
lässt sich die 537-Platine einfach auf wort angefordert. Die beiden Systeme den Controller 1 angegeben. Der CAN-
diesen Untersatz aufstecken. Lediglich sollen folgende Aufgaben erfüllen: Controller SJA1000 wird vom 80537-
die Interruptleitung INT2\ ist bei System 1 sendet regelmäßig Nachrich- System unter der Basisadresse 0F000H
Bedarf mit einem Stück Schaltdraht ten mit dem Identifier 300, in denen angesprochen. Zeile 95 legt den
von Pin 12 (K3) nach Pin 32 (K6) acht Bytes verschickt werden. Die Adressbereich fest (BA=0F000h). In
durchzuverbinden (siehe Foto des 537- Daten stammen von den ersten acht einem anderen System braucht
Boards mit den beiden demontierten Kanälen des A/D-Wandlers. Es werden zunächst nur BA geändert zu werden.
Teilen der Adapterplatine). Auf den also laufend Messungen an acht ana- Die Initialisierung erfolgt wie im vor-
beiden Teilen der Adapterplatine sind logen Eingangsleitungen durchge- hergehenden Beitrag zur CAN-Hard-
dafür Anschlusspunkte vorgesehen, im führt. Jedes andere System am Bus ware beschrieben. In den Zeilen 110
Bestückungsplan (siehe Bild 2) ist diese kann die Nachricht empfangen und und 200 wird der Erfolg der Register-
Verbindung als Drahtbrücke einge- auswerten. programmierung abgefragt. Das Pro-
zeichnet. System 2 empfängt alle Nachrichten gramm wartet hier jeweils auf ganz
auf dem Bus und gibt sie über die bestimmte Zustände eines Registerbits.
A NSTEUERUNG I N RS232-Schnittstelle an den PC weiter. Falls der Controller nicht am Bus
BASIC Man hat hier zugleich einen einfachen gefunden wird oder nicht korrekt
Zur Ansteuerung der CAN-Interface- CAN-Monitor, mit dem man sich den funktioniert, bleibt das Programm hier
Platine genügt ein Programm, das sich gesamten Datenverkehr ansehen hängen. Im Erfolgsfall erhält man
eigentlich nur um eine Reihe von Regi- kann. dagegen die folgende Meldung:
stern im CAN-Controller SJ1000 küm- Bild 3 zeigt diese Anordnung im
mern muss, die in den Adressbereich Blockschaltbild. Für die Verbindung Reset OK
ab F000h eingeblendet sind. Für alle zwischen den beiden Systemen Init OK
Zugriffe auf Adressen im Bereich des benötigt man kein spezielles Kabel. Bei
externen RAMs und der Peripherie den ersten Versuchen auf dem Labor- Es genügt zunächst, die Initialisierung
dient in BASIC537 der XBY-Operator. tisch, das heißt, bei einer Leitungslänge bis Zeile 200 auszuführen. Eine erste
Damit die Orientierung leicht fällt, soll kleiner 1 m, reicht auch ein einfaches Erfolgskontrolle bringt eine Untersu-
hier zunächst ein ganz einfacher Fall zweiadriges Kabel, das die Anschlüsse chung des Rechtecksignals am Testpin
mit einer Datenverbindung zwischen 4 und 8 der CAN-Stecker Eins zu Eins der Controllerplatine. Während hier
zwei 80C537-Systemen beschrieben verbindet. Es macht bei so kurzen vor der Initialisierung eine Frequenz
werden. Die wesentlichen Einstellun- Kabeln auch keinen Unterschied, ob von 8 MHz beobachtet wird, findet
Elektor 1/2000
67
Stückliste
K5
K4 K6 H6
Kondensatoren:
K3
C1, C3 = 10 µ/16 V (stehend)
C2, C4 = 100 n (keramisch)
Halbleiter:
D1 = 1N4001
IC1 = 7805
Außerdem:
K1 = 2-polige Anschlussklemme für
Platinenmontage, RM 5 mm
K2 = 2-polige Anschlussklemme für
Platinenmontage, RM 5 mm
K3 = Wannenstecker, gerade, 16-
K1
polig
K4 = Stiftleiste, einreihig, gerade, 4-
C4
polig
IC1
C3
K5, K6 = Stiftleiste, einreihig, gerade,
35-polig
C1
C2
K2
H8
Bild 2. Layout und
Bestückungsplan der
Adapterplatine.
man nun 2 MHz. Wenn das so stimmt, nal. Nach einem Hardware-Reset und
kann man einigermaßen sicher sein, ohne eine Initialisierung misst man auf
dass der Controller korrekt angesteu- beiden Leitungen Ruhepegel von ca.
ert wird. 2,5 V. Sobald das Sendeprogramm
Nun kann das komplette Programm gestartet wird, erkennt man Daten in
geladen und gestartet werden. Der Form von Rechtecksignalen mit einer
erfahrene Elektroniker wird nun Amplitude von 1 V. Die kürzesten
natürlich gleich zum Oszilloskop grei- Zustände bleiben für 50 µs bestehen,
fen und die Daten beobachten. Bevor woraus man auf die korrekte Übertra-
eine Verbindung zu einem zweiten gungsrate von 20 Kilobits pro Sekunde
System hergestellt wurde findet man schließen kann. Allerdings erkennt
auf den Datenleitungen bereits ein Sig- man einen nur durch kurze Pausen
Bild 3. Blockschaltbild
der CAN-Bus-Verbin-
dung mit den beiden in
BASIC programmierten
80C537-Systemen. von 2 ms unterbrochenen Endlos-
Datenstrom und nicht wie vermutet
kurze Datenpakete. Doch keine Sorge,
dies ist das normale Verhalten des
3
Controllers, solange er noch keinen
Kollegen am Bus entdeckt hat. Es
reicht aber nicht, den zweiten Control-
ler über eine Zweidrahtleitung anzu-
schließen, er muss auch initialisiert
werden. Die Dauersignale der Sende-
station zur Suche nach einem Buspart-
ner dauern übrigens auch dann an,
wenn das Basic-Programm abgebro-
chen wird.
D AS E MPFANGS-
PROGRAMM
Nun kommt das in Listing 2 angege-
bene Empfangsprogramm im zweiten
System zum Einsatz. Wie man dem
Listing entnehmen kann, unterschei-
Elektor 1/2000
68
(C) ELEKTOR
000020-1
H5
000020-1
D1
H7
det sich die Initialisierung nicht von
Sendeprogramm CAN1.BAS (Listing 1)
der des sendenden Systems. Sobald sie
abschlossen ist und man am Bild-
90 REM Init CAN Controller
schirm die Meldung Init OK erhalten
95 BA=0F000H
hat, nimmt auch der sendende Con-
100 XBY(BA+00H)=01H : REM Reset Mode
troller seinen normalen Betrieb auf. Ab
110 IF (XBY(BA+00H).AND.1)<>1 THEN GOTO 110
jetzt erscheinen tatsächlich kurze
111 PRINT Reset OK
Datenpakete mit einer Länge von
120 XBY(BA+1FH)=43H : REM CDR, 2 MHz
knapp über 5 ms auf dem Bus. Nun
130 XBY(BA+04H)=0 : REM ACR
endlich funktioniert der CAN-Bus so,
140 XBY(BA+05H)=0FFH : REM AMR, Acceptance Mask, all
wie es sich der interessierte Leser
150 XBY(BA+06H)=53H : REM BTR0, 20 Kbit/s*
immer vorgestellt hat: Datenpakete flit-
160 XBY(BA+07H)=2FH : REM BTR1
zen über den Bus, ohne Rücksicht dar-
170 XBY(BA+08H)=1AH : REM OCR;
auf, ob sie wirklich jemand liest.
180 XBY(BA+01H)=0EH : REM CMR, end sleep mode
Das eigentliche Empfangsprogramm
190 XBY(BA+00H)=0 : REM CR, end reset mode
ab Zeile 500 wartet auf eine empfan-
200 IF (XBY(BA+00H).AND.1)>0 THEN GOTO 200
gene Nachricht, die der Controller im
201 PRINT init ok
Bit Null des Statusregisters ankündigt.
500 REM ************* Main Loop ***************
Sobald ein Datensatz eingetroffen ist,
501 REM Send 8 Bytes of AD-Data in message 300
kann das Programm insgesamt zehn
510 FOR N=0 TO 7
520 XBY(BA+0CH+N)=AD(N) : REM fill TB1..TB8
530 NEXT N
540 ID=300 : REM Message Identifier
550 DFL=8 : REM 8 Bytes
560 GOSUB 1000 : REM Send Massage
570 FOR T=1 TO 1000 : NEXT T
580 GOTO 500
1000 REM ************* Send CAN Telegram *************
1010 IF (XBY(BA+02H).AND.4)=0 THEN GOTO 1010 : REM SR
1020 XBY(BA+0AH)=INT(ID/8) : REM IDT1
1030 XBY(BA+0BH)=(ID-8*INT(ID/8))*32+DFL : REM IDT2
1040 XBY(BA+01H)=0DH : REM CMR, start transmission
1050 RETURN
Empfangsprogramm CAN2.BAS (Listing 2)
90 REM Init CAN Controller
95 BA=0F000H
100 XBY(BA+00 H)=01H : REM Reset Mode
110 IF (XBY(BA+00H).AND.1)<>1 THEN GOTO 110
111 PRINT Reset OK
120 XBY(BA+1FH)=43H : REM CDR, 2 MHz
130 XBY(BA+04H)=0 : REM ACR
140 XBY(BA+05H)=0FFH : REM AMR, Acceptance Mask, all
150 XBY(BA+06H)=53H : REM BTR0, 20 Kbit/s*
160 XBY(BA+07H)=2FH : REM BTR1
170 XBY(BA+08H)=1AH : REM OCR;
Bytes aus dem Controller lesen. Die
180 XBY(BA+01H)=0EH : REM CMR, end sleep mode
ersten beiden enthalten die Message-
190 XBY(BA+00H)=0 : REM CR, end reset mode
ID. Sie wird in Zeile 570 aus zwei Bytes
200 IF (XBY(BA+00H).AND.1)>0 THEN GOTO 200
rekonstruiert und angezeigt. Wie
201 PRINT Init OK
erwartet erscheint hier die ID 300, die
500 REM ******* Receiver Main Loop *************
ja im Sendeprogramm willkürlich fest-
510 SR=XBY(BA+02H) : REM Status Register
gelegt wurde.
520 REM Error Detection and Clear Data Overrun
Die eigentlichen Nutzdaten werden in
530 if (SR .AND. 2) = 2 then XBY(BA+01H)=8: :Goto 510
einer Schleife gelesen und in Zeile 610
540 REM Get Receive Status
angezeigt. Hier erhält man also endlich
550 if (SR .AND. 1) =0 then goto 510
die Messwerte der acht analogen Ein-
560 REM Read received message
gänge des ersten Controllersystems.
570 ID=XBY(BA+14H)*8+INT(XBY(BA+15H)/32) : PRINT ID
Bild 4 zeigt die empfangenen Daten
580 DFL=XBY(BA+15H).AND.15 : rem Data Length
im Terminalfenster.
590 RTR=(XBY(0FE15H).AND.16)/16 : REM RTR not used
600 FOR N=0 To 7
610 PRINT N ,XBY(BA+16H+N)
Z UM S CHLUSS:
620 NEXT N
D REI AM B US
630 XBY(BA+01H)=0CH : REM Release Receive Buffer
Die bisherigen Ergebnisse hätte man
640 GOTO 510
auch mit einer einfachen RS232-
Schnittstelle erzielen können. Der
Elektor 1/2000
69
650 WRSFR 0E8H,PORT : REM Port 4 Output
Empfangs- und Sendeprogramm CAN3.BAS ohne Initiali-
660 XBY(BA+01H)=0CH : REM Release Receive Buffer
sierung (Listing 3)
800 REM ******** Send AD-Data ***********
810 FOR N=0 TO 7
500 REM ************ Main Loop ***************
820 XBY(BA+0CH+N)=AD(N) : REM fill TB1..TB8
505 REM ************ Receiver ****************
830 NEXT N
510 SR=XBY(BA+02H) : REM Status Register
840 ID=500 : REM Message Identifier
520 REM Error Detection and Clear Data Overrun
850 DFL=8 : REM 8 Bytes
530 IF (SR.AND.2)=2 THEN XBY(BA+01H)=8 : GOTO 510
860 GOSUB 1000 : REM Send Message
550 IF (SR.AND.1)=0 THEN GOTO 510
870 FOR T=1 TO 1000 : NEXT T
560 REM Read received message
880 GOTO 500
570 ID=XBY(BA+14H)*8+INT(XBY(BA+15H)/32): Print ID
1000 REM ******* Send CAN Telegram *************
580 DFL=XBY(BA+15H).AND.15 : REM Data Length
1010 IF (XBY(BA+02H).AND.4)=0 THEN GOTO 1010 : REM SR
590 RTR=(XBY(0FE15H).AND.16)/16 : REM RTR not used
1020 XBY(BA+0AH)=INT(ID/8) : REM IDT1
600 IF ID<>300 THEN GOTO 660
1030 XBY(BA+0BH)=(ID-8*INT(ID/8))*32+DFL : REM IDT2
610 PORT=0
1040 XBY(BA+01H)=0DH : REM CMR, Start Transmission
620 IF XBY(BA+16H+0)>100 THEN PORT=PORT+1
1050 RETURN
630 IF XBY(BA+16H+1)>100 THEN PORT=PORT+2
640 IF XBY(BA+16H+2)>100 THEN PORT=PORT+4
Bild 4. Die empfange-
nen Daten im Termi-
nalfenster von
BASIC537.
CAN-Bus entfaltet seine Qualitäten
aber erst bei mehr als zwei Teilneh-
mern. Damit also zwei Busteilnehmer
nicht zu einsam sind, soll hier ein drit-
ter hinzukommen. Das Programm
CAN3.BAS (Listing 3 - ohne Initialisie-
rung) führt folgende Funktionen aus:
Es empfängt alle Nachrichten, wertet
aber nur die Nachricht mit der ID 300
aus. Die ersten drei übertragenen Mess-
werte werden mit bestimmten Grenz-
werten verglichen und schalten drei
Leitungen am Port P4 ein, wenn der
jeweilige Grenzwert überschritten wird.
Im Anschluss an die Auswertung einer
empfangenen Nachricht wird zusätz-
lich eine Nachricht mit der ID 500
zurückgesandt, wobei wiederum alle
A/D-Kanäle gemessen und übertragen
werden. Sobald auch das dritte
System an den Bus gelegt wird, liefert
das System 2 auch die Daten mit der
ID 500 an das Terminal (siehe Bild 5).
(990066-4e)
Hinweis:
Die drei Listings aus diesem Beitrag wer-
den auf dem Elektor-Site (www.elektor.de)
zum Download bereitgestellt. Weitere Infor-
mationen zu BASIC 535/537 findet man
auf der Homepage des Autors:
http://home.t-online.de/home/B.Kainka
Das in Pascal erstellte betriebsprogramm
wird in der nächsten Ausgabe vorgestellt.
Bild 5. Empfang der
Nachrichten 300 und
500.
Elektor 1/2000
70
Wyszukiwarka
Podobne podstrony:
CAN Bus Drivers for Atmel C51 ProductsCAN Bus Interface fuer PCCAN BUS SpCAN BUS01 25 Can busDas TFH CAN Bus ExperimentalsystemStromlaufplan Passat 64 CAN Bus Vernetzung Antrieb ab 10 2000Stromlaufplan Passat 58 CAN Bus Vernetzung Komfort ab 10 2000function ncurses can change colorcan RENAULT CLIO III GRANDTOUR 08 XX PL 001Destiny´s Child Get on the Busmb bus allInstrukcja obsługi alarm Logic CAN LC 5 wyd 1 (2)can, can t, couldn t, could Quizwięcej podobnych podstron