PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : initlcd mit glcd?



milkbubi
02.11.2006, 01:50
Hi leute,

also erstmal ein ganz dickes Lob an die Community. Hier ist jeder Neueinsteiger besser aufgehoben als in jedem tutorial oder in jeder Hilfe.
Nachdem ich nun eine ganze Weile als stiller Beobachter "gelernt" habe muss ich mich nun doch mal zu Wort melden.
Ich versuch nun schon den ganzen abend das Data Vision DG12864-12 zum laufen zu bringen und ich bin mir ganz sicher, dass ich alle ports richtig beschaltet hab.
Aber wenn ich die Spannung anleg dann kommt ein schwarzer Balken und das wars auch schon, deshalb dacht ich mir, dass es nicht richtig initialisiert wird aber der initlcd befehl bei bascom gibt eine fehlermeldung. Geht der nicht mit glcd´s?
Hier nochmal der einfache code.

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000


Config Graphlcd = 128 * 64 , Dataport = Portc , Controlport = Porta , Ce = 5 , Cd = 6 , Wr = 3 , Rd = 4 , Reset = 7 , Fs = 1 , Mode = 8

Initlcd
Do
Cls
Lcd "hello world"
Loop

bin für jede Hilfe dankbar
mfg milkbubi

coCo
02.11.2006, 02:07
Hi,
das geht so glaub ich nicht. Bei z.B. einem 2x20 LCD stehn die 2x20 ja nicht für 2x20 Pixel sondern für 2x20 Zeichen. Bei einem 128x64 Grafiklcd, stehn die 128x64 für die Pixel. Die Ansteuerung eines Grafiklcds wird sicherlich nicht so einfach gehen. Ich denke du musst dir eine eigene Routine zum Setzen der einzelnen Pixel schreiben, aber wie das geht weiß ich net.

Verbessert mich wenn ich was falsches sage.

MfG

milkbubi
02.11.2006, 02:12
hmm...also ich bin hier einige beispiele durchgegangen bei denen das so gemacht wurde

milkbubi
02.11.2006, 03:05
um noch ein paar evtl. hilfreiche Informationen zu geben: Der lcd-controller ist der standard t6963c

for_ro
02.11.2006, 09:00
Ich schätze, du musst den Locate Befehl benutzen, um die Ausgabe zu positionieren. Ich glaube nicht, dass es dafür ein default gibt, wenn du noch keinmal Locate benutzt hast. Sonst weiss der Controller nicht, wohin mit deinem Hello.
Ansonsten würde ich aber vermuten, dass deine Kontrast- bzw. LCD Spannung nicht iO ist. Kannst du die messen?

Gruß

Rolf

digitali
02.11.2006, 09:08
Nimm mal das cls aus der Schleife. Oder setze gleich die Schleife nach unten:

Initlcd
Cls
Locate 1,1
Lcd "hello world"

do
nop
loop

end


Denn sonst wird der Text innerhalb der Schleife ja dauernd geloescht. Und im schlimmsten Falle sieht man gar nichts...
Und genau, ein Locate muss auch gesetzt werden.
Das end am Programmende wird immer wieder gerne vergessen. Fuehrt oftmals auch zu kuriosen Fehlern.

Mfg Digitali

milkbubi
02.11.2006, 12:21
hab mich vielleicht ein bissel blöd ausgedrückt aber mein problem war jetzt grad das bascom mit dem befehl "initlcd" nichts anfangen kann. Er gibt da die Fehlermeldung "Label not found [init_lcd]"
Deshalb die Frage ob der Befehl auch für glcd´s zulässig ist?

milkbubi
02.11.2006, 14:06
also ich hab jetzt nochmal probiert eine led vor und nach der config routine blinken zu lassen. Vorher geht es, danach nicht mehr also denk ich mir als Laie, dass er bei der config graphlcd hängen bleibt, kann das sein?
hier noch der code:

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Dim I As Byte

Config Portd.7 = 1
For I = 1 To 10
Toggle Portd.7
Waitms 200
Next I

Config Graphlcd = 128 * 64 , Dataport = Portc , Controlport = Porta , Ce = 5 , Cd = 6 , Wr = 3 , Rd = 4 , Reset = 7 , Fs = 1 , Mode = 8
For I = 1 To 10
Toggle Portd.7
Waitms 200
Next I



Locate 1 , 1
Lcd "hello world"
Do

Loop

End

