Hallo,
ich wollte für den ATmega128 einen Trigger programmieren (der ATmega hat
nämlich nicht wie z.B. der ATmega16 eine Autotrigger Funktion)
Hierbei stoße ich auf etwas, was ich mir nicht erklären kann.
hier mal der Codeausschnitt:
1 | #define ADC_RUN (_BV(ADEN)|_BV(ADSC) |_BV(ADFR)|_BV(ADIF)|_BV(ADPS2)|_BV(ADPS1) |_BV(ADPS0) ) //|_BV(ADPS0)
|
2 | #define ADC_STOP 0x00
|
3 | int16_t pegel=0;
|
4 | int16_t pegel_null=0;
|
5 | int16_t ADC_TRIGGER;
|
6 | int ADC_WAIT_TIME;
|
7 | ADC_WAIT_TIME=0;
|
8 |
|
9 | do {
|
10 | ADCSRA = ADC_RUN;
|
11 | while(bit_is_clear(ADCSRA, ADIF));
|
12 | ADC_TRIGGER = ADC- 32768;
|
13 | printf("ADC_TRIGGER= %5u\n", ADC_TRIGGER );
|
14 | if (ADC_WAIT_TIME < 50)
|
15 | {
|
16 | ADC_WAIT_TIME++;
|
17 | printf("ADC_WAIT_TIME= %5u\n", ADC_WAIT_TIME );
|
18 | }
|
19 |
|
20 | /*
|
21 | else if ((ADC_TRIGGER >= (pegel_null+pegel)) || (ADC_TRIGGER <= (pegel_null-pegel)))
|
22 | {
|
23 | printf("...da war der Trigger\n");
|
24 | printf("Pegel= %5u\n", ADC_TRIGGER );
|
25 | goto run;
|
26 | }
|
27 | */
|
28 |
|
29 | } while(-1);
|
30 | ADCSRA = ADC_STOP;
|
So, ich hoffe ich habe nichts wichtiges vom Code vergessen.
Der ADC bekommt eine externe Refferenzspannung von ca. 4,88V
Auf den ADC0 Kanal wird ein Offset von 2,44V gegeben.
Nun zu dem was mich verwundert:
Die else if ist zum Test auskommentiert, da der Trigger sonst auslöst.
Aber warum macht der das?
Wenn ich die Zeile
1 | ADC_TRIGGER = ADC- 32768;
|
abändere in
Dann wird mir mit der printf Anweisung auf dem Monitor konstant und
permanent der Wert 32768 ausgegeben.
Wenn ich allerdings die Zeile
1 | ADC_TRIGGER = ADC- 32768;
|
so belasse, würde ich annehmen, dass über die printf Anweisung ständig
eine 0 auf dem Monitor zu sehen sein müßte, aber statt dessen schleicht
sich dort sporadisch eine 65472 ein. Und die löst dann natürlich die
else if Anweisung aus, aber wo kommt die 65472 her bzw wie kommt die
zustande?
Habe es auch schon in einzelnen Schritten versuche also:
1 | ADC_TRIGGER = ADC- 32768;
|
2 | ADC_TRIGGER = ADC_TRIGGER - 32768;
|
aber das hat auch nicht geholfen.
Ich hoffe das mir jemand helfen kann.
MFG