Gast
#862
Hallo,
Ich möchte ein möglichst kleines Display mit einem Mikrocontroller
ansteuern. Ich denke da an ein Handy-Display, dazu habe ich schon bei
einem Anbieter von Ersatz-Displays nachgefragt, der konnte mir aber
nicht weiterhelfen. Das Display sollte sich einfach ansteuern lassen
(HD44780-Befehlssatz).
Dann habe ich noch ein anderes Problem:
Ich habe für den 4433 ein Programm für eine Intervall-Schaltung mit
LCD-Menue geschrieben. In der asm-Datei habe ich Aufrufe für die lcd.inc
mit dem Menue-Programm und ein weiterer inc-Datei-Aufruf für die
Binär-BCD-Wandlung. Wenn ich das Programm starte funktioniert es nicht.
Ich dachte schon an den Stack, habe alles mögliche probiert. Wenn ich
aber die inc-Dateien weglasse und alles in die asm-Datei schreibe läuft
es ohne Probleme.
Braucht ein Programmaufruf noch zusätzlichen Speicher? Reicht
möglicherweise der Stack-Speicher nicht aus? Oder wo liegt das Fehler?
Da ich auf dem Gebiet der Mikrocontroller noch Anfänger bin kenne ich
mich mit der Speichernutzung auch noch nich so aus. Wo werden denn die
Daten bei dieser LCD-Routine, die in Tabelle1 und Tabelle2 stehen,
gespeichert ?
Gruß
Tino
ldi counter,9
ldi ZL,LOW(Tabelle1*2)
ldi ZH,HIGH(Tabelle1*2)
loop_msg1: lpm
mov buffer,zeichen
rcall write_data
adiw ZL,1 ;16-Bit Zeiger erhoehen
dec counter ;alle Zeichen gesendet?
brne loop_msg1 ;Sende naechstes Zeichen
;Holt Text 'LCD-Routine' aus Tabelle und schreibt diesen
;in die zweite Zeile der Anzeige
ldi buffer,0b11000000 ; 2.Zeile
rcall write_instr ;sende Befehl
ldi counter,11 ;Zeichenzaehler
ldi ZL,LOW(Tabelle2*2)
ldi ZH,HIGH(Tabelle2*2)
loop_msg2: lpm
mov buffer,zeichen
rcall write_data
adiw ZL,1 ;16-Bit Zeiger erhoehen
no_carry2: dec counter ;alle Zeichen gesendet?
brne loop_msg2 ;Sende naechstes Zeichen
;Endlosschleife. AVR zuruecksetzen, um Programm erneut zu starten
loop: rjmp loop
;"AT90S2313" in die 1.Zeile schreiben
Tabelle1: .DB "AT90S2313"
;"LCD-Routine" in die 2.Zeile schreiben
Tabelle2: .DB "LCD-Routine"