Wave-Player mit ATmega168 probleme

Gast #2736397
Lesenswert?

Hallo !

Ich baue gerade einen SD-Card-Wave-Player mit einem ATmega168.
Soweit so gut... Schaltung ist aufgebaut, Programm geschrieben und
alles "läuft" halbwegs. Bis auf ein lautes Piepen und das Verzerren
der Audiodateien. Das Piepsen fängt sofort nach dem Reset an, also
vermutlich ist in meiner main.c schon am Anfang bei der init der Timer
was faul. Kann mir einer helfen ???


  ICR1   = (F_CPU/SAMPLERATE);

  TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<WGM11);
  TCCR1B = (1<<WGM12) |(1<<WGM13) | (1<<CS10);

  TIMSK1 = (1<<TOIE1);

  TCCR0A = (1<<COM0A0)|(1<<COM0B0)|(1<<WGM01);
  TCCR0B = (1<<CS00);   // F_CPU

  OCR0A = OCR1A = 128;
  OCR0B = OCR1B = 128;

  TCNT0 = 0;
  TCNT1 = 232;
Gast #2738398
Lesenswert?

Hi

>Sollte eigendlich beides 0 sein.
>Löst aber nicht mein Problem.

Klar. Zuweisungen an diese Stelle sind sinnlos.

>Das Piepsen fängt sofort nach dem Reset an, also
>vermutlich ist in meiner main.c schon am Anfang bei der init der Timer
>was faul.

Du lässt beide Timer loslaufen.

>Noch eine Info: Der "Piepser" hat eine Frequenz von 5,5kHz.
>Und der ATmega wird mit einem 20MHz Quarz betrieben.

Wie gross ist SAMPLERATE?

MfG Spess
#2738487
Lesenswert?

Sven schrieb:
>
>   ICR1   = (F_CPU/SAMPLERATE);
>
>   TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<WGM11);
>   TCCR1B = (1<<WGM12) |(1<<WGM13) | (1<<CS10);

Datenblatt:
The ICR1 Register can only be written when using a Waveform Generation 
mode that utilizes the ICR1 Register for defining the counter’s TOP 
value.

In these cases the Waveform Generaion mode (WGM13:0) bits must be set 
before the TOP value can be written to the ICR1 Register.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren