www.mikrocontroller.net

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


Autor: Daniel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.