T6963 --> Data Read - Aber wie?

Gast #462699
Lesenswert?
• ▲
▼
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
Gast #463053
Lesenswert?
• ▲
▼
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
Gast #463080
Lesenswert?
• ▲
▼
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
Gast #463134
Lesenswert?
• ▲
▼
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
Gast #463352
Lesenswert?
• ▲
▼
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
Gast #463486
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #463545
Lesenswert?
• ▲
▼
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
Gast #463609
Lesenswert?
• ▲
▼
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren