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