Hallo,
ich probiere ein kleines Programm zu schreiben um mit einem atmega16
Spannungen zu messen. Ein Timer löst mit einer bestimmten Frqeuenz
Interrups aus und da ich die Frequenz kenne, weiß ich wann eine Sekunde
vorrüber ist. Dann möchte ich im Hauptprogramm die Spannung über den
AD-Wandler messen.
Das Spannungsmessen funktioniert auch und auch der Timer läuft richtig.
Jetzt zu meinem Problem:
So wie hier im Code wird die if-Abfrage irgendwie nicht ausgeführt, wenn
ich allerdings eine Variable zwischen der while(1)-Schleife und der
If-Abfrage an den UART an den PC sende, dann funktioniert plötzlich die
If-Abfage.
Ich hoffe es kann mir jemand weiterhelfen, ich verstehe nämlich absolut
nicht warum es nicht funkioniert.
Hier nun der Code:
1 | void main(void)
|
2 | {
|
3 | Setup();
|
4 |
|
5 | while(1)
|
6 | {
|
7 | if (time.sec != last_sec)
|
8 | {
|
9 | last_sec = time.sec;
|
10 |
|
11 | //Durchschnitt aus 8 Werten ermitteln
|
12 | for(av=0,i=8;i;--i)
|
13 | {
|
14 | ADCSRA |= 0x40; // starte neue ADC
|
15 | while (!(ADCSRA & (1<<ADIF))); // warte bis ADC fertig ist
|
16 | av = av+ADC;
|
17 | }
|
18 | av = av/8;
|
19 |
|
20 | sendv(av);
|
21 | }
|
22 | }
|
23 | }
|