CAN Bus Praxis

background image

Elektor

1/2000

Das in Elektor 11/99 vorgestellte CAN-
Bus-Interface kann problemlos in
BASIC537 angesteuert werden.
BASIC537 ist eine an den 80C537 ange-
passte und erweiterte EPROM-Version
des bekannten Intel-MCS51-BASICs,
das vielen Elektor-Lesern bereits ver-
traut sein dürfte. Dieser BASIC-Inter-
preter war ursprünglich für den
(inzwischen nicht mehr gefertigten)
BASIC-Mikrocontroller 8052AH-BASIC
entwickelt worden und eignet sich in
Verbindung mit einem externen ROM
auch für andere Controller der 80xx-
Familie (siehe auch 80C32-BASIC-Steu-
ercomputer, Elektor 2 und 3/98). In der
nächsten Ausgabe wird auf die neuen
BASIC-Varianten für die Mikrocontrol-

ler 80C535 und 80C537 noch ausführli-
cher eingegangen. Ein EPC (Ein-Plati-
nen-Computer) mit dem Mikrocon-
troller 80C537 wurde unter der
Bezeichnung “80C537-Compuboard”
bereits in Elektor 6/97 veröffentlicht.
Für die praktische Anwendung in Ver-
bindung mit dem CAN-Bus-Interface
wird hier aber das neue, wesentlich
kompaktere und kostengünstigere 537-
Lite-Board verwendet, das ebenfalls in
dieser Ausgabe (und auch auf dem
Titelbild) zu finden ist.

H

A R D W A R E

Für die einfache Verbindung zwischen
der mit dem BASIC537—EPROM
bestückten 537-Lite-Platine und der

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.

66

Von Burkhard Kainka

CAN-Bus-Praxis

mit BASIC537

MIKROPROZESSOREN

background image

CAN-Interface-Platine wurde eine
Adapterplatine entwickelt. Bild 1 zeigt
den Schaltplan dieses Adapters, Layout
und Bestückungsplan sind in Bild 2 zu
sehen. Wie auf dem Foto zu sehen ist,
lässt sich das 537-Board direkt auf die
Adapterplatine aufstecken, so dass die
Verdrahtung keinerlei Probleme berei-
tet. Die Verbindung zum CAN-Inter-
face-Board erfolgt dann einfach über
ein Flachbandkabel (siehe Foto am
Artikelanfang).
Um das leidige Problem der Stromver-
sorgung ebenfalls einfach zu lösen,
wurde auf der Adapterplatine auch ein
5-V-Spannungsregler mit Verpol-
schutzdiode am Eingang unterge-
bracht, so dass die Adapterplatine die
beiden anderen Platinen mit +5 V ver-
sorgt. An K2 braucht man dafür nur
ein Steckernetzteil von der preiswerten
Sorte (300 mA ist mehr als ausrei-
chend) anzuschließen, das eine unsta-
bilisierte Gleichspannung von 9-12 V
zur Verfügung stellt. Wenn man schon
stabilisierte 5 V zur Verfügung hat,
kann man IC1, D1, C1 und C2 auf der
Adapterplatine auch weglassen und
die 5-V-Betriebsspannung an die Klem-
men von K1 auf der Adapterplatine
anschließen.
Aus Kostengründen hat die Adapter-
platine wesentlich klei-
nere Abmessungen als
das (aufzusteckende)
537-Board. Wenn man
die Adapterplatine ent-
lang der im Aufdruck
angegebenen Linie in
zwei Teile trennt und
diese im richtigen Abstand auf einer
Trägerplatte (z.B. Alublech) montiert,
lässt sich die 537-Platine einfach auf
diesen Untersatz aufstecken. Lediglich
die Interruptleitung INT2\ ist bei
Bedarf mit einem Stück Schaltdraht
von Pin 12 (K3) nach Pin 32 (K6)
durchzuverbinden (siehe Foto des 537-
Boards mit den beiden demontierten
Teilen der Adapterplatine). Auf den
beiden Teilen der Adapterplatine sind
dafür Anschlusspunkte vorgesehen, im
Bestückungsplan (siehe Bild 2) ist diese
Verbindung als Drahtbrücke einge-
zeichnet.

A

N S T E U E R U N G I N

