www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Uhr Immer ein Reset - AVR - ASM


Autor: Claudio H. (hedie)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich wollte mal das Beispiel der LCD Uhr nachmachen...

Ich hab also das LCD angehängt jedoch eines mit einem KS0066U Controller

Diesen kann ich nicht mit der Im Tutorial angegebenen Routine Ansteuern 
deshalb hab ich ein wenig geforscht und wurde auch fündig...

Habe auch ein wenig experimenteirt... Funktioniert Super

Nun Zum Problem ich hab also den Code Übernommen und ein paar rcall 
Änderungen vorgenommen so das es den Befehl in meinen Routinen Findet.

Zum test wird anfangs ein T ausgegeben....

Nun hab ich alles in den Controller geladen und dan.... Das T ist 
sichtbar und danach ein Reset dan wieder das T und Reset und das immer 
so weiter und so weiter

Obwohl eigentlich gar kein reset drin steht.....

Ich hoffe ihr könnt mir helfen

Im Anhang ist mein Code

die Routine findet ihr hier 
Beitrag "KS0066U oder Ähnliche --- LCD Treiber"

Vielen dank bereits jetzt für eure Hilfe

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Bist du sicher, daß nicht irgendwo ein 'push ..' zuviel, oder ein 
'pop...' zuwenig ist? Wäre ein typisches Verhalten.

MfG Spess

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm also die Routine Läuft einwandfrei

Nun kann der Push oder das felende Pop nur im obigen code sein....

und da es da keins hat, kanns fats nicht möglichsein....

Zudem bin ich da zuwenig über asm wissend um so etwas exakt zu bestimmen 
:D

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Noch ne Idee: Evtl. Watchdog aktiviert. Überprüfe mal deine Fuses.

MfG Spess

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nee WatchDog ist ausgeschalten

Kann es sein das es daran liegt, das ich folgenden code nicht integriert 
hab?

[avrasm]

.org 0x0000
        rjmp    main                  ; Reset Handler
.org OVF0addr
        rjmp    timer0_overflow       ; Timer Overflow Handler


[/avrams]

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du gibst die Interrupts frei und gibst auch den Overflow
Interrupt für den Timer frei.
Aber du hast keinen Interrupt Handler in die Interrupt Vektoren
eingetragen.

Darf ich vorschlagen, dass du das Tutorial von Anfang an durch-
arbeitest. Es macht wenig Sinn mitten drinn einzusteigen, wenn
dir die Voraussetzungen für einen Tutorialabschnitt, der weiter
vorne besprochen wurde, fehlen.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Karl Hein hat Recht.

Mfg Spess

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spess53 wrote:
> Karl Hein hat Recht.

Jou, nichts ungewöhnliches :-))

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Das Problem ist jetzt nur, das wenn ich den code an den anfang setze, 
dan kann ich es compilieren jedoch zeigt dann das LCD nichts mehr an 
(logisch wurde dann ja auch noch nicht initialisiert)

wenn ich den code nach die initialisation hänge, kann ich es nicht mehr 
compilieren und das mit etwa 15 fehler

alles etwa gleich wie dieser (nur andere zahlen)

C:\....Assembler\TEMPLCD3\TEMPLCD3.asm(78): error: Overlap in .cseg: 
addr=0x0 conflicts with 0x0:0x14

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Claudio H. wrote:
> Danke
>
> Das Problem ist jetzt nur, das wenn ich den code an den anfang setze,

Welchen Code?

Du brauchst erst mal in deinem Programm einen Interrupt Vektor.
Ja, genau so nennt man den Teil

.org 0x0000
        rjmp    main                  ; Reset Handler
.org OVF0addr
        rjmp    timer0_overflow       ; Timer Overflow Handler


Und der muss ganz am Anfang stehen.
Erst danach, beim label main beginnt die eigentliche Programmausführung.

Lies im Tutorial den Abschnitt Interrupts durch um rauszufinden
was es damit auf sich hat.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok habs hinbekommen....

Jedoch nur die ausgabe Nun ist noch das problem, das es mir keine zehner 
anzeigt

Es geht immer nut bis 9 und dann kommen die zeichen in der reihen folge 
und dann wieder null

 : ; < = > ?

Die Minuten werden angezeigt (bisher nur einer hatte noch nicht 10 
minuten gewartet :D )

Der code den ich abänderte sieht so aus

Ohni die ori's kommen nur linien auf dem display an

Ausgabe:
        rcall   LCD_Clear             ; das LCD löschen
        mov     Temp, Stunden 
    ori    Temp, 0x30       ; und die Stunden ausgeben
        rcall   LCD_SendChar
        ldi     Temp, ':'            ; zwischen Stunden und Minuten einen ':'
        rcall   LCD_SendChar
        mov     Temp, Minuten
    ori    Temp, 0x30        ; dann die Minuten ausgeben
        rcall   LCD_SendChar
        ldi     Temp, ':'            ; und noch ein ':'
        rcall   LCD_SendChar
        mov     Temp, Sekunden
    ori    Temp, 0x30       ; und die Sekunden
        rcall   LCD_SendChar
 
end_isr:


Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

.org $0000
     rjmp reset   ; sollte es heissen
.org OVF0addr
     rjmp    timer0_overflow       ; Timer Overflow Handler

Das Label 'main' ist eigentlich übeflüssig.

MfG Spess

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Claudio H. wrote:

>         mov     Temp, Minuten
>     ori    Temp, 0x30        ; dann die Minuten ausgeben
>         rcall   LCD_SendChar

das steht sicher so nicht im Tutorialabschnitt über Zahlen-
ausgabe auf einem LCD. Und auch im Abschnitt über die Uhr
wird eine richtige Zahlenumwandlung gemacht.

Überleg mal: LCD_SendChar gibt genau 1 Zeichen aus.
Wie soll denn da eine 2-stellige Zahl (für deren Ausgabe
offensichtlich 2 Zeichen ausgegeben werden müssen) ausgegeben
werden?

Noch mal: Es hat keinen Sinn aus dem Tutorial einzelne Teile
zusammenzukopieren. Jeder Abschnitt baut auf einem vorhergehenden
auf. Wenn du den nicht durchmachst und verstehst, dann fehlt dir
immer die Hälfte an Grundlagen.

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.