Forum: Mikrocontroller und Digitale Elektronik IO-Pins während des Programmablaufs änderbar ?


von Hans J. (step_up_mosfet)


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 :-( )

von Hauke Radtki (Gast)


Lesenswert?

mit was willst du programmieren? (welche sprache)
Erst mal ne antwort: es geht.

von Thomas (Gast)


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.

von Hans J. (step_up_mosfet)


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 ?

von Rolf Magnus (Gast)


Lesenswert?

> Gibt es da eine Erklärung ?

Vermutlich.

> oder
> Soll ich das Programm mal Posten ?

Ja.

PS: Du plenkst!

von Thomas O. (Gast)


Angehängte Dateien:

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

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.