ATtiny13 PWM / CTC - Fragen und Schwierigkeiten

Gast #3339371
Lesenswert?

Hallo zusammen!
Ich möchte mit meinem ATtiny13 mittels PWM Töne/Sinus erzeugen. Damit 
ich das Rad nicht komplett neu erfinde habe ich gegoogelt und das hier:
http://www.avr-asm-download.de/praesentation/Teil_8_Beispiel_11.pdf
ausprobiert. Funktioniert, Sinus mit 1,7kHz.
Nun habe ich das Ganze versucht in C zu portieren. Im Prinzip 
funktioniert es, aber der Sinus hat dann 1,1kHz. Wie kann man sich das 
erklären? Hab ich nen Denkfehler begangen?

  CLKPR = (1<<CLKPCE);
  CLKPR = 0x00;
  CLKPR = 0;

  OCR0A = 171;
  OCR0B = (st[p]); // in "st" steht der Sinuswert, p ist der Index
  p = 1;

  TCCR0A = (1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
  TCCR0B = (1<<CS00);
  TIMSK0 = (1<<TOIE0);

  sei();

Die zweite Schwierigkeit, schreibe ich mein Sinus nicht is RAM sondern 
ins Flash, dann ist es kein Sinus mehr. Ist der Lesezugriff aus dem 
Flash zu langsam?
const char st[32] PROGMEM = {94 ... };
  OCR0B = pgm_read_byte (st[p]);

Und weil das noch nicht genug Probleme sind, macht mir der eigentliche 
Ablauf zu schaffen. Aus dem pdf oben folgt daß OCR0A = 
CPU-Frequenz/Abtastrate/Zielfrequenz ist. Wenn ich nun 2 verschiedene 
Frequenzen (nacheinander) ausgeben möchte, dann müßte ich auch 2 
verschiedene Wertearrays haben. Zumindest sehr aufwendig, wie stelle ich 
es an, wenn ich z.B. den Sinus zwischen 1kHz und 2kHz in 100er Schritten 
ändern will?

Danke.

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