Forum: Mikrocontroller und Digitale Elektronik 8-bit Atmel Microcontroller: Output Ports open drain oder push pull oder was anderes


von Laedi (Gast)


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

von Cyblord -. (cyblord)


Lesenswert?

14.1 :

"Each output buffer has symmetrical drive
characteristics with both high sink and source capability."

Bei Electrical Characteristics kann man das auch sehen: Gleiche Ströme 
für Sink und Source.

Sind also PushPull.

Die Pullups sind für Eingänge da.

von Stefan P. (form)


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.

von Cyblord -. (cyblord)


Lesenswert?

Stefan P. schrieb:
> Die Pull-Up Widerstände lassen sich für die I/Os nur in
> Eingangskonfiguration zuschalten.

Was für neuere AVRs aber nicht mehr stimmt. Dort gibt es getrennte PUE 
Register welche das Zuschalten des PullUps immer erlauben. z.B. Tiny841.

von Laedi (Gast)


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

von Noch einer (Gast)


Lesenswert?

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?

von Walter T. (nicolas)


Lesenswert?

Noch einer schrieb:
> Eigentlich müsste dafür der Pin Open-Dain können.

Open drain = Wechsel zwischen pull auf low oder offener Eingang

Mit der Einschränkung zum "echten" open drain, daß der High-Pegel < VCC 
+0.6 V sein muß.

von (prx) A. K. (prx)


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.

von (prx) A. K. (prx)


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.

von Axel S. (a-za-z0-9)


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"

von Werner M. (Gast)


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.

von (prx) A. K. (prx)


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.

: Bearbeitet durch User
von Bernd K. (prof7bit)


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.

von (prx) A. K. (prx)


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.

: Bearbeitet durch User
von Konrad S. (maybee)


Lesenswert?

ATtiny und ATmega haben Push-Pull-Ausgänge, Open-Drain lässt sich durch 
Wechsel zwischen Eingang und Ausgang nachstellen.

Ausgänge beim ATxmega lassen sich konfigurieren, Push-Pull und 
Open-Drain sind zwei der Möglichkeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.