PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bedarfsgerechte Portumschaltung



hardware.bas
15.12.2010, 14:35
Bei der Verbindung eines Atmega8 mit einer C-Control (siehe mein
Beitrag in der entsprechenden Rubrik) fiel mir auf, dass die C-Control
beim Einschalten teilweise undefinierte Schaltzustände einnimmt.
Das gehört zwar nicht zum hiesigen Thema, jedoch habe ich jetzt folgende
Frage zur AVR-Programmierung (BASCOM): Ist es möglich die Ports des
AVR, welche Signale senden sollen, nur zum Beginn des Zweckes als
Ausgang zu dimensionieren und danach wieder als Eingang? Im Programm
also hin und her? Da das mit dem Analogmultiplexer problemlos
funktioniert, glaube ich zwar, dass das auch mit der dauernden
Umschaltung auf Ein- und Ausgang funktioniert, will es jedoch gern
wissen, bevor ich was zerschiesse. Das würde den (nicht mehr gut
möglichen) Einbau von Schutzwiderständen vermeiden.
Vielen Dank und viele Gruesse. Micha

for_ro
15.12.2010, 16:02
Hallo Micha,
über das DDR Register kannst du jeden Pin beliebig hin und herschalten.
Aufpassen musst du dabei höchstens auf den Zustand des Ports beim Umschalten. Wenn du von Eingang auf Ausgang umschaltest, wird ein evtl. eingeschalteter PullUp ausgeschaltet.

Mega8, Seite 52:
When switching between tri-state ({DDxn, PORTxn} = 0b00) and output high ({DDxn, PORTxn} = 0b11), an intermediate state with either pull-up enabled ({DDxn, PORTxn} = 0b01) or output low ({DDxn, PORTxn} = 0b10) must occur. Normally, the pull-up enabled state is fully acceptable, as a high-impedant environment will not notice the difference between a strong high driver and a pull-up. If this is not the case, the PUD bit in the SFIOR Register can be set to disable all pull-ups in all ports.
Switching between input with pull-up and output low generates the same problem. The user must use either the tri-state ({DDxn, PORTxn} = 0b00) or the output high state ({DDxn, PORTxn} = 0b11) as an intermediate step.

hardware.bas
15.12.2010, 18:11
Vielen Dank for_ro. Wenn ich das richtig verstanden habe wird ein
Pin, welcher bisher auf INPUT und MIT PULLUP geschaltet ist,
durch das Umschalten auf OUTPUT auf 0 gesetzt. Also Beispiel:
- DDRC = &B00000000 Port ist Eingang
- PORTC = &B11111111 Alle PullUps an
Jetzt wird umgeschaltet mit:
- DDRC = &B11111111
Hat das DDRC-Register nun &B000000 oder immer noch &B11111111 ?
Oder Kurz gesagt: Lösche ich das DDRC-Register durch Umschalten
des PORTC-Registers auf OUTPUT automatisch?
Vielen Dank und viele Gruesse. Micha

for_ro
15.12.2010, 18:34
Hat das DDRC-Register nun &B000000 oder immer noch &B11111111?
Wenn du in das DDRC Register etwas reinschreibst, bleibt dieser Wert erhalten.


Oder Kurz gesagt: Lösche ich das DDRC-Register durch Umschalten des PORTC-Registers auf OUTPUT automatisch?
Anders herum: Durch Schreiben ins DDRC Register wird evtl. der Wert des PortC Registers abgeändert. Das PortC Register wird ja nicht auf Output gesetzt, sondern das DDRC Register. Mit dem Port Register kannst du die ausgegebene Spannung am Anschluss ändern.

hardware.bas
15.12.2010, 21:11
Ok, dann werd ich das testen und ggflls. umschreiben.
Vielen Dank, das Problem ist jetzt insofern gelöst, dass
ich mit 4 Leitungen eine bidirektionale parallele Verbindung
zum Austausch von Ziffern herstellen kann.
VG Micha

hardware.bas
16.12.2010, 13:30
Nun wird die Kommunikation mit 6 Leitungen bidirektional laufen und es
müssen keine Ziffern den Stellen zugeordnet werden. Da kein Wert grösser
als 63 ist, reichen 6 Bit. VG micha