Verhalten eines Portpins nach Reset

OP #5589995
Lesenswert?

Hallo zusammen,

ich wüsste gerne, welche Polarität ein Portpin eines ATmega annimmt, 
wenn er gleich nach dem Reset als Output konfiguriert wird bzw. wovon 
die Polarität abhängt.

Laut Datenblatt sind nach einem Reset die Ports als Eingang mit 
deaktivierten Pull-Up-Widerständen konfiguriert, d.h. der Pin hat kein 
definiertes Potenzial.

Was passiert nun, wenn ich gleich nach dem Reset einen Portpin als 
Ausgang konfiguriere? Wird er dann 0 oder 1? Oder hängt es davon ab, was 
im PORT-Register steht? Dann müsste er logischerweise 0 werden, da die 
Pull-Up-Widerstände ja deaktiviert sind (PORTx = 0).

Danke für Eure Hilfe!

Grüße,

Ralf
#5590008
Lesenswert?

Hi,
erst wird das Datenrichtungsregister auf Eingang oder Ausgang definiert, 
dann müssen die Pullups in einem hier zulässigen Befehl "out" auch 
gesetzt werden.
Dann erst erscheint die logische 1 am Ausgang.

Codeschnipsel:

portinit:
ldi  temp, 0xFF  ;PortB Ausgang
out  ddrb, temp   ;
out  portb, temp  ;Pullups aktivieren
ret

ciao
gustav
#5590020
Lesenswert?

Hi,
für den RXD und TXD ist das ganz wichtig, wenn einzelne Portbits noch 
anderweitig "gepollt" werden:
....
ldi  temp, 0b00111010 ;PortD RS232 I/O, DCF77 input
out  ddrd, temp  ;PD0=RXD;PD1=TXD;PD6=DCF77 input(low active)
ldi  temp, 0xFF  ;Pullups auch fuer RXD
out  portd, temp
...
(Je nach MCU sind die RXD und TXD Ports anders definiert.
Hier für die ATtiny4313-MCU.)

ciao
gustav
#5590073
Lesenswert?

Hallo,

Karl B. schrieb:
> portinit:
> ldi  temp, 0xFF  ;PortB Ausgang
> out  ddrb, temp   ;
> out  portb, temp  ;Pullups aktivieren
> ret

der Kommentar ;Pullups aktivieren ist Unfug.
Als Ausgang setzt der AVR den Pin auf High und zwar direkt weil er eine 
Push/Pull-Endstufe hat.
Ansonsten ist er Low, auch aktiv, weil das Portregister eben nach Reset 
0 enthält.
Ob der interne PullUp dabei am Oin dran bleibt oder nicht macht als 
Ausgang letztlich nur den Unterschied, ob einige µA mehr oder weniger 
bei Low durch den unteren MosFET fließen.

Gruß aus Berlin
Michael
Gast #5590091
Lesenswert?

Ralf G. schrieb:
> Was passiert nun, wenn ich gleich nach dem Reset einen Portpin als
> Ausgang konfiguriere? Wird er dann 0 oder 1? Oder hängt es davon ab, was
> im PORT-Register steht?

