6
PRAXIS MIKROCONTROLLER elektor - 9/2008 Lasz mich indessen hier Kabale und Liebe (Schiller) Relaisplatine mit Portexpander für Von Udo Jürß und Wolfgang Rudolph Seit jeher wollten die Menschen immer die Wirkung ihrer Taten sehen und sie auch anderen zeigen können. Bei uns Elektronikern drückt sich das oft darin aus, dass wir aus dem Computer „heraus“ eine Aktion sichtbar machen wollen. Heute sprechen wir allerdings mehr von Steuern und Regeln als über Schalten und Walten. Nachdem unser ATM18-Projekt mit dem Magnet-Schweberegler im letzten Heft richtig aktiv geworden ist, können wir jetzt mit einer Relaisplatine noch mehr Außenwirkung zeigen. Da sitzt man entspannt im Sessel und schaltet mit einer Fernbedienung al- les, was der Bequemlichkeit dient: Lampen, Radio, Ventilator, sonst noch Ideen? Um das zu ermöglichen, wer- den mehrere Relais benötigt. Acht Ver- braucher dürften in den meisten Fäl- len ausreichen. Deshalb wird hier eine Achtfach-Relaiskarte vorgestellt. Für acht Relais würde man acht Ports benötigen. Diese Verschwendung kommt für uns aber nicht in Frage. Be- reits bei dem LC-Display haben wir Ports gespart und auch hier soll es wieder sparsam zugehen. Daher wur- de auch eine passende Interfacepla- tine entwickelt, mit deren Hilfe der Mega88 zur Ansteuerung nur zwei Ports braucht. Zwei Ports müssen reichen Aber wie schaltet man acht Relais mit zwei Bits? Auch hier heißt die Lösung wieder seriell. Es werden also die Bits von der Testplatine nacheinander zu dem uns schon bekannten Schiebere- gister 4094 gereicht. Um die Schaltung zu verstehen, bleibt uns ein Blick ins Datenblatt des 4094 nicht erspart. Bild 1 zeigt das Innenschaltbild mit Clock Output Strobe Data Parallel Outputs Serial Outputs Enable Q1 Q N Q S (Note 1) QΣ 0 X X Hi-Z Hi-Z Q7 No Change 0 X X Hi-Z Hi-Z No Change Q7 1 0 X No Change No Change Q7 No Change 1 1 0 0 Q N 1 Q7 No Change 1 1 1 1 Q N 1 Q7 No Change 1 1 1 No Change No Change No Change Q7 Bild 1. Innenschaltbild des Schieberegister-ICs 4094. Q1 OUTPUT ENABLE Q1 (15) STROBE DATA CLOCK (1) (2) (3) (4) D CL Q2 D2 CL CL Q2 Q2 (5) D CL Q3 D3 CL CL Q1 D1 CL CL Q3 Q3 (6) D CL Q4 D4 CL CL Q4 Q4 (7) D CL Q5 D5 CL CL Q5 Q5 (14) D CL Q6 D6 CL CL Q6 Q6 (13) D CL Q7 D7 CL CL Q7 Q7 (12) D CL Q8 D8 CL CL Q8 Q S Q8 (11) (9) Q’ S (10) 080357 - 12 D CL Q D CL CL Bild 2. Die Wahrheitstabelle aus dem Datenblatt des 4094.

Kabale und Liebe (Schiller) Relaisplatine mit Portexpander ... · 9/2008 - elektor Lasz mich indessen hier schalten und walten! Kabale und Liebe (Schiller) Relaisplatine mit Portexpander

  • Upload
    doantu

  • View
    224

  • Download
    1

Embed Size (px)

Citation preview

praxis mikrocontroller

� elektor - 9/2008

Lasz mich indessen hier schalten und walten!Kabale und Liebe (Schiller)

Relaisplatine mit Portexpander für ATM18Von Udo Jürß und Wolfgang Rudolph

Seit jeher wollten die Menschen immer die Wirkung ihrer Taten sehen und sie auch anderen zeigen können. Bei uns Elektronikern drückt sich das oft darin aus, dass wir aus dem Computer „heraus“ eine Aktion sichtbar machen wollen. Heute sprechen wir allerdings mehr von Steuern und Regeln als über Schalten und Walten.Nachdem unser ATM18-Projekt mit dem Magnet-Schweberegler im letzten Heft richtig aktiv geworden ist, können wir jetzt mit einer Relaisplatine noch mehr Außenwirkung zeigen.