B A S I C

Zur Ansteuerung der CAN-Interface-
Platine genügt ein Programm, das sich
eigentlich nur um eine Reihe von Regi-
stern im CAN-Controller SJ1000 küm-
mern muss, die in den Adressbereich
ab F000h eingeblendet sind. Für alle
Zugriffe auf Adressen im Bereich des
externen RAMs und der Peripherie
dient in BASIC537 der XBY-Operator.
Damit die Orientierung leicht fällt, soll
hier zunächst ein ganz einfacher Fall
mit einer Datenverbindung zwischen
zwei 80C537-Systemen beschrieben
werden. Die wesentlichen Einstellun-

gen werden durch
das Programm fest
vorgegeben. Die
Übertragung erfolgt
mit 20 kBit/s. Nach-

richten werden ohne RTR-Bit gesen-
det, das heißt, es wird keine Rückant-
wort angefordert. Die beiden Systeme
sollen folgende Aufgaben erfüllen:
System 1 sendet regelmäßig Nachrich-
ten mit dem Identifier 300, in denen
acht Bytes verschickt werden. Die
Daten stammen von den ersten acht
Kanälen des A/D-Wandlers. Es werden
also laufend Messungen an acht ana-
logen Eingangsleitungen durchge-
führt. Jedes andere System am Bus
kann die Nachricht empfangen und
auswerten.
System 2 empfängt alle Nachrichten
auf dem Bus und gibt sie über die
RS232-Schnittstelle an den PC weiter.
Man hat hier zugleich einen einfachen
CAN-Monitor, mit dem man sich den
gesamten Datenverkehr ansehen
kann.
Bild 3 zeigt diese Anordnung im
Blockschaltbild. Für die Verbindung
zwischen den beiden Systemen
benötigt man kein spezielles Kabel. Bei
den ersten Versuchen auf dem Labor-
tisch, das heißt, bei einer Leitungslänge
kleiner 1 m, reicht auch ein einfaches
zweiadriges Kabel, das die Anschlüsse
4 und 8 der CAN-Stecker Eins zu Eins
verbindet. Es macht bei so kurzen
Kabeln auch keinen Unterschied, ob

die Abschlusswiderstände angeschlos-
sen sind oder nicht.

S

E N D E P R O G R A M M

U N D

T

E S T

In Listing 1 ist das Sendeprogramm für
den Controller 1 angegeben. Der CAN-
Controller SJA1000 wird vom 80537-
System unter der Basisadresse 0F000H
angesprochen. Zeile 95 legt den
Adressbereich fest (BA=0F000h). In
einem anderen System braucht
zunächst nur BA geändert zu werden.
Die Initialisierung erfolgt wie im vor-
hergehenden Beitrag zur CAN-Hard-
ware beschrieben. In den Zeilen 110
und 200 wird der Erfolg der Register-
programmierung abgefragt. Das Pro-
gramm wartet hier jeweils auf ganz
bestimmte Zustände eines Registerbits.
Falls der Controller nicht am Bus
gefunden wird oder nicht korrekt
funktioniert, bleibt das Programm hier
hängen. Im Erfolgsfall erhält man
dagegen die folgende Meldung:

Reset OK
Init OK

Es genügt zunächst, die Initialisierung
bis Zeile 200 auszuführen. Eine erste
Erfolgskontrolle bringt eine Untersu-
chung des Rechtecksignals am Testpin
der Controllerplatine. Während hier
vor der Initialisierung eine Frequenz
von 8 MHz beobachtet wird, findet

67

Elektor

1/2000

K2

K1

IC1

7805

C2

100n

C4

100n

C1

10µ
16V

C3

10µ
16V

D1

1N4001

+5V

+9V

5V

K4

K3

10

11

12

13

14

15

16

1

2

3

4

5

6

7

8

9

990066 - 4 - 14

K6

K5

D0

D1

D2

D3

D4

D5

D6

D7

A7

A6

A5

A4

A3

A2

A1

A0

A15

A14

A13

A12

A11

A10

A9

A8

PFI

PFO

RESET

RESET

ALE

PSEN

WR

RD

CS0

CS1

CS2

P50

P51

P52

P53

P54

P55

P56

P57

P60

P64

P63

P65

P66

P67

