Servus beinander,
ich hoffe Ihr könnt mir ein kleines bisschen weiterhelfen.
Meine Firmware hat sozusagen 2 StateMachines, eine sorgt dafür, dass der
ADC nacheinander Burst-Messungen von den einzelnen Kanälen aufnimmt und
schreibt sie in ein 2-Dimensionales Array für ein Moving-Average-Filter.
Das funktioniert schon (davon abgesehen, dass er manchmal werte von 1080
aus dem 10bit-ADC ausliest - obwohl ich sie mit 3FF verunde!)
So sollte es dann weiter laufen:
Die Tastenentprellung (int0) startet hald Timer und steuert so die
Menüführung (langer Tastendruck, kurzer etc.) und der 1Hz Timerevent
schaltet durch die Display-States durch (Anzeige:Messwert1 -> 2sec ->
Anzeige:Messwert2...)
Die in der Main dann refreshed werden.
Die logik davon ansich sollte funktionieren ;)
Zum Wahnsinn treibt mich folgendes:
1 | ISR(TIMER1_COMPA_vect) // 1Hz eventrate
|
2 | {
|
3 | // if not in menu the screen will be changed every DISP_DELAY
|
4 | // if in menu, the DispState isn't changed but the MenuDelay decremented
|
5 | if(iMenuDelay == 0) // not in menu
|
6 | {
|
7 | iDispDelay++; // Increment counter
|
8 | if(iDispDelay >= DISP_DELAY)
|
9 | {
|
10 | if(pDispState == Messwert7) pDispState = Messwert1;
|
11 | else pDispState++;
|
12 | iDispDelay = 0; // restart counter
|
13 | }
|
14 | }
|
15 | else // Menu entry selected
|
16 | {
|
17 | iMenuDelay--;
|
18 | }
|
19 | }
|
iDispDelay sollte also bis z.B. 2 zählen und dadurch der nächste Screen
ausgewählt werden.
Nachm ersten Aufruf hat iDispDelay wies sein soll den Wert 1.
In Einzelsteps weitergemacht bleibt der wert in der watch auch "1".
klick ich auf run oder lande per breakpoint das nächste mal in der ISR,
ist der Wert wieder '0' sprich er kann nie bis 2 zählen!
Eine andere Funktion greift nie auf den Wert zu, der dient lediglich der
ISR als zähler...
Hab ausprobiert in der Main die Variable zu benützen um ein
"Wegoptimieren" zu verhindern
iDispDelay++;
iDispDelay--;
Trotzdem. plötzlich isse wech!
Der Ram meines mega169P is zwar zu 50% voll, aber das dürfte doch kein
solches Problem darstellen - OOOODER?
Vielen Dank :)
vy73 de Benjamin - 2mkx