Bei einem Reset wird das PORT-Register auch gelöscht. Damit steht der 
Zustand des Ausgangs beim Umschalten vom Datenrichtungsregister fest.
(s. Prinzipschaltbild im Datenblatt im Kap. "Ports as General Digital 
I/O")
Gast #5590111
Lesenswert?

Ralf G. schrieb:
> Was passiert nun, wenn ich gleich nach dem Reset einen Portpin als
> Ausgang konfiguriere?
So wie ich das sehe, hast du das alles richtig erkannt.

Tipp:
Im Datenblatt sind sämtliche Defaultwerten, nach einem Reset, angegeben.
Es gibt keinen Grund an den dortigen Angaben zu zweifeln.
#5590115
Lesenswert?

Michael U. schrieb:
> Ob der interne PullUp dabei am Oin dran bleibt oder nicht macht als
> Ausgang letztlich nur den Unterschied, ob einige µA mehr oder weniger
> bei Low durch den unteren MosFET fließen.

Hi,
bei einigen Anwendungen brauch er's eben. Nicht immer. Nur da, wo der 
interne Pullup nicht mehr ausreicht (als Quasi-Busabschluss.. und das 
ist bei USART/RS232 meistens der Fall.)

App Note:
2512K-AVR-01/10
Seite 60f Atmega8515

ciao
gustav
(Firma: Vescomp) #5590131
Lesenswert?

Karl B. schrieb:
> Hi,
> bei einigen Anwendungen brauch er's eben. Nicht immer. Nur da, wo der
> interne Pullup nicht mehr ausreicht (als Quasi-Busabschluss.. und das
> ist bei USART/RS232 meistens der Fall.)

 Nein, natürlich ist das Unfug.
 Pullup bei einem Pin der als Ausgang definiert ist kann nur
 negative Auswirkungen haben, deswegen ist bei AVR so etwas auch
 nicht vorgesehen, vielmehr wird der Pullup bei Ausgang ausgeschaltet.

 ATMEL:
1
If PORTxn is written a logic one when the pin is configured as an input pin, the pull-up
2
resistor is activated. To switch the pull-up resistor off, PORTxn has to be written a logic
3
zero or the pin has to be configured as an output pin. The port pins are tri-stated when a
4
reset condition becomes active, even if no clocks are running.
#5590213
Lesenswert?

Ralf G. schrieb:
> einen Portpin als
> Ausgang konfiguriere

OK,ok,
es ging um Ausgang nicht Eingang.
Hatte mich mehr auf Eingang kapriziert.
Beispiel:
Beim DCF77-Empfänger kann es passieren, dass er nicht läuft, weil ein 
Pullup nicht eingebaut war. In diesem Falle reicht unter Umständen der 
Pullup vom Port (Eingang) aus, um den Empfängerbaustein zum Leben zu 
erwecken. Da muss man ihn also setzen.

In der Simu ist es auch klar.
Ohne extra nochmal Pullups zu aktivieren.
Bei Ausgang.
Nächster Step (F10) wäre gewesen, dann etwas in den Port 
reinzuschreiben.

ciao
gustav
Angehängte Dateien:
OP #5590244
Lesenswert?

Cyblord -. schrieb:

> Jetzt könntest du es ihm noch vortanzen und dabei singen. Aber mehr geht
> dann bald auch nicht mehr.

@Cyblord: Einer meiner Chefs hat mir vor vielen Jahren gesagt: es gibt 
keine dummen Fragen, es gibt nur dumme Antworten. Wie man hier sieht hat 
sich daran bis heute nichts geändert.

Als das Wissen verteilt wurde hast Du vielleicht mehr abbekommen als 
andere, sei dankbar dafür. Dafür mangelt es Dir erheblich an guten 
Manieren. Du kennst mich überhaupt nicht aber machst mich dumm an nur 
weil ich eine Deiner Meinung nach "dumme" Frage gestellt habe.
#5590281
Lesenswert?

Ralf G. schrieb:
> @Cyblord: Einer meiner Chefs hat mir vor vielen Jahren gesagt: es gibt
> keine dummen Fragen, es gibt nur dumme Antworten.

Da hatte dein Chef eben unrecht. Ich lese hier täglich dumme und 
saudumme Fragen.

> Du kennst mich überhaupt nicht aber machst mich dumm an nur
> weil ich eine Deiner Meinung nach "dumme" Frage gestellt habe.

Ich lese deine Beiträge und weiß somit dass du dumme Fragen stellst. 
Reicht mir.
(Firma: Vescomp) #5590336
Lesenswert?

Thomas W. schrieb:
> Aus Sicht des Wissenden ist die Frage dumm, aus Sicht des Unwissenden
> nicht.

 Das hat mit Wissen oder Unwissen nichts zu tun. Unwissende können
 schlaue Fragen stellen und Wissende stellen sehr oft dumme.
 Dumm oder nicht dumm hat sehr wenig mit Wissen zu tun, aber sehr viel
 mit IQ, das versuche ich vergeblich diesen Wikipedia-Experten
 klarzumachen die hier endlos ihr Google-Wissen verbreiten.

Ralf G. schrieb:
> @Cyblord: Einer meiner Chefs hat mir vor vielen Jahren gesagt: es gibt
> keine dummen Fragen, es gibt nur dumme Antworten. Wie man hier sieht hat
> sich daran bis heute nichts geändert.

 Doch, es gibt schon dumme Fragen.
 Aber deine Frage war keinesfalls dumm, du hast schon richtig
 getippt, wolltest nur sicher sein - sofern war es für mich eine
 durchaus normale Frage.
#5797102
Lesenswert?

Ich habe ein Problem mit der AVR ATTiny13A.

Ich versuche auch den Port PB5 als Ausgang verwenden. Ein n-Kanal FET 
soll eine LED schalten. Im Simulator der Port PB5 funktioniert normal, 
auf dem Board der Ausgang ist ständig hoch und die LED leuchtet. Alle 
andere Ports funktionieren normal.
Der Ausgangschaltung ist auf dem Bild, anstelle von R2 ist ein 5mA LED. 
Direkt auf dem PB5 ist ein Kondensator zum Grund für RESET beim 
Einschalten.

Irgendeine Idee was soll ich noch probieren? Eine NPN Stufe wirkt als 
RESET also funktioniert der Chip nicht. ( 10 kOhm Basiswiderstand).

Danke!
Angehängte Dateien:
Gast #5797141
Lesenswert?

PB5 ist beim ATTiny 13 und ähnlichen ein Eingang für RESET.

Soll er als normaler Eingang/Ausgang genutzt werden, so muss RSTDISBL 
fuse bit geändert werden.  Dann ist aber eine Programmierung nur noch 
miteinem HV-Programmer möglich.

Gruß  EMV
(Firma: privat) #7808993
Lesenswert?

Ralf G. schrieb:

ich wüsste gerne, welche Polarität ein Portpin eines ATmega annimmt, wenn er gleich nach dem Reset als Output konfiguriert wird bzw. wovon die Polarität abhängt.

Hallo zusammen, auch wenn das Thema schon älter ist, ein Tip, da ich ein ähnliches Verhalten bei einen ATMega328 hatte. Ich wollte den PortB als SPI konfigurieren, nach dem die Pins (CLK, MOSI, CS) als Ausgang definiert waren, war ihr Zustand 0. Ein DDRD |= (1<<PD0) jedoch mit einer 1 startet.

Ich habe es so gelöst, das ich den Port erst auf 1 gesetzt habe und dann die Datenrichtung definiert habe. PORTB |= (1<<PB2) | (1<<PB3) | (1<<PB5); DDRB |= (1<<PB2) | (1<<PB3) | (1<<PB5);

Das hat funktioniert.

Grüße

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