Liste der Anhänge anzeigen (Anzahl: 1)
GLCD-KS0180B Controller
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:
Code:
$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
Liste der Anhänge anzeigen (Anzahl: 1)
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
Liste der Anhänge anzeigen (Anzahl: 1)
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.
Liste der Anhänge anzeigen (Anzahl: 1)
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.