Forum: Mikrocontroller und Digitale Elektronik Xmega256d3 Rechenfehler?


von Phil (Gast)


Lesenswert?

Hallo,

ich betreibe ein ATXMega256D3 auf einem STK600 und mit einem JTAGICE 
MKII.

Ich initialisiere den internen Oszilator auf 32Mhz mit dieser Funktion:
1
void Clock_init(void)
2
{
3
  OSC.CTRL |= OSC_RC32MEN_bm;
4
  while(!(OSC.STATUS & OSC_RC32MRDY_bm));
5
  CCP = CCP_IOREG_gc;
6
  CLK.CTRL = 0x01;
7
}
1
void disp_setAdress(uint16_t x, uint16_t y)
2
{
3
  uint8_t y1 = y/256;
4
  uint8_t y2 = y%256;
5
  disp_writeComm((uint8_t)x);
6
  disp_writeComm((uint8_t)y1);
7
  disp_writeComm((uint8_t)y2);
8
9
}

Jetzt renn ich hier in folgendes Problem:

wenn ich disp_setAdress(0,100); ausführe dann habe ich sowohl im Wert 
von y1 wie auch im Wert y2 "0x64" stehen, obwohl y1="0x00" und y2="0x64" 
seien sollte.

Hatte exact den gleichen Code auf einem mega644 und einem mega2560 
laufen und das funktionierte perfekt.

Jemand eine idee woran das liegen könnte?

von Gerhard G. (g_g)


Lesenswert?

Hallo,

mit  "printf" funktioniert es!

void disp_setAdress(uint16_t x, uint16_t y)
{
  uint8_t y1 = y/256;
  uint8_t y2 = y%256;
  SetCursor(24,260); printf("%d", x );
  SetCursor(24,280); printf("%d", y1 );
  SetCursor(24,300); printf("%d", y2 );
  //disp_writeComm((uint8_t));
  //disp_writeComm((uint8_t)y1);
  //disp_writeComm((uint8_t)y2);

}

Ergebnis = 0,0,100

Dein disp_writeComm() wird den Fehler erzeugen.

Gruß G.G.

von Phil (Gast)


Lesenswert?

Vielen Dank für deine Antwort.

Habe soeben herausgefunden, dass ich den Debugger nicht richtig bedienen 
konnte.

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.