mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AtMega - Pullup aktivieren


Autor: Rainer B. (guitero)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Rainer B. (guitero)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rainer B. (guitero)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rainer B. (guitero)
Datum:

Bewertung
0 lesenswert
nicht 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:

sbi PORTD, 0
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Rainer B. schrieb:

> sbi DDRD, 0

das schaltet PortD0 aber auf Ausgang...

Gruß aus Berlin
Michael

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rainer B. (guitero)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rainer B. (guitero)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.