PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GLCD 160x128 mit T6963C mit Bascom



hft
21.04.2010, 22:40
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

theborg
22.04.2010, 11:19
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.

hft
22.04.2010, 15:57
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

for_ro
22.04.2010, 19:36
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.

hft
22.04.2010, 20:23
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

hft
22.04.2010, 20:45
Habe gerade Mode =6 probiert, ein Kreis wird zum Owal und linien werden gestrichelt.

for_ro
22.04.2010, 20:47
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?

for_ro
22.04.2010, 20:51
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?

hft
22.04.2010, 21:04
"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

for_ro
22.04.2010, 21:09
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.

hft
22.04.2010, 21:13
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.

for_ro
22.04.2010, 21:16
Du schreibst, dass du mehrere davon hast. Verhalten die sich alle gleich?

hft
22.04.2010, 21:16
Bei allen 4 GLCDs das gleiche

for_ro
22.04.2010, 21:21
Werden in der oberen Hälfte alle ASCII Zeichen richtig dargestellt?

hft
22.04.2010, 21:23
alles korekt wennauch ei bischen träge.
grafig geht auch korekt, aber nur der obere Teil.

for_ro
22.04.2010, 21:26
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?

hft
22.04.2010, 21:29
Umlaute werden nicht richtig dargestellt

for_ro
22.04.2010, 21:33
Die kannst du im Text so angeben:
"Umw{132}lz Pumpe"
ä = {132}
Ä = {142}
ü = {129}
Ü = {154}
ö = {148}
Ö = {153}

hft
22.04.2010, 21:37
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

hft
22.04.2010, 21:41
Umlaute klappt nicht
"Umw{132}lz Pumpe" wird als"Umw{132}lz Pumpe" mit geschweiften Klammern dargestellt

hft
22.04.2010, 21:47
Umlaute die im Programm sind werden nach Deiner metode Dankenswerter weise richtig dargestellt. Nur über das COM-Prog nicht

for_ro
23.04.2010, 11:57
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

hft
23.04.2010, 22:30
Hallo for_ro

danke für Deinen Code. Wede ihn in mein Programm übernehmen

mfg
hft

hft
23.04.2010, 22:56
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