Archiv verlassen und diese Seite im Standarddesign anzeigen : GLCD 160x128 mit T6963C mit Bascom
Hallo
Ich habe ein pahr GLCDs Tochiba TLX-1013-E0 ersteigert.
Beim ansteuern wird aber nur die obere Helfte bedient, auf der Unteren erscheint nur wiles Muster. Beim zeichnen von Linien oder Kreisen werden nicht alle Pixel sofort gesetzt, erst nach 3-4mahliger ausgabe alle komplett.
GLCD mit
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portb , Wr = 0 , Rd = 1 , Ce = 2 , Cd = 3 , Reset = 4 , Fs = 5 , Mode = 8
da keine 160x128 Glcd unterstützt.
habe im Forum alte Beiträge gefunden, wurden andere glcd.lib verwendet.
Leider kann ich diese nicht finden.
Kann mir jemand weiter helfen ???
Danke im vorauß
hft
Hi, kann das vielleicht sein das das Display zwei EN Leitungen hat also je Displayhelfte einen Chip.
Was noch sein kann ist das du das Display im grafigmode nutzt aber die hardware auf ein Zeichensatz eingestellt ist welches die grafigmode unterdrückt.
Dann kann es noch sein das du/Bascom es falsch ansteuert (Config) am besten du schaust mal in das Datenblatt vom T6963 da steht ne ganze menge drinnen wie du die HW config am Chip machst und natürlich auch zur SW config, meist sind bei den Displays irgendwo um dem Treiber 0Ohm Widerstände verbaut mit den du die HW config machen kannst.
Danke für den Hinweis.
Laut Datenblatt hat dieses Display nur 1x CE, 1xWR, 1xRd, 1xCD und 1xReset, so wie 8xDaten. Das Problem ist die Bascom lib, sie unterstützt dises lormat 160x128 nicht. Ich finde in ihr nicht die Stelle, wo ich die Adressbereiche ändern kann.
Hilfe währe ser willkommen.
hft
Hallo hft,
ich habe auch ein Display mit 160x128 dran.
Mein Config Befehl sieht auch so aus:
Config Graphlcd = 240 * 128 , Dataport = Portc , Controlport = Porta , Ce = 5 , Cd = 4 , Wr = 1 , Rd = 0 , Reset = 6 , Mode = 6 , Fs = 7
Ich habe aber keine spezielle Lib ausgewählt. Wenn du nur 240x128 angibst, geht BASCOM von einem T6963C Controller aus.
Hallo for_ro
Mein Kopf lautet:
$regfile = "m32def.dat"
$crystal = 16000000 '7372800 8000000 16000000
$baud = 9600
'$lib "glcd1.lib"
$hwstack = 100 ' Hardwarestack
$swstack = 54 ' Softwarestack
$framesize = 64 ' Framsize
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portb , Wr = 0 , Rd = 1 , Ce = 2 , Cd = 3 , Reset = 4 , Fs = 5 , Mode = 8
"glcd1.lib" stamt von einem anpassungsversuch.
Wird bei Dir das ganze Display angeseuert?
wen ja, kanst Du mir den Cod zukommen lassen
Habe gerade Mode =6 probiert, ein Kreis wird zum Owal und linien werden gestrichelt.
Wird bei Dir das ganze Display angeseuert?
Ja.
wen ja, kanst Du mir den Cod zukommen lassen
Das wird dir nicht viel helfen.
Ich benutze jedenfalls nur
CLS
Cursor Off
und dann sowas
Locate 5 , 1 : Lcd "0 = Debug aus"
Locate 6 , 1 : Lcd "1 = Ports"
Locate 7 , 1 : Lcd "2 = Funk. Aufrufe"
zum schreiben.
Hast du eine Lib wie z.B. "mcsbyte.lib" in deinem Programm?
Schreib mal alles von oben bis unten mit Text voll. Und dann mal zwei Linien diagonal in die Ecken.
Kannst du Fotos einstellen?
Habe gerade Mode =6 probiert, ein Kreis wird zum Owal und linien werden gestrichelt.
Das bedeutet, dass der FS Pin nicht zum Controller durchgeht. Hast du den Pin angeschlossen?
"mcsbyte.lib" und "glcd.lib" sind vorhanden.
'The connections of the LCD used in this demo
'LCD pin connected to
' 1 GND GND
'2 GND GND
'3 +5V +5V
'4 -9V -9V potmeter
'5 /WR PORTC.0 (PORTD.2)
'6 /RD PORTC.1 (PORTD.3)
'7 /CE PORTC.2 (PORTD.4)
'8 C/D PORTC.3 (PORTD.5)
'9 NC not conneted
'10 RESET PORTC.4 (PORTD.6)
'11-18 D0-D7 PA (PB)
'19 FS PORTC.5 (PORTD.7)
'20 NC not connected
'Jede Ausgabe Per V24 An Das Lcd Sieht Folgendermassen Aus:
'tzzsssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcr =Texte anzeigen
'zz Ist Die Zeile Von 1..16 , Z = 00 Macht Cls
'sss Ist Die Spalte(3stellig) Von 0..20
'xxx..xxx Ist Der Auszugebende String
'Cr Muß Folgen
'Linie: lx0,y0,x1,y1,Farbe = Linie zeichnen=1 oder löschen=0
'Pixel: px0,y0,Farbe =Pixel setzen=1, löschen=0; Farbe
'Kreis: cx0,y0,x1,Farbe =Kreis x0,y0^= Mittielpunkt, X1^= Radius; Farbe= setzen=1, löschen=0
' Anschlüsse des ATMega32 Pollin Funkmodul
' ATmega 16/32 an J4
'
' XCK/T0) PB0 |1 40| PA0 (ADC0) (adc0) Pa0 |1 2| Pa1(adc1)
' (T1) PB1 |2 39| PA1 (ADC1) (adc2) Pa2 |3 4| PA3 (ADC3)
' INT2/AIN0) PB2 |3 38| PA2 (ADC2) (ADC4) PA4 |5 6| PA5 (ADC5)
' (OC0/AIN1) PB3 |4 37| Pa3 (ADC3) (ADC6) PA6 |7 8| PA7 (ADC7)
' (SS) PB4 |5 36| PA4 (ADC4) (XCK/T0) PB0 |9 10| PB1 (T1) Taster1
' (MOSI) PB5 |6 35| PA5 (ADC5) (INT2/AIN0) PB2 |11 12| PB3 (OC0/AIN1)
' (MISO) PB6 |7 34| PA6 (ADC6) (SS) PB4 |13 14| PB5 (MOSI)
' (SCK) PB7 |8 33| PA7 (ADC7) (MISO) PB6 |15 16| PB7 (SCK)
' RESET |9 32| Aref (SCL) PC0 |17 18| PC1 (SDA)
' VCC |10 31| Gnd (TCK) PC2 |19 | n.c.
' GND |11 30| Avcc (TMS) PC3 |21 22| PC4 (TMS
' XTAL2 |12 29| PC7 (TOSC2) (TDI) PC5 |23 24| PC6 (TOSC1)
' XTAL1 |13 28| PC6 (TOSC1) (TOSC2) PC7 |25 26| PD0 (RXD)
' (RXD) PD0 |14 27| PC5 (TDI) (TXD) PD1 |27 28| PD2 (INT0)
' (TXD) PD1 |15 26| PC4 (TDO) (INT1) PD3 |29 30| PD4 (OC1B)
' (INT0) PD2 |16 25| PC3 (TMS) LED2(OC1A) PD5 |31 32| PD6 (ICP1) LED1
' (INT1) PD3 |17 24| PC2 (TCK) (OC2) PD7 |33 34| AREF
' (OC1B) PD4 |18 23| PC1 (SDA) GND |35 36| VCC, AVCC
' (OC1A) PD5 |19 22| PC0 (SCL) GND |37 38| VCC, AVCC
' (ICP) PD6 |20 21| PD7 (OC2) GND |39 40| VCC, AVCC
'
' PA.0=
' PA.1=
' PA.2=
' PA.3=
' PA.4=
' PA.5=
' PA.6=
' PA.7=
' Datenport B
' PortB.0 = D0
' PortB.1 = D1
' PortB.2 = D2
' PortB.3 = D3
' PortB.4 = D4
' PortB.5 = D5
' PortB.6 = D6
' PortB.7 = D7
' PC.0=
' PC.1=
' PC.2=
' PC.3=
' PC.4=
' PC.5=
' PC.6=
' PC.7=
' Steuerport
' PD.0=(RXD)
' PD.1=(TXD)
' PD.2= /WR
' PD.3= /RD
' PD.4= /CE
' PD.5= C/D
' PD.6= ?LCD-RESET
' PD.7= ?FS (Fond selekt)
$regfile = "m32def.dat"
$crystal = 16000000 '7372800 8000000 16000000
$baud = 9600
'$lib "glcd1.lib"
$hwstack = 100 ' Hardwarestack
$swstack = 54 ' Softwarestack
$framesize = 64 ' Framsize
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portb , Wr = 0 , Rd = 1 , Ce = 2 , Cd = 3 , Reset = 4 , Fs = 5 , Mode = 8
Dim X As Byte ', Y As Byte
Dim X0 As Byte , Y0 As Byte 'Zeile-Spalte Start
Dim X1 As Byte , Y1 As Byte 'Zeile-Spalte Ende;X1 auch Radius
Dim Farbe As Byte 'setzen, löschen
Dim C As Byte ' Zeichen von COM
Dim L As Byte ' Stringlänge
Dim Lmax As Byte 'maximale Stringlänge
Dim I As Byte 'Schleifenzähler
Dim J As Bit 'ComString komplett
Dim Pos As Byte 'Position des ","
Dim Zeile As Byte
Dim Spalte As Byte
Dim Ch As String * 2 ' Str-Wert des aktuellen Zeichens zum LCD
Dim Texte As String * 26 'Anzuzeigender String
Dim Text As String * 10 'eingelesener COM-String
'Const _aglcd_loop = 1280 '64*20Bytes jeweils Upper und Lower Screen C lib???
'Const _atlcd_loop = 160 '8*20Bytes jeweils Upper und Lower Screen
'Const _aglcd_cols = 20
Enable Interrupts
On Urxc Comin 'define serial receive ISR
Enable Urxc 'enable receive isr
Cls
Cursor Off
'Cls
Wait 1
'$sim
'------------
'Hautprogramm
'------------
L = 0
Lmax = 40
J = 0
Print "Grafig-LCD mit COM"
Spalte = 2
Zeile = 2
Locate Zeile , Spalte
Lcd "Grafig-LCD mit COM" '"0123456789ABCDEF"
Locate 4 , 1
Lcd "tzzssText;t0000=CLS"
Locate 5 , 1
Lcd "lX0,Y0,X1,Y1,0/1=Linie1234567890"
Locate 6 , 1
Lcd "pX0,Y0,0/1 = Punkt"
Locate 7 , 1
Lcd "kX0,Y0,X1,0/1= Kreis"
'Waitms 500
'use the new LINE statement to create a box
'LINE(X0,Y0) - (X1,Y1), on/off
'Line(0 , 0) -(159 , 62) , 255 ' diagonal line
'Line(0 , 127) -(63 , 0) , 255 ' diagonal line
'Wait 1
For I = 1 To 6
Line(0 , 0) -(159 , 0) , 255 ' horizontal upper line
Line(0 , 63) -(159 , 63) , 255 'horizontal lower line
Line(0 , 0) -(0 , 62 ) , 255 ' vertical left line
Line(159 , 0) -(159 , 62) , 255 ' vertical right line
Line(0 , 0) -(159 , 0) , 255 ' horizontal upper line
Line(1 , 18) -(160 , 18) , 255
Next I
'Wait 2
'For X = 0 To 160
'Pset X , 20 , 255 ' set the pixel
'Waitms 5
'Next
'Wait 2
'For X = 1 To 31
' Circle(40 , 32) , X , 255 ' show circle
' Wait 1
' Circle(20 , 32) , X , 0 'remove circle
'Waitms 10
'Next
'Wait 2
Do
'Toggle Portb.5
Waitms 900
If J = 1 Then Gosub Commdaten ' Anzeige
'Incr Zeile
'Incr Spalte
'Locate Zeile , Spalte
'Lcd "Grafiganzeige mit COM" '"0123456789ABCDEF"
'Print "Z=" ; Zeile ; " S=" ; Spalte ; " Text= " ; Texte
Loop
'------------------
'Ende Hauptprogramm
'------------------
'-----------------------------------------------------------
Commdaten: 'vom Hauptrechner
If J = 1 Then
Ch = Left(text , 1)
If Ch = "t" Then 'Text
Gosub Text
Elseif Ch = "p" Then 'Pixel
Gosub Pixel
Elseif Ch = "l" Then 'Linie
Gosub Linie
Elseif Ch = "k" Then 'Kreis
Gosub Kreis
Elseif Ch = "c" Then 'Komandos
'Gosub Komandos
Elseif Ch = "z" Then 'NC
'Gosub
End If
J = 0 'Flag für Anzeige
Text = "" ' Buffer leeren
L = 0 ' Länge = 0
End If
Return
'-----------------------------------------------------------
Text:
L = Len(text)
Ch = Left(text , 1)
If Ch = "t" And L > 4 Then 'erstes Zeichen ein @ und Zeichensatz länger 4 Zeichen ???
Ch = Mid(text , 2 , 2) ' Zeile holen...
If Ch = "00" Then ' Zeile = 0... ?
Cls ' ...dann CLS
Else
Zeile = Val(ch) ' ... und in Zahl wandeln
Ch = Mid(text , 4 , 2) ' Spalte holen...
Spalte = Val(ch) ' ... und in Zahl wandeln
Texte = Mid(text , 6 , L) ' Zeichen holen...
Locate Zeile , Spalte
Lcd Texte
Print "Z=" ; Zeile ; " S=" ; Spalte ; " Text= " ; Texte ; " ;Fs= " ; Portb.5
End If
Toggle Portb.5
End If
Return
'-----------------------------------------------------------
Linie:
Text = Mid(text , 2 , L) '"p"löschen
Gosub Koordinaten
X0 = X
Gosub Koordinaten
Y0 = X
Gosub Koordinaten
X1 = X
Gosub Koordinaten
Y1 = X
Gosub Koordinaten
Farbe = X
If Farbe = 1 Then Farbe = 255
For I = 1 To 6
Line(x0 , Y0) -(x1 , Y1) , Farbe
Next 1
Return
'---
Pixel:
Text = Mid(text , 2 , L) '"p"löschen
Gosub Koordinaten
X0 = X
Gosub Koordinaten
Y0 = X
Gosub Koordinaten
Farbe = X
Pset X0 , Y0 , Farbe
Return
'---
Kreis:
Text = Mid(text , 2 , L) '"p"löschen
Gosub Koordinaten
X0 = X
Gosub Koordinaten
Y0 = X
Gosub Koordinaten
X1 = X
Gosub Koordinaten
Farbe = X
If Farbe = 1 Then Farbe = 255
For I = 1 To 4
Circle(x0 , Y0) , X1 , Farbe ' show circle
Next I
Return
'---
Koordinaten:
Pos = Instr(text , ",") 'wo ist ","
Decr Pos
Ch = Left(text , Pos) 'links vom "," lesen
X = Val(ch) ': Print X
Pos = Pos + 2
Text = Mid(text , Pos , L) 'linke ziechen und "," löschen
Return
'---- ISR -------------------------------------------------------
Comin:
C = Udr ' Byte aus der UART auslesen
If C > 31 And L < Lmax Then ' Grenzen für V24-String überwachen
Incr L
Text = Text + Chr(c) ' Buffer füllen
'Print Text
Elseif C = 13 Then ' <Enter> und damit String komplett
J = 1
End If
Return
'-----------------------------------------------------------
End
Obere Hälfte voll ok untere nur Pixelwirwar
Wie gesagt, schreib mal lieber ein kurzes Programm was nur Text in alle Zeilen ausgibt, um festzustellen, ob das LCD kaputt ist.
Dein Programm ist mir zu kompliziert als das ich da jetzt durchsteige.
mit diesem Programm kan ich über die Com Texte, Linien und Kreise anzeigen lassen.
Bei locate 8,1 ist noch alles ok
Bei locate 9,1Ändert sich die Anzeige nicht mehr.
bei CLS wird nur die obere Hälft gelöscht.
Du schreibst, dass du mehrere davon hast. Verhalten die sich alle gleich?
Bei allen 4 GLCDs das gleiche
Werden in der oberen Hälfte alle ASCII Zeichen richtig dargestellt?
alles korekt wennauch ei bischen träge.
grafig geht auch korekt, aber nur der obere Teil.
Tut mir leid, dann habe ich jetzt auch keine Idee mehr.
Haben die LCDs schon einmal bei dir funktioniert oder könnten die tatsächlich alle defekt sein?
Umlaute werden nicht richtig dargestellt
Die kannst du im Text so angeben:
"Umw{132}lz Pumpe"
ä = {132}
Ä = {142}
ü = {129}
Ü = {154}
ö = {148}
Ö = {153}
Bei mir sind sie alle noch nicht besser gelaufen.
Habe aber in Netz einige einträge mit dem hleichen problem gefunden, aber keine Lösung, nur andeutunden über eine modifizierte lib, wegen der Adressraumanpassung für Text und Grafig. Aber alles schon lange her (2003-2005)
Danke für Deine Bemühung
Vileicht kann mir doch noch jemand wieterhelfen
Umlaute klappt nicht
"Umw{132}lz Pumpe" wird als"Umw{132}lz Pumpe" mit geschweiften Klammern dargestellt
Umlaute die im Programm sind werden nach Deiner metode Dankenswerter weise richtig dargestellt. Nur über das COM-Prog nicht
Schreib mal die Umlaute in deinen Text und lass dir auf der AVR Seite die empfangenen Codes anzeigen (Hex oder Dez. Werte).
In der Empfangsroutine kannst du dann leicht umsetzen:
Comin:
C = Udr ' Byte aus der UART auslesen
If C > 31 And L < Lmax Then ' Grenzen für V24-String überwachen
Incr L
If C< 128 Then 'Umlaute und ß sind wahrscheinlich alle >
Text = Text + Chr(c) ' Buffer füllen
Else
Select Case C
Case <code für ä>: Text = text + CHR(132)
...
End Select
End If
'Print Text
Elseif C = 13 Then ' <Enter> und damit String komplett
J = 1
End If
Return
Hallo for_ro
danke für Deinen Code. Wede ihn in mein Programm übernehmen
mfg
hft
muste ihn nur noch anpassen. Damit geht es
Select Case C
Case 228 : Text = Text + Chr(132) 'ä
Case 196 : Text = Text + Chr(142) 'Ä
Case 252 : Text = Text + Chr(129) 'ü
Case 220 : Text = Text + Chr(154) 'Ü
Case 246 : Text = Text + Chr(148) 'ö
Case 214 : Text = Text + Chr(153) 'Ö
End Select
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.