Forum: Mikrocontroller und Digitale Elektronik AtMega - Pullup aktivieren


von Rainer B. (guitero)


Lesenswert?

Hallo,

ich möchte gerne einen definierten Pegel für meine USART Schnittstelle 
festlegen. Ich benutze einen Pegelwandler zur Übertragung der Daten zum 
PC. Wenn Tx,Rx vom Wandler getrennt sind, werden wahllos Interrupt 
ausgelöst.

Ist es möglich dieses Verhalten durch das Schalten des internen Pullups 
als Eingang zu unterbinden.
Im Datenblatt zum Atmega162 steht, dass wenn bei der USART
der Receiver aktiviert wird, auch der dazugehörige Rx-Pin automatisch 
als Eingang konfiguriert wird.

Heißt das ich muss nur noch PORTDx (beim atmega162 PORTD2) setzen um den 
Pullup zu aktivieren?
Leider funktioniert das nicht. Oder was verstehe ich da falsch?


Gruß,

guitero

von Hc Z. (mizch)


Lesenswert?

Du erwähnst einen Pegelwandler.  Dann wird dessen Ausgang mit dem Rx-Pin 
verbunden sein.  Diesem Ausgang wird es egal sein, ob da noch ein paar 
10k gegen Vcc dran hängen oder nicht.  Ergebnis: Dein PullUp ist 
wirkungslos.  Wenn Du Maßnahmen ergreifst, dann am sind sie nur am 
Eingang des Pegelwandlers sinnvoll.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Du erwähnst einen Pegelwandler.
Und auch:
>> Wenn Tx,Rx vom Wandler getrennt sind...

von Rainer B. (guitero)


Lesenswert?

Hallo,

> Du erwähnst einen Pegelwandler.  Dann wird dessen Ausgang mit dem Rx-Pin
> verbunden sein.

Mein Post bezieht sich auf den Fall, wenn ich TxD und RxD vom 
Pegelwandler abziehe und kein definierter Zustand herrscht. An diesem 
Punkt möchte ich ansetzen, um ungewollte Interrupts zu vermeiden.

Gruß,

sharth

von Karl H. (kbuchegg)


Lesenswert?

Rainer B. schrieb:
> Hallo,
>
>> Du erwähnst einen Pegelwandler.  Dann wird dessen Ausgang mit dem Rx-Pin
>> verbunden sein.
>
> Mein Post bezieht sich auf den Fall, wenn ich TxD und RxD vom
> Pegelwandler abziehe und kein definierter Zustand herrscht. An diesem
> Punkt möchte ich ansetzen, um ungewollte Interrupts zu vermeiden.

Die Frage ist, ob die USART Hardware im Mega, da überhaupt noch einen 
Pullup zuschalten lässt. Im Zweifeslfall würde ich es mal mit einem 
externen Pullup probieren.

von Rainer B. (guitero)


Lesenswert?

Hallo,

> Die Frage ist, ob die USART Hardware im Mega, da überhaupt noch einen
> Pullup zuschalten lässt.

Ich zitiere mal aus dem Handbuch. Leider verstehe ich nicht ganz genau 
was mir das sagen soll:

RXD0 – Port D, Bit 0
RXD0, Receive Data (Data input pin for USART0). When the USART0 Receiver 
is enabled this pin is configured as an input regardless of the value of 
DDD0. When USART0 forces this pin to be an input, the pull-up can still 
be controlled by the PORTD0 bit.

Gruß,

guitero

von Karl H. (kbuchegg)


Lesenswert?

Rainer B. schrieb:
> Hallo,
>
>> Die Frage ist, ob die USART Hardware im Mega, da überhaupt noch einen
>> Pullup zuschalten lässt.
>
> Ich zitiere mal aus dem Handbuch.

Meine Hochachtung.
Endlich mal wer, der im Handbuch nachliest.

> Leider verstehe ich nicht ganz genau
> was mir das sagen soll:

Genau das. Verwendung des Pullup ist möglich

von Rainer B. (guitero)


Lesenswert?

Hallo Rainer,

> Genau das. Verwendung des Pullup ist möglich

das war mir schon klar. Nur nicht wie das ganze funktionieren soll.
PORTD0 soll für den Pullup zuständig sein. Also hab ich den auf 1 
gesetzt.
Und das ganze als Eingang:
1
sbi PORTD, 0
2
sbi DDRD, 0

Wo ist mein Fehler dabei? Bzw. was fehlt noch? Der Interrupt wird auf 
diese Weise immer noch wahllos ausgelöst.

Gruß,

guitero

von Karl H. (kbuchegg)


Lesenswert?

Rainer B. schrieb:

Machst du das bevor oder nachdem du den UART aktiviert hast? Ich würde 
mal schätzen, dass die UART Hardware den Pullup per Default abschaltet 
und du den Pullup danach noch einmal aktivieren musst.

von Michael U. (amiga)


Lesenswert?

Hallo,

Rainer B. schrieb:

> sbi DDRD, 0

das schaltet PortD0 aber auf Ausgang...

Gruß aus Berlin
Michael

von Karl H. (kbuchegg)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> Rainer B. schrieb:
>
>> sbi DDRD, 0
>
> das schaltet PortD0 aber auf Ausgang...

Er hat Glück, dass sich die UART Hardware das sowieso zurecht biegt, wie 
sies braucht :-)

von Hc Z. (mizch)


Lesenswert?

Lothar Miller schrieb:
>> Du erwähnst einen Pegelwandler.
> Und auch:
>>> Wenn Tx,Rx vom Wandler getrennt sind...

Es ist durchaus nicht eindeutig, auf welcher Seite des Wandlers Rx und 
Tx getrennt sind.  Ich nahm die Seite an, auf der es zum PC weitergeht. 
Das nur der Vollständigkeit halber.

von Rainer B. (guitero)


Lesenswert?

Hallo,

> Machst du das bevor oder nachdem du den UART aktiviert hast?

Ich stelle den Pullup ein,nachdem ich die UART aktiviert habe.

>das schaltet PortD0 aber auf Ausgang...

Ja, das stimmt. Hatte beides ausprobiert und leider funktioniert beides 
nicht.
Dann sollte folgender Befehl ja eigentlich schon ausreichen:

sbi PORTD, 0

Wahrscheinlich  mache ich irgendetwas grundlegendes falsch.
Aber danke für eure Hilfe!

Gruß,

guitero

von Karl H. (kbuchegg)


Lesenswert?

Rainer B. schrieb:

> Wahrscheinlich  mache ich irgendetwas grundlegendes falsch.

Das Grundlegendste, was du auf jeden Fall falsch machst:
Du lässt uns im Nebel stochern indem du nicht genug Code postest.

von Rainer B. (guitero)


Lesenswert?

> Ich stelle den Pullup ein,nachdem ich die UART aktiviert habe.

Wenn ich den PORTD0 für den Pullup zuerst setze und dann die UART 
initialisiere funktioniert es. Hätte allerdings gedacht, dass es 
umgekehrt sein müsste. Werde das nochmal weiter testen! Vielleicht war 
es nur Zufall. Falls jemand eine dafür Erklärung hat, immer her damit!

Vielen Dank für eure Hilfe!


Gruß,

guitero

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.