Also ich habe folgendes Problem:
Das UP Menu wird alle 200ms in der Hauptschleife aufgerufen.
Zum Entprellen der Tasten nehme ich die Routine von Peter Danegger,
taster_state wird also erst verändert, wenn ich es lösche.
Wenn ich das Programm starte und ich die rechteTaste drücke passiert das
was soll. Jedoch nur bei t_rechts.
Alle anderen Tasten werden einfach nicht beachtet.
Weis jemand woran das liegt, ich kann keinen Fehler finden und im
Simulator gehts auch so wie es soll.
An der Hardware liegt es definitiv nicht, habe alles mit Oszi
nachgemessen da ist alles so wie es sein soll und pinc ist auch als
Eingang konfiguriert.
Bei t_rechts gehts ja komischerweise aber bei allen anderen nicht.
Also denke ich das ich irgendein Denkfehler bei dem Codeabschnitt habe,
aber ich finde kein.
Hoffe ihr könnt mir helfen.
mgh
spess53 schrieb:
> Hi>> Noch was>>> push temp1>> push temp2>> push temp3>>....>> pop temp2>> pop temp2>> pop temp1>> MfG Spess
Oh ja, das ist mir gar nicht aufgefallen.
Das temp3 wird in den Stück Code verwendet, wo ich .., stehen hab, ist
für die LCD-Ausgabe
> Hallo,>> ich verstehe gerade hier den Sinn nicht:>>
1
> ldi temp1, $FF
2
> cbr temp1, (1<<t_links | 1<<t_rechts)
3
> mov temp1, taster_state
4
>
>> kann man ja durch:>>
1
> mov temp1, taster_state
2
>
>> ersetzen.
Stimmt das ist auch ein dummer Fehler muss so hier sein:
1
ldi temp1, $ff
2
cbr temp1, (1<<t_links | 1<<t_rechts)
3
and temp1,taster_state
Das soll bezwecken, das die Tasten links und rechts auf 0 gesetzt
werden, also nicht nochmal auslösen in der weiteren Menüroutine.
Das beides ändert aber leider immer noch nichts an meinem Problem, nach
wie vor wird immer nur noch t_rechts beachtet.
Also ich habe jetzt erstmal noch einen Fehler gefunden, und zwar wenn
ich i Menupunkt 2 bin
1
push temp1
2
push temp2
3
push temp3
4
mov temp1, taster_state
5
cpi m_reg, 2
6
brsh m_jmp ; Tasten auswerten
7
8
9
sbrc temp1, t_rechts
10
inc m_reg
11
12
sbrc temp1, t_links
13
dec m_reg
14
15
m_jmp:
16
clr temp2
17
ldi zl,low(m_punkte)
18
ldi zh,high(m_punkte)
19
add zl,m_reg
20
adc zh,temp2
21
ldi temp1, $FF
22
überspringe ich ja mit dem
23
cbr temp1, (1<<t_links | 1<<t_rechts)
24
mov temp1, taster_state
25
26
ijmp
überspringe ich ja mit dem
1
cpi m_reg, 2
2
brsh m_jmp ; Tasten auswerten
die Auswertung von t_links, das habe ich jetzt auch behoben, Problem ist
trotzdem noch da, wenn ich z.B. t_enter bei mp_0 drücke wechsel ich
nicht den Menüpunkt.
Ja 2 Tasten dürften keine Probs machen, nachdem ich es jetzt so
umgeschrieben habe das es funktionieren muss, bin ich zu dem Entschluss
gekommen, das meine Entpellroutine einen Fehler haben muss.
Also ich weis jetzt das die Taster im taster_state nie erscheinen, auser
eben t_rechts.
Nur habe ich das Problem bis jetzt noch nicht gefunden, gibts bei Mega
16 am Pinc irgendwelche besonderheiten, muss ich da vielleicht iwas
ausschalten?
Hi
>Nur habe ich das Problem bis jetzt noch nicht gefunden, gibts bei Mega>16 am Pinc irgendwelche besonderheiten, muss ich da vielleicht iwas>ausschalten?JTAG-Interface?
MfG Spess
Thomas O. schrieb:
> ps. du kannst JTAG auch aus dem Programm raus deaktivieren Bit7 im> MCUCSR setzen.>> sbr temp, 0b10000000 ;JTAG Interface Disable;> out mcucsr, temp
Ah danke, das habe ich noch gar nicht gewusst.
Ist ne nützliche Sache vor allem verhindere ich damit die ewige erneute
Problemsuche wegen dem JTAG.
Werde ich gleich mal in das Init von meinem Programm einbauen, da ich
ehh kein JTAG benutze.
mfg
dann ist der Fehler auch im AVR Studio den hier genugt das ganze einmal.
Also dann korrigieren wir das mal.
sbr temp, 0b10000000 ;JTAG Interface Disable;
out mcucsr, temp ;Wollen Sie wirklich das JTAG Interface
ausschalten?
out mcucsr, temp ;Ja