Da sitzt man entspannt im Sessel und schaltet mit einer Fernbedienung al-les, was der Bequemlichkeit dient: Lampen, Radio, Ventilator, sonst noch Ideen? Um das zu ermöglichen, wer-den mehrere Relais benötigt. Acht Ver-braucher dürften in den meisten Fäl-len ausreichen. Deshalb wird hier eine Achtfach-Relaiskarte vorgestellt.Für acht Relais würde man acht Ports benötigen. Diese Verschwendung kommt für uns aber nicht in Frage. Be-reits bei dem LC-Display haben wir Ports gespart und auch hier soll es wieder sparsam zugehen. Daher wur-de auch eine passende Interfacepla-tine entwickelt, mit deren Hilfe der Mega88 zur Ansteuerung nur zwei Ports braucht.

Zwei Ports müssen reichenAber wie schaltet man acht Relais mit zwei Bits? Auch hier heißt die Lösung wieder seriell. Es werden also die Bits von der Testplatine nacheinander zu dem uns schon bekannten Schiebere-gister 4094 gereicht. Um die Schaltung zu verstehen, bleibt uns ein Blick ins Datenblatt des 4094 nicht erspart.

Bild 1 zeigt das Innenschaltbild mit

Clock Output Strobe Data Parallel Outputs Serial Outputs

Enable Q1 QN QS(Note 1)

Q′Σ

0 X X Hi-Z Hi-Z Q7 No Change0 X X Hi-Z Hi-Z No Change Q71 0 X No Change No Change Q7 No Change1 1 0 0 QN−1 Q7 No Change1 1 1 1 QN−1 Q7 No Change1 1 1 No Change No Change No Change Q7

Bild 1. Innenschaltbild des Schieberegister-ICs 4094.

Q1

OUTPUTENABLE

Q1

(15)

STROBE

DATA

CLOCK

(1)

(2)

(3)

(4)

DCL

Q2D2

CLCL

Q2

Q2

(5)

DCL

Q3D3

CLCL

Q1D1

CLCL

Q3

Q3

(6)

DCL

Q4D4

CLCL

Q4

Q4

(7)

DCL

Q5D5

CLCL

Q5

Q5

(14)

DCL

Q6D6

CLCL

Q6

Q6

(13)

DCL

Q7D7

CLCL

Q7

Q7

(12)

DCL

Q8D8

CLCL

Q8

QS

Q8

(11)

(9)

Q’S(10)

080357 - 12

DCL

QD

CLCL

Bild 2. Die Wahrheitstabelle aus dem Datenblatt des 4094.

�9/2008 - elektor

Lasz mich indessen hier schalten und walten!Kabale und Liebe (Schiller)

Relaisplatine mit Portexpander für ATM18

acht Flipflops und zusätzlich acht Aus-gangslatches. Am Ausgang Qs (Pin 9) fallen die Bits nach dem achten Takt am Clock-Eingang (Pin 3) ins Nirwa-na. Man könnte hier den DATA-Ein-gang eines weiteren Schieberegisters anschließen und die Bits weiter ver-arbeiten. Eine besondere Rolle spielt aber der Ausgang Q’s (Pin 10). Hier er-scheint zwar ebenfalls das Signal von Q8, aber erst mit der fallenden Flanke des Clocksignals. Damit wird quasi ein neuntes Bit gespeichert. Die Wahrheits-tabelle im Datenblatt (Bild 2) zeigt es deutlich: Erst bei der fallenden Clock-flanke übernimmt Q’s den Zustand von Q7 (= Q8 im Blockschaltbild).Diese Porterweiterung ist eine kleine, eigenständige Platine die auch ohne nachgeschaltete Relaisplatine funkti-oniert. Aber nachdem nun das Schie-beregister erklärt ist, müssen wir noch über die genaue Funktionsweise der Schaltung (Bild 3) sprechen, da wir

K2

ULN2803

IC2

GND

COM 11

12

13

14

15

16

17

18I1

I2

I3

I4

I5

I6

I7

I8

O1

O2

O3

O4

O5

O6

O7

O8

10

1

2

3

6

7

8

4

5

9

K3

K1

C1

100n

IC1

4094

STR

CLK

VSS

VDD

11

12

13

14

Q1

Q2

Q3

Q4

Q5

Q6

Q7

Q8

15OE

QS10

QS

16

2

1

3

7

6

5

4

D

9

8

R1

4k7

D1

BAS40-6

DATA

CLK

+5V

2

3

4

5

6

7

8

9

10

1

2

3

4

5

6

7

8

1

2

3

4

1

