PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : KS0108 und Bascom Demo Problem



Marten83
05.03.2007, 17:15
Guten Abend!

Ich habe folgendes Problem:

Ich versuche mittels Bascom-Demo und entsprechender Library mein GrafikLCD zu Testzwecken zum laufen zu bringen.

So weit so gut.
Ich bekomme die Fehlermeldung:
Illegal character
und
Label not Found

Folgenden code habe ich geschrieben:


$regfile = "m32def.dat"
$crystal = 11095000

$lib "glcdKS108.lib"

Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Porta , Ce = 6 , Ce2 = 5 , Cd = 4 , Rd = 3 , Reset = 7 , Enable = 2

Cls

Setfont Font8x8

Do
Lcdat 1 , 1 , "123"
Wait 1
Cls
Loop

End
$include "Font8x8.font"

Kennt sich jemand damit aus?

Marten83

Zapo.
05.03.2007, 19:25
hi,

so habe ich das prinzipiell auch deklariert...

sollte eigentlich funktionieren...
lass mal das mit der Font einfach zum test weg ?

Label fehler immernoch da? oder alles weg?

linux_80
05.03.2007, 19:53
Hallo,

wenn Du nur die Demo hast, ist da i.d.R. nur die vorcompilierte Lib dabei, also muss man
$lib "glcdKS108.lbx"
angeben.

Das nächste Problem wird die Codegrösse werden, die Demo macht nur bis 4KB. Die ist bei GrafikLCD basteleien schnell erreicht.

Marten83
06.03.2007, 12:08
HI!

Danke schonmal, jetzt kommt zumindest schonmal ne reaktion aufm display.

Habe jetzt folgenden code genommen.

$regfile = "m32def.dat"
$crystal = 1000000

$lib "glcdKS108.lbx"

Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Porta , Ce = 6 , Ce2 = 5 , Cd = 4 , Rd = 3 , Reset = 7 , Enable = 2

Cls


Do
nop
Loop

End

Nun macht das display aber nur murks.
Soll heissen, eine Displayhälfte wird "gecleared", bei der anderen sind das aber nur n paar zeilen und punkte.
habe was von pullups in anderen beiträgen gehört...muss ich wohl mal probieren, oder?

Marten83
06.03.2007, 12:21
Mein Display löscht nun wirr irgendwelche zeilen/punkte....muss ich mir jetzt sorgen machen?
Meinen Mega32 habe ich schon gelöscht!

linux_80
06.03.2007, 18:05
Das war bei meinem LCD am Anfang auch, dachte schon meine Lochrasterverkabelung ist schlud.
Es wurde nur zufällig Positionen gelöscht bzw. beschrieben.
Ich hab das von Pollin TG12864B-05.

Hab dann aber doch die Lib umgebaut, so dass das Enable etwas länger gehalten wird, und schon ging alles.

Da das bei der DEMO nicht so einfach geht, muss ich erst schaun, wo man da per Hand an der LBX drehen muss, damit man das gleiche Ergebnis erzielt.
Dauert aber noch ein paar Minuten.

Zapo.
06.03.2007, 18:56
das TG12864B-05 und ein TG12864A habe ich auch, bis jetzt funktioniert es allerdings auch ohne LIB umzubauen und ohne Zeichen verschlucken usw....

vielleicht zufall, keine Ahnung, oder mein Programm ist einfach zu langsam das ich sowas nicht bemerke....


Zapo.

linux_80
06.03.2007, 19:14
Hab es bei mir an das RN-Control angehängt, der M32 läuft mit 16MHz, erst nach dem patchen der LBX hat das mit der Grafik auf dem LCD funktioniert:

Die LBX, am besten vorher sichern, (irgendwo hinkopieren)
dann mit einem Texteditor öffnen, die Version kontrollieren, ist bei mir 1.01,
in Zeile 65 ist die Wartezeit für das enable:
diese ändern auf


@genus(2)
diese Zeile steht zwischen zwei Zeilen mit _glcd_enable am Ende.
Abspeichern, und das Programm, das diese LBX verwendet, compilieren.

Schon ging das bei mir.

@Marten83
Vielleicht wars das ja auch bei Dir.

PS:
Kabellänge ca. 20 - 30cm

