Forum: Compiler & IDEs Schreiben von OCR1A


von Boris (Gast)


Lesenswert?

Guten Abend,

ich habe wohl ein Problem mit der Zeigerarithmetik. Das Schreiben von
OCR1A schlägt fehlt, bzw. das erzeugte PWM entspricht keinesfalls dem
geschriebenen Wert:

CODE:
-----
#define TESTV1  10
#define TESTV2  120
#define TESTV3  180
#define TESTV4  240

volatile int lutTest[4] = {TESTV1, TESTV2, TESTV3, TESTV4 };
volatile unsigned char* PtrLutByte = lutTest;

SIGNAL(SIG_OVERFLOW1)
{
  // Schlägt fehl
  OCR1A = pgm_read_byte(PtrLut++);

  // ODER
  // dies schlägt auch fehl
  OCR1A  = PtrLutByte++;

}

Weiß hier jemand Rat? Mir fällt nichts ein. Danke!
grüße
boris

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Warum denn pgm_read_byte()?  Deine Tabelle liegt doch gar nicht
im ROM.  volatile muss übrigens weder die Tabelle noch der Zeiger
sein.

von Boris (Gast)


Lesenswert?

Hallo Jörg
das war mir eben unklar wo die Tabelle liegt. Trotzdem funktioniert der
Zugriff mit dem Zeiger nicht. Löse ich das Ganze über:
OCR1A = lutTest[x]
arbeitet der Code einwandfrei. Versteh ich nicht!
Gruß
Boris

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ja klar, du deklarierst einen char * auf eine int-Tabelle.  Das ist
Quatsch.

von Boris (Gast)


Lesenswert?

Hmpf! :( Das wird wohl sein... 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.