mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uhr-Tutorial


Autor: Thomas Eichstetter (feldweg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi an alle Bastler,

das erste Uhrbeispiel im Tutorial 
http://www.mikrocontroller.net/articles/AVR-Tutori... 
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!!!

Autor: luxx (Gast)
Datum:

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

Autor: Thomas Eichstetter (feldweg)
Datum:

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

Autor: Asterix-007 (Gast)
Datum:

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

Autor: Thomas Eichstetter (feldweg)
Datum:

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

Autor: fubu1000 (Gast)
Datum:

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

Autor: Kachel-Heinz (Gast)
Datum:

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

Autor: Thomas Eichstetter (feldweg)
Datum:

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

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?

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Thomas Eichstetter (feldweg)
Datum:
Angehängte Dateien:

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

Autor: Thomas Eichstetter (feldweg)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das ist die Routine

Autor: fubu1000 (Gast)
Datum:

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

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.