Gast
#1272544
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
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