Der ADC0(=RESET)-Eingangs des Attiny13

von Hermann Nieder
 aus ELO 2009
Elektronik-Labor  Labortagebuch  ELO  

1. Der Attiny13 steuert ein Zweikanal-Netzgerät an


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.

 

 

1

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