Hallo Forum,
ich verwende ein 4*20 Zeichen Dispay mit HD44780-Controller im 8bit-Modus.
Da die Ausgabe mit LCD "irgendwas" zu lange dauert, möchte ich notwendige Ausgaben in ein Variablenpuffer legen und in Ruhezeiten ausgeben.
Um auch in diesen Ruhezeiten schnell zu sein möchte ich das Busy-Flag abfragen und nicht einfach nur warten.
Leider werden nach der Busy-Flag-Abfrage nur noch abwechselnd volle Kästchen ($FF) und Leerzeichen ausgegeben.
Auch wird das Cls im Main-loop nach der ersten Busy-Flag-Abfrage nicht mehr ausgeführt.
Das Problem vermute ich in Datenrichtungsangabe, denn füge ich in der lcd_put()-Sub am Anfang ein DDRC = 1 ein, erhalte ich ebenfalls abwechselnde Kästchen
Was mache ich verkehrt? oder besser, was wäre besser?Code:$regfile = "m128def.dat" $crystal = 16000000 $framesize = 100 $swstack = 100 $hwstack = 100 $baud = 57600 '$sim Testpin Alias Portf.4 : Config Testpin = Output : Testpin = 0 Declare Sub Lcd_put(_x As Byte) Declare Sub Lcd_busy() '################### LCD Settings ############################################# Dim Lcd_textbuffer As String * 20 , Lcd_textbuffer1 As String * 20 Config Lcdpin = Pin , Port = Portc , E = Portd.5 , Rs = Portg.3 Config Lcd = 20 * 4 Config Portg.4 = Output Lcd_enable Alias Portd.5 Lcd_rs Alias Portg.3 Lcd_rw Alias Portg.4 Lcd_data Alias Portc Cursor Off Initlcd Cls Dim Lcd_zeile1 As String * 20 Dim Lcd_zeile1_char(20) As Byte At Lcd_zeile1 Overlay Dim Lcd_zeile2 As String * 20 Dim Lcd_zeile2_char(20) As Byte At Lcd_zeile2 Overlay Dim Lcd_zeile3 As String * 20 Dim Lcd_zeile3_char(20) As Byte At Lcd_zeile3 Overlay Dim Lcd_zeile4 As String * 20 Dim Lcd_zeile4_char(20) As Byte At Lcd_zeile4 Overlay Dim I As Byte Do Cls Lcd_zeile1 = "0123456789" 'input Lcd_zeile1 For I = 1 To Len(lcd_zeile1) toggle Testpin Call Lcd_put(lcd_zeile1_char(i)) toggle Testpin Waitms 100 Next I Decr I Lowerline : Lcd "ready, " ; I ; " zeichen" Wait 5 Loop End Sub Lcd_put(_x As Byte) 'DDRC = 1 Lcd_data = _x Lcd_rw = 0 Lcd_rs = 1 !nop !nop Lcd_enable = 1 !nop !nop Lcd_enable = 0 Call Lcd_busy() End Sub Sub Lcd_busy Ddrc = 0 Portc = 1 Lcd_rs = 0 Lcd_rw = 1 !nop !nop Do Toggle Lcd_enable !nop !nop Loop Until Pinc.7 = 0 Ddrc = 1 End Sub
Gruß und Dank
BoGe-Ro







Zitieren
Lesezeichen