Kesandal
04.07.2011, 13:18
Hallo,
leider habe ich wohl ein Problem mit dem ADCs.
Folgende Aufgabe habe ich:
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 [...]
Zunächst mein Quelltext:
#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);
}
}
Mein Problem nun:
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
leider habe ich wohl ein Problem mit dem ADCs.
Folgende Aufgabe habe ich:
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 [...]
Zunächst mein Quelltext:
#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);
}
}
Mein Problem nun:
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