mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik s1d13700 die 2.


Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also:

nach einigem Stillstand, mach ich seit heute nun weiter.

folgendes dilemma:

das display funktioniert einige zeit (<1min) dann scheint die 
übertragung der adresse nicht zu klappen, er zeichnet den zeileninhalt 
einfach in die nächste spalte, statt wie in meinem testbild gewünscht,in 
die nächste zeile, gleiche spalte.

das wiederrum macht er ca 10 sek, dann wird der bildschirm komplett 
schwarz.

merklich ist das eindeutig, weil ich ihn nur eine spalte beschreiben 
lasse (also text vertikal sozusagen).

timingmäßig hab ich so ziemlich alles durch was mir möglich war.

habt ihr eine idee?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es klingt sehr nach einem Timingproblem oder sowas in der Art.

Zeig mal deinen Code, vor allem die Routinen die Befehle/Daten an den 
13700 senden.

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void GLCD_WriteData(unsigned char dataToWrite)
{
  // Generic Interface
  S1D13700_DATA_DIR = 0x00;
  S1D13700_DATA_PORT = dataToWrite;
  NOP();
  NOP();
  S1D13700_CONTROL_PORT &= ~(S1D13700_CS | S1D13700_A0 | S1D13700_WR);

  NOP(); 
  NOP();
  NOP();
  S1D13700_CONTROL_PORT |= (S1D13700_CS | S1D13700_A0 | S1D13700_WR);

}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_WriteCommand(unsigned char commandToWrite)
{
  S1D13700_DATA_DIR = 0x00;
  S1D13700_DATA_PORT = commandToWrite;
  NOP();
  NOP();
  S1D13700_CONTROL_PORT &= ~(S1D13700_CS | S1D13700_WR);

  NOP();
  NOP();
  NOP();  
  S1D13700_CONTROL_PORT |= (S1D13700_CS | S1D13700_WR);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
unsigned char GLCD_ReadData(void)
{
  unsigned char tmp;
  S1D13700_DATA_DIR = 0xFF;
  S1D13700_CONTROL_PORT &= ~(S1D13700_CS | S1D13700_RD);
  NOP();
  NOP();
  NOP();
  NOP();
  tmp =  S1D13700_DATA_PORT_IN;
  S1D13700_CONTROL_PORT |= (S1D13700_CS | S1D13700_RD);

  return tmp;
}

danke das du dich meiner annimmst :)

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du verletzt die Timing Specs t1 und t2: CS und die Adressen müssen vor 
dem WR/RD Impuls anliegen.

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich adressiere indirekt, also keine adressen.

aber ich werd mal CS vorziehen, melde gleich was passiert

edit:

nun
void GLCD_WriteCommand(unsigned char commandToWrite)
{
  S1D13700_DATA_DIR = 0x00;
  S1D13700_DATA_PORT = commandToWrite;
  NOP();
  S1D13700_CONTROL_PORT &= ~(S1D13700_CS);
  NOP();

  S1D13700_CONTROL_PORT &= ~(S1D13700_CS | S1D13700_WR);

  NOP();
  NOP();
  NOP();  
  S1D13700_CONTROL_PORT |= (S1D13700_CS | S1D13700_WR);
}

leider keine verbesserung.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. wrote:
> ich adressiere indirekt, also keine adressen.

Ist A0 keine Adresse?

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, streng genommen wohl schon :)

wie ich schon editiert hab, daran lags aber (scheinbar) nicht :|

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und dasselbe auch beim Abschalten der RD/WR Signale (t5/6 im Datenblatt)

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meine güte, bisher scheint das echt zu klappen, ich wills nicht 
verschreien.

ich werd wie versprochen die routinen in die codesammlung einpflegen :)

herzlichen dank!!!

eine frage noch, hast du eine software die mir passende schrift-arrays 
machen kann?

die einteilung ist ja leider anders als beim ks108, folglich haben alle 
freewareprogramme für mich nichts passendes erzeugt.

mittlerweile rennts schon mehr als 3 minuten =)

ps: noch eine frage, mir scheint der konstrast etwas zu wenig, 
allerdings kommen mir balken mit unterschiedlicher helligkeit wenn ich 
am poti drehe, liegt das vl an der config?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. wrote:
> meine güte, bisher scheint das echt zu klappen, ich wills nicht
> verschreien.

