-         

Ergebnis 1 bis 9 von 9

Thema: BASCOM & T6963C GLCD Problem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.07.2006
    Beiträge
    11

    BASCOM & T6963C GLCD Problem

    Anzeige

    Hi Leute,

    Wie kann ich einzelne Kommandos an ein T6963C basierendes
    GLCD schicken?

    Zum Beispiel würde ich gerne bei einem Menu eine ausgewählte Zeile
    invers darstellen. Das würde mit einer XOR Bitverknüpfung sehr schön
    gehen. Leider sehe ich aber nicht wie man daß in Bascom anstellen
    kann. Gleiches gilt auch für die Cursorhöhe (1-8 "lines") und das
    Display dunkel schalten (Display off). Sogar blinken des Display
    beherrscht der T6963C. Nur wie sage ich es meinen Display ?

    Ich möchte ungerne einen zweiten (=inversen) Zeichensatz erstellen
    müssen, um eine Zeile invers darzustellen ;o)) und meine ASM
    Kenntnisse reichen nicht aus, um Änderungen an der GLCD.lib
    vorzunehmen, geschweige den eine ganz neue LIB zu schreiben.


    Ein kleines Beispiel oder ein kurzes Code-Snipplet wären super.

    viele internette Grüße,
    Reinhard

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    ldi r24,&H80
    rcall _GWrite_Cmd

    das isses ^^
    r24 issn register, wo das command reingeschrieben wird, und das rcall verwendet das ganze dann, umn command ans display zu senden, dieses command setzt den modus auf "OR", also den normalen, möchtest du XOR haben wärs dann &H81, das du in r24 schreiben muss

    und die anderen commands kannste dann im datenblatt nachschaun

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.07.2006
    Beiträge
    11
    Hallo Martin,

    Zitat Zitat von x-ryder
    ldi r24,&H80
    rcall _GWrite_Cmd

    das isses ^^
    r24 issn register, wo das command reingeschrieben wird, und das rcall verwendet das ganze dann, umn command ans display zu senden, dieses command setzt den modus auf "OR", also den normalen, möchtest du XOR haben wärs dann &H81, das du in r24 schreiben muss

    und die anderen commands kannste dann im datenblatt nachschaun

    Martin
    Danke erstmal dafür. Leider (wahrscheinlich zeige ich hiermit voll meine
    Dämmlichkeit in Sachen Assembler ;o)) funzt es nicht. Anbei mein
    Versuch:

    $crystal = 16000000
    $regfile = "M128def.dat"

    Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portb , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6

    Cls
    Locate 10 , 2

    $ASM
    ldi r24,&H81
    rcall _GWrite_Cmd
    '$End ASM

    Lcd "Diese Zeile sollte Invers dargestellt sein"
    Wait 3

    $ASM
    ldi r24,&H80
    rcall _GWrite_Cmd
    $End ASM

    Locate 15 , 2
    Lcd "und diese wieder normal"

    Wait 10
    End

    Leider sind beide Zeilen komplett normal. Wat mach ich falsch?

    viele internette Grüße,
    Reinhard

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    du kannst nicht einfach nen text invers darstellen, du musst den nachm XOR und shcreiben mit schwarz übermalen, also mach einfach mal das ganze display schwarz, wenn du den XOR anhast und den text geschrieben

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.07.2006
    Beiträge
    11
    Hallo Martin,

    Zitat Zitat von x-ryder
    du kannst nicht einfach nen text invers darstellen, du musst den nachm XOR und shcreiben mit schwarz übermalen, also mach einfach mal das ganze display schwarz, wenn du den XOR anhast und den text geschrieben

    Martin
    Das ist jetzt NICHT Dein Ernst, oder ?? Ich will ein Auswahlmenu basteln.
    In etwa so:

    Hauptmenu:
    --------------
    >1.) Auswahl 1 <<-- nur DIESE Zeile soll inverse sein
    2.) Auswahl 2
    3.) Auswahl 3
    usw.

    Der ">" stellt einen graphischen Cursor da, der mittels Encoder auf und
    ab bewegt werden kann. Je nach Menupunkt bewirkt ein Drücken des
    Encoderknopfs ein Toggeln, Auswahl oder Sprung in ein weiteres Menu.

    Zusätzlich sollen rechts neben den Menuzeilen, zur Verdeutlichung, einige
    Icons stehen. Bei einigen Menus sitzt rechts daneben ein kleiner Graph
    (z.B. Strom / Spannungsverlauf, etc) Das alles verschwindet doch, wenn
    ich den Bildschirm schwarz "Pinsel" bevor ich die eine einzige Zeile
    invers darstelle.

    Gibts da wirklich keine andere Möglichkeit? Es müssen doch schon
    Leute ein Auswahlmenu gebastelt haben

    Übrigens hatte ich mal den Hexcode für einen 2 Line Cursor (anstelle
    volle 8 Linien) eingegeben (in den Code von oben). Da hat sich aber
    leider auch nix geändert.

    viele internette Grüße,
    Reinhard

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    ne, du musst doch nur dein menü aufbauen und dann über die merkierte zeile schwarz drüberzeichnen, dann iss die zeile wo text und grafik sind invers...

    martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    03.07.2006
    Beiträge
    11
    Hallo Martin,

    Zitat Zitat von x-ryder
    ne, du musst doch nur dein menü aufbauen und dann über die merkierte zeile schwarz drüberzeichnen, dann iss die zeile wo text und grafik sind invers...

    martin
    Sorry für die späte Antwort. Beruflich bedingt komme ich im Augenblick
    nur noch an den WE zum spielen ;o(

    Ich habe daß, was Du oben vorgeschlagen hast, versucht, aber leider
    ohne Erfolg. Evtl. happert es an meinem Verständnis über was Du mit
    dem Kommentar "zeile schwarz drüberzeichnen" meinst. Meinst Du jetzt
    Pixelweise (sprich mit PSet)? Oder meinst Du Blockweise (sprich den 6x6
    oder 8x8 "font" Feld in der Länge der kompletten Zeile?

    Könntest Du mir bitte ein Codesnipplet zukommen lassen (nur rein fürs
    "zeile schwarz drüberzeichnen")? Danke!

    viele internette Grüße,
    Reinhard

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    $crystal = 16000000
    $regfile = "M128def.dat"

    Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portb , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6

    dim x as byte
    dim y as byte

    Cls
    Locate 10 , 2

    ldi r24,&H81
    rcall _GWrite_Cmd

    Lcd "Diese Zeile sollte Invers dargestellt sein"
    for x = 1 to 240
    for y = 1 to 128
    pset x, y, 255
    next y
    next x
    Wait 3

    ldi r24,&H80
    rcall _GWrite_Cmd

    Locate 15 , 2
    Lcd "und diese wieder normal"

    Wait 10
    End

    das wäre jetz fürs ganze display, und du wirst das zweite nun nich sehen, weil das ja wieder geodert iss, du müsstest dir jetz mal ne funktion schreiben sub writeinvers(text as String *20, xloc as byte, yloc as byte) oder so, die an der stelle x,y (mit locate dann intern) was hinschreibt, den modus wechselt und nur da drübermalt, und dann den modus wieder ändert

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    03.07.2006
    Beiträge
    11
    Hi Martin et all,

    Ich danke Dir für die Hilfe. Mein Problem war letztendlich, daß ich in der
    Sub vergessen hatte die Werte mit Byval zu übergeben. Hier ist mein jetziger (funktionsfähiger ;o) Code:

    Code:
    $crystal = 16000000
    $regfile = "M128def.dat"
    
    Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portb , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
    
    Declare Sub Text_2_lcd(text As String , Byval Xloc As Integer , Byval Yloc As Integer , Byval Invert_it As Integer)
    
    Dim Text As String * 40
    
    Cursor Off
    Cls
    Gosub Menu
    
          Do
          Loop
    
    End
    
    Sub Text_2_lcd()
    Dim X As Integer , Y As Integer
    Dim X_start As Integer , Y_start As Integer , X_start_old As Integer , Y_start_old As Integer
    Dim X_stop As Integer , X_stop_old As Integer , Y_stop As Integer , Y_stop_old As Integer
    
    If Invert_it = 1 Then
      Locate Yloc , Xloc    ' WTF! First y and then x? No sensible person writes this way :( Geez!
      ldi r24,&H81
      rcall _GWrite_Cmd
      Lcd Text
      X_start = Xloc * 6
      X_start = X_start - 6
      X_start_old = X_start  ' Store values in a new variable as we need to remove the black bar once the item should no longer be highlighted
      X_stop = 6 * Len(text)
      X_stop = X_stop + X_start
      X_stop_old = X_stop
      Y_stop = Yloc * 8
      Y_stop_old = Y_stop
      Y_start = Y_stop - 8
      Y_start_old = Y_start
      For X = X_start To X_stop
       For Y = Y_start To Y_stop
        Pset X , Y , Invert_it
       Next Y
      Next X
    Else
      ldi r24,&H80
      rcall _GWrite_Cmd
      For X = X_start_old To X_stop_old
       For Y = Y_start_old To Y_stop_old
        Pset X , Y , Invert_it
       Next Y
      Next X
      Locate Yloc , Xloc   'WTF! First y and then x? No sensible person writes this way :( Geez!
      Lcd Text
    End If
    End Sub
    
    Menu:
    Text = "Dieser Text ist Inverse"
    Call Text_2_lcd(text , 3 , 7 , 1)
    Text = "und diese wieder normal"
    Wait 3
    Call Text_2_lcd(text , 3 , 8 , 0)
    Text = "inverse is sooooo cool"
    Call Text_2_lcd(text , 3 , 9 , 1)
    Return

    Vielleicht kann es ja einer brauchen. Das Sub funzt folgendermaßen:

    Call Text_2_LCD (Text,x,y,Inverse). Damit wird der Text auf dem
    Display an der Position x,y angezeigt. Der Code prüft wie lange der
    eigentliche Text ist und macht den schwarzen Balken, womit der Text
    invertiert wird, nur so lang wie nötig. Ist der nächste Parameter eine 1,
    dann wird der Text invers dargestellt. Gleichzeit merkt sich der Code,
    wo invers dargestellt wurde. Sobald die nächste Zeile wieder normal
    aussehen soll wird der schwarze Balken (Pset) entfernt. Sprich das
    inverse wird aufgehoben.

    Ich werde es jedenfalls nicht benutzen.

    Das Ganze wird viel zu aufwendig. Ich wollte eigentlich ein Menu
    aufbauen und dann mittels einem Rotary Encoders die Zeile, die
    verändert werden soll, auswählen (==>invers darstellen) und beim
    drücken des Encoder Knopf ins Untermenu springen bzw eine Funktion
    ein oder ausschalten.

    Das Ganze geht mit Zahlen vor dem Menupukt und einem Keypad als
    Spannungsteiler verdrahtet (Abfrage über ADC) viel schneller. Den
    Code hatte ich in fünf Minuten geschrieben ;o))

    Schade, daß gerade bei solchen einfachen Sachen BASCOM-AVR so
    eingeschränkt ist. Auch solche Sachen, daß beim Locate erst der
    Y Parameter kommt und dann der X Parameter, ergeben für mich
    keinen Sinn. Evtl könnte Mark mal die GLCD Library ein wenig aufpeppen.

    viele internette Grüße,
    Reinhard

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •