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.
Hi Hast du einen Quarz, oder benutzt du den internen Oszillator? MfG Spess
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?
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
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.
Schade das mir keiner helfen kann. Er gibt jetzt schon etwas auf dem LCD aus aber leider immer nur das selbe seltsame Zeichen.
Hi Und wie sieht dein Programm jetzt aus? In dem, das du angehängt hast fehlt z.B. die LCD-Initialisierung. MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.