Problem mit AD- Wandlung

Gast #3556773
Lesenswert?

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
Gast #3556776
Lesenswert?

Dir Ports und so weiter sind alle initialisiert. Also das drum rum ist 
alles richtig. Hab noch mehr in meinem Programm stehen, was auch alles 
funktioniert nur der AD- Wandler mach Probleme. Deswegen hier nur für 
die AD- Wandlung relvanten Dinge.
#3558242
Lesenswert?

Warum benutzt du nicht die Routinen aus dem
AVR-GCC-Tutorial
(Nach ADC suchen und dann dem Link folgen)


Die würden aus dem Stand heraus funktionieren.


In deinem Programm gibt es so viele Probleme, dass ich gar nicht 
anfangen will, die alle aufzuzählen. Benutze die Tutorial Routinen, 
passe die Einstellung der Referenzspannung auf das an, was du brauchst 
und gut ists. Während dein Programm dann genau das macht, was du willst, 
kannst du ja mal analysieren, was die Tutorial Routinen alles anders 
machen und darüber nachdenken, warum das so ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren