Lernpaket Mikrocontroller Kap 2       

Elektronik-Labor  Lernpakete  AVR  LPmikros                

 

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
 


Elektronik-Labor  Lernpakete  AVR  LPmikros