Hallo Zusammen,
habe ein Problem mit meinem AD- Wandler. Arbeite mit dem ATmega644.
Folgendes Programm hab ich zur Initialisierung und Verarbeitung des
Wertes geschrieben:
------------------------------------------------------------------
1 | #include <avr/interrupt.h>
|
2 | #include <inttypes.h>
|
3 |
|
4 | sei();
|
5 |
|
6 | ADMUX= 0x01000000;
|
7 |
|
8 | unsigned int high, low, ad =0;
|
9 |
|
10 |
|
11 | int main (void)
|
12 | {
|
13 |
|
14 | while(1)
|
15 | {
|
16 | ADCSRA= 0x11100000;
|
17 |
|
18 | while(!ADIF)
|
19 | {
|
20 | clearbit(ADCSRA,ADIF);
|
21 | //ADCSRA=(0<<ADIF);
|
22 | }
|
23 |
|
24 |
|
25 |
|
26 | high = ADCH;
|
27 | low = ADCL;
|
28 |
|
29 | ad= high *256;
|
30 | ad= ad+low;
|
31 |
|
32 |
|
33 |
|
34 | if (ad >= 205)
|
35 | {
|
36 | setbit (PORTD,0);
|
37 | clearbit (PORTD,1);
|
38 | }
|
39 |
|
40 | }
|
41 | }
|
--------------------------------------------------------------------
Ich möchte den Wert einfach nur einlesen und für die weiter Verarbeitung
abspeichern. Keine Interrupauslösung oder sonstiges.
Problem:
ALso wenn ich die Variable ad manuell auf einen Wert (z.B. 300) setzte
wird PORTD,0 gesetzt. Soll es über ADCH/ADCL gehen funktioniert es
nicht. Hab ich einen fehler in der Initialisierung der AD- Wandlung
gemacht? Eigentlich müsste es doch so funktionieren oder?
Mein Analogwert ist ein 5V Signal, veränderbar durch ein Poti. Selbe
Spannungsquelle wie Spannungsversorgung vom µC.
Vielen Dank schon einmal für eure Hilfe.
Gruß STefan