Lernpaket Mikrocontroller Kap 2
2 Interface-Experimente
Die ersten Schritte mit dem
Mikrocontroller ATtiny85 sollen hier noch ohne eigene Programmierung vorgestellt
werden. Das Programm Interface.hex bietet den Zugang zu allen Anschlüssen des
Mikrocontrollers und kann zusammen mit der Interface-Funktion in LPmikro85.exe
verwendet werden, um die grundlegenden Eigenschaften der Hardware
kennenzulernen. Damit erhält man einen guten Überblick zu den Möglichkeiten des
Controllers.
2.1 Portausgänge
Der ATtiny85 hat acht
Anschlüsse. Neben den Betriebsspannungsanschlüssen GND und VCC und dem Reset-Pin
RES stehen fünf frei verwendbare Portanschlüsse zur Verfügung. Bei der
Verwendung als Interface werden allerdings zwei Leitungen als Datenleitungen
TXD und RXD zur seriellen Kommunikation mit dem PC gebraucht. Damit bleiben
noch die drei Leitungen B0, B3 und B4 für sonstige Zwecke übrig. Jeder dieser Ports
kann als Ausgang oder als Eingang verwendet werden. Außerdem habe sie jeweils
noch Sonderfunktionen.
Öffnen Sie die Registerkarte
Interface (Abb. 2.1). Klicken Sie die Datenrichtungsbits ddrb.0, ddrb.3 und
ddrb.4 aktiv. Damit sind alle drei Ports als Ausgänge initialisiert. Nun können
Sie den jeweiligen Portzustand über die Kästchen portb.0 bis portb.4
umschalten. Einschalten liefert eine Spannung von 5 V am entsprechenden Pin,
Ausschalten eine Spannung von 0 V. Verwenden Sie ein Voltmeter zur Überprüfung
der Zustände. Gleichzeitig wird jeder Anschluss auch als Eingang gelesen und in
PinB.0 bis Pinb.4 angezeigt. Der gelesene Zustand entspricht dem ausgegebenen
Zustand, d.h. Sie können den realen logischen Zustand auch ohne eine
Spannungsmessung erkennen.
Abb. 2.1: Direkter Zugang zu
den Controllerports
Schließen Sie eine LED mit
Vorwiderstand wie in Abb. 2.2 am Port PB3 an, die Sie dann per Software
beliebig ein- und ausschalten können.
Abb. 2.2: Eine LED am Port B3
Abb. 2.3: Aufbau der
LED-Schaltung
Gleichzeitig mit der
Portfunktion verwendet das Interfaceprogramm die beiden Eingänge B3 und B4 als
analoge Eingänge. Sie können also direkt die tatsächliche Spannung am Port
ablesen. Bei Belastung mit einer LED ergibt sich aufgrund des Innenwiderstands
am Port eine geringfügig kleinere Ausgangsspannung als 5 V. Der digitale
Zustand wird aber immer noch als 1 gelesen.
2.2 Porteingänge
Schalten Sie alle ddrb-Bits
und alle portb-Bits aus. Die Ports sind damit hochohmige CMOS-Eingänge.
Berühren Sie die Eingänge mit einem Draht oder einem Widerstand. Dabei laden sie
sich zufällig auf. Sie können 0 oder 1 sein oder ständig wechseln. Tatsächlich
liefern Sie beim Berühren eines Eingangs meist eine 50-Hz-Brummspannung, also
einen dauernden Zustandswechsel. Je nach dem zufälligen Zeitpunkt des
Loslassens bleibt ein 1- oder ein 0-Zustand stehen, der sich jedoch nach kurzer
Zeit von allen wieder ändern kann.
Abb. 2.4: Offene Eingänge
Allgemein werden offene
Eingänge in der Digitaltechnik vermieden, eben weil sie keine definierten
Zustände haben. Wenn ein Eingang z.B. verwendet werden soll um einen Schalter
abzufragen, verwendet man zusätzliche Widerstände gegen Masse (Pull Down) oder
gegen die Betriebsspannung (Pull Up). Sie können Pullup- oder
Pulldown-Widerstände simulieren, indem Sie beim Berühren eines Eingangs
gleichzeitig VCC oder GND berühren. Ihre Hand dient dann als Widerstand, der
eine eindeutige Spannung an den Eingang legt.
Der ATtiny85 enthält aber
auch interne Pullup-Widerstände, die sich bei Bedarf einschalten lassen. Dazu
muss das jeweilige Port-Bit eingeschaltet werden, während das Datenrichtungsbit
low ist. Schalten Sie die Bits portb.3 und portb.4 ein. Es werden dann bei
offenem Eingang 1-Zustände zurückgelesen. Die entsprechenden Spannungen an den Eingängen
betragen 5 V.
Abb. 2.5: Einschalten der
internen Pullup-Widerstände
In diesem Zustand lassen sich
externe Schalter gegen Masse abfragen. Ein geöffneter Schalter liefert 1, ein
geschlossener Schalter 0. Verwenden Sie einen Draht nach GND zur Simulation
eines geschlossenen Schalters. In diesem Fall können Sie auch den 1-kΩ-Widerstand
als leitende Verbindung verwenden, weil die internen Pullups wesentlich
hochohmiger sind.
Abb. 2.6: Low-Zustand durch
Drahtbrücke oder Widerstand
2.3 Spannungsmessung
Die analogen Eingänge des
Mikrocontrollers lassen sich auch für allgemeine Spannungsmessungen verwenden.
Untersuchen Sie z.B. die Durchlassspannung der LED. Ein Port wird dazu als
Ausgang geschaltet, der zweite als hochohmiger Messeingang. Die LED in Abb. 2.7
wird über den Anschluss PB3 und einen Vorwiderstand von 1 kΩ
eingeschaltet. Der 10-kΩ-Widerstand dient hier zunächst nur als
Drahtbrücke zur Messung der LED-Spannung über den Anschluss PB4.
Abb. 2.7: Messung der
LED-Spannung
Im eingeschalteten Zustand
finden Sie eine LED-Spannung von ca. 1,9 V. Am Port liegt eine Spannung von 4,9
V. Damit beträgt der Spannungsabfall am Vorwiderstand 4,9 V – 1,9 V = 3 V. Der
LED-Strom ist also 3 V / 1 kΩ = 3 mA. Gleichzeitig lässt sich der
Innenwiderstand des Ausgangsports bestimmen. Bei einem Spannungsabfall von 0,06
V und einem Strom von 3 mA ergibt sich einen On-Widerstand von ca. 20 Ω
(60 mV / 2 mA = 20 Ω).
Abb. 2.8: LED-Spannung mit
Vorwiderstand 1 kΩ
Verwenden Sie nun einen
Vorwiderstand von 10 kΩ, indem Sie PB4 als Ausgang und PB3 zur
Spannungsmessung verwenden. Die LED leuchtet schwächer, weil der LED-Strom nun
nur noch etwa 0,3 mA ist. Die Spannung an der LED verringert sich aber nur
geringfügig auf 1,8 V. Dies ist auf die steile Diodenkennlinie (vgl. Kap. 7.5) der
LED zurückzuführen.
Abb. 2.9: LED-Spannung mit
Vorwiderstand 10 kΩ
Einen noch geringeren Strom
liefert der interne Pullup des Ports. Schalten Sie das Datenrichtungsbit des
Ausgangsports aus und das Portbit ein. Ein schwaches Leuchten der LED ist nur
noch bei einer Abdunkelung des Umgebungslichts zu erkennen. Die LED-Spannung
beträgt aber immer noch über 1,7 V.
Abb. 2.10: Interner Pullup
als Vorwiderstand
2.4 Pullup-Widerstände
Die einschaltbaren internen
Pullup-Widerstände an jedem Port haben laut Datenblatt einen Widerstand
zwischen 20 kΩ und 50 kΩ. Dieser Wert kann sehr einfach überprüft
werden. Lassen Sie den Pullup-Strom über einen bekannten Widerstand fließen und
bestimmen Sie den Spannungsabfall. Bei einem Messwiderstand von 10 k wurden
1,09 V gemessen. Daraus kann nach den Gesetzten der Reihenschaltung der interne
Pullup zu 35,9 kΩ bestimmt werden. Der Wert liegt also mitten im
angegebenen Bereich.
Abb. 1.11: Messung des
Pullup-Widerstands
Zur Kontrolle können Sie den
Kurzschlussstrom am Port mit einem Digitalmultimeter messen. Es wurde ein Strom
von 134 µA gefunden. Daraus folgt ein Pullup-Widerstand von 37,3 kΩ, was
im Rahmen der Messgenauigkeit mit dem oben gefundenen Ergebnis übereinstimmt.
2.5 Der Fototransistor
Analoge Eingänge werden oft
für Messungen an Sensoren eingesetzt. Ein Programm könnte z.B. die Helligkeit
überwachen und bei einem bestimmten Grenzwert einen Schaltvorgang auslösen. Die
entsprechende Schaltungstechnik können Sie mit dem Interface erproben. Schalten
Sie den Fototransistor mit einem zusätzlichen Messwiderstand von 10 kΩ an
einen anlogen Eingang. Der Spannungsabfall am Widerstand ist dann ein Maß für
die Helligkeit.
Abb. 2.12: Helligkeitsmessung
mit dem Fototransistor
Untersuchen Sie die Spannung
bei verschiedenen Lichtverhältnissen. Bei künstlicher Beleuchtung können Sie
ein Schwanken der Spannung beobachten. Die Helligkeit ändert sich je nach
verwendeter Lampe mehr oder weniger stark im 100-Hz-Takt. Da der AD-Wandler bei
jeder Messung die Momentanspannung ermittelt und der Zeitpunkt der Messung
nicht synchron zum Lichtflackern ist, erhält man eine zufällige Schwankung, die
aber insgesamt einen Eindruck von der Modulation des Lichts vermittelt. Die
periodischen Schwankungen der Helligkeit müssen beachtet werden, wenn man die
Helligkeit in einem Steuerprogramm auswertet. Eine Lichtschranke könnte z.B.
unzuverlässige Ausgangszustände liefern, was durch geeignete programmtechnische
Maßnahmen vermieden werden kann.
2.6 LED als Lichtsensor
Eine LED ist nicht nur eine
Lichtquelle sondern zugleich auch eine Fotodiode. Als solche kann sie entweder
in Sperrrichtung oder als Fotoelement bestrieben werden. Allerdings bringt sie
nur einen extrem kleinen Fotostrom, sodass sie nur in sehr hochohmigen
Schaltungen verwendet werden kann. Der AD-Wandler des Tiny85 besitzt einen fast
unendlichen Eingangswiderstand, sodass man die lichtabgängige LED-Spannung
direkt messen kann.
Abb. 2.13: Messung der
LED-Spannung
Schließen Sie die LED direkt
zwischen GND und B3 an und bringen Sie B3 in den hochohmigen Eingangszustand.
Schalten Sie zusätzlich B4 in den niederohmigen Low-Zustand, damit es zu keiner
Beeinflussung des Messobjekts kommt. Wenn nun Licht auf die LED fällt, steigt
die gemessene Spannung. Bei direkter Beleuchtung mit vollem Sonnenlicht oder mit
einer hellen Lampe kann eine grüne LED bis zu 2 V erzeugen, eine rote LED bis
etwa 1,5 V.
Schalten Sie zum Vergleich
den Nachbarport B4 einmal in den High-Zustand. Dann wird auch ohne Licht schon
eine gewisse LED-Spannung gemessen, weil mit jedem Umschalten der Kanäle etwas
Ladung transportiert wird. Die LED-Spannung ist zwar immer noch von der
Beleuchtung abhängig, sinkt aber bei Dunkelheit weniger stark ab.
Abb. 2.14: Messung an einer grünen
LED
Das Beispiel zeigt, dass der
AD-Wandler eines AVR-Controllers in Bezug auf seinen Innenwiderstand einem
üblichen Digitalmultimeter überlegen ist. Das lässt sich in besonderen
Anwendungen ausnutzen, die mit extrem kleinen Ladungen arbeiten.
2.7 Ladungsmessung
Um extrem kleine Ladungen zu
untersuchen kann man die Spannunsgänderung an einem kleinen Kondensator
untersuchen. Dazu bietet sich der im Lernpaket vorhandene keramische Kondensator
mit 10 nF an. Solche Kondensatoren weisen eine extrem geringe Selbstentladung
auf, die Sie mit einem einfachen Versuch überprüfen können.
Abb. 2.15: Messung der
Kondensatorspannung
Schalten Sie den Anschluss B3
zunächst hoch und laden Sie den Kondensator daran bis auf eine Spannung von 5 V
auf und nehmen ihn dann aus der Fassung. Schalten Sie den Port dann in den
hochohmigen Zustand und setzen dann nach einigen Minuten den Kondensator wieder
ein. Sie stellen dabei fest, dass die Kondensatorspannung sich fast nicht
geändert hat. Voraussetzung ist allerdings, dass Sie die Anschlussdrähte nicht
berühren, denn der kleine Kondensator wird über den Hautwiderstand schnell entladen.
Alternativ können Sie auch den Kondensator in der Fassung lassen und
vorübergehend auf die Registerkarte Terminal umschalten um die Messungen zu
unterbrechen. Wenn Sie dann nach einigen Minuten zur Interface-Funktion
zurückkehren, messen Sie eine fast unveränderte Kondensatorspannung.
Abb. 2.16: Messung der
Selbstentladung eines Kondensators
Sobald der Kondensator an den
Mikrocontroller angeschlossen ist und der AD-Wandler in Aktion tritt, ändert
sich die Spannung, wenn auch relativ langsam. Die Spannung fällt in 30 Sekunden
etwa um 200 mV. Daraus kann man für einen Kondensator mit 10 nF einen Strom von
67 pA berechnen.
Berühren Sie den Eingang kurz
mit dem Finger. Meist beobachten Sie dabei eine Spannungssprung, der auf
statische Ladungen zurückzuführen ist. Eine Spannungsänderung von 1 V zeigt an,
dass eine Ladung von 10 nC geflossen ist. Geht man davon aus, dass Ihr Körper
gegen GND eine Kapazität von 100 pF besitzt, kann man umgekehrt daraus
schließen, dass Sie mit einer Spannung von 100 V aufgeladen waren.
2.8 Messungen an einem Elko
Das kleine Messlabor eignet
sich auch zur Überprüfung anderer Bauelemente. An einem Elko von 100 µF lässt
sich die Kapazität grob bestimmen. Dazu schaltet man den internen Pullup ein
und misst die Zeitkonstante T =RC. In der Zeit hat sich der Elko von 0 V auf
1-1/e = 63,2% der Betriebsspannung, also auf 3,1 V aufgeladen. Bei einem
Pullup von 35 kΩ und 100 µF würde man eine Zeitkonstante von 3,5 s
erwarten. Gemessen wurde aber eine Ladezeit von rund 4 s. woraus man schließen
kann, dass der Elko im Vergleich zum aufgedruckten Wert eher zu viel als zu
wenig Kapazität besitzt. Mit einem geeigneten Programm (vgl. Kap. 8.4) lässt
sich die Zeitmessung noch verbessern.
Abb. 2.17: Messung am Elko
Ein fabrikneuer oder lange
gelagerter Elko hat im Normalfall eine gewisse Selbstentladung. Lädt man den
Kondensator zunächst über einen niederohmigen Port auf, entlädt er sich danach
wieder etwas. Bei eingeschaltetem Pullup stellt sich z.B. eine Spannung von
4,96 V ein. Bei einem bekannten Pullup von 35 kΩ lässt sich daraus ein
Entladewiderstand von etwa 4 MΩ bzw. eine Entladestrom von rund einem
Mikroampere bestimmen.
Nach längerer Zeit im
geladenen Zustand verbessert sich die Isolation. Auch über den Pullup wird der Elko
dann bis auf 5 V geladen. Man kann jedoch auch noch den Pullup abschalten und
den Elko dann völlig hochohmig messen. Es zeigt sich dann weiterhin eine
geringe Selbstentladung. Sie lässt sich noch deutlicher beobachten und
auswerten, wenn man den Elko geladen aus der Fassung nimmt und erst nach
einigen Minuten wieder einsetzt.
Eine weitere Eigenschaft des
Elkos ist seine dielektrische Absorption. Sie äußert sich darin, dass ein
gerade entladener Elko sich geringfügig selbst wieder auflädt. Der Elko soll
dazu erst einmal für mehrere Minuten an 5 V liegen. Danach wird er kurz
entladen, um dann sofort den Port hochohmig zu schalten. Nun kann man eine
langsame erneute Aufladung beobachten, die nach zwei Minuten etwa 150 mV
erreicht. Nach 15 Minuten können Elkos bis zu 10% der ursprünglichen
Ladespannung erreichen. Der Versuch funktioniert auch anders herum, indem man
den Elko lange entlädt und dann kurz auf 5 V lädt. Er verliert dann ebenfalls
etwa 150 mV in zwei Minuten, was nicht durch Selbstentladung erklärt werden
kann, sondern durch die dielektrische Absorption.
2.9 Das Oszilloskop
Das Interface enthält ein
sehr einfaches Speicheroszilloskop, mit dem Änderungen und zeitliche Verläufe
einer Eingangsspannung untersucht werden können. Dazu werden 360 Messwerte in
schneller Folge erfasst und im Arbeitsspeicher (RAM) des Controllers abgelegt.
Nach der Messung sendet der Controller diese Werte an den PC, wo sie grafisch
dargestellt werden. Wahlweise kann eine Einkanalmessung oder eine
Zweikanalmessung mit 180 Messwerten pro Kanal durchgeführt werden. Verwenden
Sie die Einkanalmessung zur Untersuchung der Helligkeitsschwankungen einer
künstlichen Beleuchtung mithilfe des Fototransistors.
Abb. 2.18: Lampenflackern mit
100 Hz
Die eigentliche Messung mit
dem Oszilloskop dauert nur etwa 25 ms. Sie sehen daher nur einen kurzen Ausschnitt
der Helligkeitsschwankungen. Wiederholen Sie die Messung mehrfach um einen
Eindruck vom Verlauf der Spannung zu erhalten. Damit können Sie auch schnellere
Signale untersuchen. Abb. 2.19 zeigt das Oszillogramm der Ausgangsspannung
eines Sinusgenerators, der auf 400 Hz eingestellt wurde.
Abb. 2.19: Sinussignal mit
400 Hz
Untersuchen Sie auch einmal
die Brummspannung, die beim Berühren des hochohmigen Eingangs anliegt. Sie
liegt im Allgemeinen höher als die Betriebsspannung des Mikrocontrollers.
Interne Schutzdioden an den Ports begrenzen die Eingangsspannung auf etwa –0,5
V und + 5,5 V. Man erhält daher eine angenäherte Rechteckspannung. Wenn Sie den
Port nicht direkt berühren sondern den Finger nur in die Nähe halten, besteht
eine kapazitive Kopplung mit geringerer Amplitude. Verzerrungen des rein
sinusförmigen Verlaufs sind oft auf Netzverbraucher wie z.B. Leuchtstofflampen oder
Netzteile zurückzuführen.
Abb. 2.20: Verzerrungen der
Netzspannung
2.10 Der PWM-Ausgang
Ein PWM-Signal
(Pulsweiten-Modulation) ist ein periodisches Rechtecksignal mit einstellbarem
Puls/Pausen-Verhältnis. Ein angeschlossener Verbraucher wird also in schneller
Folge ein- und ausgeschaltet und erhält damit eine einstellbare mittlere
Spannung bzw. einen mittleren Strom. Die Helligkeit einer angeschlossenen LED
(Abb. 2.21) kann in weiten Grenzen verändert werden. Der PWM-Ausgang liegt am
Anschluss PB0.
Abb. 2.21: PWM-Steuerung
einer LED
Klicken Sie auf „PWM
initialisieren“. Das PWM-Signal wird eingeschaltet und PB0 in Ausgaberichtung
geschaltet. Nun können Sie mit dem PWM-Schieberegler die Helligkeit der LED
einstellen.
Abb. 2.22: PWM-Ausgabe
Stellen Sie eine zusätzliche
Verbindung zum Eingang PB4 her. So können Sie das PWM-Signal am Oszilloskop
betrachten (Abb. 2.23).
Abb. 2.23: Das PWM-Signal an
der LED
PWM-Ausgänge werden oft zur
Ausgabe einer einstellbaren Gleichspannung verwendet. Dazu muss das Signal mit
einem Tiefpassfilter geglättet werden. Verwenden Sie den Elektrolytkondensator
mit 100 µF und einen Widerstand mit 1 kΩ als einfaches Filter. Stellen Sie
am PWM-Ausgang eine mittlere Spannung ein. Das Oszilloskop zeigt nur noch eine
geringe Restwelligkeit der geglätteten Spannung (Abb. 2.25). Mit einer
Zweikanalmessung (Abb. 2.26) erkennen Sie den Zusammenhang zum ursprünglichen
PWM-Signal. Dazu muss PB0 zusätzlich mit PB3 verbunden werden.
Abb. 2.24: Glätten mit 1
kΩ und 100 µF
Abb. 2.25: Geringe
Restwelligkeit
Abb. 2.26: Zweikanalmessung
mit PWM-Signal und Elkospannung
Verbessern Sie die Glättung
mit einer geringeren Grenzfrequenz des Tiefpassfilters. Mit 10 kΩ und 100
µF erhalten Sie eine Gleichspannung, bei der das Oszilloskop keine
Restwelligkeit mehr feststellen kann (Abb. 2.27 und Abb. 2.28).
Abb. 2.27: Glätten mit 10 kΩ
und 100 µF
Abb.
2.28: Optimale Glättung
2.11 Schaltschwellen
Digitale Eingänge
unterscheiden nur zwei Zustände, Eins und Null. Laut Datenblatt des ATtiny85
wird bei Spannungen unter 1 V zuverlässig Null gelesen, über 3 V dagegen Eins. Aber
auch Zwischenwerte liest der Eingang entweder als Null oder als Eins. Deshalb
soll nun die genaue Grenze zwischen beiden Pegeln gesucht werden.
Bauen Sie die Schaltung nach
Abb. 2.27 auf. Das PWM-Ausgangssignal wird geglättet und an einen der Eingänge
gelegt. Mit dem Interface können Sie nun gleichzeitig die aktuelle Spannung am
Eingang und den logischen Pegel ablesen.
Abb. 2.29: Messen der
Eingangs-Schaltschwelle
Die Messung zeigt, dass die
Grenze gerade bei der halben Betriebsspannung, also bei 2,5 V liegt. Tatsächlich
findet man eine kleine Hysterese von 400 mV, also einen Bereich, in dem sich
der Eingangszustand nicht ändert. Der Port wird bei steigender Spannung erst
ab 2,6 V als high gelesen. Bei fallender Spannung kippt der Eingang dann erst
bei 2,2 V in den Low-Zustand. Allerdings kann es gewisse Exemplarstreuungen
geben, sodass es ratsam ist den Bereich zwischen 1 V und 3 V zu vermeiden, wenn
eindeutige Pegel gelesen werden müssen.
2.12 Programm-Upload
Nun soll ein anderes Programm
in den Mikrocontroller übertragen werden, womit gleichzeitig das
Interface-Programm überschrieben wird. Alle Beispielprogramme der folgenden
Kapitel finden sich im Ordner Basom. Jedes Hexfile kann direkt in den
Controller geladen werden. Laden Sie das Programm Blink1.hex.
Abb. 2.30: Laden eines
Programms
Passend zum Programm muss
eine kleine Schaltung aufgebaut werden. Am Pin PB3 soll eine LED mit
Vorwiderstand angeschlossen werden.
Abb. 2.31: Die blinkende LED
Nach der erfolgreichen
Übertragung des Programms kommt der spannende Moment. Wenn alles korrekt
funktioniert hat, startet das Programm. Nun blinkt die LED.
Mit dem Laden des neuen
Programms wurde das vorher aktive Programm Interface.hex überschrieben. Die
Funktionen auf den Registerkarten Interface und Scope funktionieren damit nicht
mehr. Es gibt nur noch eine weitere Möglichkeit, den Controller zu
beeinflussen. Sie können die Leitung DTR auf der Registerkarte Terminal
anklicken und den Controller damit in den Reset-Zustand versetzen. Ein Häkchen
in der Klickbox bedeutet, dass die invertierte DTR-Leitung am USB-Seriell-Wandler
Low-Pegel annimmt und damit die Reset-Leitung des Controllers nach Masse zieht.
Damit stoppt das laufende Programm. Wenn Sie die DTR-Box deaktivieren, startet
das Programm neu.
Abb. 2.32: Reset über die
DTR-Leitung