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
Hi Bist du sicher, daß nicht irgendwo ein 'push ..' zuviel, oder ein 'pop...' zuwenig ist? Wäre ein typisches Verhalten. MfG Spess
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
Hi Noch ne Idee: Evtl. Watchdog aktiviert. Überprüfe mal deine Fuses. MfG Spess
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]
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.
Spess53 wrote:
> Karl Hein hat Recht.
Jou, nichts ungewöhnliches :-))
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
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.
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: |
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
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.
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.