Wäre
es nicht nützlich, wenn sich mit einem Attiny13 ein gesteuertes
Zweikanal-Netzgerät aufbauen ließe, dessen Ausgangsspannungen durch
Tasten eingestellt werden können? Ich hatte beim Schmökern in einem
Fachbuch von Burkhard Kainka [1] u. a. auch ein durch einen
Mikrocontroller gesteuertes Zweikanal-Netzgerät gefunden, das ich
aufbauen und mit dem Attiny13 betreiben wollte.
Dieser
besitzt zwei unabhängige PWM-Ausgänge PWMA (PB0) und PWMB (PB1), die
für ein gesteuertes Zweikanal-Netzgerät geeignet sind. Es verblieben mir
für mein Projekt also noch drei frei verwendbare Portanschlüsse. Diese
reichten allerdings für eine unabhängige Steuerung der beiden
PWM-Ausgänge über Tasten nicht aus, also musste ich nach einer anderen
Lösung suchen.
Beim Lesen in den Datenblättern
des Attiny13 war mir aufgefallen, dass sich Anschluss 1 (RESET) auch als
AD-Wandler-Eingang ADC0 nutzen lässt. Wenn sich dort, ähnlich wie es in
dem o. a. Fachbuch von B. Kainka [1] an anderer Stelle beschrieben ist,
eine Spannungsteilerschaltung mit Tasten anschließen ließe, wäre das
Problem mit den wenigen Portleitungen gelöst! Ich könnte dann die drei
freien Portanschlüsse für andere Aufgaben verwenden.
Im Handbuch zum Lernpaket Mikrocontroller [2] sind u. a. auch Programmlistings zur Verwendung der AD-Wandler-Eingänge des Attiny13 in Assembler und auch in BASCOM-AVR [3] abgedruckt. Es werden in den genannten Beispielprogrammen die Eingänge ADC3 und ADC2 genutzt, da die anderen Anschlüsse des Mikrocontrollers von ATMEL [4] auf der Platine des o. a. Lernpakets für andere Aufgaben verwendet werden. Ich schloss ein 10kOhm-Potenziometer an 5 V Gleichspannung an und verband seinen Schleifkontakt mit Pin 1 des Mikrocontrollers. Damit konnte ich die Spannung an ADC0 stufenlos zwischen 0 und 5 V einstellen. Für den Attiny13 compilierte ich danach in Anlehnung an das Programmlisting aus Kapitel 10 des Handbuchs zum o. a. Lernpaket das folgende kleine Programm, das ich nach Anga-ben in einem Fachbuch von Roland Walter [5] etwas veränderte.
'ADC0_08b.bas
$regfile = "attiny13.dat"
$crystal = 1200000
Baud = 9600
Dim N As Byte
Config Adc = Single , Prescaler = 4 , Reference = Avcc
Adcsra = &B11100010
Admux = &B00100000 'Aufl.: 8-Bit, Kanal 0
Open "comb.1:9600,8,n,1,INVERTED" For Output As #1
Do
N = Adch
Put #1 , N
Waitms 1000 'Pause: 1000ms = 1s
Loop
End
Der
Attiny13 sendet nach dem Einschalten der 5V-Versorgungsspannung jede
Sekunde ein Byte an den PC, dessen Wert der Eingangsspannung an Pin 1
entspricht. Mit dem o. a. Programm fand ich heraus, dass diese Spannung
für eine sichere Funktion zwischen etwa 2,12 V (an PC gesandtes
Byte:109) und 5 V (an PC gesandtes Byte: 255) betragen darf. Bei
kleineren Werten als 2,12V wird offenbar wegen der RESET-Funktion des
Pins kein Byte gesendet.
Nach diesem „Teilerfolg"
des oben beschriebenen Experiments, wusste ich, dass ich die
Tastaturabfrage ähnlich wie im oben genannten Fachbuch von B. Kainka [1]
über den Analogeingang ADC0 bewerkstelligen konnte. Ich hatte also
lediglich dafür zu sorgen, dass die Eingangsspannung an diesem Pin
sicherheitshalber größer als 2,12 V, also ca. 2,3 V (an PC
gesandtesByte: 119) ist, während ihr größter Wert 5 V (Byte:255)
betragen darf. Dies ist die Schaltung dazu. An die Pins PB3, PB4 und PB2
des Mikrocontrollers sind bereits über Vorwiderstände von je 4,7 kOhm
Leuchtdioden (2mA-Typen) angeschlossen. Ihre Aufgabe wird weiter unten
erläutert.
Dehnung
an eine Schaltung aus dem o. a. Fachbuch von B. Kainka [1] aufgebaute
Spannungsteiler besteht neben dem Trimmpotenziometer, das zum Abgleich
auf etwa 3,3kOhm eingestellt wird, aus den neun Widerständen R2 ..R10
von je 3,3 kOhm sowie einem Widerstand R11 von 22 kOhm.
Mit den
gewählten Widerstandswerten überträgt der Attiny13 beim Betätigen einer
der acht Tasten an den PC stets ein Byte, dessen Wert bei den gewählten
Widerstandswerten zwischen 157 und 240 liegt. Wird gerade keine Taste
gedrückt, liegt die Spannung von 5V über R12 (560 k) an ADC0. Es wird
255 gesendet. Der abgebildete Screenshot verdeutlicht dies.
Das vom Mikrocontroller abgegebene PWM-Signal wird mit der folgenden Schaltung aus dem o. a. Fachbuch von B. Kainka [1] gesiebt und verstärkt. Sie muss doppelt vorhanden sein, wenn beide Stufen des Zweikanal-Netzgeräts genutzt werden sollen. Soll die Ausgangsspannung jeweils bis zu 25,5 V betragen, reichen die beiden 12-V- Steckernetzteile zur Spannungsversorgung nicht aus. In diesem Fall muss die Gleichspannung 30 V betragen.
Dies hier ist ein Auszug aus dem Programmlisting zur Schaltung des Zweikanal-Netzgeräts BASCOM-AVR :
...
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Portb.3 = Output 'Kanal A:rote LED
Config Portb.4 = Output 'Kanal B:rote LED
Config Portb.2 = Output 'Kanal B:gelbe LED
Adcsra = &B11100010
Admux = &B00100000 'Aufl.: 8-Bit, Kanal0
Dim B As Byte
Dim Pa As Byte
Dim Pb As Byte
Anfang:
Pa = 0 'Anfangszustand: Ausgangsspannung jeweils 0 V
Pb = 0
Do 'Kanal A:
If Pa >= 50 Then ' Eine rote LED leuchtet bei Erreichen
Portb.3 = 1 'der Ausgangsspannung 5 V auf.
End If
If Pa < 50 Then
Portb.3 = 0
End If
If Pb >= 50 Then 'Kanal B:
Gosub Pbgr
End If
If Pb < 50 Then
Portb.4 = 0
Portb.2 = 0
End If
B = Adch
Select Case B ' Kanal A:
Case 226 To 229 : Gosub Ab_a5 ' Erhöhung in 5er-Schritten
Case 216 To 219 : Gosub Auf_a5 ' Verringerung in 5er-Schritten
Case 204 To 208 : Gosub Ab_a1 ' Erhöhung in 1er-Schritten
Case 194 To 198 : Gosub Auf_a1 ' Verringerung in 1er-Schritten
' Kanal B:
Case 184 To 188 : Gosub Ab_b5 ' z. B. hier Case 184 To 188 wie in den anderen
Case 174 To 178 : Gosub Auf_b5 ' 7 Fällen wegen Toleranzen notwendig
Case 164 To 168 : Gosub Ab_b1
Case 154 To 158 : Gosub Auf_b1
End Select
Loop
Pbgr: 'Kanal B:
If Pb < 120 Then 'rote LED an ,gelbe LED aus
Portb.4 = 1 ' bei Ausgangsspannung kleiner als 12 V
Portb.2 = 0
End If
If Pb >= 120 Then ' beim Erreichen von 12 V
Portb.4 = 0 ' rote LED aus, gelbe LED an
Portb.2 = 1
End If
Return
Auf_a5:
Waitms 200 ' Wartezeit 200 ms
Pa = Pa + 5 ' Begrenzung auf 250 (max. Wert)
If Pa > 250 Then
Pa = 250
End If
Pwm0a = Pa
Return
...
Die roten LEDs dienen als Orientierung bei der Einstellung der Ausgangsspannungen auf in der Elektronik übliche Spannungen von 5V bzw. bei Kanal B auf 12 V(gelbe LED). Sie ersetzen allerdings nicht ein vorhandenes Multimeter, das benötigt wird, um vor dem ersten Gebrauch des Zweikanal-Netzgeräts durch Drehen am Trimmpotenziometer (Spindeltrimmer) zwischen dem Emitter des BD237 und dem Anschluss 2 des LM358 die jeweilige Ausgangsspannung auf den gewünschten Wert zu bringen.
2. Der Attiny13 erhält durch Schieberegister 8 digitale Ausgänge und 8 digitale Eingänge
In
bestimmten Fällen wäre es nützlich, wenn der Attiny13 mehr Ausgangs-
und mehr Eingangsleitungen zur Verfügung hätte. Auch dies ist durch die
Verwendung des Eingangs ADC0 möglich, wie ich im Folgenden aufzeigen
werde.
Die Schaltung an seinem Eingang Pin 1, mit der dies möglich
ist, kann z. B. so aussehen, wie es im folgenden Schaltplan dargestellt
ist.
Das
IC 4094 dient als Ausgabeschieberegister, während das IC 4021 als
Eingabeschiebe-register verwendet wird. Der Mikrocontroller steuert mit
seinen Portleitungen PB3 und PB4 beide Ics. PB0 ist mit dem Dateneingang
DAT des Bausteins 4094 verbunden. Über diese Leitung überträgt der
Attiny13 die einzelnen Bits nacheinander an den Eingang DAT des
Bausteins 4094. Darauf stehen alle Daten nach einem Übernahmeimpuls an
seinem Strobe-Eingang an den Ausgängen des Ics zur Verfügung. Die an den
Eingängen PAR IN 1 ..8 des ICs 4021 parallel anliegenden Daten werden
durch den Mikrocontroller gesteuert Bit für Bit an dessen Ausgang BUF
OUT Q8 geschoben.
Die dem Attiny13 für diesen
Zweck fehlende Eingangsleitung wird durch den analogen Eingang ADC0
ersetzt. Es muss in diesem Fall dafür gesorgt werden, dass die dort
anstehende Spannung bei High-Pegel (1) am Pin 3 des Ics 4021 an ADC0 des
Mikrocontrollers ca. 5 V beträgt, und bei Low-Pegel (0) mindestens ca.
2,3 V, wie es im Beitrag oben erläutert wird. Das Zusammenwirken von
Transistor und Reihenschaltung aus R4 und R5 im Schaltplan kann (ohne
Berücksichtigung des Eingangswiderstands von ADC0) kann folgendermaßen
erklärt werden:
Wird der
npn-Transistor T1 nicht angesteuert, wirkt seine zu R4 parallel
geschaltete Kollektor-Emitter-Strecke wegen ihres sehr großen
Widerstands ähnlich wie ein offener Schalter. Die Spannung von 5V wird
im Verhältnis der Widerstände R4 und R5 aufgeteilt, also ist UB ungefähr
gleich 5V * R5/( R4+R5) und beträgt etwa 3 V.
Bei
High-Pegel an Anschluss 3 des Ics 4021 wird T 1 angesteuert, und seine
Kollektor-Emitter-Strecke überbrückt ähnlich einem geschlossenen
Schalter R4. Da der Transistor allerdings kein perfekter Schalter ist,
liegt fast die Spannung von 5 V an R5 und damit am Eingang ADC0.
Die
Schaltungsvariante mit dem pnp-Transistor T2 funktioniert anders, da
seine Kollektor-Emitter-Strecke (ohne Berücksichtigung des
Eingangswiderstands von ADC0) in Reihe zur Reihenschaltung von R4 und R5
liegt. Bei High-Pegel an Pin 3 des Ics 4021 wirkt T2 wie ein geöffneter
Schalter, und zwischen B und dem Minuspol der Schaltung kann daher fast
5 V gemessen werden.
Bei Low-Pegel an Pin 3 wird
T2 angesteuert, und seine Kollektor-Emitter-Strecke wirkt wie ein
geschlossener Schalter. Die Spannung zwischen B und dem Minuspol der
Spannungsquelle(Masse, GND) wird praktisch nur durch die beiden in Reihe
geschalteten Widerstände R4 und R5 (vgl. Formel oben) bestimmt. Im
Schaltbild sind an den Attiny13 zusätzlich die Ics 4021 und 4094
angeschlossen. Mit ihnen gelingt es, für den Mikrocontroller 8 digitale
Eingänge und Ausgänge bereitzustellen.
Im Bild ist eine mögliche praktische Ausführung auf einem Steckboard dargestellt. Zu erkennen sind drei Widerstands-Netzwerke. Sie besitzen Einzelwiderstände von 4,7 kOhm und dienen als Pullup-Widerstände an den Eingängen des ICs 4021 bzw. an den Ausgängen des IC2 4091 als Vorwiderstände für die acht grünen Leuchtdioden (2mA-Typen) in der Schaltung, die zur Anzeige der dortigen Pegel bestimmt sind. Eine rote LED mit Vorwiderstand dient als Betriebsanzeige für die Spannung von 5V. Gerade ist der Wert 1 und darauf der Wert 85 an den Attiny13 übertragen worden, was durch die grünen Leuchtdioden im Bild veranschaulicht wird. Die Ansteuerung erfolgt durch ein Programm in BASCOM-AVR, das compiliert und in den Attiny13 übertragen wurde. Hier ist dazu ein Auszug aus dem Programmlisting :
...
Do
Get #2 , Daten
Select Case Daten
Case 1 : Gosub Ausgabe 'Ausgabe
Case 2 : Gosub Aus_ein ´ Ausgabe und Einlesen
Case Is >= 3 : Gosub Einlesen ' Nur Einlesen
End Select
Loop
...
Einlesen:
Strobe = 1
Waitus 10 'war 10
Daten1 = 1
E_dat = 0
Strobe = 0
Waitms 1
For N = 0 To 7
Adc_ein = Adch ' Bei Werten > 200 --> 1 - Signal
If Adc_ein > 200 Then ' bei Werten < 200 --> 0 - Signal
E_dat = E_dat + Daten1 ' --> zusätzlicher „digitaler Eingang"
End If
Clk = 1
Waitus 10
Shift Daten1 , Left
Waitus 10
Clk = 0
Waitms 1
Next N
Put #1 , E_dat
Return