Also ich hab nun erfolgreich das AVR Tut bis zum Punkt LCD abgeschlossen und da mal ne Frage: Habe ein 2x24 LCD und möchte nun z.B. nen Text ÜBER 24 Zeichen laufen lassen in der gleichen Zeile der sich wieder holt. Klingt simpel aber ich hab keine Ahnung wie ich das umsetzen kann. Daher: Ich suche Inspiration und Hilfe um auf die Sprünge zu kommen. Verlange keinen fertigen Code! Schnipsel reichen denke auch ansonsten lern ich ja nix.
Ist eigendlich ganz einfach: Du hast ja das LCD schon angesteuert bekommen. Jetzt schreibst du einfach den Text auf das Display und zwar in der Reinfolge 1. Buchstabe = 1. Zeichen usw.. Jetzt nimmst du den Timer und jede Sekunde schickst du den Text nochmal. Diesmal setzt du den 1.Buchstaben an die 2.Stelle des LCD und den letzten lässt du weg oder aber setzt ihn an die erste Stelle. Du lässt es einfach so laufen, das es sich jedesmal alles um eine Stelle verschiebt. Wenn du willst das er von hinten nach vorne läuft müsstest du es umgekehrt machen. Leider kann ich dir mit Code nicht helfen ich kann "nur" C/C++. Assambler war mir wenn ich ehrlich bin immer etwas zu naja sagen wir nicht hochsprachlich genug ^^ Ich hoffe du kannst was damit anfangen. 12345678901234 Hello World Hello World Hello World Hello World d Hello Worl ld Hello Wor rld Hello Wo orld Hello W Gruß ErgoProxy
Anfangen? KLAR Nur Kapitel "Timer" hab ich noch nit gelesen. PS: lerne nur ASM wegen Allgemeinverständnis
Hallo, in ASM halte ich das immer so: Ram für die Länge des Textes + ein Leerzeichen + ein 0 Byze im Ram reservieren und den Text + Leerzeichen da rein. Also z.B. Am Ende ist ein Leerzeichen und ein Nullbyte. Den Kram in einen Puffer im SRAM ablegen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
Passt zu jeder Zeilen- und Textlänge. Gruß aus Berlin Michael
Vielen Dank da hab ich ja was zum drüber grübeln!
.desg buffer: .byte TEXT_LEN kann es ein das du dich da vertippt hast? weil desg kennt das AVR Studio nicht
Gast
#1093927
Hi Muss .dseg heissen. MfG Spess
Hallo, ja, Tippfehler... .equ lCD_LEN = 26 muß natürlich 24 sein bei 24 Zeichen/Displayzeile... und dec r16 ; Zeile komplett? sollte besser dec COUNT heißen, der Lesbarkeit wegen... Ich verspeche auch nicht Fehlerfreiheit, der Ablauf sollte aber nachvollziehbar sein. Ob man Z dafür reserviert halten kann, ist auch von der konkreten Anwendung ab, sonst eben in 2 SRAM-Plätzen sichern. Der Text kann natürlich auch im Flash liegen, dann eben lpm benutzen usw. usw. Das zusätzliche Leerzeichen kann ist, damit nach dem Textende nicht sofort der Anfang folgt. Kann man auch anders lösen, z.B. so: [pre} ... brne ausgabe_ok ; nein, ausgeben ld ZL, low(buffer) ld ZH, high(buffer) ; Zeiger wieder auf Textanfang. ldi TEMP,' ' ; Leerzeichen als Trennung laden ausgabe_ok; [/pre] Spart ein Byte im Ram. Gruß aus Berlin Michael
Gast
#1094061
Vielleicht auch mal über die Scrollfunktion des LCDs nachdenken. Das LCD hat 2 mal 40 Zeichen Anzeige-RAM, aber nur 2 mal 24 Zeichen Anzeigeplatz auf dem Glas. Da lässt sich was scrollen... Ich nutze das Scrollen aber nicht, ich benutze dafür einen Bildschirmspeicher im SRAM des AVRs (Update des realen LCDs erfolgt im Millisekundentakt im Hintergrund), was die Ausgaberoutinen sehr schnell macht. Da bereitet versetztes Neuschreiben des Textes keine Probleme. Das kann z.B. durch einen zusätzlichen Offset beim Adressieren der Texte im Flash erfolgen. Ein Beispiel kann ich jetzt nicht liefern, ich hatte diese Funktion bisher noch nicht gebraucht. KH
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.