Forum: Mikrocontroller und Digitale Elektronik ATtiny13 PWM / CTC - Fragen und Schwierigkeiten


von Jens (Gast)


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.

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.