digitali
02.11.2006, 14:24
Ja stimmt, initlcd kannste in diesem Falle weglassen. Das ist nicht fuer glcd's.
Schau doch mal in die Bascom-Hilfe. Dort gibts ein Beispiel. Z.B. nach Stichwort "t6963" suchen.

Mfg Digitali

milkbubi
02.11.2006, 15:12
ja dann muss wohl doch das display im ar*** sein.
Ich hab jetzt alles ausprobiert was mir eingefallen ist
Aber vielen dank trotzdem für die Antworten
mfg milkbubi

albundy
02.11.2006, 15:23
Wie es aussieht ($crystal = 1000000), hast du an den FUSE Bit's noch nichts geändert.
Somit kannst du Portc nicht benutzen, da dieser standartmässig für ein JTAG Interface vorgesehen ist.
Entweder, du nimmst einen anderen Port, oder du musst per FUSE, JTAG disablen.
Aber als Neueinsteiger musst du dich vor einer Änderung genau über die Bedeutung der FUSE Bit's informieren ! Man kann da leicht Fehler machen !

chr-mt
02.11.2006, 15:27
Hi,
wenn die LED nicht mehr bklinkt, dann kann es ja nicht am Display hängen.
Kannst nochmal probieren, bei den Ports A und C die Pullups einzuschalten.
Sicher das du einen 10 MHz Quarz hast und auch die Fuses entsprechend gesetzt hast ?
Wenn das Timing falsch ist, geht auch nix.
JTAG hast du ausgeschaltet ?

Gruß
Christopher

milkbubi
02.11.2006, 15:59
Wie es aussieht ($crystal = 1000000), hast du an den FUSE Bit's noch nichts geändert.
Somit kannst du Portc nicht benutzen, da dieser standartmässig für ein JTAG Interface vorgesehen ist.
Entweder, du nimmst einen anderen Port, oder du musst per FUSE, JTAG disablen.
!
Ich hab die Fuses tatsächlich nicht angerührt, das Display ist aber samt controller auf nem eval. Board von Deltawave und die haben JTAG disabled zumindest stehts in Bascom so und es ging ja auch schonmal mit dem Demoprogramm. Dieses hab ich nur leider vorschnell mit eigenen Versuchen überspielt und steht mir somit nicht mehr zur Verfügung. (Dabei die Frage: wie lese ich mit Bascom ein Programm aus, also aus dem MC).

@Christpher: Hab wie oben erwähnt den internen 1Mhz Takt, weiß nicht wie du auf die 10Mhz kommst.
Das mit der Led war ein Test ob das Programm überhaupt durchläuft aber vielleicht kann es ja auch so gar nicht funktionieren. Meiner Ansicht nach hängt er schon bei der Configuration fest, ist da irgendwo ein fehler drin?

mfg milkbubi

milkbubi
02.11.2006, 16:46
Sooo,
also ich hab jetzt nach 2 Tagen Suche endlich das Demoprogramm gefunden was am anfang drauf war - aufgespielt - Display geht nur stimmt da was mit Timing nicht ganz. Mein Problem ist nur, dass das ganze in c ist und ich nun noch weniger Ahnung von c hab als von Basic.
Werd mal die Hex-im Anhang einfügen und den vermeintlichen Quellcode in c vielleicht kann mir ja jemand dann sagen, was ich bei der Ansteuerung falsch gemahct hab.
Vielen Dank im voraus

mfg mikbubi

chr-mt
02.11.2006, 21:40
@Christpher: Hab wie oben erwähnt den internen 1Mhz Takt, weiß nicht wie du auf die 10Mhz kommst.
Mmmm... man sollte mit starker Erkältung keine 0en zählen..sorry..

Gruß
Christopher

Vitis
03.11.2006, 08:36
ähm hallo? wir reden hier über ein GLCD .... Mit LCD"Hello xy" wird
das vermutlich nix werden. Das ist kein 4*20 Display mit eingebautem
Zeichensatz usw. sondern da ist jeder pixel für sich zu setzen
normalerweise.
In dem Demo ist z.B. "logo.h" drinne, das ist nix anderes als
Das Herstellerlogo als Bilddatei, die da auf das Disp geladen wird.

Der t6963c hat nen Graph und nen Zeichen-Mode, hat auch ein Font
Eingebaut, aber ob Bascom das unterstützt ? glaub ich nicht.

milkbubi
03.11.2006, 11:47
Es steht aber so in der Bascom Hilfe drin

hier noch ein Teil des Bsp.Programms aus der language reference:



Example

