Hi an alle Bastler, das erste Uhrbeispiel im Tutorial http://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr#Das_erste_Programm habe ich zwei Tage nicht zum laufen gebracht. Problem war folgendes: Auf dem LCD hat es zuert 00:00:01 angezeigt, anschliesend 00:00:000:00:02 dann 00:00:03 und schließlich 00:00:03???????????? Ich habe ewig jeden Schritt durchdacht bis ich darauf gekommen bin, dass in der loop-Schleife vor "rcall lcd_clear" das "rcall lcd_init" fehlt. Ab da an ging es dann perfekt. Meine Frage ist nun: Warum rcall lcd_init ???? Das Display wurde doch bereits initialisiert. Oder bin ich ein Einzelfall??? Mfg Thomas PS: ich finde das Tutorial spitze!!!
mal anders: ein rcall lcd_clear hätte es auch getan, du hast vergessen, dass wenn die neue uhrzeit kommt dass display überschrieben werden muss!
bei mir hat das rcall lcd_clear nicht gereicht. Ich habe genau den Code wie im Tutorial verwendet aber es hat nicht funktioniert. Die Uhrzeit wird ja überschrieben. Das lcd_clear bewirkt ja ein löschen des Displays, was ich auch eigentlich wollte, nur hat es nicht funktioniert... Könnte es sein dass der Wert in temp1 trotz ldi temp1, 0b00000001 nicht geändert wird und die Sekundenabzählung hier den Effekt bewirken? Ich habe das Display EA W162B-N3LW
Moin Männers, das sieht so aus, als ob du vergessen hast den Cursor wieder zurück "auf Anfang" zu setzen. Mit der Init-Routine wird das warscheinlich getan! Also: 1. LCD löschen 2. Cursor auf Anfang setzen. Ich habe mir allerdings den Code nicht angesehen, ist nur eine Vermutung! Viel Glück Asterix-007
Hab es ausprobiert und den Curser auf Anfang gesetzt, es bleibt jetzt bei 00:00:03 ? stehen. War auch zu erwarten, dass dies nicht funktioniert da irgendetwas temp1 verändert und es unabhängig von der Position ist. Trozdem merce für den Vorschlag :-) Mfg Thomas
Hallo, welche Lcd_Routinen benutzt du denn ? Liegt sicher an denen, weil der Code im Tutorial zu 99,99% funzen dürfte. Wahrscheinlich veränderst du die Register r16 bis r19 in denen. Gruss
LCD_Clear benutze ich nur bei LCD_Init, denn es dauert gegenüber anderen LCD-Zugriffen recht lange. Ansonsten lösche ich die Texte durch Überschreiben der vorherigen Ausgabe (notfalls auch mit Leerzeichen). Bau Dir ein ordentliches Locate-Makro, mit dem Du per Set-DD-RAM-Address-Kommando die Ausgabeposition komfortabel einstellen kannst und formatiere Deine Ausgabetexte so, dass jeder Text exakt den dafür vorgesehenen Platz ausfüllt (und damit den vorherigen Text restlos überschreibt). Das Tutorial ansich ist gut. Die darin gezeigten Routinen dienen dem Verständnis beim Anfänger, sind also bewusst recht einfach gehalten. Somit sind sie (die Routinen) allerdings nicht unbedingt optimal. Da ist also auch die Kreativität des Benutzers gefragt, der sich nach dem Lesen, Verstehen und Testen der Tut-Routinen seine eigenen Routinen bastelt, die seinen Bedürfnissen entsprechen und die er dann auch versteht. KH
Hi, danke erst mal... war wäre man ohne gute Menschen das mit der Locate-Routine ist ne gute Idee, aber dafür gibts ja auch extra den Befehl hier: http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Display_RAM_Address_Set:_0b1aaaaaaa Ich verwende den Code im Tutorial, habe nur eine leichte Änderung in lcd_routines vorgenommen und alles ab lcd_number gelöscht und die Registerdefinitionen oben gelöscht Ich bin mittlererweile der Ansicht das mein LCD irgendwelchen Blödsinn macht. Weil in lcd_clear wird ja der Wert im Stack gespeichert und anschließend geändert, was sich auch im AVR-Studio4 zeigt bei mir. Nur das LCD macht dies anscheinend nicht. Ich habe lcd_command in lcd_clear ausgegliedert und dann spinnt es nicht mehr sondern speichert den Wert jeweils immer hintereinander, also 00:00:01:00:00:02:00:00:03usw. hat dieses Problem schon mal wer gehabt?
Thomas Eichstetter wrote:
> hat dieses Problem schon mal wer gehabt?
Dein Hauptproblem ist, daß keiner weiß, was Du da überhaupt machst.
Zu sagen, der Code ist irgendwie ähnlich zu irgendeinem Tutorial, reicht
nicht!
Du mußt endlich mal Deinen exakten Code inklusive aller verwendeten
LCD-Unterfunktionen als Anhang senden.
Selbstverständliche Angaben wie MC-Bezeichnung, MC-Takt gehören
natürlich auch dazu.
Dann kann man auch mal nen Blick drauf werfen, wo der Fehler ist.
Ansonsten bleibt alles nur Rätselraterei.
Peter
Ja du hast Recht, also hier das UHR1.asm Ich verwende 4MHz interner Takt des Atmega8 Programmierstation ist das STK500 Entwicklungsumgebung AVR-Studio4 Ganz unten habe ich die Zahlenübersetzung geändert, weil im Tutorial das temp2 as Speicherort gewählt wird, jedoch die Routine temp1 verlangt Und bei dem zweiten lcd_init habe ich eine Bemerkung dahintergeschrieben Mit freundlichem Gruß Thomas
Hallo, also bei lcd_clear und home musste auf jeden schonmal temp2(r17 glaub ich) sichern, da in der delay_5ms benutzt wird. Die andere Routine schau ich mir später an. Gruss
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.