Forum: Compiler & IDEs Problem mit AD- Wandlung


von S.Peters (Gast)


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

: Verschoben durch User
von S.Peters (Gast)


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.

von S.peters (Gast)


Lesenswert?

Keiner eine Idee?

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von s.peters (Gast)


Lesenswert?

Alles klar, vielen dank werde mich durcharbeiten

von Thomas E. (thomase)


Lesenswert?

s.peters schrieb:
> Alles klar, vielen dank werde mich durcharbeiten

Und überleg dir was das
> ADMUX= 0x01000000;
machen soll und was es tatsächlich macht. Und ob man das nicht 
grundsätzlich anders schreiben sollte.

mfg.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.