Gast
#1792368
Hallo, ich möchte gerne die ASCII-Daten eines GPS-Empfängers mit einem Mikrocontroller auslesen und auf einem Display darstellen. Der GPS-Empfänger hat einen direkten seriellen Ausgang und ist mit 9600 Baud (8N1) konfiguriert. Über ein USB-RS232-Adapter (von Belkin) kann ich mir die Ausgabe mit einem Terminalprogramm anzeigen; also funktioniert alles soweit. Jetzt habe ich - ein Olimex MT-128 (ATmega128 mit 16x2-LCD) http://www.olimex.com/dev/avr-mt128.html und - ein Display3000-D071x (auch ATmega128 mit Farbdisplay) http://www.shop.display3000.com/bauteile/d071x-mikrocontroller-atmega-tft-farbdisplay-21.html. (externer 16MHz-Quarz auf Display3000 wird verwendet!) Auf beiden µC's läuft (im Prinzip) folgendes Programm: #define F_CPU 16000000L #define OSCSPEED 16000000L /* in Hz */ #include <stdio.h> #include <avr/io.h> #include <avr/wdt.h> #include <util/delay.h> #include <math.h> #include <avr/pgmspace.h> #include <avr/interrupt.h> #define LCD_DDR DDRB [...] ISR(USART1_RX_vect) { unsigned char Ch = UDR1; // "$" kommt auf jeden Fall in den Daten vor, aber es wird nicht erkannt... if (Ch == '$') { LCD_Print("GPS", 1, 1, 1, 1, 1, black, white); // wird nie ausgegeben... } } void UART_Init(uint32_t Baud) { unsigned int BaudRate = 103; // OSCSPEED / (16 * Baud) - 1; UBRR1H = (unsigned char) (BaudRate>>8); UBRR1L = (unsigned char) BaudRate; UCSR1C = 0x06; // 0b0000|0110 = character size 8bit UCSR1B = ( (1<<RXCIE1) | (1<<RXEN1) ); } int main(void) { LCD_Init(); LCD_Cls(white); delay_ms(1000); UART_Init(9600); delay_ms(1000); Orientation = Landscape180; //Portrait180; sei(); while(1) { delay_ms(250); } return 0; } Aber nur über das Olimex-Board funktioniert das Lesen von Zeichen vom GPS-Empfänger (per Nullmodem-Kabel). Beim Display3000-Modul klappt es nicht, d.h. es werden nur viele "?" auf dem Display dargestellt. Ich kann jedoch über ein Terminalprogramm und USB-RS232-Adapter einzelne Zeichen ans Display3000-Modul schicken. Diese werden richtig dargestellt. Woran kann es liegen, dass das Display3000-Modul über den Adapter lesen kann, aber nicht über das (einfacherer) Nullmodemkabel? Die Ursache muß doch irgendwie am USB-RS232-Adapter liegen, oder? Bin für jede Hilfe dankbar! Gruß, Markus