P40

P41

P42

P43

P44

P45

P46

P47

INT4

INT3

INT6

INT5

INT2

T2EX

CLKO

T2

T1

T0

INT1

INT0

VAREFF

VBATT

VOUT

5V

5V

WR

RD

CS2

RESET

ALE

INT2

1

Bild 1. Schaltbild der
Adapterplatine für die
einfache Verbindung
zwischen 537-Lite-Board
und CAN-Bus-Interface.

background image

man nun 2 MHz. Wenn das so stimmt,
kann man einigermaßen sicher sein,
dass der Controller korrekt angesteu-
ert wird.
Nun kann das komplette Programm
geladen und gestartet werden. Der
erfahrene Elektroniker wird nun
natürlich gleich zum Oszilloskop grei-
fen und die Daten beobachten. Bevor
eine Verbindung zu einem zweiten
System hergestellt wurde findet man
auf den Datenleitungen bereits ein Sig-

nal. Nach einem Hardware-Reset und
ohne eine Initialisierung misst man auf
beiden Leitungen Ruhepegel von ca.
2,5 V. Sobald das Sendeprogramm
gestartet wird, erkennt man Daten in
Form von Rechtecksignalen mit einer
Amplitude von 1 V. Die kürzesten
Zustände bleiben für 50 µs bestehen,
woraus man auf die korrekte Übertra-
gungsrate von 20 Kilobits pro Sekunde
schließen kann. Allerdings erkennt
man einen nur durch kurze Pausen

von 2 ms unterbrochenen Endlos-
Datenstrom und nicht wie vermutet
kurze Datenpakete. Doch keine Sorge,
dies ist das normale Verhalten des
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

A S

E

M P F A N G S

-

P R O G R A M M
Nun kommt das in Listing 2 angege-
bene Empfangsprogramm im zweiten
System zum Einsatz. Wie man dem
Listing entnehmen kann, unterschei-

68

Elektor

1/2000

(C) ELEKTOR

000020-1

C1

C2

C3

C4

D1

H5

H6

H7

H8

IC1

K1

K2

K3

K4

K5

K6

000020-1

(C) ELEKTOR

000020-1

Stückliste

Kondensatoren:
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-

polig

K4 = Stiftleiste, einreihig, gerade, 4-

polig

K5, K6 = Stiftleiste, einreihig, gerade,

35-polig

Bild 2. Layout und
Bestückungsplan der
Adapterplatine.

Bild 3. Blockschaltbild
der CAN-Bus-Verbin-
dung mit den beiden in
BASIC programmierten
80C537-Systemen.

3

background image

69

Elektor

1/2000

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;

180 XBY(BA+01H)=0EH : REM CMR, end sleep mode

190 XBY(BA+00H)=0 : REM CR, end reset mode

200 IF (XBY(BA+00H).AND.1)>0 THEN GOTO 200

201 PRINT ”Init OK”

500 REM ******* Receiver Main Loop *************

510 SR=XBY(BA+02H) : REM Status Register

520 REM Error Detection and Clear Data Overrun

530 if (SR .AND. 2) = 2 then XBY(BA+01H)=8: :Goto 510

540 REM Get Receive Status

550 if (SR .AND. 1) =0 then goto 510

560 REM Read received message

570 ID=XBY(BA+14H)*8+INT(XBY(BA+15H)/32) : PRINT ID

580 DFL=XBY(BA+15H).AND.15 : rem Data Length

590 RTR=(XBY(0FE15H).AND.16)/16 : REM RTR not used

600 FOR N=0 To 7

610 PRINT N ,XBY(BA+16H+N)

620 NEXT N

630 XBY(BA+01H)=0CH : REM Release Receive Buffer

640 GOTO 510

det sich die Initialisierung nicht von
der des sendenden Systems. Sobald sie
abschlossen ist und man am Bild-
schirm die Meldung ”Init OK” erhalten
hat, nimmt auch der sendende Con-
troller seinen normalen Betrieb auf. Ab
jetzt erscheinen tatsächlich kurze
Datenpakete mit einer Länge von
knapp über 5 ms auf dem Bus. Nun
endlich funktioniert der CAN-Bus so,
wie es sich der interessierte Leser
immer vorgestellt hat: Datenpakete flit-
zen über den Bus, ohne Rücksicht dar-
auf, ob sie wirklich jemand liest.
Das eigentliche Empfangsprogramm
ab Zeile 500 wartet auf eine empfan-
gene Nachricht, die der Controller im
Bit Null des Statusregisters ankündigt.
Sobald ein Datensatz eingetroffen ist,
kann das Programm insgesamt zehn

