PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerfrage, Ein und Ausgänge etc...



The_Darkside
04.11.2005, 07:58
Erstmal wollt ich sagen, echt int. Board hier... lese nun auch schon eine Weile, aber jetzt muss ich mal was fragen. Prinzipiell hab ich schon Assembler programmiert, aber das ist so lange her, das ich irgendwie grad mal einen Denkanstoß brauche...

Ich wollte erst mal ganz einfach anfangen und habe einen ATMEGA16, daran zwei LED's und 3 Taster. Die Taster sind an PD2, PD3 & PD4 angeschloßen, die LED's an PD5 & PD6. Die LED's zum Leuchte zu bringen ist nicht das Problem, jedoch hatte ich vor einfach erst mal per Taster die LED leuchten zu lassen.
Daher setz ich als erstes alle Pins des Port auf "input" vergl. mit dem Wert für den Schalter und entscheide was zu tun ist, entweder ich lass das in einer Schleife laufen bis irgendwann der Taster gedrückt ist und springe dann in den Teil der die LED "anschaltet". Da setze ich alle Pins auf Ausgang und setze den, an dem die LED hängt auf "High". Sollte ja eigentlich gehen... dann lass ich die Sequenz als Schleife laufen so das die LED auf alle Ewigkeit anbleiben würde. Könnte nat. auch wieder abfragen ob der Taster noch gedrückt ist, wollt es aber erst mal ne übertreiben.
Hab ich irgendwo nen Denkfehler, sollte ich viel. nur die Pins auf Ein- bzw. Ausgang schalten die entsprechend genutzt werden.
Vermutl. ist es nur ein kleiner Denkfehler und wenn die Antwort hier steht, hauts mich untern Tisch, wegen meiner Dummheit...
Mein Programmcode

...
WAIT:
ldi Temp, 0x00
out DDRD, Temp
in R1, PORTD
ldi Temp, 0x10
cp R1, Temp
breq AN
brne WAIT

AN:
ldi Temp, 0xFF
out DDRD, Temp
ldi Temp, 0x40
out PORTD, Temp
rjmp AN

SprinterSB
04.11.2005, 08:03
Eingänge fragt man ab über das PIND Register, über PORTD liest du nur zurück, was du selbst nach PORTD geschrieben hast.

Wenn du alle Ports auf OUT stellst, dann auch die, an denen die Taster hängen! *AUTSCH*.

The_Darkside
04.11.2005, 08:25
Irgendsowas musste es ja sein... ](*,)
Werd ich dann entsprechend umsetzen, heute abend... hab zu Hause leider kein Inet und in der Firma kein Programmierboard...

The_Darkside
05.11.2005, 12:43
Nun habe ich die Ports zum Ausgeben auf "Out" gestellt und die an denen die Taster sind auf "In". Frage dann das PIND Register ab, "schau nach ob der Taster gedrückt ist und es passiert trotzdem nichts,
wbei im AVR Studio funkt. es. Ich versteh die Welt nicht mehr.


...
WAIT:
ldi Temp, 0b00010000
out DDRD, Temp
in R1, PIND

cp R1, Temp
breq AN
brne WAIT



Die Funktionen für die Ausgabe einzeln funkt. Mein Fehler liegt also immer noch bei der Abfrage der Taster.

Vielleicht hat noch jemand ne Idee... bzw. nen Hinweis