Hallo, problem: das display gibt müll aus (aber es gibt was aus) bisher gemacht: wie im anhang hab ich alles verdrahtet, habe die libs/quellcode von apetech genommen, dann aus der ks0108.h die Ports für data auf A und Ports für command auf B gestellt, in der makefile hab ich meinen quarz mit F_CPU=16000000 angegeben/den mikrocontroller aus atmega32 gesetzt, flashen funktioniert, an den ports wird auch was ausgegeben (oszi zeigt das) und das display zeigt blöcke oder einzelne punkte an. selber hab ich angst, dass: das kabel vom atmega zum display zu lang ist (ca 30cm), ich falsch verdrahtet habe (deswegen anhang), der "reset" vom display falsch verdrahtet ist(liegt im moment auf Vdd=+5V) hier die belgung des ks0180-displays: 1:Vdd 2:Vss 3:V0 4:DB0 5:DB1 6:DB2 7:DB3 8:DB4 9:DB5 10:DB6 11:DB7 12:CS1 13:CS2 14:Reset 15:R/W 16:D/I 17:EN 18:VEE 19:LED+ 20:LED- aus der kd0108.h: #define LCD_CMD_PORT PORTB // von A auf Command Output Register #define LCD_CMD_DIR DDRB // Data Direction Register for Command Port #define LCD_DATA_IN PINA // Data Input Register #define LCD_DATA_OUT PORTA // Data Output Register #define LCD_DATA_DIR DDRA // Data Direction Register for Data Port // Command Port Bits #define D_I 0x00 // D/I Bit Number #define R_W 0x01 // R/W Bit Number #define EN 0x02 // EN Bit Number #define CSEL1 0x03 // CS1 Bit Number #define CSEL2 0x04 // CS2 Bit Number // Chips #define CHIP1 0x00 #define CHIP2 0x01 // Commands #define LCD_ON 0x3F #define LCD_OFF 0x3E #define LCD_SET_ADD 0x40 #define LCD_SET_PAGE 0xB8 #define LCD_DISP_START 0xC0 // Colors #define BLACK 0xFF #define WHITE 0x00 // Font Indices #define FONT_LENGTH 0 #define FONT_FIXED_WIDTH 2 #define FONT_HEIGHT 3 #define FONT_FIRST_CHAR 4 #define FONT_CHAR_COUNT 5 #define FONT_WIDTH_TABLE 6 was mach ich falsch? kann mir einer weiterhelfen und sich den schaltplan mal anschauen? mfg dnm
wenn mist ankommt hats meistens n timingproblem ... häng mal n paar nops rein, vor allem beim E-Puls
fährst du den mit den vollen 8 bit an? ich verwende meist nur den 4-bit modus, das spart pins am mega.
Das ist nicht zufällig das C-File von M.Thiele? das lief bei meinem 128x64-Display fast auf Anhieb. Allerdings ist mein Command-Port auf Port C. Ich hatte Probleme mit dem Reset. Habe diesen an das System-Reset angeschlossen (MCU) und es funktionierte.
Warum verbindest Du Pin1 mit Pin 14 und dann mit GND? Irgendwie werde ich nicht so schlau aus deinem Plan (fehlende Konnektoren)! Ich würde den RESET nicht von vornherein auf GND ziehen. Bei mir funktioniert das Display nicht wenn ich dies tue. Ich habe es gerade ausprobiert.
hast Du auch die Reihenfolge der datenleitungen eingehalten? DB0 Anzeige mit PA0 des Controllers?
"wenn mist ankommt hats meistens n timingproblem ... häng mal n paar nops rein, vor allem beim E-Puls" was sind nops? "fährst du den mit den vollen 8 bit an? ich verwende meist nur den 4-bit modus, das spart pins am mega." ich hab alle 8 in der reihenfolge wie im plan angeschlossen und das *.c -file von F. Thiele verwendet "Allerdings ist mein Command-Port auf Port C. Ich hatte Probleme mit dem Reset. Habe diesen an das System-Reset angeschlossen (MCU) und es funktionierte." so hab ich es jetzt,es ist jetzt wie im (neu angehängten) plan angeschlossen, bringt aber keine verbesserung, jetzt wird gar nichts mehr ausgegeben "hast Du auch die Reihenfolge der datenleitungen eingehalten? DB0 Anzeige mit PA0 des Controllers?" jop ich hatte den reset vorher also auf 5 volt(hatte mich im plan verzeichnet), ihr habt den reset auf dem reset vom mcu? wo soll ich weitersuchen? die kabellänge ist wirklich kein problem? (30cm) vielen vielen danke schonmal!! dnm
Im Plan erkenne ich, dass Du PA7 mit DB0 (Anzeige) angeschlossen hast.Dies wäre, wenn es so verbunden wurde, falsch! Hast Du wirklich die Datenleitungen korrekt verbunden? Liegt der Fehler in deiner Zeichnung oder deinem Aufbau? Ansonsten zeig doch mal dein Programm (Hauptprogramm genügt).
Du musst naürlich auch darauf achten, ob der Reset High- oder Low-aktiv ist. Bei meinem Display ist er High-aktiv!!! Es wäre (so wie Du es angeschlossen hast) ständig zurückgesetzt.
zeichnung war falsch, gestern abend schnell zusammengeschustert, sry die datenleitungen sind genau verdreht angeschlossen, hab grad überprüft. das hauptprogram sieht so aus: /* * Copyright: Fabian Maximilian Thiele mailto:me@apetech.de * Author: Fabian Maximilian Thiele * Remarks: this Copyright must be included * known Problems: none * Version: 1.1 * Description: KS0108 Library Demo Program * */ #include <inttypes.h> #include <avr/io.h> #include <avr/pgmspace.h> #include "ks0108.h" #include "arial_bold_14.h" #include "corsiva_12.h" int main(void) { // Wait a little while the display starts up for(volatile uint16_t i=0; i<15000; i++); // Initialize the LCD ks0108Init(0); // Select a font ks0108SelectFont(Arial_Bold_14, ks0108ReadFontData, BLACK); // Set a position ks0108GotoXY(15,10); // Print some text ks0108Puts_P(PSTR("KS0108-Treiber")); // a nice little round rect ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK); // Once again :) // Select a font ks0108SelectFont(Corsiva_12, ks0108ReadFontData, BLACK); // Set a position ks0108GotoXY(5,30); // Print some text ks0108Puts_P(PSTR("http://www.apetech.de\nmailto:me@apetech.de")); while(1); } auf dem datenblatt ist das lcd mit dem lpt verbunden und dabei ist reset fest auf 5V, das wäre dann doch quasi activ high, oder? über einen widerstand auf masse gäbe es dann ein reset, oder? wieso ist das beim lpt-anschluss dauerhaft auf 5V? dnm
Wenn es dauerhaft auf High liegt, dann ist der Reset eher Low-aktiv, sonst wäre das Display ja ständig zurückgesetzt. Das Reset ist nur wenige mikrosec aktiv und dann nicht mehr. Es muss also beim Einschalten kurz auf low gezogen werden (wenn es Low-aktiv ist)und geht dann auf High (RC-Kombination). Das Programm läuft so wie es ist bei mir auf dem Display. Ich kann von hieraus nicht sagen was es noch sein könnte. Wie gesagt an der orginalen Software liegt es nicht. Es handelt sich wohl eher um ein schaltungstechnisches Problem. Welches Grafik-Display(!!!) hast Du denn angeschlossen (128x64)?
ich habe das AG12864 B-TMI-V wie würde so eine rc-kombination aussehen? könntest du mir da eine kleine skizze machen? ich hoffe, ich hab das jetz verstanden: wird der reset am auf ground(low) gesetzt, wird er ausgelöst, den rest der zeit soll er auf high(+5V) sitzen. kann das ganze problem noch am reset hängen? im anhang ist mal die beschaltung mit dem lpt meines displays, so wie es im datenblatt steht.
Den Reset hast Du eigentlich gecheckt (Low-aktiv) indem Du das Display auf den Reset des MCUs gelegt hast. Und nach der Schaltung die Du im Anhang hast ist das Display auch Low-aktiv. Wäre es High aktiv müsstest Du den R auf GND legen und den C auf +5V. Also gerade andersrum. Ich kann per Ferndiagnose jetzt nichts mehr sagen. Vielleicht nochmal alle Anschlüsse checken (auch auf Durchgang). Kabel kürzen wenn es geht. Takt verringern (probiere mal den internen 8MHZ RC-Oszill.-> Fuses setzen). Mein Display läuft auf 8MHz.
Ich habe gesehen das im datenblatt deines Displays die CS Low-aktiv sind. Die Software steuert, so wie ich es weiss, die CS aber H-aktiv. Das wär dann dein Problem! CS muss, wenn es mit der Software laufen soll, H-aktiv abgeändert werden.
Natürlich Low-aktiv! SoRRY!! das heisst Zum Ansteuern des entsprechenden Chips musst du das Bit löschen nicht setzen(!!!). In der Software ist das genau andersrum! Da kann also nix bei rauskommen. Das erklärt auch das deine MCU arbeitet aber nix auf dem Display zu sehen ist.
aus den *.c files gibt es diese abschnitte: if(chip == CHIP1) { LCD_CMD_PORT &= ~(0x01 << CSEL2); // deselect chip 2 LCD_CMD_PORT |= 0x01 << CSEL1; // select chip 1 } else if(chip == CHIP2) { LCD_CMD_PORT &= ~(0x01 << CSEL1); // deselect chip 1 LCD_CMD_PORT |= 0x01 << CSEL2; // select chip 2 habe sie wie folgt geändert: if(chip == CHIP1) { LCD_CMD_PORT |=0x01 << CSEL2; // deselect chip 2 LCD_CMD_PORT &= ~( 0x01 << CSEL1); // select chip 1 } else if(chip == CHIP2) { LCD_CMD_PORT |=0x01 << CSEL1; // deselect chip 1 LCD_CMD_PORT &= ~( 0x01 << CSEL2); // select chip 2 hat aber nicht die gewünschte wirkung erbracht.
Alles was mit CS zutun hat muss geändert werden. Überall wo das Portbit zur Aktivierung des Chips (CS1 oder CS2)gesetzt wird muss nun das Portbit gelöscht werden. Bevorzugst Du eine Hardwarelösung? Dann musst Du zwischen MCU und Display Inverter für CS1 und CS2 setzen. Das mit dem CS musst Du auf jeden Fall ändern so wird das nie was. Eventuell bekommst Du bei zu hoher Taktung noch Probleme mit dem Timing. Dann musst Du weitere NOPs (No Operation) einfügen um die Verzögerung zu erhöhen. Oder Du taktest langsamer (s.o.), wenn das bei Dir möglich ist. Wenn Du die hohe Clockrate brauchst, ja dann musst Du die Verzögerungen ändern. Jetzt versuche erst mal die CS-Ansteuerung zu ändern und dann gehe den nächsten Schritt.
jop, überall, wo das portbit zur aktivierung des chips gesetzt wird, wird es jetzt gelöscht und umgekehrt. bin das file gerade durchgegangen. der mcu läuft jetzt mit 8MHz die 16 sind mir nicht so wichtig. das display bleibt schwarz(blau)
Ich finde jetzt nichts mehr was es sein könnte (die Ansteuerung von DI,RW und Enable ist ok zumindest softwareseitig). Das CS musste auf jeden Fall geändert werden. Vielleicht hat ja noch ein Anderer eine Idee?
danke trotzdem! war mir auf jeden fall schonmal eine rießen hilfe! ich schreib hier rein falls sich was tut!
Das wäre nett von Dir zu hören, wenn Du das Problem gelöst hast. Ich habe schon viele Stunden an diesen Displays verbracht, da muss man einfach hartnäckig bleiben. Irgendwie verhalten sie doch immer ein bischen anders, auch wenn der gleiche Controller drauf ist. Ich probiere dann alles mögliche, denn bekanntlich kann man auch gelegentlich Pferde kotzen sehen. Vielleicht probierst Du mal einen anderen Port für die Controllleitungen (PortC) :-)). Ansonsten viel Glück!
Halli, Hallo schlagt mich, ich habs nicht anders verdient ;] 1.: es ist nicht activ low -> ich muß nichts in der *.c ändern 2.: das platinenlayout sollte man des öfteren genau anschauen :], d.h. 2 Leiterbahnen waren miteinander verbunden. tja, so einfach kann es sein :] was ich noch alles gemacht hab, war das flachband kabel verkürzen, kann ein abgeschirmtes kabel einlöten, dann hab ich alles nochmal durchgemessen und diesmal auch darauf geachtet, dass nah nebeneinander liegende leiterbahnen nicht miteinander verbunden sind. also tut mir leid, dass ich hier so viel wind gemacht hab! und noch mal vielen dank an joerg miehle! man muß von vornherein alle fehlerquellen beseitigen, das ist mir wieder einmal klar geworden. jetzt gehts weiter mit programmieren. wer mein project verfolgen will, kann auf meine homepage gucken: www.apellex.istgenial.de unter lianlex ist alles drin. dnm
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.