Hallo Forum, ich habe ein Problem. Ich möchte von einem GPS-Empfänger (RS232) die Koordinaten auf das LCD-Display ausgeben. Dazu nutze ich einen AT Mega8. Das RS232-Signal vom GPS-Empfänger wandele ich mit einem MAX232 auf den TTL-Pegel vom Mega8. Laut Oszilloskop sind diese Signale auch in Ordnung (invertiert und auf TTL-Pegel gewandelt). Leider zeigt mir das Display nur irgendwelche Hyroglyphen an, nichts brauchbares. Ich vermute, dass ich da im Programm irgendwo einen Fehler habe. Unten hab ich den Quelltext angehängt. Würd mich total freuen, wenn mir jemand auf die Sprünge helfen kann. Viele Grüße Stefan #include "lcd.c" #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <stdarg.h> #include <avr/interrupt.h> #include <avr/eeprom.h> #include <inttypes.h> #include <stdbool.h> #include <avr/wdt.h> #define F_CPU 3686400 #define UART_BAUD_RATE 4800 void initUART(void) { UBRRL = (F_CPU/UART_BAUD_RATE/ 16L)-1; UCSRB = (1 << RXEN); } void putChar(char data) { while (!(UCSRA & 32)); UDR = data; } int main (void) { unsigned char Zeichen; initUART (); lcd_init(); DDRB=0x00; PORTB=0xff; while (1) { if (UCSRA&(1<<RXC)) { Zeichen = (UDR); lcd_on(); lcd_goto(1,1); lcd_write_s(Zeichen); } } }
Stefan schrieb: > Leider zeigt mir das Display nur irgendwelche Hyroglyphen an, nichts > brauchbares. Ich vermute, dass ich da im Programm irgendwo einen Fehler > habe. Deine Vermutung ist nicht ganz von der Hand zu weisen :-) > Unten hab ich den Quelltext angehängt. Würd mich total freuen, > wenn mir jemand auf die Sprünge helfen kann. Leg erst mal dn GPS Empfänger beiseite und häng deinen Mega8 an die serielle Schnittstelle deines PC an. Dann hast du unter Kontrolle was gesendet wird und kannst auf dem LCD vergleichen. > #define F_CPU 3686400 dein Mega8 läuft auch wirklich mit dieser Taktfrequenz? Hast du das kontrolliert? > unsigned char Zeichen; > lcd_write_s(Zeichen); Hmm. Aus dem Funktionsnamen heraus würde ich jetzt erst mal vermuten, dass die Funktion lcd_write_s einen String ausgeben will und nicht ein einzelnes Zeichen Ansonsten: http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART
Karl heinz Buchegger schrieb: > Leg erst mal dn GPS Empfänger beiseite und häng deinen Mega8 an die > > serielle Schnittstelle deines PC an. Das hab ich schon probiert. Das Problem bleibt genauso. Ich habe versucht mit Hyperterminal Zeichen an den µC zu senden, aber er zeigt auf dem Display nur Schrott an. Ja, der Controller läuft mmit 3686400 Hz. Das ist mit dem Quarz so eingestellt und die Fuse-Bits sind auch richtig gesetzt. Wie kann ich das kontrollieren?? Das mit dem String vermute ich auch. Aber wie mache ich das dann richtig?? Viele Grüße Stefan
Stefan schrieb: > Das hab ich schon probiert. Das Problem bleibt genauso. Ich habe > versucht mit Hyperterminal Zeichen an den µC zu senden, aber er zeigt > auf dem Display nur Schrott an. Aha. Und weil vom PC mit seinem kontrollierbarem Sender nichts gescheites angezeigt wurde, bist du dann auf dsa GPS gegangen. Du hast zwar keine Ahnung was das GPS so sendet, aber das macht ja erst mal nichts. Hauptsache du hast noch eine Unbekannte mehr im Fehlersuchspiel :-) Das macht die Fehlersuche erst so richtig interessant, wenn man möglichst viele unkontrollierbare und unbekannte Geräte im System hat. > > Ja, der Controller läuft mmit 3686400 Hz. Das ist mit dem Quarz so > eingestellt und die Fuse-Bits sind auch richtig gesetzt. > Wie kann ich das kontrollieren?? Weils so schön war: http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART > Das mit dem String vermute ich auch. Aber wie mache ich das dann > richtig?? Programmieren lernen? Oder aber einfach mal in die lcd.h heineinschauen, sich alle Funktionen ansehen, die jenigen aussortieren die nur einen char oder einen unsigned char nehmen und anhand vom Funktionsnamen raten, welche es wohl sein könnte. Man kann dann auch noch in die zugehörige Implementierung reinschauen und sich im Code mal ansehen, was denn die Funktion so macht. Wenn die lcd_write_s Funktion tatsächlich einen String ausgibt, dann stehen die Chancen nicht schlecht, dass die Funktion im Wesentlichen eine Schleife beinaltet und innerhalb der Schleife die einzelnen Zeichen des Strings ausgegeben werden. Daran kann man ganz gut erkennen, das die Funktion wirklich für Strings gedacht ist. Aber: Wenn der Programmierer nur halbwegs was auf dem Kasten hat, dann benutzt er zur Ausgabe der Einzelzeichen des Strings eine Funktion, die ein einzelnes Zeichen ausgeben kann. Die Funktion lcd_write_s wird sich höchst wahrscheinlich auf eine andere Funktion stützen, die ein Einzelzeichen ausgibt. Welche Funktion hast du nochmal gesucht?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.