Die Epson Controller sind sehr pingelig was das Timing angeht. Ich hatte 
mal stunden gebraucht um einen S1D13504 zum Laufen zu bekommen (obwohl 
die Software copy&paste aus einem funktionierenden Projekt war, nur die 
IO Routinen musste ich anpassen). Der hatte ähnliche Anforderungen ans 
Timing, die man wirklich bis ins letze Detail befolgen musste, damit das 
ganze zuverlässig lief.

> eine frage noch, hast du eine software die mir passende schrift-arrays
> machen kann?

Hier sind ein paar Schriftarten in allen möglichen Ausrichtungen.
Beitrag "LCD Schriftarten ( Fonts in veschiedenen Größen )"

Ansonsten sollten auch alle Font Tools für den T6963 funktionieren, z.B. 
sowas wie hier:
Beitrag "GLCD T6963C Font-Tool"

> ps: noch eine frage, mir scheint der konstrast etwas zu wenig,
> allerdings kommen mir balken mit unterschiedlicher helligkeit wenn ich
> am poti drehe, liegt das vl an der config?

Kann ich mir eher nicht vorstellen.
Wenn du große Blöcke, lange senkrechte oder waagrechte Linien anzeigst, 
dann kann es durchaus zu Übersprechen kommen, das ergibt dann 
unterschiedliche Helligkeiten. Oder hast du vielleicht den 4/16 
Graustufenmodus aktiviert?

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, schlecht ausgedrückt.

es sind zeilen a 10-12 pixel hoch -> von oben nach unten unterschiedlich 
hell, leuchten halt dezent durch. denke also an die zeilentreiber. wie 
gesagt, man kanns ja wegblenden, mich wundert nur das es nicht 
gleichmäßig ist.

meins hatte ich übrigens auch übernommen ;) darum fand ich das mim 
timing so merkwürdig.

nochmals danke =) graustufen kommen nun dran wo das schreiben langsam 
funktioniert.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. wrote:
> es sind zeilen a 10-12 pixel hoch -> von oben nach unten unterschiedlich
> hell, leuchten halt dezent durch.

Ich kann mir das immer noch nicht so recht vorstellen.
Mach am besten mal ein Foto.

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mache ich bei gelegenheit, muss mir nur eine kamera dazu ausleihe, meine 
sony hat nach 5 jahren treue die patschen gestreckt.

Autor: Ecki Bär (ecki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael
bin gerade auch dabei einen s1d13700 anzusteuern.
könnt ich mir mal deinen code ansehen ?


gruß eckard

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

Bewertung
0 lesenswert
nicht lesenswert
Verzeiht mir das ungeschick, ich habs nicht vergessen, ich habs schlicht 
nicht fertig...

der code sieht recht grausam aus, er entlockt dem display aber zumindest 
mal ein paar pixel.

ich werd mich wie versprochen melden wenn ich das in eine vernünftige 
form gebracht hab, ich hatte nur bisher wenig interesse daran weil ich 
ein wenig was fürs studium tun musste :)

Autor: Michael H. (morph1)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hoffe das bringt wen weiter und nicht noch mehr zu verzweiflung :)

ich glaub/hoffe/hätts gern das ichs bis anfang februar überarbeiten 
kann, aber es sieht zeitlich wirklich mies aus

Autor: Ting yu Leung (lgeorge123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi morph1 (Gast), is the following code function well ??

void GLCD_GraphicGoTo(unsigned int x, unsigned int y)
{
GLCD_SetCursorAddress(SED1335_GRAPHICSTART + (y * 40) + x/8);
}

and

void GLCD_Bitmap(char * bmp, int x, int y, int width, int height)
{
unsigned int i, j;
for(i = 0; i < height ; i++)
  {
  GLCD_GraphicGoTo(x, y+i);
  GLCD_WriteCommand(SED1335_MWRITE);
  for(j = 0; j < width/8; j++)
    GLCD_WriteData(GLCD_ReadByteFromROMMemory(bmp+j+(40*i)));
  }
}

and

char GLCD_ReadByteFromROMMemory(char * ptr)
{
return *(ptr);
}

Autor: morph1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
the posted code runs well, but not every function is neccessary or even 
used in my project.

the project was killed some weeks ago, i had no time to complete it, i'm 
sorry

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.