Die Aus- und Eingänge des 2051

Input   Output  
Die Ansteuerung von Digital-IC's mit einem 8051-kompatiblem Microcontroller ist recht trivial. Dagegen führt die Nutzung der Ein- und Ausgänge für die Schaltung von analogen Bauteilen ohne fundierte Kenntnisse der schematischen Ausgangscharakteristik der Ports leicht zu größeren Irrtümern in der Schaltung. Daher sind auch viele Fragen zu diesem Thema bei mir eingegangen, die mit dieser Seite beantwortet werden sollen.

Input

Ein Pin des Microcontrollers hat grundsätzlich zwei Funktionen zu erfüllen: Zum einen die Aufnahme des anliegenden Wertes als Input, zum anderen die Ausgabe des darauf geschriebenen Wertes als Output.
Beide Funktionalitäten sind vollständig unabhängig voneinander. Es ist mit ein wenig Unvorsichtigkeit leicht möglich, aus Versehen einen Pin kurzzuschließen und damit den Ausgangstreiber zu zerstören, ohne damit auch dessen Funktion als Input zu beeinträchtigen. Ein so beschädigter Chip kann sogar noch programmiert und beschrieben werden, nur das Vergleichen ist natürlich nicht mehr korrekt möglich.
Um einen Pin als Input zu verwenden, ist er unbedingt auf 1 zu setzen. In dieser Stellung wird der Pin nur von einem schwachen Pullup auf Vcc gezogen und kann von einer externen Beschaltung leicht auf 0 gebracht werden. Die Input-Funktion wird übrigends keinesfalls intern zwischengepuffert. Wenn man den Ausgang auf Masse zieht, und eine 1 herausschreibt, wird beim Zurücklesen eine 0 gelesen. Es ist also
leicht einzusehen, niemals mit einem Port direkt zu rechnen, es sei denn, er wird als Input genutzt.
    Schleife:
             inc P1
             jmp Schleife
    
Dieses Beispiel zählt also durchaus nicht immer P1 hoch - wenn auch nur ein Pin auf GND gezogen wurde, bleibt das Incrementieren an dieser Stelle stehen. Besser ist es also, folgendermaßen zu verfahren:
    Schleife:
             inc a
             mov P1,a
             jmp Schleife
    
zurück zum Anfang

Output

Die Outputkonfiguration eines 8051-kompatiblen ist recht eigentümlich. Wird eine 0 auf einen I/O-Port geschrieben, so öffnet ein Transistor, der den dafür zuständigen Pin direkt auf GND zieht. Dieser Transistor ist für 20mA spezifiziert, aber nicht durch einen Widerstand abgesichert. Schaltet man den Pin also mit einem Verbraucher, der mehr als 20mA benötigt, gegen Vcc, so brennt dieser Transistor durch: der Controller ist beschädigt.
Als Richtlinie kann also gelten, einen Pin niemals mit weniger als 330 Ohm direkt gegen Vcc zu schalten. Möchte man eine Leuchtdiode direkt am Chip betreiben, ist natürlich der Spannungsabfall durch die Diode vorher abzuziehen. Der Vorwiderstand für eine Standard-LED bei 5V beträgt demnach rund 180 Ohm.

Es ist noch ein anderer Grenzwert zu beachten: für den AT89C2051 garantiert der Hersteller nur eine Gesamtbelastung von 80mA für alle Pins insgesamt. Eine 7 Segment-Anzeige mit 7x20mA würde also mit 140mA den Maximalwert schon deutlich überschreiten. Allerdings darf man diesen Grenzwert nach meinen Erfahrungen nicht so eng auffassen, im Gegensatz zu den 20mA pro Pin. Die 80mA gelten für eine maximale Arbeitstemperatur von 125°C. Baut man den Chip nicht grade in seiner Heizung oder im Auto ein, so kann man bei normaler Zimmertemperatur auch gefahrlos einiges mehr an Leistung abverlangen. Eine 7 Segment-Anzeige mit Dezimalpunkt ist also durchaus auch ohne zusätzliche Leistungstreiber zu realisieren.

Schreibt man eine 1 auf einen I/O-Port, so wird über einen Transistor (bzw. FET) ein schwacher Pullup, im abgebildeten Schema Depletion Mode FET genannt, gegen Vcc geschaltet. Dieser kann leicht von einer Beschaltung auf GND gezogen werden,

und realisiert dadurch auch die Input-Funktion. Belastet man diesen Pullup mit 80µA, so sinkt die Ausgangsspannung schon von 5V auf 2,4V. Weil dieser eine Pullup zu schwach ist, um schnelle und flankensteile Signale zu realisieren, so gibt es noch einen zweiten, als Enhancement Mode FET bezeichneten Transistor. Dieser ist bei jeder low-to-high Transition des Outputs nur für zwei Oszillatorzyklen, bei 24MHz für 83ns, aktiviert und deutlich stärker ausgelegt.

Daraus folgt vor allem eines: Für Anwendungen jenseits der Digitaltechnik ist der High-Zustand des Pins recht ungeeignet, da er sehr schwach und mit weiten Toleranzen ausgelegt ist, und sich zudem kurz nach dem Aktivieren auch noch verändert. Wenn man nicht grade mit FET-Schaltungen, die einen sehr hohen Eingangswiderstand aufweisen, operiert, so sollte man zum Schalten den Low-Zustand verwenden, dessen 20mA auch für leistungshungrigere Schaltungen ausreichend sind. Davon abgesehen gibt es auch noch einen weiteren Punkt, der für das Schalten mit der 0 statt mit der 1 spricht:
Der Reset-Zustand für alle Pins ist die logische 1. Wenn mit der 1 geschaltet würde, dann würden Motoren, Pumpen oder Lampen, die damit gesteuert werden, für den Moment des Resets jedesmal kurz anlaufen, bis das Programm die Kontrolle übernimmt und sie wieder abschaltet. Wenn zur Stütze in der +5V-Versorgung ein großer Kondensator eingebaut ist, der durch dieses kurze Anlaufen der Verbraucher belastet wird, so kann unter ungünstigen Umständen sofort nach dem Reset die Eingangsspannung durch den noch nicht voll geladenen Kondensator zusammenbrechen, sodass der Chip gleich wieder abstürzt bzw. im Reset hängenbleibt.

zurück zum Anfang
Schematische Pin-Konfiguration

Einige Systeme verwenden aufgrund differierender Basistechnologien, beispielsweise CMOS statt HMOS, auch abweichende Ausgangstreiberschaltungen. Die hier beschriebene Charakteristik wird dadurch aber nicht verändert, darum kann das Schema als geeignete Modellvorstellung betrachtet werden.

zurück zum Anfang

Seite zurück Startseite Seite vor
Erik Buchmann
EMail an: Owner@ErikBuchmann.de