8-bit Atmel Microcontroller: Output Ports open drain oder push pull oder was anderes

Gast #4259175
Lesenswert?

Hallo Forum,

habe nach Recherche von

http://www.atmel.com/Images/Atmel-8272-8-bit-AVR-microcontroller-ATmega164A_PA-324A_PA-644A_PA-1284_P_datasheet.pdf

nicht genau herausfinden können, was diese AVR Prozessoren (z.B. 
Atmega164 oder -328) für Output Ports haben:

Sind es

- Push-Pull (für mich Gegentakt Ausgangsstufen/ Komplementärstufe) oder
- open drain oder
- was ganz anderes.

Der Umstand, dass man einen PullUp Widerstand auf dem Chip aktivieren 
kann, spricht für Open Drain.

Wo kann ich das schwarz auf weiß nachlesen?

Danke für Hinweise, Laedi
#4259185
Lesenswert?

In dem von Dir verlinkten PDF findest Du auf den Seiten 318 und 319 
Angaben zur Output Low/High Voltage und Hinweise, das die I/Os strom 
sourcen und sinken können.

Das lässt eigentlich nur Push-Pull aus Deiner Lösungsliste zu.

Die Pull-Up Widerstände lassen sich für die I/Os nur in 
Eingangskonfiguration zuschalten.
Gast #4259188
Lesenswert?

Hi Stefan und Cyberlord,

danke für die schnelle Antwort. Habe bei meiner Suche

nach "Push-Pull" und "open" gesucht und nichts gefunden. Gut, dass es 
Leute gibt, die die 600 Seiten Doku so gut kennen.


Vielen Dank,

Laedi
#4259218
Lesenswert?

Noch einer schrieb:
> Der hat doch ein TWI Modul mit dem sich auch I2C realisieren lässt.
> Eigentlich müsste dafür der Pin Open-Dain können.
>
> Warum steht davon nichts im Datenblatt?

Es gibt µController, die in ihrer Pinsteuerung explizit Open Drain drin 
stehen haben. Weil man da die Pins so einstellen kann, dass ein Output 
Pin als Open Drain arbeitet.

Und es gibt welche, die keine explizite Fähigkeit zu Open Drain haben. 
Aber die es ihre Pins dennoch nutzen können, indem man den Pin nicht als 
Ausgang auf 0 und 1 setzt, sondern zwischen Ausgang=0 und Eingang 
umschaltet. Hier kann aber wichtig sein, dass Ausgangs- und 
Eingangsregister verschieden sind, was bei manchen alten Controllern 
nicht der Fall ist.
#4259220
Lesenswert?

Noch einer schrieb:
> Der hat doch ein TWI Modul mit dem sich auch I2C realisieren lässt.
> Eigentlich müsste dafür der Pin Open-Dain können.
>
> Warum steht davon nichts im Datenblatt?

Es gibt µController, die in ihrer Pinsteuerung explizit Open Drain drin 
stehen haben. Weil man da die Pins so einstellen kann, dass ein Output 
Pin als Open Drain arbeitet.

Und es gibt welche, die keine ausdrücklich erwähnte und konfigurierbare 
Fähigkeit zu Open Drain haben. Aber die es ihre Pins dennoch nutzen 
können, indem man den Pin nicht als Ausgang auf 0 und 1 setzt, sondern 
zwischen Ausgang=0 und Eingang umschaltet. Hier kann aber wichtig sein, 
dass Ausgangs- und Eingangsregister verschieden sind, was bei manchen 
alten Controllern nicht der Fall ist.
#4259330
Lesenswert?

Noch einer schrieb:
> Der hat doch ein TWI Modul mit dem sich auch I2C realisieren
> lässt. Eigentlich müsste dafür der Pin Open-Dain können.

Nicht nur eigentlich. Sobald man das TWI einschaltet, werden die SDA und 
SCL Pin-Treiber auf Open Drain umkonfiguriert.

> Warum steht davon nichts im Datenblatt?

Das steht sicher irgendwo. Im Datenblatt des ATmega8 steht es unter 
"Alternate Port Functions"
Gast #4259390
Lesenswert?

