Audiosignal über ADC einlesen / AT90CAN128 / Bandbreite 10kHz

OP (Firma: ixwyc) #953270
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.