Hi Leute Ich bin am verzweifeln ich bekomm irgendwie keine AD Wandlung mit dem AT MEGA32 hin, ich möchte nur mit einem Multiplexer Kanal arbeiten (PA0). An ADC0 liegen 5V an, ich habe eigentlich so gemacht, wie im gcc Tutorial beschrieben. Ich weiß echt nich mehr weiter, bitte schaut euch mal mein Code an. #include <avr/io.h> #include <avr/signal.h> int main(void) { int x; DDRC=0xff; // Port C als Ausgang definieren PORTC=0xff; // LED Reset ADCSRA = 0b1|0|1|0|0|1|1|0; //ADCSRA = (ADEN<<1) | (ADFR<<1) | (ADPS2<<1) | (ADPS1<<1); // AD Konverter aktivieren ADMUX = (ADLAR<<1); // ADLAR in ADMUX setzen für 8-Bit Abtastung ADCSRA = (ADSC<<1); // wandlung starten if(bit_is_set(ADCSRA,2)) { if(bit_is_set(ADCH,15) || bit_is_set(ADCH,14) || bit_is_set(ADCH,13) || bit_is_set(ADCH,12) || bit_is_set(ADCH,11) || bit_is_set(ADCH,10) || bit_is_set(ADCH,9) || bit_is_set(ADCH,8)) { cbi(PORTC,0); } else { cbi(PORTC,7); } } return 0; }
Du verwendest ADC 0 und externe Referenzspannung. AVCC ist versorgt? Referenzspannung vorhanden? if(bit_is_set(ADCSRA,2)) Was fragst du hier ab? Warum verwendest du nicht den Interrupt?
>ADCSRA = 0b1|0|1|0|0|1|1|0; Das wirst Du so nirgends finden! >ADMUX = (ADLAR<<1); s.o. >ich habe eigentlich so gemacht, Tja, wenn das Wörtchen "eigentlich" nicht wäre... Ich würde es mal so (wie es übrigens auch im Tutorial gemacht wird) probieren: ADCSRA = (1 << ADEN) | (1 << ADFR) | (1 << ADPS2) | (1 <<ADPS1); ADMUX = (1 << ADLAR); [..] ...usw, usf.
klar das habe ich auch versucht bloß wenn ich das so schreibe wie Du dann findet der Compiler ADFR nicht. Kann es sein das ich da noch eine Header Datei einbinden muss ?
Kann es sein, daß es dieses Bit gar nicht gibt? Ich weis es nicht, und ich kann auch grad nicht ins Datenblatt gucken...
Ja das ist so Ich habe gerade noch mal ins Datenblatt vom AT MEGA32 geschaut das Bit heißt ADATE und nicht ADFR. Kennst Du Dich mim AT Mega32 aus ?
Nicht direkt, aber wozu gibt es Datenblätter? :) Hast Du denn eine/mehrere konkrete Frage(n)?
Wenn es kein ADFR gibt, heißt das übrigens, dass der AD-Wandler im jeweiligen AVR keinen free-running mode unterstützt. Du wirst den Code also notgedrungen etwas umstellen müssen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.