Hallo nochmal, so nun ist der sinus berechnet und wie folgt abgelegt: unsigned char sinetable[] PROGMEM = {128, 131, 134, 137, 140, ... }; Es soll nun OC2 damit beschickt werden: ISR(TIMER2_COMP_vect) { OCR2 = pgm_read_byte(sinetable + iOCR2Offset); iOCR2Offset++; } iOCR2Offset ist volatile und mit 0 initialisiert. Der timer ist wie folgt initialisiert: void initTimer2(void) { // Timer2 FastPWM, toglge OCR2 when compare TCCR2 = _BV(WGM20) | _BV(WGM21) | _BV(COM20); OCR2 = 0; } Compilieren und flashen macht keine Probleme, nur passiert absolut nix an der LED die am OC2 Pin hängt :( Wenn ich den Pin manuell auf high setze leuchtet sie allerdings. Wo habe ich den Fehler gemacht ? Werte im sintable müssen HEX sein statt uint ? Oder habe ich was grundsätzliches falsch verstanden/gemacht ? Danke, Markus
>HEX sein statt uint Das eine ist eine Darstellungsform für Zahlen, das andere ein Wertebereich. >pgm_read_byte(sinetable + iOCR2Offset); Wie lange dauert das? >_BV(COM20); benutzt man auch nicht mehr (Das ist aber ein Schönheitsding...).
@WM-Rahul: ">HEX sein statt uint Das eine ist eine Darstellungsform für Zahlen, das andere ein Wertebereich." Sorry falsch ausgedrückt ;) Ich denke das es egal ist ob ich 255 oder 0xff schreibe ;) ">pgm_read_byte(sinetable + iOCR2Offset); Wie lange dauert das?" Wie bekomme ich das heraus ? Der Mega8 läuft momentan mit Werkseinstellungen also 1MHz interner Schwingkreis. Ich denke mal für die Addition geht ein Takt drauf und dann noch das pgm_read_byte, da müßte ich mal in der gcc-lib nachsehen. Denkst Du es ist zu schnell ? ">_BV(COM20); benutzt man auch nicht mehr (Das ist aber ein Schönheitsding...)." Was nimmt man dann, um den OC2 zu initialisieren ? Danke, Markus
>">_BV(COM20); >benutzt man auch nicht mehr (Das ist aber ein Schönheitsding...)." >Was nimmt man dann, um den OC2 zu initialisieren ? _BV war nie C-konform. C-konform ist (1<<COM20). >Denkst Du es ist zu schnell Eher zu langsam. >TCCR2 = _BV(WGM20) | _BV(WGM21) | _BV(COM20); sollte wohl eher TCCR2 = _BV(WGM20) | _BV(WGM21) | _BV(COM21); heissen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.