Forum: Mikrocontroller und Digitale Elektronik String auf LCD anzeigen und über UART USB Bridge senden. Problem!


von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen, ich habe im Anhang meine Source Datei.

Atmega8
USB UART Bridge UM232R (com n)
AVR Studio

Ich hab folgendes Problem. Ich habe ein String den ich gerne auf einem 
LCD ausgeben würde und der danach über UART (USB Bridge) in einer 
Schleife an z.b. Hyperteminal gesendet werden soll. In meinem Programm 
gibt mein LCD den Text aus nur sendet er danach nur noch Unsinn und es 
passieren die wildesten Dinge auf meinem PC. z.b. funktioniert meine 
Maus nicht mehr richtig oder das Hyperterminal kann nicht connecten.

Ich beschäftige mich erst seit 2-3 Wochen mit der 
Mikrocontrollerprogrammierung also reißt mir bitte nicht den Kopf ab 
wenn mein Fehler ein "dummer" ist.

Die LCD Routine ist im übrigen aus dem Tutorial.

Ein kleiner Anhang noch zum Thema LCD`s (HD44780). Ich hab mir meins 
gestern zerschossen weil ich es um einen Pin versetzt auf das STeckbrett 
gesteckt hatte und somit plus und minus vertauscht habe. Da es danach 
noch funktionierte (oberer Balken komplett da) dachte ich es sei nichts 
passiert da aber ein altes Programm welches "TEST" anzeigen soll keinen 
Erfolg brachte und das LCD nicht initialisiert wurde war ich stunden 
lang auf der Suche nach meinem Beschaltungsfehler. Diesen fand ich nicht 
und im Forum fand ich beim durchstöbern auch keine klare Aussage ob ein 
Display defekt sein kann obwohl der Balken angezeigt wird. Heute hab ich 
mir ein neues gekauft und dieses funktioniert jetzt auch. Dies ist 
natürlich nur für den jenigen interessant der das selbe Problem hat und 
das hier gerade liest.

von spess53 (Gast)


Lesenswert?

Hi

Hast du einen Quarz, oder benutzt du den internen Oszillator?

MfG Spess

von Daniel (Gast)


Lesenswert?

Ich habe eine 4 MHZ Quarz der ja nur einen Fehler von 0.2 haben soll.
Die Übertragung klappt ohne die LCD_Routine wunderbar nur jetzt wo ich 
am Anfang mit den Z Registern (H/L) auf die Stringadresse zugreife fängt 
er an rumzuspinnen.

Die Startadresse des Strings dürfte sich doch nicht ändern wenn ich 
mehrmals den Z Pointer mit ihr lade oder?

von spess53 (Gast)


Lesenswert?

Hi

>loop:
>ldi zl,low(my_string*2);             ; Z Pointer laden
>ldi zh,high(my_string*2);
>rcall serout_string
>rjmp loop

Willst du das wirklich?

Dein Code sieht mir etwas zusammenkopiert aus.

MfG Spess

von Daniel (Gast)


Lesenswert?

Also wenn ich den Code richtig interpretiere dann läd er doch die 
Anfangsadresse 16bit von meinem String in die zwei 8bit Register von Z? 
Z wird dann immer um 1 erhöht und ausgelesen bis 0 ausgelesen wird. Dann 
geht der Spass von vorne los.

Das sich das ganze durch die Schleife wiederholt ist erstmal egal. Ich 
will ja nur probieren.

Kopiert hab ich den größten Teil, aber das nur um mir die Schreibarbeit 
zu ersparen. Wenn ich das Tutorial durch habe werd ich mich erst an mein 
Projekt wagen und alles alleine schreiben.

Fest steht ich weiß nicht warum er mit der LCD_Routine nicht mehr sendet 
bzw das was er soll und warum meine Mouse die ja auch über USB 
angeschlossen ist rumspinnt wenn ich das Prgramm auf den Atmega spiele.

von Daniel (Gast)


Lesenswert?

Schade das mir keiner helfen kann. Er gibt jetzt schon etwas auf dem LCD 
aus aber leider immer nur das selbe seltsame Zeichen.

von spess53 (Gast)


Lesenswert?

Hi

Und wie sieht dein Programm jetzt aus? In dem, das du angehängt hast 
fehlt z.B. die LCD-Initialisierung.

MfG Spess

von Daniel (Gast)


Lesenswert?

Der Fehler lag wie immer zwischen den Kopfhörern:)

Man muss wohl das Register(temp1) welches angezeigt werden soll nochmal 
direkt vor dem "rcall lcd_data" laden bzw. hab ich es vom Stack gepopt.
Wenn man sich die LCD_Routine aus dem Tutorial ansieht, dann ist das ja 
auch klar weil temp1 bei der Initialisierung überschrieben wird.

...
ldi temp1,UDR
push temp1
rcall lcd_init
pop temp1
rcall lcd_data
...

trotzdem Danke für deinen Mühe

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
Noch kein Account? Hier anmelden.