IO-Pins während des Programmablaufs änderbar ?

OP #350902
Lesenswert?

Hy (Ich bin Anfänger)

Es würde mich interessieren ob man die I/O-Ports vom ATmega wärend des
Betriebs anders definieren kann.
.. also wenn ich die 8 Pins vom Port D als  Eingänge brauch,
 wenn ich einen Pin (z.B. PC1 vom Port C) auf GND lege
und
wenn ich PC1 auf VDD lege sind es Ausgänge.

- > geht sowas ?

(Ich denke das geht, kann es aber nicht testen da ich bei meinen ersten
LED-Blink-Test bei meinem Test-Atmega8 den Reset-Pin als Ausgang
definiert habe und jetzt nicht mehr über SPI programmieren kann :-( )
Gast #350904
Lesenswert?

Du kannst die IO-Ports im Programm umschalten, tatsächlich musst du dies
sogar :) Kurz: Die Funktion der Ports wird ohnehin zu Laufzeit
eingestellt und nicht etwa durch den Programmer oder dergleichen.

Die Einstellung der Funktion der Ports ist nichts anderes als der
Zugriff auf spezielle Register des µC. Das kann prinzipiell überall im
Programmablauf gemacht werden. In deinem Fall muss also nur der Zustand
eines Einganges, z. B. in der Hauptschleife geprüft werden und abhängig
davon wird der Zustand der anderen Ports gesetzt.

Wichtig ist natürlich die externe Beschaltung bei solchen Spielereien,
da es sonst beim Umschalten der falschen Pins zu Kurzschlüssen kommen
kann... Das Verfahren des Umschaltens ist im Übrigen nicht total
unüblich, so kann man beispielsweise LEDs und Taster an den selben Pins
per Eingang und Ausgang betreiben.
OP #350905
Lesenswert?

Das ist wirklich cool,
das heißt dass man damit ne menge machen kann.

(Ich programmiere in AVR-Studio, benutze das USBisp von Matwei.de )
(meine testschaltung:
PortD als LED-Reihe (binärzähler)
PortC als Tastereingang
PortB als LED-Ausgang (Zustandsanzeige ob Taster an PortC gedrückt )
)

Aber jetzt noch ne Frage:
Bei meiner testschaltung und auch im AVR-Studio ist mir aufgefallen
dass  die Signale invertiert sind wenn ich sie in der Schleife
(for(;;)) setze, wenn ich sie im "Event-Handler" (der ausgelöst wirt
wenn der Zähler überläuft) setze sind sie richtig gesetzt.

Gibt es da eine Erklärung ?
oder
Soll ich das Programm mal Posten ?
Gast #350907
Lesenswert?

Könntest einen Port nur für Ausgangssignale nehmen und diesen per 573er
Latches vervielfachen und mit einem anderen das ganze als
Eingangsvervielfacher benutzen, dann müsstest du nicht zw. I und O
umschalten.

Habe damit eine Porterweiterung gebaut damit ich alle Adressleitungen
einen externen EEPROMs versorgen kann. Ich habe dann noch
10kOhm-Widerstandsnetzwerke als Pulldown an die Eingänge der Latches
gelegt. Kannst mal nach 28c64b oder 573 suchen dann findest du meine
Schaltung
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren