Hallo Forum,
ich versuche schon den ganzen Tag etwas sinnvolles auf dem LCD-Display DEM20485 anzuzeigen.
Bei manchen Versuchen kamen merkwürdige Zeichen in einigen Zeilen, meißt kam gar nichts.
Das Display ist korrekt angeschlossen (da eben diese Zeichen kamen, und mit dem original-Hex-Programm auch etwas sinnvolles kam)
Das JTAG-Interface ist ausgeschaltet. Der ATmega läuft mit den 16MHz - messtechnisc überprüft.
Code:$regfile = "M32def.dat" $crystal = 16e6 $hwstack = 64 $swstack = 64 $framesize = 64 Declare Sub Lcd_print(byval _byte As Byte) Declare Sub Lcd_cmd(byval _command As Byte) Declare Sub Lcd_init() Declare Sub Sr(byval _number As Byte , Byval _value As Byte) '------------------------------------------------------------------------------- 'Schieberegister gemeinsam Sr_load Alias Portc.1 : Config Sr_load = Output Sr_data Alias Portc.0 : Config Sr_data = Output 'Schieberegister LED Led_clock Alias Portc.4 : Config Led_clock = Output Dim Leds As Byte : Leds = &B0000_0100 Dim Direction As Bit 'Schieberegister Sensor enable Sensor_enable_clock Alias Portc.3 : Config Sensor_enable_clock = Output Dim Sensor_enable As Byte : Sensor_enable = &B1111_1111 'LOW aktiviert Sensor 'Schieberegister LCD Lcd_clock Alias Portc.2 : Config Lcd_clock = Output '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'LCD Lcd_enable Alias Portc.2 : Config Lcd_enable = Output Lcd_rw Alias Portc.1 : Config Lcd_rw = Output Lcd_rs Alias Portc.0 : Config Lcd_rs = Output Call Lcd_init() '------------------------------------------------------------------------------- Leds = &B00000100 Do Waitms 1000 Leds = Leds Xor &B00000100 Call Sr(1 , Leds) Call Lcd_print(80) Loop End Sub Lcd_init() 'Datenblatt DEM20485 Waitms 30 Call Lcd_cmd(&H3f) : Waitus 40 'Function set Call Lcd_cmd(&B00001100) : Waitus 40 'Display on/off Call Lcd_cmd(&H01) : Waitms 2 'Display clear Call Lcd_cmd(&H06) : Waitms 2 End Sub Sub Lcd_cmd(byval _command As Byte) Call Sr(3 , _command) Lcd_rw = 0 '1=read, 0=Write Lcd_rs = 0 '1=Data Register , 0=Instruction Register Lcd_enable = 1 : Waitms 1 : Lcd_enable = 0 End Sub Sub Lcd_print(byval _byte As Byte) Call Sr(3 , _byte) Lcd_rw = 0 '1=read, 0=Write Lcd_rs = 1 '1=Data Register , 0=Instruction Register Lcd_enable = 1 : Waitms 1 : Lcd_enable = 0 End Sub Sub Sr(byval _number As Byte , Byval _value As Byte) 'schreibt _value in Schieberegister '_number: 1=LED's , 2=Sensor enable , 3=LCD Select Case _number Case 1 : Shiftout Sr_data , Led_clock , _value , 1 Case 2 : Shiftout Sr_data , Sensor_enable_clock , _value , 1 Case 3 : Shiftout Sr_data , Lcd_clock , _value , 1 End Select Sr_load = 1 : !nop : Sr_load = 0 End Sub
hier der Programmcode - die Schieberegisterei funktioniert - das seh ich an der blinkenden LED.
Ich vermute dass sich das Display "verwirrt" da im c't-Bot die Leitungen für die Schieberegister identisch mit den E, RS und RW-Leitungen des Displays sind.
Wer hat noch eine Idee - oder funktionierenden Code
lg BoGe-Ro







Zitieren

Lesezeichen