Ein Portanschluss des Tiny 13 kann sowohl als Ausgangs wie auch als Eingang verwendet werden. Nach dem Einschalten oder einem Reset sind alle Ports zunächst Eingänge mit hohem Eingangswiderstand, die mit CMOS-Eingängen vergleichbar sind. Ein Ausgang muss über das Port-Richtungsregister explizit eingerichtet werden.
Das folgende Programm wertet den Zustand des Eingangs B4 aus und kopiert ihn auf den Ausgang B3. Dazu werden kombinierte Lese- und Sprungbefehle eingesetzt, die speziell für die Auswertung von Zuständen einzelner Hardware-Bits dienen: SBIC (Skip if Bit in I/O Register is Cleared, Überspringe wenn Bit gleich Null) und SBIS (Skip if Bit in I/O Register is Set, Überspringe wenn Bit gleich Eins). Diese Sprungbefehle überspringen jeweils genau einen Befehl, wenn die entsprechende Bedingung wahr ist. Damit ist die Aufgabe einfach zu lösen: Wenn das Eingangsbit Null ist, wird der Befehl zum Hochsetzen des Ausgangs übersprungen und umgekehrt.
;Eingang.asm kopiert Eingang PB4 an PB3
.include "tn13def.inc"
rjmp Anfang
Anfang:
sbi ddrb,3 ;Datenrichtungsbit
Schleife:
sbic pinb,4
sbi portb,3
sbis pinb,4
cbi portb,3
rjmp Schleife
Auswerten eines Eingangs
Starten Sie dieses Programm mit einer LED an PB3 und berühren Sie den Eingang PB4 mit dem Finger. Dabei wird im Normalfall das immer vorhandene 50-Hz-Wechselfeld der Netzleitungen auf den Eingang gekoppelt. Die Ausgangs-LED erhält dann ebenfalls ein Taktsignal von 50 Hz und ist etwa mit halber Helligkeit an. Wenn Sie den Eingang loslassen, bleibt der zufällige letzte Zustand Eins oder Null stehen. Oft leuchtet dann die LED voll, bevor sie sich von allein ausschaltet, weil die im Eingang gespeicherte Ladung verschwindet.
Wie hochohmig und empfindlich ein offener CMOS-Eingang ist, zeigt der folgende Versuch: Berühren Sie den Eingang nicht, sondern halten Sie Ihre Hand nur nahe an den Mikrocontroller. Heben und senken Sie dann Ihre Schuhe. Je nach Abstand (5 cm bis 20 cm) und Beschaffenheit des Bodens und der Schuhe können Sie damit die LED umschalten. Bei diesem Versuch entsteht durch elektrische Aufladung ein elektrisches Feld, das den Eingang lädt oder entlädt.
Allgemein sollte man es vermeiden, statische Ladung direkt über elektronische Bauteile abzuleiten. Im Extremfall kann man z.B. nach dem Gang über einen Teppich so weit aufgeladen sein, dass man bei der Berührung einen elektrischen Schlag verspürt und einen kleinen Blitz sehen und hören kann. Eine solche Entladung hat schon so manches Bauteil zerstört. Der ATtiny13 ist jedoch nicht sonderlich empfindlich. Man sollte nur vermeiden, die Anschlüsse direkt nach dem Umhergehen zu berühren. Zur Sicherheit kann man zuerst den über den PC und die Steckdose geerdeten Anschlusskragen des Anschlusssteckers berühren um übergroße Ladungen abzuleiten.
Ein offener CMOS-Eingang ist im Normalfall nicht sinnvoll, weil er einen zufälligen Eingangszustand annehmen kann. Wenn z.B. ein Schalter abgefragt werden soll, ist zwar der geschlossene Zustand eindeutig, der offene aber unbestimmt. Man kann das Programm Eingang.asm nutzen, um einen Schalter abzufragen. Dann ist aber ein zusätzlicher Widerstand sinnvoll, der den Zustand des offenen Eingangs vorgibt. Oft wird dieser Widerstand gegen die positive Versorgungsleitung angeschlossen. Der Eingang wird also im Ruhezustand hochgezogen (engl. pull up).
Bauen Sie einen solchen Widerstand in Ihre Schaltung ein und verwenden Sie eine Drahtbrücke als experimentellen Schalter. Das Ergebnis ist eindeutig: Bei geöffnetem Schalter ist die LED an, bei geschlossenem ist sie aus. Auch die Empfindlichkeit gegenüber externen Signalen ist geringer. Sie können den Eingang berühren, ohne einen Pegelwechsel zu erzeugen.
Pullup-Widerstände für jeden Portanschluss sind bereits im ATtiny13 enthalten. Sie müssen nur eingeschaltet werden. Dazu setzt man das zugehörige Ausgangsbit, lässt aber das Datenrichtungsbit low.
;Eingang2.asm kopiert Eingang PB4 an PB3
.include "tn13def.inc"
rjmp Anfang
Anfang:
sbi ddrb,3 ;Datenrichtungsbit
sbi portb,4 ;Pullup einschalten
Schleife:
sbic pinb,4
sbi portb,3
sbis pinb,4
cbi portb,3
rjmp Schleife
Listing 4.10 Eingang mit Pullup