Hallo,
leider habe ich wohl ein Problem mit dem ADCs.
Folgende Aufgabe habe ich:
Zunächst mein Quelltext:An die Differenzeingänge ADC0 und ADC1 des ADC kann über ein Kabel eine
kleine Platine mit einem Mikrofon angeschlossen werden. [...]
C-Programm schreiben, [...] ADC mit 200-facher Verstärkung einstellen
und ständig die Amplitude des mit dem ADC eingelesenen Mikrofonsignals verarbeiten [...]
Mein Problem nun:Code:#define LCD_PORT PORTC /* LCD connected to PORTC */ #define F_CPU 3686400UL #include <avr/io.h> #include "display.inc" #include <util/delay.h> #include <avr/interrupt.h> uint16_t ReadADC() { ADMUX=(1<<MUX3)|(1<<MUX1)|(1<<MUX0); //Start Single conversion ADCSRA|=(1<<ADSC); //Wait for conversion to complete while(!(ADCSRA & (1<<ADIF))); ADCSRA|=(1<<ADIF); return(ADC); } int main(void){ DDRC = 0xff; // LCD //char x = 4; lcd_init(); uint16_t adc_result; ADMUX=(1<<REFS0); // For Aref=AVcc; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS0); while(1){ adc_result=ReadADC(); adc_result=(adc_result*4); // *4, da ich bei ad_result=max=1024 4950mV erhalte lcd_setcursor(0,0); lcd_putdez_uint(adc_result); _delay_ms(250); } }
Die Ausgabe auf dem Display schwankt ständig zwischen 0 und 4000.
Dabei ist es ganz egal ob ich das besagte Mikrofon überhaupt angeschlossen habe oder nicht.
Es kommt mir so vor, als werden die Pins garnicht "verarbeitet".
Kann mir jemand bitte sagen, ob ich einen Fehler bei der Initialisierung oder ähnliches habe?
Danke
Kesandal







Zitieren

Lesezeichen