Hallo Forum, Ich habe mir einen gebrauchten c't-Bot gekauft und möchte den mit Bascom programmieren. Hierbei scheitere ich bei der Ansteuerung des LCD-Displays. Auf dem Display steht DEM20485. Laut Datenblatt hat es einen KS0066-Controller. Angeschlossen ist es hinter einem von 3 8-bit-Schieberegistern, wobei sich die Steuerleitungen des Displays und der Schieberegister die selben Pins teilen. µC-Pin Schieberegister LCD ------------------------------------ PORTC.0 Data RS PORTC.1 Load R/W PORTC.2 Clock Enable Da vor meinen eigenen Programmierversuchen bereits ein Testprogramm auf dem c't-bot lief, weiß ich dass das Display korrekt funktioniert und der Kontrast stimmt. Der ATMega32 läuft mit 16 MHz, was auch überprüft ist. Ebenso ist das JTAG-Interface disabled, so dass der PORTC vollständig zur Verfügung steht. Der Bascom-Code lädt die Schieberegister korrekt, was ich an der blinkenden LED erkenne. Nichtsdestotrotz erhalte ich keine bzw. bei manchen Versuchen nur unsinnige Displayanzeige. Ich denke, dass während der Initialisierung des Displays das unvermeidbare Wackeln an RS, R/W und E durch die Schieberegisterbeladung zu Initialisierungsproblemen führt. Wer hat eine Idee oder sogar Lösung, wie ich das Display korrekt ansteuern kann. Besten Dank Bodo Hier mein Programmcode: $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
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.