PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GLCD-KS0180B Controller



Movie85
07.04.2009, 11:38
Tach Leuts!

Ich hab mir vor längerer Zeit einen GLCD bei Ebay gekauft, und wollt ihn jetzt zum laufen bringen, jedoch ergaben sich ein paar Probleme:

Ich hab immoment nur einen Attiny2313 hier, und wollts dann halt mit dem ausprobieren... jetzt hab ich den GLCD wie folgt angeschlossen:

DB0 - DB7 an PortB
CS1 an PortD.0
CS2 an " .1
R/W an " .2
R/S an " .3
reset an " .5
Enable an " .4

So, ich benutze folgenden Code in Bascom:



$regfile = "attiny2313.dat"
$crystal = 8000000

$lib "glcdKS108.lbx"

Config Graphlcd = 128 * 64sed , Dataport = Portb , Controlport = Portd , Ce = 0 , Ce2 = 1 , Cd = 2 , Rd = 3 , Reset = 5 , Enable = 4

Portb = &B11111111

Cls
Circle(30 , 30) , 10 , 1
Do


Loop


Wenn ich jetzt den MC einschalte und das GLCD mit Strom versorge kommt nur etwas Pixelmüll raus(Angehängte Datei)
man kann ja rechts leicht einen Kreis erkennen, ich denke dass das aber nur Zufall ist...

Fehlt bei der Beschaltung noch irgendwas? Hab ich was vertauscht? vielleicht irgendwelche PullUp's?

Vielen Dank schonmal,

Tom

Jaecko
07.04.2009, 11:44
Versuch mal vor dem Code ein Wait 1.
Das Display wird nach dem Einschalten erst mal ein paar ms brauchen, bis es "empfangsbereit" für Daten ist.

MelMan
07.04.2009, 11:44
Ist das Setzen von Portb notwendig?


Portb = &B11111111


Probier doch erst mal einen Text auszugeben (s. Lcdat, Lcd, Locate) oder gezielt Pixel ansteuern...ist glaub ich besser zu erkennen ob es dann funktioniert oder nicht.

Movie85
07.04.2009, 11:59
Boa das ging aber schnell, danke!

Das setzten von PortB hab ich nur mal zum Test gemacht, hat aber nichts geändert...
Ich habs jetzt mal mit dem Text versucht, da Passiert aber auch nichts anderes alls Balken und vereinzelt Pixel...
Auch das Wait 1 hat nichts gebracht :-(
Selbst PSET bringt Balken...

Vielen Dank nochmal,

Tom

Edit: Ich hab jetzt nochmal überprüft: wenn ich den Display mit CLS lösche, halt nach dem "hochfahren" kommen auch schon diese Balken ´, die ändern sich aber ständig, daher liegts nicht an irgendwelchen kapputen sachen im LCD(zuminderst nichts durchgeschmort:D)

Jaecko
07.04.2009, 12:21
Kann es sein, dass Cd und Rd vertauscht sind?

Cd = 2 , Rd = 3
...
R/W an " .2
R/S an " .3

Rd müsste eigentlich R/W sein.

MelMan
07.04.2009, 12:29
Stimmt jeztz wo Jaecko es schreibt fällts mir auch auf^^.

RD entspricht R/W
CD entspricht R/S

Wenns nur das war sollte es danach laufen O:)

Movie85
07.04.2009, 12:39
Hi,
tschuldigung, ich hab das flasch beschriftet, angseschlossen hab ichs schon richtig, habs auch schonmal getauscht, dann muckt sich garnix...

Danke nochmal,
Tom

Gento
07.04.2009, 17:27
Ein Problem bei diesen GLDC's ist :
Ich habe hier 3 verschiedene mit 3 anderen Pinbelegungen.

Sicher das Deine die Richtige zum GLCD ist ?

Gento

Movie85
07.04.2009, 20:06
Die Pinbelegung stimmt, ich hab sie X-Mal überpfrüft...
Hier ist das "Datenblatt":
http://www.sure-electronics.net/mcu,display/DE-LM112_Ver1.0_EN.pdf
Da müssen irgendwelche Initialisierungs Befehle Falsch sein oder so, weil ich ja immer so Balken bekommen...
Kann es am Attiny2313 liegen?

MFG

Tom

Jaecko
07.04.2009, 20:56
Hast du zufällig AVR-Studio oder ne andere Umgebung für C-Programme? Für ein KS0108 hätt ich in C nen funktionierenden Code. Da könnte man dann mal testen, ob an der Hardware was nicht stimmt oder ob Bascom da was verbockt.