+5V

GND

080357 13

Bild 3. Die Schaltung des Portexpanders mit dem Schieberegister 4094 und dem Leistungstreiber ULN2803.

praxis mikrocontroller

� elektor - 9/2008

mit zwei Bits drei Eingänge bedienen wollen. Der Ausgang Q’s wird verwen-det, um das Strobe-Signal zu verrie-geln. Nur wenn Q’s UND DATA UND

einfachen Si-Dioden wird nämlich nicht die nötige Störsicherheit erreicht.

Nun ergibt sich zwingend folgender Programmablauf für die Übertragung aller acht Bits:

1. Es werden acht Null-Bits in das Schieberegister geladen. Dazu setzt man DATA low und erzeugt acht Clock-Impulse. Die Bits werden je-weils mit der steigenden Flanke übernommen. Nun sind alle internen Q-Ausgänge low. Die Ausgangs-pins ändern sich aber noch nicht, weil Data = 0 den Strobe-Impuls blockiert.

2. Nun schiebt man ein High-Bit in den 4094. Es wird nach acht Takten an Q’s erscheinen.

3. Danach überträgt man sieben Da-tenbits mit dem jeweils gewollten Pegel (High/Low – Relais an/aus) an DATA und jeweils einem CLOCK-Im-puls. Die Daten werden mit der po-sitiven Clock-Flanke übernommen.

4. Am Ende wird das achte Bit auf eine besondere Art übertragen. Zuerst setzt man Data entsprechend dem gewünschten Wert. Diesmal folgt aber kein vollständiger Clock-Im-puls, sondern man setzt Clock zu-nächst einmal nur hoch. Damit wer-den alle Bits in die endgültige Po-sition geschoben. Q’s enthält aber noch den Zustand vom Bit davor, das also neun Taktimpulse vorher auf Eins gesetzt wurde. Nun setzt man auch noch Data high, falls die Leitung nicht schon vom letzten Bit gesetzt war. Auf diese Art und Weise wird über die Dioden-Wider-standsverknüpfung der Strobe-Im-puls erzeugt. Die acht Bits werden an die Ausgänge durchgeschaltet. Erst danach darf man DATA und CLOCK wieder wegnehmen, egal in welcher Reihenfolge.

Das Verfahren ist schnell und sicher und spart einen zusätzlichen Port.

Die RelaisplatineDie Schaltung der Relaisplatine (Bild 4) ist trivial. Eine Buchse für die Strom-versorgung und eine Diode als Verpol-ungsschutz sowie eine LED zur An-zeige der Betriebsspannung sind ob-ligatorisch. Dann haben wir noch eine zehnpolige Stiftleiste für die Eingangs-signale. Wenn wir auf die Porterwei-

CLOCK High sind, wird das Strobe-Si-gnal erzeugt. Die UND-Schaltung mit drei Eingängen verwendet eine dop-pelte Schottky-Diode BAS 40-6. Mit

JP11

RE1

G5LE

D2

1N4148

LED1

R14k

7K3

1

3

2

RE2

G5LE

D3

1N4148

LED2

R2

4k7

K4

1

3

2

RE3

G5LE

D4

1N4148

LED3

R3

4k7

K5

1

3

2

RE4

G5LE

D5

1N4148

LED4

R4

4k7

K6

1

3

2

RE5

G5LE

D6

1N4148

LED5

R5

4k7

K7

1

3

2

RE6

G5LE

D7

1N4148

LED6

R6

4k7

K8

1

3

2

RE7

G5LE

D8

1N4148

LED7

R7

4k7

K9

1

3

2

RE8

G5LE

D9

1N4148

LED8

R8

4k7

K10

1

3

2

LED9

R94k

7

C1

220µ16V

D1

1N4004K112V

2

3

4

5

6

7

8

9

10

080357 - 14

Bild 4. Schaltplan der Relaisplatine.

�9/2008 - elektor

terungsplatine (Bild 5) eine Buchsen-leiste löten, kann die Porterweiterung huckepack auf die Relaisplatine (Bild 6) gesteckt werden.

Natürlich kann man die Relaisplatine auch ohne die Porterweiterungsplati-ne betreiben, wenn man vom ATM18-Testboard Leitungen direkt von den Ausgängen des ULN2003 (K6 der Test-board-Platine) heranführt und die ULN-Eingänge (an K7 der Testboard-Plati-ne) direkt mit den Pins der Prozessor-ports verbindet. Das ist aber nicht so elegant wie unsere 2-Draht-Lösung!Paralleldioden (so genannte Freilaufdi-oden) an den Relaisspulen gehören im-mer dazu, um die hohen Spannungen kurzzuschließen, die durch Selbstin-duktion entstehen, wenn das Relais abgeschaltet wird. Ebenso ist eine LED mit ihrem Vorwiderstand hilfreich, um erkennen zu können, welchen Schalt-zustand das Relais hat.

