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.