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
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.
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.
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.
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
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?
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ß.
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.
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.
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"
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.