Mit den verwendeten Relais kann man bis zu 5 A schalten, auch die Lei-terbahnen halten dies aus. Theore-

Bild 5. Die Platine der Porterweiterung.

StücklisteATM18-Porterweiterungs-Platine080��7-�

Passive Bauteile:R1 = 4k7 (SMD-Widerstand 0805)C1 = 100 n (SMD-Kondensator 0805)

Halbleiter:D1 = BAS40-1 (SMD)IC1 = 4094 (SMD SO16)IC2 = ULN2803 (DIL16)

Außerdem:K1 = 4-polige StiftleisteK2 = 8-polige StiftleisteK3 = 10-polige StiftleistePlatine ohne Bauteile 071035-5 (erhält-

lich via www.elektor.de)Mit SMD-Bauteilen bestückte Platine

071035-95 (siehe Elektor-Shop-Anzei-ge und www.elektor.de)

praxis mikrocontroller

� elektor - 9/2008

tisch könnte man auch Netzspannung (230 V) schalten - die Leiterbahnab-stände sind dafür ausreichend - aber dies sollte einem echten Homo electri-cus (oder Homo rudolfensis!) vorbehal-ten bleiben. Dann müsste die Platine

bildung dazu berechtigt.Da die Porterweiterung SMD-ICs ver-wendet, ist die Platine bereits bestückt erhältlich. Für die Relaisplatine mit ih-ren leicht zu lötenden (Groß-)Bauteilen wird hingegen ein Bausatz mit Bautei-len und Platine angeboten.

C-SoftwareWie immer gibt es ein C-Beispielpro-gramm zum Download auf der Elektor-Homepage. Das Projekt ATM18-RC5_Relais verwendet die Relaisplatine für eine komfortable Steuerung aller acht Ausgänge über eine RC5-Fernbedie-nung. Die Entscheidung, welche bei-den Portbits für die Steuerung des Por-texpanders verwendet werden, hängt davon ab, welche anderen Hardwa-refunktionen benötigt werden. Das C-Programm ist für eine Anwendung mit angeschlossenem 2-Draht-LCD ge-schrieben. Das Display zeigt dann den jeweiligen Schaltzustand an. Es belegt die Ports PB1 und PB2 (siehe Elektor 5/08). Der RC5-Empfänger liegt an PB0 (siehe Elektor 6/08). Für die Porterwei-terung wurden nun die Anschlüsse PD5 (Clock) und PD6 (Data) gewählt. Bei Bedarf lassen sich die Pins leicht anders zuweisen. In main.c (Listing 1) steht alles, was man benötigt, um das Projekt erfolgreich einzusetzen.

Wichtig ist, dass die verwendete Fern-bedienung den Gerätecode 0 (Video-recorder) verwendet. Dann kann man

in ein Gehäuse, es dürften nur Geräte geschaltet werden, die einen entspre-chenden Berührungsschutz haben (da mit den Relais nur einpolig abgeschal-tet wird) und so weiter. Also Finger weg von 230 V, wenn keine Fachaus-

Bild 6. Bestückungsplan der Relaisplatine.

StücklisteATM18-Relais-Platine080��7-�

Widerstände:R1..R9 = 4k7

Kondensatoren:C1 = 220 µ/16 V

Halbleiter:D1 = 1N4004D2..D9 = 1N4148LED1...LED9 = LED 3mm

Außerdem:JP1 = 10-polige BuchsenleisteK1 = Netzgerätebuchse für

Platinenmontage K3…K10 = 3-polige Platinenanschluss-

klemme, RM 5 mmRe1..Re8 = Relais Omron G5LEPlatine ohne Bauteile 071035-6 (erhält-

lich via www.elektor.de)Bauteilsatz (Platine mit allen Bauteilen)

071035-72

Listing 1Auszug aus main.c

RC-5 button assignment: 1..8: Switch corresponding relais on/off 0 : Switch off all relais 9 : Switch on all relais

Testboard wiring for ATM18_LCD application

COMPONENT ATM18-PIN*** LCD 2-wire interfaceCLOCK PB1 (can be changed in „application.h“)DATA PB2 (can be changed in „application.h“)