(Alternativ versuch ich mal, ob ich den Code in ne .hex für den Tiny umbiegen kann; mit Bascom sollte die .hex ja hochladbar sein)


Nachtrag 1: Das mit dem zu grossen Programm war Käse. Habs in Bascom versucht, es müsste in den ATTiny passen. (Das Programm hatte in C bei mir 400% Flash belegt...)

Nachtrag 2: Hab in Bascom mal mein KS0108 angesteuert (mit nem ATMega128); der Code von dir wurde 1:1 übernommen (mit Ausnahme der Pinbezeichnungen), und bei mir klappt er; es wird also ein Kreis gezeichnet. D.h. wird vermutlich irgendwo an der Hardware liegen. Reihenfolge von D0...D7 vertauscht?

Und Nachtrag 3: Kaum schmeisst man die mathematischen Funktionen für doubles raus, schon passt die Grösse.
Im Anhang ist mal die erzeugte .hex; die Pinbezeichnungen hab ich von dir übernommen; theoretisch müsste es funktionieren und das Display abwechselnd im Sekundentakt die folgenden Dinge anzeigen:

1: leeres Display
2: alle ungeraden Zeilen
3: alle geraden Zeilen
4: vollständig gefüllt

helimike0705
08.04.2009, 10:05
include font 8x8 am Ende des Programms und Setfont Font8x8 im Programm vor der Textausgabe, sollte helfen, kenn mich aber mit Glcd noch nicht gut aus. Habe damit erst angefangen, da die ks108 Diplays keinen eingebauten Zeichesatz besitzen muss man erst einen im Programm laden.Jede andere größe geht natürlich auch - 8x8 ist nur ein Vorschlag.
Den Dataport:

Ddrb = &B11111111
Portb = &B11111111

Port auf Ausgang und pullups einschalten.Bei reinem Pixelsetzen wie mit Line,Circle und Box usw. ist die include nicht notwendig,nur für Text ausgaben.

gruß Mike

Jaecko
08.04.2009, 17:34
Das Setzen des Datenports als Ein/Ausgang muss nicht sein. Sollte von Bascom selbst erledigt werden, da hier erst ein Byte (8 Pixel) vom Display gelesen wird, das zu ändernde Pixel wird gesetzt und das Byte wieder zurückgeschrieben.
Es folgt also ein ständiges Wechseln zwischen Input/Output.

(Ausser man hat im AVR genug Speicher, um den Displayinhalt zu speichern; bei nem Tiny aber eher nicht der Fall.)

Gento
08.04.2009, 21:32
Wie lang sind die Zuleitungen ?

1/2m nach dem Bild !

Gento

Movie85
09.04.2009, 10:38
Hallo!
Danke für eure Bemühungen, aber leider funzt es immer noch nicht, auch nicht miit Jaeckos Hex(erei)...
Ich habs jetzt mal mit einem Atmega8535 ausprobiert, aber da regt sich überhaupnix??(kann am MC liegen, der is irgendwie aweng komishc drauf:D )

Die Zuleitungen sind nur so 20cm lang...
Ich werd noch ein bisschen rumprobieren, I hätte auch AVR Studio da, falls jemand Code hat :)

Vielen Dank nochmal,

Tom

Jaecko
09.04.2009, 11:12
Hab hier mal meinen Code angehängt.

Einige der Funktionen müsstest du da noch auskommentieren, da die weitere Module benötigen (z.B. die KS0108_Header).
Natürlich auch noch die _cfg.h anpassen.

Aber es sollte zumindest möglich sein, nach KS0108_Init() das Display mit KS0108_Fill(x) mit einem Muster zu füllen.
x = 0x00: Leer
x = 0xFF: vollständig gefüllt
x = irgendwas: Entsprechendes Bitmuster am Display sichtbar.

Wenn das geht, sollte man mit KS0108_PutS (x, y, Text, f); auch nen Text schreiben können.
(x, y = Startkoordinaten, Text als char*, f > 0 für Standard-Darstellung, f = 0 Invertierter Text)

Falls es Probleme bei der Inbetriebnahme des Codes gibt, einfach melden.

Wenns damit auch nicht geht, liegt der Verdacht nahe, dass irgendwo ein Hardwarefehler drin ist. Soferns da die gleiche "Qualität" ist wie bei den Pollin-GLCDs, dann kanns da auch sein, dass, wie bei mir, eine Leiterbahn zwischen Displaycontroller und Anschluss gebrochen ist. Also mal wirklich alle Bahnen vom AVR soweit zurückverfolgen (Durchpiepsen) wie es geht; am besten bis direkt vor den Controller aufm Display.

