Seitenübersicht
Hier geht um die Klärung einer auf den ersten Blick ganz banalen Frage: Welcher Spannungsbereich am Eingangspin wird vom AVR-Controller als logisch 0 und welcher als logisch 1 interpretiert, wo liegt oder wie hoch ist also die Schaltschwelle? Klar, idealerweise legt man einen Eingang entweder auf Minus- oder Plus-Potential, letzteres in Höhe der Versorgungsspannung. Wenn man den Eingang direkt mit einem Taster oder einem Transistor verbunden hat, der das entsprechende Potential durchschaltet, ist das kein Problem. In komplexeren Schaltungen können die Verhältnisse aber komplizierter sein. Vielleicht hängen mehrere Taster über Dioden (zur Entkopplung und Realisierung eines einfachen Oder-Gatters) an einem Eingang, oder ein Ausgang von µC 1 steuert sowohl eine Leuchtdiode als auch einen Eingang von µC 2 an. Dann liegen Spannungen am Eingang, die sich um mindestens einige Zehntel Volt von Minus bzw. Plus unterscheiden.
Weitere Fragen in diesem Zusammenhang:
Wie klärt man diese Fragen? Natürlich könnte man zunächst einmal die sehr ausführlichen Datenblätter von Atmel durchstöbern. Dort findet man tatsächlich Kurven, in denen die Zusammenhänge dargestellt werden. Aber schließlich fördert es das Verständnis, wenn man selbst misst, und außerdem: Vertrauen ist gut, Kontrolle ist besser...
Eine einfache Versuchsanordnung könnte darauf beruhen, dass man mit einem winzigen Programm gewissermaßen einen Eingang mit einem Ausgang verbindet. An den Ausgang schließt man eine Leuchtdiode an; an den Eingang legt man eine veränderliche Spannung (z. B. über ein Potentiometer zwischen Minus und Plus), die man langsam ändert und zugleich an einem Voltmeter misst. Schaltet die LED um, liest man die momentane Spannung ab - das ist die Schaltschwelle.
Dieses Vorgehen ist zwar einfach, bringt aber Nachteile mit sich: Man braucht eine sehr ruhige Hand zur Einstellung des Potis oder ein Poti mit Übersetzung, das sich sehr fein regeln lässt, und ein recht genaues Messgerät. Außerdem kann man so immer nur einen Eingang überprüfen oder höchstens so viele Eingänge, wie zusätzlich Ausgänge zur Verfügung stehen (mit paarweiser Verbindung per Programm). Kann der Microcontroller vielleicht die variable Spannung selbst erzeugen und auch die Spannungsmessung im richtigen Moment durchführen? Aber klar - Microcontroller sind doch Tausendsassa!
Die Dateien sind für den ATtiny13 und eine Taktrate von 1,2 MHz ausgelegt. Anpassungen für einen anderen Controller und/oder eine andere Taktfrequenz sollten leicht möglich sein, da das Programm ausführlich kommentiert ist. Das Programm benötigt die in dieser Rubrik vorgestellten Makros.
Die Schaltung ist ausgesprochen einfach. Der Microcontroller benötigt für die Erledigung dieser Aufgabe neben dem obligatorischen Abblockkondensator C1 lediglich einen Widerstand, einen Elektrolytkondensator (Elko) sowie einen (niederohmigen) Lautsprecher zur Ergebnisausgabe (gemäß der Technik der Dezimalzahl-Tonausgabe, wie in diesem Tipp beschrieben). Etwas ungewöhnlich ist sicherlich, dass die Eingänge PB1 bis PB4 (aber nicht PB0!) miteinander verbunden sind. Das macht normalerweise wenig Sinn, liegt am Testcharakter dieser Konstruktion. Die Schaltung lässt sich auf einem kleinen Steckbrett schnell aufbauen.
Das Programm ermittelt nacheinander die Ein- und Ausschaltschwellen der Eingänge PB1 bis PB4. PB0 übernimmt abwechselnd zwei Funktionen: Zunächst wird der Elko C2 über den Widerstand R1 und den Lautsprecher auf- und nach Erreichung der Einschaltschwelle wieder entladen (im Lautsprecher ist ein Knacken beim Umschalten von PB0 zu hören). Nachdem die beiden Umschaltspannungen als Messwerte des ADCs (Analog-Digital-Wandler) vorliegen, werden sie auch über PB0 im Lautsprecher "gemorst". R1 dient nun als Vorwiderstand des Lautsprechers. Die beiden zu einem Port gehörenden Messwerte werden durch eine kürzere Pause getrennt; zwischen den Messwertpaaren je Port liegen längere Pausen. Es wird direkt der 10bit-ADC-Messwert signalisiert, also eine Zahl zwischen 0 und 1023. Um die zugehörige Umschaltspannung zu erhalten, muss man den Messwert durch 1024 teilen und mit der Versorgungsspannung multiplizieren.
Die Größe der Bauteile R1 und C2 ist nicht allzu kritisch; man kann andere Werte wählen, die man in der Bastelkiste findet. Zu bedenken ist allerdings, dass die Ladezeit bis zum Erreichen einer bestimmten Spannung proportional zum Produkt R1 * C2 ist (auf R1 muss genaugenommen der Gleichstromwiderstand des Lautsprechers addiert werden). Da eine gewisse Zeitdauer zwischen Umschaltzeitpunkt und Stoppen des Lade-/Entladevorgangs zur Messung der Spannung verstreicht (im ungünstigsten Fall fünf Taktzyklen, gut 4 µs), sollte die Ladegeschwindigkeit nicht zu hoch sein. Sonst handelt man sich Messungenauigkeiten ein.
Das möchten Sie sicherlich selbst ermitteln. Aber nur zum Vergleich hier einige Erkenntnisse, die ich durch Messung an einem einzelnen ATtiny13V gewonnen habe: