www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik T6963 --> Data Read - Aber wie?


Autor: mainster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... hast du überhaupt den /RD Pin beschaltet, um was rücklesen zu können 
?

Autor: mainster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas K. (thkais)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht denn Deine derzeitige Subroutine zum Auslesen aus?

Autor: mainster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: pumpkin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/downlo...)

ich hoffe es hilft weiter.

pumpkin

Autor: mainster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank! Werds heute abend gleich ausprobieren. Wie schnell taktest 
du den AVR?

MFG MainSter

Autor: pumpkin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dat warn nega16 bei ~4MHz. lief aber imho auch auf nen mega128 bei 
16MHz.

pumpkin

Autor: mainster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: pumpkin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
häng mal bitte deine source an.

pumpkin

Autor: mainster (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: pumpkin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: pumpkin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso, und die nicht-auto-read-routine wegen zeit- und motivationsmangel 
noch nicht drin.  ; )


pumpkin

Autor: mainster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: pumpkin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nice! frohes fest....  : )

pumpkin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.