*** Port Expander 2-wire interfaceCLOCK PD5 (can be changed in „application.h“)DATA PD6 (can be changed in „application.h“)

*** IR receiver *** Receiver supply +- K4 (watch out for proper polarity!) Receiver output PB0_ICP1

79/2008 - elektor

mit den Tasten 1 bis 8 völlig unabhän-gig voneinander jedes einzelne Relais ein- und ausschalten. Mit der Taste 0 werden alle Ausgaben gelöscht. Das ist sozusagen die Feierabend-Taste: Alles aus!

BASCOM-BeispielFür den Einsteiger ist vielleicht das BASCOM-Beispielprogramm PortEx-pander1.bas leichter zu durchschauen. Es verwendet die gleiche Pinbelegung für den Portexpander, verzichtet aber auf das LCD. Stattdessen werden zu Testzwecken Daten über die serielle Schnittstelle ausgegeben. Man sieht so, welche Daten die RC5-Fernbedie-

nung sendet.Das Listing zeigt die Datenübertra-gung zum Schieberegister in der Proze-dur Sub Pe_write_byte. Port D6 ist der Data-Ausgang, D5 liefert das Clock-Si-gnal. Das Hauptprogramm liest Daten vom RC5-Empfänger und verwendet sie genau wie das C-Projekt. Mit den Tasten 1 bis 8 schaltet man also die einzelnen Relais um, während die Tas-te 0 alles löscht.

Erfahrungen mit Infrarotfernbedie-nungen haben gezeigt, dass die größ-te Schwierigkeit eigentlich nur dar-in besteht, die passende Fernbedie-nung zu finden. Wenn man eine mit RC5-Signalen gefunden hat, kann es

eine mit der falschen Geräteadresse sein. Das Basic-Programm lässt daher mit voller Absicht alle Geräteadres-sen zu. Es spielt also keine Rolle, ob die Fernbedienung zu einem Videore-corder, einem Fernseher oder einem ganz anderen Gerät gehört. Über die serielle Schnittstelle werden jeweils die Gräteadresse und das Komman-dobyte ausgegeben. Das hilft bei der Fehlersuche.

(080357e)

Listing �Das Programm Portexpander1.bas

‘ATM18 Portexpander, Relais, RC5‘Clock = PD5, Data = PD6

$regfile = “m88def.dat”$crystal = 16000000Baud = 9600

Dim Address As Byte , Command As ByteDim Mask As ByteDim N As ByteDim State As ByteDim Relais As ByteDim Ctrl As Byte , Ctrl_old As Byte

Pe_clock Alias Portd.5Pe_data Alias Portd.6Config Portd = &B01100000Config Rc5 = Pinb.0Declare Sub Pe_write_byte(d As Byte)Enable Interrupts

Print “Portexpander”Relais = 0Pe_write_byte Relais

Do Getrc5(address , Command) If Address < 255 Then Ctrl = Command And &B10000000 If Ctrl <> Ctrl_old Then Print Address Print Command Command = Command And &B01111111 If Command = 1 Then Toggle Relais.0 If Command = 2 Then Toggle Relais.1 If Command = 3 Then Toggle Relais.2 If Command = 4 Then Toggle Relais.3 If Command = 5 Then Toggle Relais.4 If Command = 6 Then Toggle Relais.5 If Command = 7 Then Toggle Relais.6 If Command = 8 Then Toggle Relais.7 If Command = 0 Then Relais = 0 Pe_write_byte Relais End If Ctrl_old = Ctrl

End IfLoop

Sub Pe_write_byte(d As Byte) ‘Write Byte To Port Expander Mask = 1 Pe_clock = 0 ‘Clear data signal Pe_data = 0 ‘Clear all stages of shift register For N = 1 To 8 Pe_clock = 1 Waitus 5 Pe_clock = 0 Next N ‘Set High Level For Qs Pe_data = 1 ‘Cock in QS Pe_clock = 1 Waitus 5 Pe_clock = 0 ‘Do this for 7 databits For N = 1 To 7 State = D And Mask If State = 0 Then Pe_data = 0 Else Pe_data = 1 End If Pe_clock = 1 ‘Clock in data with rising edge Waitus 5 Pe_clock = 0 Shift Mask , Left Next N ‘last bit Pe_data = 0 State = D And Mask State = State / Mask If State = 1 Then Pe_data = 1 ‘Set Strobe Pe_clock = 1 ‘Clock in data Pe_data = 1 Waitus 5 Pe_data = 0 Pe_clock = 0End SubEnd