Hallo, Bin seit einigen Wochen dran mir ein Menü auf nem 240 * 128 pixel GLCD mit T6963 zu basteln. Läuft schon ganz gut außer die Sache mit dem Data Read..... Wenn ich einen Data Read ausführe und das gelesene Byte wieder zurückschreibe kommt nur Müll raus! Hat jemand ein code schnipsel parat oder nen Link? MFG, MainSter
... hast du überhaupt den /RD Pin beschaltet, um was rücklesen zu können ?
Hallo! Ja hab ich. Es gibt ein oder zwei Beiträge wo komplette Libs vorgestellt werden.... In denen finde ich aber nur eine Leseroutine für die Statusbits! Eine routine von jemandem der sagen kann dass sie sicher funktioniert wäre super! Ich betreibe den Controller an einem Mega128 (kein Memory Mapped Mode). Ich hab jede Andere Routine mit hilfe der Flowcharts aus dem Datenblatt zusammengebastelt und die funktionieren. Nur die Read und die Autoread routine laufen nicht..... Danke, MainSter
void lcd_read_data(void) { LCD_CE_H(); lcd_status_check1(); LCD_CD_L(); LCD_RD_L(); LCD_WR_H(); nops(); LCD_CE_L(); nops(); DATA_DIR_IN(); LCD_DATA_READ = LCD_READ; LCD_CE_H(); } Habs schon paar mal geändert..... Der Statuscheck funktioniert und nops() ist ein Delay über ca. 200ns (Mega128 @ 16MHz) Danke, MainSter
ich habs so gemacht (im automode). unsigned char lcd_get_data_auto(void) { lcd_status_read_loop(0x04); unsigned char temp_var = 0x00; DDRB = 0x00; DATA_PORT = 0x00; COMMAND_PORT |= (1 << WRITE_PIN); COMMAND_PORT &= ~(1 << COMMAND_DATA_PIN); COMMAND_PORT &= ~(1 << READ_PIN); COMMAND_PORT &= ~(1 << ENABLE_PIN); asm volatile ("nop"::); temp_var = PINB; COMMAND_PORT |= (1 << ENABLE_PIN); COMMAND_PORT |= (1 << READ_PIN); asm volatile ("nop"::); COMMAND_PORT |= (1 << COMMAND_DATA_PIN); return temp_var; } (alles gibts hier: http://www.total-war.org/sound_inside_STUFF/downloads/sharp_lm24014.rar) ich hoffe es hilft weiter. pumpkin
dat warn nega16 bei ~4MHz. lief aber imho auch auf nen mega128 bei 16MHz. pumpkin
OK! Ich hab Deine Autoread - funktion übernommen sowie deinen Status loop. Wenn ich jetzt einen Statuscheck 1 ausführe funktioniert noch alles wie vorher aber wenn ich einen Statuscheck 2 (STA2 --> mask 0x04) ausführe bleibt er in dem loop hängen.... Den Auto - read - command habe ich ein paar zeilen drüber eingeschalten und trotzdem scheint der zustand STA2 = 1 niemals aufzutreten.... MFG MainSter
Hallo! Ich hab mir die Source von dem Link mal genauer angeschaut. Zum daten lesen gibt es unter DECLARATIONS nur die Funktion unsigned char lcd_get_data_auto (void); In der Beschreibung von dieser funktion steht ...it's the only difference to the "unsigned char lcd_get_data(void)" Ist diese funktion mit absicht nicht im Code enthalten? Hab nämlich schon versucht eine Single read routine zu schreiben. Im Datenblatt ist auch für alles ein Flowchart hinterlegt außer für einen Singleread.... Zugegeben dass es sich eigentlich fast von selber erklärt (auch wieder Status check, befehl zum lesen eines Datenbytes und dann die umgeschriebene SR aufrufen mit mask 0x03) trotzdem wills nicht laufen. Danke, MainSter
moin, öhm, hab gerade mal deine source beäugt und das datenblatt gewälzt. eine frage: warum benutzt du die stat-mask 0x03 (0b00000011) wenn du den automode reseten willst? siehe datasheet S.21 - du musst nur STA2 checken (0x04 wenn man davon ausgeht dass unsere pinnings gleich sind). leider kann man aber aus deiner source nicht ersehen wo du überall status_read_loops machst - die sind extrem wichtig. z.b. solltest du VOR einem befehl an den controller auf sein ready 'warten' (natürlich mit der richtigen stat-mask). pumpkin
achso, und die nicht-auto-read-routine wegen zeit- und motivationsmangel noch nicht drin. ; ) pumpkin
Jaaaaa!!! Ich habs! hab deine tips übernommen und es wurde nach wie vor nur ein 0x00 ausgegeben! Dann bin ich mal auf die idee gekommen in deiner lcd_get_data_auto funktion die Wartezeit auf den gültigen BUS zustand zu verlängern.... Und dass ist alles.... manchmal funktioniert es auch mit zwei nops aber zur sicherheit lieber 4x!!! unsigned char lcd_get_data_auto(void) { lcd_status_read_loop(0x04); unsigned char temp_var = 0x00; DATA_DIR_IN(); LCD_DATA = 0x00; LCD_WR_H(); LCD_CD_L(); LCD_RD_L(); LCD_CE_L(); asm volatile ("nop"::); asm volatile ("nop"::); asm volatile ("nop"::); asm volatile ("nop"::); temp_var = LCD_READ; LCD_CE_H(); LCD_RD_H(); asm volatile ("nop"::); LCD_CD_H(); return temp_var; } Vielen dank für eine Unterstützung pumpkin..... So machts Spaß auch mal nicht weiterzukommen :-) Ich hoffe bald kann ich mein projekt hier vorstellen........ MFG MainSter
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.