Gast
#3339371
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.