€dit:
Es ist auch reproduzierbar, wenn ich auf 1 zurückstelle geht das LCD wieder nur sporadisch.

Marten83
06.03.2007, 20:33
Ich habe Version 1.00.
Wo bekommt man die V1.01 her?
Auf jeden fall passiert schonmal was aufm Display.
Leider auch nach dem Eingriff nicht das gewünschte Ergebnis.
Vielleicht liegt es aber auch am Quarz. Habe bisher nichts an den Fusebits verändert, Ponyprog erkennt den M32 aber nur wenn ich einen angeschlossen habe.

linux_80
06.03.2007, 21:25
Es muss auf jeden Fall der Takt des AVR mit der Angabe im Programm zusammenpassen, sonst stimmt auch das Timing mit dem LCD nicht.
Wenn der AVR mit 8MHz getaktet wird, egal ob ext. oder int., muss diese Zeile vorkommen:
$crystal = 8000000

Es wird wohl desöfteren mal damit verwechselt, dass man hiermit die Frequenz einstellen können soll, was nicht der Fall ist !

1.01 hab ich meine neue genannt, die orig ist die 1.00 8-[ :-b

Marten83
09.03.2007, 06:53
Habe es probiert.
Leider geht es immer noch nicht.
Das Display ist übrigens ein YM-12864C (yaoyu-lcm.com).
Kann es sein, dass es einfach mit diesen Routinen nicht kompatibel ist?

linux_80
09.03.2007, 17:43
Wenn da wirklich ein KS0108 drauf ist, sollte das eigentlich zusammenpassen.
Das DB gibt ja auch nur das allernötigste her, wie der Pinbelegung.

Wie lange sind die Leitungen vom AVR zum LCD ?

Marten83
10.03.2007, 07:37
Ich habe das ganze auf einem Steckbrett aufgebaut.
Die Leitungen sind ca. 10-12 cm lang.
Sehr viel kürzer kann ich aber auch nicht werden.

Momentan habe ich das ganze mit internem Takt (1Mhz) laufen. Sollte doch reichen, oder?

linux_80
10.03.2007, 12:41
Von der Geschwindigkeit her sollte es reichen, die Wartezeiten in Bascom werden hier auch nur per warteschleife erzeugt, und anhand der Angabe bei $crystal berechnet.

Evtl. werden die Flanken nicht mehr steil genug, und die Zeit zu kurz in der das Signal dann aktiv am LCD anliegt :-k
Du kannst ja nochmal nach den @genus() suchen, und den Werte um 1 oder 2 erhöhen (aber nicht zuviel, sonst wirds zu langsam) um herauszufinden ob sich was ändert !

Sonst weiss ich auch grad nix weiter 8-[

Marten83
07.04.2007, 13:04
Hallo nochmal!

Auch wenn ich gefahr laufe mich zu wiederholen; Ich habs noch nicht hinbekommen.

Folgende Einstellungen habe ich:

Ponyprog Fusebits:
JTAGEN
BOOTSZ1
BOOTSZ0
SUT0
CKSEL1-3

-> Häckchen gesetzt (müssten Werkseinstellungen des Mega32 sein)

Displayanschlüsse (YM12864C):

Kabellänge ca. 10cm
Kontakt geprüft

DB0 bis DB7 an PortA.0 bis PortA.7
CS1 an PortC.0
CS2 an PortC.1
RS an PortC.2
R/W an PortC.3
E an PortC.4
/RES an Reset des Mega32

Mein Testprogramm:



$regfile = "m32def.dat"
$crystal = 1000000

$lib "glcdKS108.lbx"



Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 0 , Ce2 = 1 , Cd = 2 , Rd = 3 , Enable = 4

Cls
Wait 1

Setfont Font8x8
Do
Lcdat 1 , 1 , "123"


Wait 1
Cls
Loop
End
$include "font8x8.font"


Folgender Fehler erscheint 2x:

Error:222 Line: 227 Illegal character [expected(,got"] ,inFile : E:\GLCD\TESTGLCD.BAS

Ich weiss einfach nicht was ich falsch mache oder woran es liegt.
Bin auch schon kurz vorm verzweifeln.

Marten83

linux_80
07.04.2007, 14:24
Hallo,

der Reset gehört auch an einen Ausgang des AVR (nicht mit dem AVR-Reset verbinden !), damit man den Reset des LCDs steueren kann, diesen auch bei Config definieren, evtl. kommt deshalb der Fehler ?

Beispiel von mir:

Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 1 , Ce2 = 0 , Cd = 4 , Rd = 2 , Reset = 6 , Enable = 3

Hast Du ein fertiges Board, oder ein selbstgebautes ?
Fertiges: An PortC.1 und 2 ist der I2C-Bus, und da werden gerne Pullups hingelegt, was evtl. die Signale beeinflusst.
Sebstgebaut: Beim PortA muss AVCC und AGND angeschlossen werden, damit der funktioniert, auch wenn man den ADC nicht verwendet.

Marten83
07.04.2007, 14:36
Wusste ich gar nicht, danke!
Also das Problem mit dem Error in Bascom hat sich jetzt erledigt.
Habe den Reset wieder eingefügt.
Leider kommt auch nach der Versorgung von GND und AVCC nix aufs Display.
Habe die ganze Schaltung übrigens auf einem Steckbrett aufgebaut.

Marten83

linux_80
07.04.2007, 17:00
Hast Du auch die Kontrastregelung dabei, so wie das auf dem DB zu sehen ist ?
Also Poti zwischen Vdd-V0-Vout ?

Marten83
07.04.2007, 17:09
Na klar, ich bin schon immer wie ein wilder am rumdrehen ob nicht doch etwas erscheint.
Kann es sein, dass ich mit den Ports des AVR noch irgend etwas einstellen muss?
hab mal ne LED mit Vorwiederstand an die Pins gehängt und gesehen, dass zum Beispiel die Pins für Die Displayhälften beide High sind.
Sollte doch nicht sein, oder? Durch die Schleife müsste das doch hin und hergeschaltet werden.

linux_80
07.04.2007, 19:00
Durch das rumdrehen müssten die Pixel aber auch erscheinen, alle, egal ob abgesteuert oder nicht ?

Mit den Ports muss man nix machen, das macht die Lib.

Die Leitungen für CS sind Low-Aktiv, und auch nur solange ein Byte übertragen wird, kann sein, das man das nicht sieht, weils zu schnell geht.
Du kannst aber mal probieren die LED nach Vcc zu hängen, dann dollte die LED nur aufblitzen wenn was übertragen wird.

Marten83
07.04.2007, 19:16
Ja, alle Pixel sind soweit da.
Ich habs auch schon mit Pullups an Porta versucht.
Komisch kommt mir nur vor, dass an PortC.4 anscheinend garnix anliegt. Ich mess nochmal mit dem Multimeter nach.

Ich habe übrigens auch schon ne fertige Hex aus dem Downloadbereich hier ausprobiert, funktionierte auch nicht.
Habe auch fast alles genauso gemacht.

Gibt es irgendeine möglichkeit das Ding zu Testen?
Habe so langsam das Gefühl dass das Display kaputt ist, obwohl ich nicht wüsste woran das liegen sollte.
Und wie gesagt: ich trau auch dem Microkontroller nicht so ganz. Aber ich weiss eben nicht woran es liegen könnte.

linux_80
07.04.2007, 19:49
:-k ich denke das JTAG nicht richtig eingestellt ist, stell das mal um.

Warum programmierst du mit Pony, und nicht mit Bascom, da steht auch der Text dabei was das bedeutet, wenn ein Fusebit 0 oder 1 ist.

Marten83
07.04.2007, 22:09
Hmm, weiss auch nicht. Hab ich mal im Tutorial von microkontroller.net gelesen und übernommen.
Jetzt habe ich mal direkt mit Bascom programmiert und funktioniert super... ausser dass das Ganze immernoch nicht funktioniert.
Habe zur Sicherheit auch mal PortD als Controlport genommen...nix.

Marten83
08.04.2007, 09:53
Hurra!!!!!

Man ich hab schon nicht mehr dran geglaubt!!!!
Ich habe jetzt aus lauter Frust die Pausenzeiten in der .LBX (@genius())
um bis zu 2 erhöht...und siehe da, es klappt!!!
Vielen Dank an alle die mir dabei geholfen haben, habe ne Menge dazugelernt.
Endlich kann ich an meinem Projekt mal weitermachen!

Mit freundlichen Grüßen

Marten83