Forum: Mikrocontroller und Digitale Elektronik DDRx für serielle Schnittstelle?


von Tobias H. (Gast)


Lesenswert?

Hi

Sagt man, wie muss ich das DDRx Register für die Pins der seriellen 
Schnittstelle setzen? RXD auf 0 (Eingang) und TXD auf 1 (Ausgang)? Oder 
beide auf Eingang?

Ciao Tobias

von Thorsten F. (thorsten)


Lesenswert?

Ist egal.

Die UART übergeht die Porteinstellungen für die beiden Pins.

von Tobias H. (Gast)


Lesenswert?

>Sagt man

..sollte natürlich "Sagt mal" heißen - egal...

Danke! Dann lass ich das Register einfach unangetastet.

Ciao Tobias

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Die Einstellungen des DDRx werden hier ignoriert. Allerdings kann man 
für RXD mithilfe des PORTx-Registers den internen PullUp setzen oder 
löschen. Das ist hilfreich beim Anschluß von Peripherie, die keinen 
eigenen High-Pegel im Ruhezustand erzeugen kann (Open Collector oder 
Open Drain-Ausgänge).

von Tobias H. (Gast)


Lesenswert?

wenn ich nicht weiß, ob mein Sensor, der an der seriellen Schnittstelle 
hängt, das kann oder nicht - besser den pull up aktivieren oder lassen?

Ciao Tobias

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Aktivieren! Die 0,2mA die der dann nach GND gezogen werden muß, sollte 
eigentlich jeder Sensor schaffen. Wenn´s ein OpenDrain ist, geht´s eh 
nicht ohne. Einfache 3-Bein-Hallsensoren zum Beispiel sind oft 
OpenCollector.

von marc989 (Gast)


Lesenswert?

Hi,
kommt immer auf den Controller an. Ich initialisiere die UART so, damit 
es geht:

void InitUART( void )
{
    DDR4_D42 = 1;   /* Enable SOT1 as output */
    DDR4_D40 = 0;   /* Enable SIN1 as input  */

    CDCR1 = 0x80;  /* set UART-prescaler, DIV=8 */

    SCR1  = 0x13;  /* 8-data bits, 1-stop bit, no parity,
                     Data frame, Tx/Rx enable  */
    SSR1  = 0x0A;  /* transfer starts with LSB 0x08 -- interrupt 
enable*/
    SMR1  = 0x19;  /* select Mode0, select asynchr.transfer,
                     set Baud rate to 9600, SOE enable */
    ICR13 = 0x04;  // normal interrupt level 4
}

Gruß Marc989

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.