'-----------------------------------------------------------------------------------------

'name : t6963_240_128.bas

'copyright : (c) 1995-2005, MCS Electronics

'purpose : T6963C graphic display support demo 240 * 128

'micro : Mega8535

'suited for demo : yes

'commercial addon needed : no

'-----------------------------------------------------------------------------------------


$regfile = "m8535.dat" ' specify the used micro

$crystal = 8000000 ' used crystal frequency

$baud = 19200 ' use baud rate

$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space


'-----------------------------------------------------------------

' (c) 2001-2003 MCS Electronics

' T6963C graphic display support demo 240 * 128

'-----------------------------------------------------------------


'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

'6 /RD PORTC.1

'7 /CE PORTC.2

'8 C/D PORTC.3

'9 NC not conneted

'10 RESET PORTC.4

'11-18 D0-D7 PA

'19 FS PORTC.5

'20 NC not connected


'First we define that we use a graphic LCD

' Only 240*64 supported yet

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

'The dataport is the portname that is connected to the data lines of the LCD

'The controlport is the portname which pins are used to control the lcd

'CE, CD etc. are the pin number of the CONTROLPORT.

' For example CE =2 because it is connected to PORTC.2

'mode 8 gives 240 / 8 = 30 columns , mode=6 gives 240 / 6 = 40 columns


'Dim variables (y not used)

Dim X As Byte , Y As Byte



'Clear the screen will both clear text and graph display

Cls

'Other options are :

' CLS TEXT to clear only the text display

' CLS GRAPH to clear only the graphical part


Cursor Off


Wait 1

'locate works like the normal LCD locate statement

' LOCATE LINE,COLUMN LINE can be 1-8 and column 0-30



Locate 1 , 1


'Show some text

Lcd "MCS Electronics"

'And some othe text on line 2

Locate 2 , 1 : Lcd "T6963c support"

Locate 3 , 1 : Lcd "1234567890123456789012345678901234567890"

Locate 16 , 1 : Lcd "write this to the lower line"


Wait 2


Cls Text



'use the new LINE statement to create a box

'LINE(X0,Y0) - (X1,Y1), on/off

Line(0 , 0) -(239 , 127) , 255 ' diagonal line

Line(0 , 127) -(239 , 0) , 255 ' diagonal line

Line(0 , 0) -(240 , 0) , 255 ' horizontal upper line

Line(0 , 127) -(239 , 127) , 255 'horizontal lower line

Line(0 , 0) -(0 , 127) , 255 ' vertical left line

Line(239 , 0) -(239 , 127) , 255 ' vertical right line



Wait 2

' draw a line using PSET X,Y, ON/OFF

' PSET on.off param is 0 to clear a pixel and any other value to turn it on

For X = 0 To 140

Pset X , 20 , 255 ' set the pixel

Next


For X = 0 To 140

Pset X , 127 , 255 ' set the pixel

Next

Vitis
03.11.2006, 12:54
hmmm ... ok, dann ham die Bascommer mehr drinn als ich dachte ... Asche aufs Haupt streu.

Haste mal versucht das Demoprogramm auf Dein Board zu spielen?
Brauchste ja nur den regfile und den crystal ändern.

coCo
03.11.2006, 13:20
Only 240*64 supported yet


Vielleicht gehts deswegen net?

milkbubi
04.11.2006, 20:54
ja hab zumindest den anfang der Demo raufgespielt aber das ist ja dann auch nicht viel anders als ich es hatte, die pins musst ich ja dennoch ändern.

Ich bin leider grad nicht zu Hause aber wenn ich das Ding wieder vor mir hab dann probier ich mal da einfach 240*64 einzustellen, vielleicht gibt er ja dann wenigstens irgendwas aus.
Dank euch erstmal

mfg milkbubi

milkbubi
07.11.2006, 15:09
Kann vielleicht mal jemand diese Zeilen bei sich compilieren und im Simulator ausprobieren. Der bleibt da jedes mal beim config hängen, das kann doch nicht sein oder?
Was ist da faul?

mfg milkbubi


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Graphlcd = 128 * 64 , Dataport = Portc , Controlport = Porta , Ce = 5 , Cd = 6 , Wr = 3 , Rd = 4 , Reset = 7 , Fs = 0 , Mode = 8

Cls
Locate 1 , 1
Lcd "hello world"

End

milkbubi
13.11.2006, 12:29
Kann mir wirklich niemand sagen warum das Programm beim simulieren beim config graphlcd hängen bleibt?