Also hier im Anhang ist mal der Code. Funktionen sind eigentlich nur das Setzen einzelner Pixel mit 16-Bit-Farbinformation. Aufruf erfolgt über den SetPixel-Befehl, gefolgt von den Werten für Rot, Grün, Blau; jeweils Bytes (0-255); werden dann automatisch in den 16-Bit-Code umgewandelt.

Der Code an sich liegt jetzt jedoch im Archiv, da ich kurz nach der Problemlösung herausgefunden hab, dass ja Bascom selbst bereits alle Befehle für die Ansteuerung dieser Displays bereitstellt (u.a. mit der Lib lcd-pcf8833.lbx)... man glaubt garnicht, wie ver*** man sich danach vorkommt, wenn man 2 Tage lang an nem Problem arbeitet und sucht und dann feststellt, dass es das ja alles schon fertig gibt... und dass das alles auch vielfach schneller läuft.

Naja, hat aber auch Vorteile; man lernt eben, wie man solche Displays zu Fuss ansteuert oder auch wie man die Bildausgabe um 90/180/270° drehen kann.

Hier der Code:
Code:
'! Nur 16-Bit Ansteuerung funktionsfähig
' HW-Stack:  32
' Soft Stk:  16
' Framesize: 24
' µC: ATMega8 @ 8MHz

'-------------------------------------------------------------------------------
' Declaration: Subs
'-------------------------------------------------------------------------------
  Declare Sub SendCMD(byval CMD as Byte)
  Declare Sub SendDATA(byval CMD as Byte)
  Declare Sub SetPixel(byval xRed as Byte , byval xGreen as Byte , byval xBlue as Byte)


'-------------------------------------------------------------------------------
' Declaration: Ports
'-------------------------------------------------------------------------------
  config pinC.5 = output
  config pinC.4 = output
  config pinC.3 = output
  config pinC.2 = output
  Config PINC.1 = output

  CS ALIAS PortC.5
  CLK ALIAS PORTC.4
  SDA ALIAS PORTC.3
  RST ALIAS PORTC.2
  LED ALIAS PORTC.1


'-------------------------------------------------------------------------------
' Declaration: Variables
'-------------------------------------------------------------------------------
  DIM i as word
  dim j as word
  DIM ColorMode As Byte
  DIM ColorString As String * 7
  DIM R as Byte
  DIM G1 as Byte
  DIM G2 As Byte
  DIM B1 as Byte
  DIM ColorData1 As Byte
  DIM ColorData2 As Byte
  DIM ColorNibble As Byte
  Dim CMDTEMP AS BYTE


'-------------------------------------------------------------------------------
' Declaration: Constants
'-------------------------------------------------------------------------------
  Const Mode_8Bit = 8
  CONST Mode_12Bit = 12
  CONST Mode_16Bit = 16


'-------------------------------------------------------------------------------
' Display Initialization
'-------------------------------------------------------------------------------
  ColorMode = MODE_16Bit
  wait 1
  CS = 0
  SDA = 0
  CLK = 1
  RST = 1 : RST = 0 : RST = 1
  CLK = 1 : SDA = 1 : CLK = 1

  SendCMD &h01                'Software Reset
  sendCMD &h11                'Sleep Out
  SendCMD &h03                'Booster On
  waitms 20
  SendCMD &h29                'Display On
  SendCMD &h13                ' Normal Mode
  'sendCMD &H21                'Invert
  sendCMD &HBA                'Data Order
  sendCMD &h36                'MDAC
  SendData 32 + 64            ' (RAM Y DIRECTION + MIRROR X = Rotate 90° CCW)
  sendCMD &h3A                ' 16 od. 12 Bit p. Pixel
    If ColorMode = 8 Then SendData 2
    If ColorMode = 12 Then SendData 3
    IF ColorMode = 16 Then SendData 5
  sendCMD &H25                'Contrast
    sendData 63
  sendCMD &H2A                'ColAdress
    sendData 0
    sendData 131
  sendCMD &h2B                'PageAdress
    sendData 0
    sendData 131
  sendCMD &h2c


'-------------------------------------------------------------------------------
' Test Screen: Color Bars
'-------------------------------------------------------------------------------
for j = 1 to 4
  for i = 1 to 2112
    Select Case j
      Case 1 : SetPixel 255 , 255 , 255
      Case 2 : SetPixel 000 , 255 , 255
      Case 3 : SetPixel 255 , 000 , 255
      Case 4 : SetPixel 255 , 255 , 000
    End Select
  next
Next
For j = 5 to 8
  For i = 1 to 2113
    Select Case j
      Case 5 : SetPixel 000 , 000 , 255
      Case 6 : SetPixel 255 , 000 , 000
      Case 7 : SetPixel 000 , 255 , 000
      Case 8 : SetPixel 000 , 000 , 000
    End Select
  Next
next


'-------------------------------------------------------------------------------
' MAIN LOOP
'-------------------------------------------------------------------------------
DO
Loop
End


'-------------------------------------------------------------------------------
' SUBs:
'-------------------------------------------------------------------------------
Sub SETPIXEL(BYVAL XRED AS BYTE , byval XGREEN AS BYTE , byval XBLUE AS BYTE)
  '12-Bit Mode unvollständig!
    If ColorMode = Mode_12Bit Then
    R = xRed AND &B00001111
    G1 = xGreen AND &B00001111
    B1 = xBlue AND &B00001111
    CLK = 0 : SDA = 1 : CLK = 1
    ShiftOut SDA , CLK , R , 1 , 4 , 10
    CLK = 0 : SDA = 1 : CLK = 1
    ShiftOut SDA , CLK , G1 , 1 , 4 , 10
    CLK = 0 : SDA = 1 : CLK = 1
    ShiftOut SDA , CLK , B1 , 1 , 4 , 10
  EndIf

  If ColorMode = Mode_16Bit Then
    R = xRed AND &B11111000
    G1 = xGREEN AND &B11100000
    G2 = xGREEN AND &B00011100
    B1 = xBLue AND &B11111000
    SHIFT G1 , right , 5
    SHIFT G2 , left , 3
    SHIFT B1 , right , 3
    ColorData1 = R OR G1
    ColorData2 = B1 OR G2
    CLK = 0 : SDA = 1 : CLK = 1
    ShiftOut SDA , CLK , ColorData1 , 1 , 8 , 0
    CLK = 0 : SDA = 1 : CLK = 1
    ShiftOut SDA , CLK , ColorData2 , 1 , 8 , 0
  EndIf

End Sub


Sub SENDDATA(BYVAL CMD AS BYTE)
    CLK = 0
  waitus 10
    SDA = 1
  waitus 10
    CLK = 1
  waitus 10
  ShiftOut SDA , CLK , CMD , 1 , 8 , 20
End Sub


Sub SENDCMD(BYVAL CMD AS BYTE)
  CLK = 0
  waitus 20
  SDA = 0
  waitus 20
  CLK = 1
  waitus 20
  ShiftOut SDA , CLK , CMD , 1 , 8 , 30
End Sub