Moin, ich möchte ein Audiosignal am ADC des AT90CAN128 einlesen. Dazu habe ich einen Tiefpassfilter 1. Ordnung mit einer Grenzfrequenz von 10kHz vor den AD Wandlereingang gelegt. Nach dem Tiefpassfilter habe ich mit Hilfe eines Spannungsteilers mit hilfe der Referenzspannung das Signal in den positiven Bewreich verschoben um auch die negative Halbwelle mitzulesen. Wenn ich an den Eingang eine Gleichspannung Anlege funktioniert es auch soweit, bei 0V --> ADC_wert=0 2,56V --> ADC_wert = 1023 Ach ja, habe die interne Referenzspannung gewählt, und den Areff Pin mit einem 100nF Kondensator an GND gehangen. Wenn ich jetzt ein Audiosignal darauf gebe, lese ich verschiedene ADC_werte Hierzu habe ich den ADC_wert über die USART ausgegeben. Gebe ich den ADC_wert über den DAC LTC1257 wieder aus, habe ich im Hintergrund ein Rauschen. Der LTC1257 funktioniert einwandfrei. Habe ich mehrfach getestet. Ich denke mal, das der Fehler beim einlesen des Audiosignals liegt. Anbei noch der Quelltextauschnitt für den ADC: void ADC_init(void) { uint8_t result; // Kanal AD0 gewählt ADMUX = 0; // Interne Referenzspannung verwenden ADMUX |= (1 << REFS0) | (1 << REFS1); // Ergebnis Linksbündig ausgeben //ADMUX |= (1 << ADLAR); // ADC aktivieren, Teilungsfaktor auf 64 // mit ADPS0 entspricht 128 ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Auto Triggering aktiviert //ADCSRA |= (1 << ADATE); ADCSRA |= (1 << ADSC); // Eine ADC Wandlung zum Warmlaufen ohne den Wert zu übergeben while (ADCSRA & (1 << ADSC)) { ; } // Ergebnis muß einmal gelesen werden, da weiteren WAndlungen nicht ausgeführt // werden. result = ADCW; } //unsigned char ADC_read() uint16_t ADC_read() { // eine Wandlung ADCSRA |= (1<<ADSC); // auf Abschluss der Konvertierung warten while ( ADCSRA & (1<<ADSC) ) { ; } // Wandlungsergebnisse zurückgeben return ADCW; } Gruß Mike
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.