Bytes aus dem Controller lesen. Die
ersten beiden enthalten die Message-
ID. Sie wird in Zeile 570 aus zwei Bytes
rekonstruiert und angezeigt. Wie
erwartet erscheint hier die ID 300, die
ja im Sendeprogramm willkürlich fest-
gelegt wurde.
Die eigentlichen Nutzdaten werden in
einer Schleife gelesen und in Zeile 610
angezeigt. Hier erhält man also endlich
die Messwerte der acht analogen Ein-
gänge des ersten Controllersystems.
Bild 4 zeigt die empfangenen Daten
im Terminalfenster.

Z

U M

S

C H L U S S

:

D

R E I A M

B

U S

Die bisherigen Ergebnisse hätte man
auch mit einer einfachen RS232-
Schnittstelle erzielen können. Der

Sendeprogramm CAN1.BAS (Listing 1)

90 REM Init CAN Controller

95 BA=0F000H

100 XBY(BA+00H)=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;

180 XBY(BA+01H)=0EH : REM CMR, end sleep mode

190 XBY(BA+00H)=0 : REM CR, end reset mode

200 IF (XBY(BA+00H).AND.1)>0 THEN GOTO 200

201 PRINT ”init ok”

500 REM ************* Main Loop ***************

501 REM Send 8 Bytes of AD-Data in message 300

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

background image

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.

70

Elektor

1/2000

Empfangs- und Sendeprogramm CAN3.BAS ohne Initiali-
sierung (Listing 3)

500 REM ************ Main Loop ***************

505 REM ************ Receiver ****************

510 SR=XBY(BA+02H) : REM Status Register

520 REM Error Detection and Clear Data Overrun

530 IF (SR.AND.2)=2 THEN XBY(BA+01H)=8 : GOTO 510

550 IF (SR.AND.1)=0 THEN GOTO 510

560 REM Read received message

570 ID=XBY(BA+14H)*8+INT(XBY(BA+15H)/32): Print ID

580 DFL=XBY(BA+15H).AND.15 : REM Data Length

590 RTR=(XBY(0FE15H).AND.16)/16 : REM RTR not used

600 IF ID<>300 THEN GOTO 660

610 PORT=0

620 IF XBY(BA+16H+0)>100 THEN PORT=PORT+1

630 IF XBY(BA+16H+1)>100 THEN PORT=PORT+2

640 IF XBY(BA+16H+2)>100 THEN PORT=PORT+4

650 WRSFR 0E8H,PORT : REM Port 4 Output

660 XBY(BA+01H)=0CH : REM Release Receive Buffer

800 REM ******** Send AD-Data ***********

810 FOR N=0 TO 7

820 XBY(BA+0CH+N)=AD(N) : REM fill TB1..TB8

830 NEXT N

840 ID=500 : REM Message Identifier

850 DFL=8 : REM 8 Bytes

860 GOSUB 1000 : REM Send Message

870 FOR T=1 TO 1000 : NEXT T

880 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

Bild 4. Die empfange-
nen Daten im Termi-
nalfenster von
BASIC537.

Bild 5. Empfang der
Nachrichten 300 und
500.


Wyszukiwarka

Podobne podstrony:
Das TFH CAN Bus Experimentalsystem
Adaptacja sieci CAN BUS do zast Nieznany (2)
CAN BUS Sp
CAN Bus Drivers for Atmel C51 Products
CAN Bus Interface fuer PC
CAN BUS
Der CAN Bus (2)
Can Bus Komfort, Antrieb, Diagnose
CAN bus
Der CAN Bus (3)
Audi A4 CAN bus wires 2002
ford km tool can bus user manual carsets co uk
579393d1434286492 any interest e60 can bus code hacking 10 e60 voltage supply bus systems
CAN Bus English
SSP 024 ru Мультиплексная Шина CAN BUS

więcej podobnych podstron