LCD Uhr Immer ein Reset - AVR - ASM

OP #664990
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
Angehängte Dateien:
#665012
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.
OP #665044
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
#665052
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.
OP #665067
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
1
Ausgabe:
2
        rcall   LCD_Clear             ; das LCD löschen
3
        mov     Temp, Stunden 
4
    ori    Temp, 0x30       ; und die Stunden ausgeben
5
        rcall   LCD_SendChar
6
        ldi     Temp, ':'            ; zwischen Stunden und Minuten einen ':'
7
        rcall   LCD_SendChar
8
        mov     Temp, Minuten
9
    ori    Temp, 0x30        ; dann die Minuten ausgeben
10
        rcall   LCD_SendChar
11
        ldi     Temp, ':'            ; und noch ein ':'
12
        rcall   LCD_SendChar
13
        mov     Temp, Sekunden
14
    ori    Temp, 0x30       ; und die Sekunden
15
        rcall   LCD_SendChar
16
 
17
end_isr:
#665072
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren