Ich arbeite mich gerade in die Programmierung des ATMega16 von Atmel ein. Dazu habe ich ein Interrupt-gesteuertes Programm erstellt, welches LED0 auf dem STK500 an(IRQ0) bzw. ausschaltet (IRQ1), realisiert über die Taster SW2 und SW3. Klappt prima. Anschließend wollte ich das gleiche mal per Polling durchführen. In der Simulation gehts auch wunderbar, nur in Realitas nicht... Dort tut sich gar nichts. Kann mir jemand einen Tipp geben? Bin noch blutiger Anfänger im Bereich uP. Besten Dank Die wesentlichen Codeteile (voller Quelltext siehe Anhang): START: in akku, PIND; Status der Taster einlesen ;wenn Taster SW2 (Pin3) gedrueckt wurde, LED0 AUSschalten ldi temp, 0b00000100; cp akku, temp; breq LED0_AUSschalten; ;wenn Taster SW3 (Pin4) gedrueckt wurde, LED0 ANschalten ldi temp, 0b00001000; cp akku, temp; breq LED0_ANschalten; rjmp START; Endlosschleife ;--- Sprunglogik --- LED0_AUSschalten: rcall sub_LED0_AUSschalten; rjmp START; LED0_ANschalten: rcall sub_LED0_ANschalten; rjmp START; ;---Eventhandler sub_LED0_AUSschalten: sbi PORTB, 0; ret; sub_LED0_ANschalten: cbi PORTB, 0; ret;
aus welcher Controller-Familie hast du denn dein vVorkenntnisse? Siehht irgendwie nach Z80-Programmiererei aus :-), aber das ist ja erstmal egal. Wahrscheinlich wirds daran liegen, dass du die pullups an PortD nicht aktiviert hast. Also: ldi r16, 0xff out PortD, r16
Hi, beim STK500 geben nicht gedrückte Taster den Wert 1 zurück. Nachdem du PIND komplett in akku einliest, steht dort z.B bei gedrücktem Taster SW2 der Wert 0b11111011. Die Überüfung einzelner Bits der I/O-Register geht übrigens mit den Befehlen SBIC bzw. SBIS wesentlich einfacher. Schaut dir die doch einfach mal an.
Danke Irgwer, daran langs. Im Simulator liefert ein gedrückter Taster eine 1, daher kam ich nicht drauf... Oh mann ey, so ein Schitt.. Na ja, Lehrgeld :-) Besten Dank!
Ich habe das Programm nochmal mit dem Befehlen SBIC realisiert. Das funktioniert auch, nur leuchtet die LED0 nun ständig, der Schalter SW3 schaltet sie nur aus wenn ich ihn gedrückt halte und beim "anschalten" über SW2 der eh schon leuchtenden LED wird diese nur heller. Die An-Aus Funktionalität ist nicht mehr gegeben. Wieso das? Verständnis: Wie lange bleibt die Portbelegung erhalten? Drücke ich etwa einen Taster habe ich ja eine Signatur der Art 11110111. Drücke ich danach einen Taster müsste ich ja 11111110 erhalten, denn ich kann nur einen Taster zu einer Zeit gleichzeitig drücken, oder nicht? Wird der Port irgendwann zurückgesetzt (kein Schalter gedrückt --> alles "1" auf den 8 Leitungen). Besten Dank. ... ldi akku, 0b11111110; 0=0V, 1=VCC --> Dioden schalten bei 0 out PORTB, akku; START: sbic PIND, 2 rcall sub_LED0_AUSschalten; sbic PIND, 3 rcall sub_LED0_ANschalten rjmp START; Endlosschleife ;---Eventhandler sub_LED0_AUSschalten: sbi PORTB, 0; ret; sub_LED0_ANschalten: cbi PORTB, 0; ret;
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.