www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Displaytech 64128c Osama's lab GLCD-Lib


Autor: Günter Michaeller (gueee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche schon seit geraumer Zeit ein Displaytech 64128c 
http://docs-europe.electrocomponents.com/webdocs/0... 
, mit der Osama's Lab GLCD-Lib zum laufen zu bekommen.
Leider schaffe ich es einfach nicht, die linke Hälfte des Displays 
anzusprechen!

Das ist mein Code:
#include <avr/io.h>
#include <util/delay.h>
#include "glcd.h"
#include "graph.h"



int main(void)
{

PORTC=0x00;
DDRC=0xFF;

PORTD=0x00;
DDRD=0xFF;

glcd_rst();

glcd_on();

bmp_disp(arr,1,1,127,63); 

}

das der Headerinhalt:
 #include <avr/pgmspace.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "font.h"

typedef unsigned char byte;
//----------------------
#define E_DELAY 20
#define DATAPORT PORTD
#define CONTROLPORT  PORTC
#define DATADDR DDRD
#define DATAPIN PIND
#define CS1 (1<<2)
#define CS2 (1<<3)
#define DI  (1<<4)
#define RW  (1<<0)
#define EN  (1<<1)
#define RS  (1<<5)
//#define CS_ACTIVE_LOW   1   //Define this if your GLCD CS
                              //is active low (refer to datasheet)
//--------Arabic----------
static int prevLet = 193;
static byte stat = 0;
static byte prevX = 0;
static byte prevY = 0;
//------------------------
void trigger()
{
  CONTROLPORT |= EN;  //EN high
   _delay_us(E_DELAY);
   CONTROLPORT &= ~EN;  //EN low
   _delay_us(E_DELAY);
}
//----------------------
void glcd_rst()
{
#ifdef CS_ACTIVE_LOW
   CONTROLPORT &= ~RS;  //Activate both chips
#else
   CONTROLPORT |= RS;  //Activate both chips
#endif
}
  
void glcd_on()
{
#ifdef CS_ACTIVE_LOW
   CONTROLPORT &= ~CS1;  //Activate both chips
   CONTROLPORT &= ~CS2;
#else
   CONTROLPORT |= CS1;  //Activate both chips
   CONTROLPORT |= CS2;
#endif
   CONTROLPORT &= ~DI;  //DI low --> command
   CONTROLPORT &= ~RW;  //RW low --> write
   DATAPORT = 0x3F;   //ON command
   trigger();
}           



//------------BMP Display--------------------
void bmp_disp(byte *bmp,unsigned int x1,unsigned int y1,
                         unsigned int x2,unsigned int y2)
{
    unsigned int i,j;    
    for(i=y1;i<=y2;i++)
    {
        for(j=x1;j<=x2;j++)
        {                       
           goto_xy(j,i);                              
           glcd_write(pgm_read_byte(&bmp[(128*i)+j]));
           _delay_us(10);
        }                                              
    }
}
bin für jeden Hinweis dankbar!!

grüße gueee

Autor: Nils S. (kruemeltee) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider schaffe ich es einfach nicht, die linke Hälfte des Displays
anzusprechen!


CS richtig verbunden? Tausche mal beide CS und schau ob dann die rechte 
Hälfte nicht geht.

und überprüf das mal:
//#define CS_ACTIVE_LOW   1   //Define this if your GLCD CS
                              //is active low (refer to datasheet)

Autor: Günter Michaeller (gueee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nils S. schrieb:
> CS richtig verbunden? Tausche mal beide CS und schau ob dann die rechte
> Hälfte nicht geht.

Habe ich schon probiert, gleiches ergebnis: nur rechte hälfte geht.

Nils S. schrieb:
> und überprüf das mal:
> //#define CS_ACTIVE_LOW   1   //Define this if your GLCD CS
>                               //is active low (refer to datasheet)

Bei meinem Display (Displaytech 64128c) ist definitiv aktiv HIGH

Autor: Nils S. (kruemeltee) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Habe ich schon probiert, gleiches ergebnis: nur rechte hälfte geht.
zusammenfassend:

Der Controller gibt also BEIDE Hälften aus. Sprich wenn CS1 und CS2 
richtig angeschlossen sind, zeigt er die rechte Bildhälfte auf der 
Rechten Displayhälfte an. Wenn du die CS umdrehst, zeigt er die Linke 
Bildhälfte auf der Rechten Displayhälfte an. Stimmt das so?

Versuchs einfach mal mit Active Low, braucht genau einmal Flashen und 
ein Kommentar entfernen ;)

Die Pin-Definitionen der CS überprüfst du am besten mal indem du mitm 
Durchgangsprüfer vom Multimeter auf der einen Seite direkt den 
Controllerpin antatschst (PC2, PC3) und dann direkt am Display mit der 
zweiten Messstrippe. In der fertigen Schaltung mit allen Bauteilen 
(Controller, Stecker, Display, eben alles was aufm Weg ist), aber ohne 
Strom.

Versuch vlt auch mal einen anderen Treiber und schau ob in deinem vlt 
irgendwas auf 64x64 hindeutet.

> E_DELAY 20
das auch mal etwas höher ausprobieren.

Autor: Günter Michaeller (gueee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nils S. schrieb:
> Der Controller gibt also BEIDE Hälften aus. Sprich wenn CS1 und CS2
> richtig angeschlossen sind, zeigt er die rechte Bildhälfte auf der
> Rechten Displayhälfte an. Wenn du die CS umdrehst, zeigt er die Linke
> Bildhälfte auf der Rechten Displayhälfte an. Stimmt das so?

Ja, das stimmt so ...

Nils S. schrieb:
> Versuchs einfach mal mit Active Low, braucht genau einmal Flashen und
> ein Kommentar entfernen ;)

bereits versucht --> gar keine anzeige auf dem display

Nils S. schrieb:
> Versuch vlt auch mal einen anderen Treiber und schau ob in deinem vlt
> irgendwas auf 64x64 hindeutet.

keinen plan was du mit treiber meinst?!

Nils S. schrieb:
>> E_DELAY 20
> das auch mal etwas höher ausprobieren.

schon schrittweise bis 100 erhöht, selbes ergebnis.

Autor: Nils S. (kruemeltee) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>keinen plan was du mit treiber meinst?!
Na den Code zum Ansteuern des Displays ;) Eben deine Osama-Lib, die dich 
grad terrorisiert :D