Movie85
09.04.2009, 12:10
Hi Jaecko,
danke für den Code, ich hab aber leider überhaupt keine Ahnung von C oder was das auch immer ist^^
Ich hab mal alles Durchgepiepst, aber keine Fehler bei der Verkabelung oder irgendwelche kurzschlüse, die Leiterbahnen kann ich leider nicht überprüfen, weil das so "schwarze Tropfen" Controller sond, die man nicht sieht(nur der schwarze Tropfen:) )
Wenn du mir schnell sagst was ich an dem Code ändern müsste, dann versuch ichs mal!

Danke nochmal,

Tom

Jaecko
09.04.2009, 17:18
Im Prinzip reichts, wenn du die _cfg.h anpasst (also deine Pins/Ports) und alle Funktionen auskommentierst, in denen irgend was mit myStrLeft o.ä. drin ist.

Also die Funktionen, die sicher gebraucht werden und mit dem vorhandenen Code funktionieren sollten:

Display initialisieren:
void KS0108_Init (void);

"Zelle" (8 Byte) vom Display lesen
ui8_t KS0108_ReadCell (ui8_t x, ui8_t page);

Zelle schreiben
void KS0108_WriteCell (ui8_t x, ui8_t page, ui8_t data);

Befehl zum LCD schicken
void KS0108_WriteCommand (ui8_t cmd, ui8_t driver);

Enable-Puls senden
void KS0108_Enable (void);

Einzelnes Pixel setzen (color > 0) oder löschen (color = 0):
void KS0108_SetPixel (ui8_t x, ui8_t y, ui8_t color);

Einzelnes Textzeichen setzen:
void KS0108_PutC (ui8_t x, ui8_t y, ui8_t chr, ui8_t color);

Ganzen Text setzen:
void KS0108_PutS (ui8_t x, ui8_t y, char *chr, ui8_t color);

Display mit Bytemuster füllen
(Alle Zellen mit gleichem Wert befüllen)
void KS0108_Fill (ui8_t pattern);


Nachtrag: Hab mal das Programm, das die .hex erzeugt hat, als AVR-Studio-Projekt hier mit angehängt. Schau sicherheitshalber noch mal drüber, ob alle Pins/Ports stimmen.

Felix H.
09.04.2009, 19:38
Hi,

mach mal bei deinem Code noch die normale Glcd.lbx dazu

$lib "glcd.lbx"

und versuche mal

Config Graphlcd = 128 * 64 , Dataport = Portb , Controlport = Portd , Ce = 0 , Ce2 = 1 , Cd = 2 , Rd = 3 , Reset = 5 , Enable = 4

ohne 128*64sed.

Gruß

magic33
03.06.2009, 19:50
Guten Tag ich hab mir auch mal so ein teil besorgt da das hier schon sehr gut funktioniert im Beitrag stell ich mal die DUMMY frage wie hoch ist der wiederstand zwischen Vout -5V und contrastpin zu wählen um eine schöne schwarze linie zu erhalten Da ich kein elektroniker bin kommt da nur ein wiederstand dazwischen oder besser ein poti ZB 5K mit Bein an 5V bein an Gnd und schleifer an contrast

Vo -5V ----
potti ---- contrast
GND -----

Jaecko
03.06.2009, 20:20
Wenn ich mich richtig erinner, hat dieses Display nen Pin für negative Ausgansspannung (VEE). Zwischen dem und 5V das Poti legen (hab da 1k) und den Schleifer an den Kontrastpin. Dann einfach drehen, bis es gut aussieht.

magic33
04.06.2009, 08:21
die belegung meines GLCD sieht so aus
HQMPIN LPTPIN

1 +5V N/C
2 GND 18
3 VO N/C
4 D0 2
5 D1 3
6 D2 4
7 D3 5
8 D4 6
9 D5 7
10 D6 8
11 D7 9
12 CS1 16
13 CS2 14
14 RESET CONNECT THIS TO +5V
15 RW CONNECT THIS TO GND
16 DI 17
17 E 1
18 -5V CONTRAST -V SUPPLY
19 +5V BACKLIGHT +SUPPLY ( USE 60-150 OHM RESISTOR TO AVOID DAMAGE)
20 -5V BACKLIGHT GROUND

Bei pin 3 Vo kommt gegen GND -5V