PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AD-Wandler



espoir
13.06.2006, 14:03
Hallo,

ich habe ein C-Prgramm geschrieben, um die Werte am AD-Wandler in einem Feld zu speicheren, aber im ganz feld wird der gleichen Wert gespeichert.
Mit Breack-Point klappt das schon, aber bei normal Lauf nicht.
zwischen nach jede AD-Wandler auslesen warte ich einige Zeit, ich habe verschiedene werte von Zeit benutzt aber trozdem keine Wirckung:

for(i=0;i<20;i++)
{
test[i]= umsetzen_Spannung();
ADCSRA=0;
wait_10ms(50);
PORTB=0x00;
wait_10ms(50);
}

/****************AD_WAndler initialisieren und auslesen************/

void Adc_Init(void)
{
ADCSRA = 0xC0; //Durch das setzen von Bit ADEN schaltet Der AD-Umsetzer ein
ADMUX = 0x03; //wählt der Kanal(ADC3) und setzt die Rferenzspannung auf 5v
}

unsigned int umsetzen_Spannung(void)
{
ADCSRA = 0xD6; //AD-Umsetzer Starten und Prescaler auswählen
while ( ADCSRA & (1<<ADSC)); //Warte-Schleife bis Ende der Umsetzung
Ergebnis=(ADCL+(ADCH<<8));
PORTB=0x17;
//return (ADCL+ADCH*256);
return Ergebnis; // Im ADCL sind die ersten 8 bits des Ergebnisses
// Im ADCH sind die restlichen 2 Bits gespeichert
}



Danke für jede Hilfe

linux_80
13.06.2006, 19:21
Hallo,
Du kannst zum auslesen des ADC auch direkt auf die beiden Ports mit ADC zugreifen, statt ADCL und ADCH, denn dann stimmt auf jeden Fall die Reihenfolge wie man das macht.

Ich würde den ADC nicht jedesmal in der Schleife deaktivieren.

Und dann wartet man auf das Bit ADIF bis der ADC fertig ist, nicht ADSC, denn so wird eigentlich nicht gewartet, so wie das bei Dir steht !

Hast Du schon mal ins Wiki, oder auch Datenblatt geschaut, wie das eigentlich geht mit dem ADC ?

espoir
14.06.2006, 12:10
Hallo,

ja habe ich Datashet gelesen, und das steht auf der seite 138

man wartet so lang das Bit ADSC auf 1 ist, wenn die Umwandlung fertig ist wird auf 0 eingesetzt(automatisch).
ich sehe nicht dass ich den AD-Wandler in der Schleife deaktviere.