Gibt nen mindestens noch 2-3 andere, die gut und stabil laufen, nur die 
Pins anzupassen. Ich verwende meistens die von "Master Andre" und "ape", 
findest mit google sehr leicht, oder direkt hier im Forum suchen.

Die von Master Andre ist nur fürs nötigste ausgelegt und die von ape ist 
n richtiger Klopper. Finde beide sehr gut.

Autor: Günter Michaeller (gueee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie sitzt ein massiver fehler zwischen den ohren, denn ich habe es 
jetzt auch die libs von master.andre und ape probiert!

Kann es sein, dass der ATm168 mit 20MHz ext. OSC zu schnell ist??

Autor: Günter Michaeller (gueee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo!

..... ich bin jetzt probehalber auf einen ATmega32 umgestiegen.

Mit der lib von Fabian Maximilian Thiele. Der Reset Pin wird in dieser 
Lib nicht angesteuert und plötzlich funktioniert nur die linke hälfte 
des displays????

Ich habe die "nop" schon verdreifacht um überhaupt etwas auf die linke 
hälfte zu zaubern. Doch die rechte hälfte kann ich nicht dazu bewegen 
etwas an zu zeigen.

Fest steht, beide hälften des displays funktionieren!

F_CPU ist auf 1MHz!

kann jemand dem Datenblatt 
http://docs-europe.electrocomponents.com/webdocs/0... 
etwas entnehmen, dass ich evtl. übersehen hätte??

Schön langsam treibt mich das Display in den Wahnsinn, bin für jeden Tip 
dankbar!

P.S. Jtag ist disabled

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.