Hi, wie die Überschrift vermuten lässt erwarte ich keine Wunder. Aber vielleicht fällt dem ein oder anderem etwas dazu ein? (Falls nicht bitte einfach weiter gehen :P) ...wieso der folgende Code beim einmaligen und zweimaligen Aufruf passiert werden kann, jedoch bei 3-maligem Aufruf den Atmega16 zum hängen bringt. (Meine Annahme, dass er hängen bleibt beruht auf der Ausgabe auf einem 2x16 Zeilen-Display bzw. der NICHT Ausgabe der sofort folgendem Zeilenausgabe auf demselbigen.)
1 | //mein "Werk"
|
2 | void lcd_printInt(uint16_t value, uint8_t c, bool leadingZeros) { |
3 | char str[c]; |
4 | utoa(value, str, 10); |
5 | if (leadingZeros) { |
6 | for (uint8_t i = getDigitCount(value); i < c; i++) |
7 | lcd_print_P(PSTR("0")); |
8 | }
|
9 | lcd_print(str); |
10 | }
|
11 | |
12 | //- Print string to cursor position
|
13 | void lcd_print(char *string) { |
14 | |
15 | while(*string) { |
16 | lcd_putchar(*string++); |
17 | }
|
18 | }
|
19 | //- Put char to atctual cursor position
|
20 | void lcd_putchar(char lcddata) { |
21 | |
22 | lcd_write((lcddata >> 4) | CMD_RS); |
23 | lcd_write((lcddata & 0x0F) | CMD_RS); |
24 | }
|
Mein Aufruf:
1 | #define IN2 !(PINA & (1<<PA6))//PIN34
|
2 | #define JP1 !(PINA & (1<<PA0))//PIN39
|
3 | #define JP2 !(PINA & (1<<PA1))//PIN40
|
4 | |
5 | lcd_printInt(JP1, 1, false); |
6 | lcd_printInt(JP2, 1, false); |
7 | lcd_printInt(IN2, 1, false); |
Mein Workarround:
1 | uint8_t combi = JP1*100+JP2*10+IN2; |
2 | lcd_printInt(combi, 3, true); |
Grüße Oekel