Wenn man aus deinem Programm mal alles rauswirft, was nichts zur Sache
beiträgt, dann bleibt das hier übrig
1 | void lcd_putu( unsigned int number )
|
2 | {
|
3 | char buffer[10];
|
4 |
|
5 | utoa( number, buffer, 10 );
|
6 | lcd_puts( buffer );
|
7 | }
|
8 |
|
9 | int main(void)
|
10 | {
|
11 | unsigned int c;
|
12 |
|
13 | lcd_init(LCD_DISP_ON);
|
14 |
|
15 | uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
|
16 |
|
17 | sei();
|
18 |
|
19 | uart_putc('\r');
|
20 | lcd_clrscr();
|
21 |
|
22 | for(;;)
|
23 | {
|
24 | c = uart_getc();
|
25 | if (!( c & UART_NO_DATA ))
|
26 | {
|
27 | uart_putc(c);
|
28 | lcd_putu(c);
|
29 |
|
30 | lcd_putc( ' ' ); // Vorschlag
|
31 | }
|
32 | }
|
33 | }
|
Man sieht:
Kommt ein Zeichen über die UART rein, dann wird es zurückgeschickt, und
sein Code auf dem LCD ausgegeben. (Ich würde mal vorschlagen, nach dem
Code noch ein Leerzeichen auszugeben, damit man erkennen kann, wo ein
Code anfängt und wo er endet).
Das LCD schreibt von sich aus sicher nichts zusätzliches hin. Wenn also
das, was du am LCD siehst, nicht das ist was du erwartest, dann musst du
dich fragen, was eigentlich von deinem VB-Programm weggeschickt wird.
Ich würde mal testen, wie sich das ganze verhält, wenn du nicht von
deinem VB Programm etwas an die UART schickst, sondern von einem ganz
normalen Terminal-Programm. Denn von dem ist bekannt, dass es nach dem
Drücken der Taste 'A' auch tatsächlich den ASCII Code des Zeichens 'A'
und nur den ASCII COde des Zeichens 'A' über die Schnittstelle jagt.
Dein VB Programm kann nattürlich korrekt sein und das auch richtig
machen. Aber 'kann' ist nicht 'ich weiß, das' - sprich: Im Moment
besteht die Möglichkeit eines Fehlers im AVR Teil und/oder im VB-Teil.
Die vernünftigste Vorgehensweise besteht darin, erst mal eine mögliche
Fehlerquelle zu eliminieren und einen Teil durch etwas zu ersetzen, von
dem recht sicher angenommen werden kann, dass er korrekt ist. Den
VB-Teil durch ein Terminalprogramm zu ersetzen ist genau so ein Schritt,
der auch noch andere Vorteile hat.
Ist eigentlich die UART schon insofern getestet, dass du dir sicher
bist, dass die Baudrate korrekt ist? Sprich: Hast du schon mit einem
Terminal verifiziert, dass das was der AVR wegschickt, im Terminal auch
genau so ankommt?
Genau aus diesem Grund ist ebenfalls der Ersatz des VB-Teiles mit einem
Terminalprogramm eine gute Idee: Er erlaubt dir, den AVR-Teil deiner
Anwendung komplett (inkl. Hardware) zu testen.