Gast
#74723
Hallo,
ich kämpfe gerade mit meinen ? Anfängerproblemen ?
Der Wert einer Variablen kann über ein mit I2C verbundenes LCD oder die
UART ausgegeben werden - funktioniert soweit.
Die fragliche Variable ist ein Eintrag in einem Feld
volatile unsigned char Bg_ab_new[3];
Der Eintrag Bg_ab_new[2] - nur dieser Feld-Eintrag - macht Probleme.
Im main() wird initialisiert und im main() über das LCD ausgegeben.
Nicht 0, sondern 240 = 0xf0 erscheint!
Initialisiere ich nochmal weiter unten, z.B. vor
lcd_gotoxy(0, 0); wird tatsächlich zunächst 0 ausgegeben.
int main(void)
{
Bg_ab_new[0] = 0;
Bg_ab_new[1] = 0;
Bg_ab_new[2] = 0;
ports_init();
adc_init();
uart_init();
timer0_init();
i2c_init();
i2c_start(0x40);
lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_gotoxy(0, 0);
lcd_puts("Steuerung");
delay(1);
lcd_gotoxy(0, 0);
char str[6];
lcd_puts(ltoa(Bg_ab_new[2], str, 10));
sei();
for (;;) {} // loop forever
}
Im Folgenden wird die Variable über eine Timer-ISR ausgegeben:
INTERRUPT(SIG_OVERFLOW0)
// signal handler for Timer 0 overflow
{
lcd_gotoxy(0, 1);
char str[6];
lcd_puts(ltoa(Bg_ab_new[2], str, 10));
}
und - wer ahnt es schon - Bg_ab_new[2] ist wieder einmal 0xf0
geworden!
Das Ergebnis ist das gleiche, egal ob ich über I2C/LCD oder über die
UART ausgebe.
Ich sollte noch erwähnen, daß an keiner weiteren Stelle im Programm auf
diese Variable zugegriffen wird.
Wem ist solches schon vorgekommen?
Grüsse
Roland