Von UART ungenutze PIN's des PORT

OP #3745593
Lesenswert?
• ▲
▼
Hallo,

ich habe die Suchefunktion genutzt aber nicht gefunden, was mich bewegt:

Ich habe ein wenig Port-Engpass in meinem Projekt und wollte fragen, ob 
man den Port, über den UART abgewickelt wird, die frien PIN's für andere 
Aufgaben nutzen kann.

Wenn ja, wie wird das DDR gesetzt?

Vielen Dank!

Kai
Gast #3745616
Lesenswert?
• ▲
▼
Meine Glaskugel sagt, dass du ein AVR benutzt...

Dann ja, UART-Pins sind auch nur ganz normale Pinbs, die als GPIO 
genutzt werden können.

Thema DDR setzen: na ja, so wie es deine Anwendung erfordert (hast es ja 
nicht verraten, was da darauf soll)

Üblicherweise macht man es aber ganz anders:

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister

Oder aber sowas hier:

http://www.mikrocontroller.net/articles/Port-Expander_PCF8574

Ich persönlich nehme auch gerne mal einen kleinen uC als "intelligenten 
Portexpander" und steuere ihn über UART oder SPI...
Moderator Persönliche Seite #3745970
Lesenswert?
• ▲
▼
Kai E. schrieb:
> Ich habe ein wenig Port-Engpass in meinem Projekt und wollte fragen, ob
> man den Port, über den UART abgewickelt wird, die frien PIN's für andere
> Aufgaben nutzen kann.

Ja, natürlich kann man das.

> Wenn ja, wie wird das DDR gesetzt?

Du setzt diejenigen Bits, die Du als Ausgänge benutzen willst, Du 
löschst diejenigen Bits, die Du als Eingänge benutzen willst.

Ach, Du willst die DDR-Bits nicht einzeln setzen bzw. löschen, sondern 
mit einem Befehl das ganze DDR-Register beschreiben? So etwas geht auch, 
da - wenn UART aktiviert - die dafür zuständigen DDR-Registerbits 
ignoriert werden.

Unschön ist es trotzdem. Setze und Lösche besser die Bits einzeln im 
DDR-Register, die Du auch brauchst.
#3746013
Lesenswert?
• ▲
▼
Hier ein kleines Bespiel.
1
// RX ist an bit 0
2
// TX ist an bit 1
3
// AA, BB, CC sind bits 2,3,4 und alles Eingänge
4
// UU, VV, WW sind bits 5,6,7 und alles Ausgänge
5
// Die Werte sind schon in der Libc definiert
6
// Du kannst Sie aber umdefinieren damit dein Code einfacher lesbar wird
7
#define AA PB2
8
#define BB PB2
9
// usw
10

11
// DDR setzen hier PORTB bzw DDRB. Geht mit allen PORTs so
12
DDRB = (1<<UU)|(1<<VV)|(1<<WW)|(0<<CC)|(0<<BB)|(0<<AA)|(1<<TX)|(0<<RX)
13

14
// Einzelne Ausgänge setzen auf HIGH schalten
15
PORTB |= (1<<UU)|(1<<VV)
16

17
// auf LOW schalten
18
PORTB &= (1<<WW)|(1<<VV)
19

20
// Einzelnen Eingang lesen
21
VariablefuerAA = PINB & ( (1<<AA) )
22

23
// Mehrere Eingänge auf einmal lesen
24
VariablefuerBBCC = PINB &( (1<<BB)|(1<<CC)
25

26
// Testen ob ein Eingang low oder high ist
27
VariablefuerAA = PINB & ( (1<<AA) )
28
if( VariablefuerAA == 0 ) // Testet auf low, egal an welchem bit AA ist
29
{...}
Gast #3746043
Lesenswert?
• ▲
▼
Falls es ein AVR ist: Null Problem.

Dir fehlen dann halt nur Bit 0 und Bit 1.

Die Richtungsbits, Pull-Up u. s. w. werden wie gehabt angesprochen.

Keine Ahnung, aber möglicherweise, spiegeln sich der aktuelle RxD- und 
TxD-Zustand im Bitmuster beim Lesen. Einfach ignorieren.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.