A. K. schrieb:
> Hier kann aber wichtig sein, dass Ausgangs- und Eingangsregister
> verschieden sind, was bei manchen alten Controllern nicht der Fall ist.

Du sprichst in Rätseln.
Wenn man bei der Initialisierung das Bit im Ausgangsregister auf 0 setzt 
und mit seinen Daten das Datenrichtungsregister füttert, benutzt man den 
unteren FET der PushPull-Ausgangsstufe als Open Drain.
#4259428
Lesenswert?

Werner M. schrieb:
>> Hier kann aber wichtig sein, dass Ausgangs- und Eingangsregister
>> verschieden sind, was bei manchen alten Controllern nicht der Fall ist.
>
> Du sprichst in Rätseln.
> Wenn man bei der Initialisierung das Bit im Ausgangsregister auf 0 setzt
> und mit seinen Daten das Datenrichtungsregister füttert, benutzt man den
> unteren FET der PushPull-Ausgangsstufe als Open Drain.

Bei Controllern mit gemeinsamem Ein/Ausgangsregister (z.B. alte PICs) 
greift man beim Lesen eines Eingangspins auf den Zustand des Pins zu, 
nicht auf den Zustand des Ausgangsregisters. Dennoch werden 
üblicherweise alle Bits des Ausgangsregisters beim Schreiben gesetzt, 
egal ob sie tatsächlich Ausgänge sind oder nicht.

Wenn man auf einem solchen Port eine read-modify-write Operation 
durchführt, dann werden alle Bits des Ausgangsregisters, die gerade 
Eingänge sind, so nebenbei auf Zustand des Pins gesetzt. Wenn also ein 
1-Wire Pin grad Eingang ist und auf 1, dann ist das Ausgangsregister nun 
1. Um nun diesen Pin auf Ausgang-0 zu setzen müsstest du beides 
gleichzeitig setzen, Richtung und Zustand.

Mit solchen Ports verbieten sich read-modify-write Operationen auf das 
Portregister, wenn man Open Drain Pins über Richtungsumschaltung 
benötigt, statt dessen benötigt man eine konsequent durchgezogene 
RAM-Schattenkopie des Ausgangsregisters.


Eine andere Fehlkonstruktion ist eine Portlogik mit gemeinsamer Adresse 
von Ein- und Ausgangsregister, bei der Ausgangspins auf Open Drain 
definiert werden können. Weil dann das Eingangsregister bei einem 
Ausgang den Zustand des Ausgangsregisters wiederspiegelt, nicht den des 
Pins. Was bei Open Drain nicht identisch sein muss, Ausgangsregister=1 
und Zustand=0 sind ja möglich. Es ist dann arg umständlich, den 
aktuellen Zustand des Pins in Erfahrung zu bringen, was z.B. beim clock 
stretching von I2C wichtig ist.


Eine sauber definierte Portlogik hat getrennt adressierte Eingangs- und 
Ausgangsregister. Dann ist der Spuk weg.
#4259707
Lesenswert?

A. K. schrieb:
> Mit solchen Ports verbieten sich read-modify-write Operationen auf das
> Portregister, wenn man Open Drain Pins über Richtungsumschaltung
> benötigt

Ich glaub Du hast da einen Denkfehler: Das Portregister wird doch zu 
keinem Zeitpunkt jemals geschrieben, nur gelesen und das auch nur 
während er auch auf Eingang steht. Geschrieben wird nur das DDR.
#4259723
Lesenswert?

Bernd K. schrieb:
> Ich glaub Du hast da einen Denkfehler: Das Portregister wird doch zu
> keinem Zeitpunkt jemals geschrieben, nur gelesen und das auch nur
> während er auch auf Eingang steht. Geschrieben wird nur das DDR.

Ein Pin kommt selten allein. Nicht der eine Open Drain Ausgang selbst 
verursacht das Problem. Andere (Push-Pull) Ausgänge auf dem gleichen 
Port sorgen für die problematischen Schreibzugriffe auf das 
Portregister.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren