Forum: Mikrocontroller und Digitale Elektronik c't-Bot Display ansteuern mit BASCOM


von Bo G. (boge-ro)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.