Uhr-Tutorial

OP #947541
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!!!
OP #947552
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
Gast #947571
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
OP #947579
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
Gast #947594
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
Gast #947618
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
OP #947795
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?
#947918
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
OP #948073
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
Angehängte Dateien:
Gast #948498
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.