Forum: Mikrocontroller und Digitale Elektronik Audiosignal über ADC einlesen / AT90CAN128 / Bandbreite 10kHz


von Mike G. (Firma: ixwyc) (balu1980)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.