Hallo miteinander,
beim Versuch, eine RGM-2000 GPS Maus auszulesen stecke ich leider fest:
Der TX der Maus ist an einen Mega8 angeschlossen und ich wollte die
UART-Lib von Peter Fleury benutzen. Unten steht das kleine
Test-Programm.
Leider erscheint bei mir am Display immer nur 256256256..., also sprich:
das low byte mit dem Buchstaben ist leer im high byte steht
UART_NO_DATA. Das Signal der GPS-Maus liegt am RX-Pin an, habe ich
geprüft. Ebenfalls die Baudrate (4800, gegoogelt) scheint zu stimmen,
hab ich mir am Oszi ebenfalls angeschaut. Die Maus hat einen Signalpegel
von 3.3V, also größer als (5V * 0.6), was der AVR als High
interpretieren sollte. Dann habe ich das Signal noch testweise zweimal
durch einen übrigen 74014 (invertierender Schmitt-Trigger) geleitet, hat
auch nichts gebracht. (Am Ausgang warens dann allerdings
unerklärlicherweise nur 4V, sollte aber jetzt wirklich reichen ...).
Selbstverständlich benutze ich einen externen Quarz (8MHz) und die Fuses
sind auch gesetzt (die Warteschleife ist korrekt eine Sekunde lang).
Im Moment bin ich mit meinem Latein am Ende. Mangels übrigem
Pegelwandler kann ich mir das Signal leider grad auch nicht am PC
anschauen, aber - wie gesagt - am Oszi macht es einen korrekten
Eindruck.
Kann mir jemand helfen? Vielleicht habe ich auch eine Kleinigkeit
übersehen, aber mir fällt wirklich nichts mehr ein ...
Danke im Vorraus,
Ulrich
1 | int main(void)
|
2 | {
|
3 | uint16_t getc_tmp = 0;
|
4 | char str[16];
|
5 |
|
6 | /* Richtungsregister setzen */
|
7 |
|
8 | *port_to_ddr(&BUTTON_PIN) &= ~(1 << BUTTON);
|
9 |
|
10 | *port_to_ddr(&LCD_DATA0_PORT) |= (1 << LCD_DATA0_PIN);
|
11 | *port_to_ddr(&LCD_DATA1_PORT) |= (1 << LCD_DATA1_PIN);
|
12 | *port_to_ddr(&LCD_DATA2_PORT) |= (1 << LCD_DATA2_PIN);
|
13 | *port_to_ddr(&LCD_DATA3_PORT) |= (1 << LCD_DATA3_PIN);
|
14 | *port_to_ddr(&LCD_RS_PORT) |= (1 << LCD_RS_PIN);
|
15 | *port_to_ddr(&LCD_RW_PORT) |= (1 << LCD_RW_PIN);
|
16 | *port_to_ddr(&LCD_E_PORT) |= (1 << LCD_E_PIN);
|
17 |
|
18 |
|
19 | lcd_init(LCD_DISP_ON);
|
20 | lcd_puts(init\n");
|
21 |
|
22 | wait_10ms(100);
|
23 |
|
24 | lcd_init(LCD_DISP_ON);
|
25 | uart_init(UART_BAUD_SELECT(SERIAL_BAUDRATE, F_CPU));
|
26 |
|
27 | for (;;) {
|
28 | wait_10ms(100);
|
29 |
|
30 | getc_tmp = uart_getc();
|
31 |
|
32 | utoa(getc_tmp, str, 10);
|
33 |
|
34 | lcd_puts(str);
|
35 | }
|
36 |
|
37 | return(0);
|
38 |
|
39 | }
|