mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik S1D13700 Probleme (jaja ich weiß, wie so oft bei lcds)


Autor: morph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider gibts keine Ausgabe.

Anschlussbelegung habe ich schon zig mal überprüft, ich weiß leider 
nicht mehr weiter!

Hat nicht irgendwer ein Code-Sniplet? Im Netz findet sich nichts in C 
für GENAU diesen Controller und ich will endlich die Software 
ausschließen können.

Desweiteren: Ein Display mit interner Spannungserzeugung, fiept das? ich 
schätz die Frequenz auf gute 5-7kHz und variabel vom eingestellten 
Kontrast.

#include "s1d13700.h"


#define S1D13700_DATA_PORT    LATE
#define S1D13700_DATA_PORT_IN  PORTE
#define S1D13700_DATA_DIR    TRISE

#define S1D13700_CONTROL_DIR  TRISH

#define S1D13700_A0        LATHbits.LATH0
#define S1D13700_WR        LATHbits.LATH1
#define S1D13700_RD        LATHbits.LATH2
#define S1D13700_CS        LATHbits.LATH3
#define S1D13700_RES      LATHbits.LATH4

void GLCD_Initialize(void);
void GLCD_WriteCommand(unsigned char);
void GLCD_WriteData(unsigned char);
void GLCD_InitPorts(void);
void GLCD_SetCursorAddress(unsigned int);
void GLCD_SetPixel(unsigned int,unsigned int, int);
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_Initialize(void)
{
  GLCD_InitPorts();
  S1D13700_RES = 0;
  Delay10KTCYx( 500 );
  S1D13700_RES = 1;

  GLCD_WriteCommand(S1D13700_SYSTEM_SET);
  GLCD_WriteData(S1D13700_SYS_P1);
  GLCD_WriteData(S1D13700_SYS_P2);
  GLCD_WriteData(S1D13700_FY);
  GLCD_WriteData(S1D13700_CR);
  GLCD_WriteData(S1D13700_TCR);
  GLCD_WriteData(S1D13700_LF);
  GLCD_WriteData(S1D13700_APL);
  GLCD_WriteData(S1D13700_APH);

  GLCD_WriteCommand(S1D13700_SCROLL);
  GLCD_WriteData(S1D13700_SAD1L);
  GLCD_WriteData(S1D13700_SAD1H);
  GLCD_WriteData(S1D13700_SL1);
  GLCD_WriteData(S1D13700_SAD2L);
  GLCD_WriteData(S1D13700_SAD2H);
  GLCD_WriteData(S1D13700_SL2);
  GLCD_WriteData(S1D13700_SAD3L);
  GLCD_WriteData(S1D13700_SAD3H);
  GLCD_WriteData(S1D13700_SAD4L);
  GLCD_WriteData(S1D13700_SAD4H);

  GLCD_WriteCommand(S1D13700_CSRFORM);
  GLCD_WriteData(S1D13700_CRX);
  GLCD_WriteData(S1D13700_CSRF_P2);

  GLCD_WriteCommand(S1D13700_CGRAM_ADR);
  GLCD_WriteData(S1D13700_SAGL);
  GLCD_WriteData(S1D13700_SAGH);

  GLCD_WriteCommand(S1D13700_CSRDIR_R);

  GLCD_WriteCommand(S1D13700_HDOT_SCR);
  GLCD_WriteData(S1D13700_SCRD);

  GLCD_WriteCommand(S1D13700_OVLAY);
  GLCD_WriteData(S1D13700_OVLAY_P1);

  GLCD_WriteCommand(S1D13700_DISP_ON);
  GLCD_WriteData(S1D13700_FLASH);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_InitPorts(void)
{
  S1D13700_DATA_DIR = 0x00;
  S1D13700_CONTROL_DIR = 0x00;
  S1D13700_RES = 1;
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_WriteData(unsigned char dataToWrite)
{
  // M6800 Family
  S1D13700_CS = 0;

  S1D13700_DATA_PORT = dataToWrite;
  S1D13700_DATA_DIR = 0x00;

  S1D13700_A0 = 0;
  S1D13700_WR = 0;
  S1D13700_RD = 1;

  Delay10TCYx(1);
  S1D13700_A0 = 0;
  S1D13700_WR = 0;
  S1D13700_RD = 0;
  S1D13700_CS = 1;
  Delay10TCYx(1);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_WriteCommand(unsigned char commandToWrite)
{
  S1D13700_CS = 0;
  S1D13700_DATA_PORT = commandToWrite;
  S1D13700_DATA_DIR = 0x00;

  S1D13700_A0 = 1;
  S1D13700_WR = 0;
  S1D13700_RD = 1;

  Delay10TCYx(1);
  S1D13700_A0 = 0;
  S1D13700_WR = 0;
  S1D13700_RD = 0;
  S1D13700_CS = 1;
  Delay10TCYx(1);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
unsigned char GLCD_ReadData(void)
{
  unsigned char tmp;
  S1D13700_CS = 0;
  S1D13700_A0 = 1;
  S1D13700_WR = 1;
  S1D13700_RD = 1;

  NOP();
  S1D13700_DATA_DIR = 0xFF;
  NOP();

  tmp =  S1D13700_DATA_PORT_IN;

  Delay10TCYx(1);
  S1D13700_A0 = 0;
  S1D13700_WR = 0;
  S1D13700_RD = 0;
  S1D13700_CS = 1;
  Delay10TCYx(1);

  return tmp;
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_SetPixel(unsigned int x,unsigned int y, int color)
{
  unsigned char tmp = 0;
  unsigned int address = S1D13700_GRAPHICSTART + (40 * y) + (x/8); 
  GLCD_SetCursorAddress(address);

  GLCD_WriteCommand(S1D13700_MREAD);
  tmp = GLCD_ReadData();

  if(color)
    tmp |= (1 << (S1D13700_FX - (x % 8)));
  else
    tmp &= ~(1 << (S1D13700_FX - (x % 8)));

  GLCD_SetCursorAddress(address);
  GLCD_WriteCommand(S1D13700_MWRITE);

  GLCD_WriteData(tmp);
//  GLCD_WriteData(0xFF);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_SetCursorAddress(unsigned int address)
{
  GLCD_WriteCommand(S1D13700_CSRW);
  GLCD_WriteData((unsigned char)(address & 0xFF));
  GLCD_WriteData((unsigned char)(address >> 8));
}

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
unter folgendem link findest du eine library für den sed1335, welcher 
sw-mäßig kompatibel zum s1d13700 ist.

gruss
gerhard

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

Bewertung
0 lesenswert
nicht lesenswert
morph wrote:
> Desweiteren: Ein Display mit interner Spannungserzeugung, fiept das? ich
> schätz die Frequenz auf gute 5-7kHz und variabel vom eingestellten
> Kontrast.

Normalerweise nicht. Sowas hatte ich bisher nur, wenn der Wandler 
überlastet war.

gerhard wrote:
> unter folgendem link findest du eine library für den sed1335, welcher
> sw-mäßig kompatibel zum s1d13700 ist.

Mal davon abgesehen, dass dein Link fehlt, ist der 13700 nicht 100% 
Software kompatibel. Epson hat da eine gemeine Falle eingebaut:

2. When using a crystal, after writing SYSTEM SET command wait 3ms or 
more to allow the internal clock to become stable before writing the 
remaining eight parameters.

@morph
Bau mal die Pause ein, es kann gut sein, dass es daran liegt.

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier der vergessene link:
http://en.radzio.dxp.pl/sed1335/


gruss
gerhard

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@benedikt:
dein o.a. zitat kann ich im datenblatt des s1d13700 (rev. 4.01) 
nirgendwo finden
was aber in morpph's source code fehlt ist ein delay von mind. 3ms nach 
dem reset und vor dem system set command (das wird aber auch vom sed1335 
gefordert).


gruss
gerhard

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

Bewertung
0 lesenswert
nicht lesenswert
gerhard wrote:
> @benedikt:
> dein o.a. zitat kann ich im datenblatt des s1d13700 (rev. 4.01)
> nirgendwo finden

Stammt aus dem 13700F02 Revision 1.02 Datenblatt von 2007/06/06, Seite 
72.

> was aber in morpph's source code fehlt ist ein delay von mind. 3ms nach
> dem reset und vor dem system set command (das wird aber auch vom sed1335
> gefordert).

Ja, nur beim 13700 ist (zusätzlich) der Delay zwischen dem System Set 
Command und dessen Parametern notwendig. Das ist das gemeine daran.
Erst dann startet nämlich der Quarz und der ist für die Registerzugriffe 
notwendig.
Das stand auch in den älteren Versionen des Datenblatts nicht drein, ich 
bin selbst schon drüber gestolpert und es gibt hier im Forum auch einen 
Thread dazu.

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>gerhard wrote:
>> @benedikt:
>> dein o.a. zitat kann ich im datenblatt des s1d13700 (rev. 4.01)
>> nirgendwo finden

>Stammt aus dem 13700F02 Revision 1.02 Datenblatt von 2007/06/06, Seite
>72.
offensichtlich gibt es 3 varianten des s1d13700:
s1d13700f00
s1d13700f01
s1d13700f02

und nur in der f02 sind die 3ms nach dem system set erwähnt.

gruss
gerhard

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

Bewertung
0 lesenswert
nicht lesenswert
gerhard wrote:

> offensichtlich gibt es 3 varianten des s1d13700:
> s1d13700f00
> s1d13700f01
> s1d13700f02
>
> und nur in der f02 sind die 3ms nach dem system set erwähnt.

Ja, aber alle 3 benötigen die Pause...

Autor: morph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider bin ich mittlerweile etwas schlauer:

Das Ding hängt per FPC 24, 0.5mm pitch an der schaltung, ich kann leider 
nicht alle Signale durchpiepsen, ich denk also es kann zusätzlich noch 
an der Verkabelung liegen!

Ich meld mich wenn ich das ausschließen kann.

btw es fiept nur an einer der Schaltungen (hab 2 aufgebaut, sollten 
identisch sein) an der anderen ist das Geräusch zwar da, aber wohl 
unhörbar und stört höchstens katzen und hunde =)

Falls es dann immernoch nicht geht, werd ich wohl mal den Schaltpla 
posten!

Herzlichen Dank vorerst :)

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leider (oder zum glück) kann ich die verkabelung ausschließen!

hier mal der aktuelle code, das display ist serienmäßig als M6800 
verkabelt, man kann es aber mit etwas zinn umjumpern :)

wäre generic besser?

nochmals vielen dank für alles :)
#include "s1d13700.h"


#define S1D13700_DATA_PORT    LATE
#define S1D13700_DATA_PORT_IN  PORTE
#define S1D13700_DATA_DIR    TRISE

#define S1D13700_CONTROL_DIR  TRISH

#define S1D13700_A0        LATHbits.LATH0
#define S1D13700_WR        LATHbits.LATH1
#define S1D13700_RD        LATHbits.LATH2
#define S1D13700_CS        LATHbits.LATH3
#define S1D13700_RES      LATHbits.LATH4

void GLCD_Initialize(void);
void GLCD_WriteCommand(unsigned char);
void GLCD_WriteData(unsigned char);
void GLCD_InitPorts(void);
void GLCD_SetCursorAddress(unsigned int);
void GLCD_SetPixel(unsigned int,unsigned int, int);
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_Initialize(void)
{
  GLCD_InitPorts();
  S1D13700_RES = 0;
  Delay10KTCYx( 500 );
  S1D13700_RES = 1;
  Delay10KTCYx( 500 );

  GLCD_WriteCommand(S1D13700_SYSTEM_SET);
  GLCD_WriteData(S1D13700_SYS_P1);
  GLCD_WriteData(S1D13700_SYS_P2);
  GLCD_WriteData(S1D13700_FY);
  GLCD_WriteData(S1D13700_CR);
  GLCD_WriteData(S1D13700_TCR);
  GLCD_WriteData(S1D13700_LF);
  GLCD_WriteData(S1D13700_APL);
  GLCD_WriteData(S1D13700_APH);

  GLCD_WriteCommand(S1D13700_SCROLL);
  GLCD_WriteData(S1D13700_SAD1L);
  GLCD_WriteData(S1D13700_SAD1H);
  GLCD_WriteData(S1D13700_SL1);
  GLCD_WriteData(S1D13700_SAD2L);
  GLCD_WriteData(S1D13700_SAD2H);
  GLCD_WriteData(S1D13700_SL2);
  GLCD_WriteData(S1D13700_SAD3L);
  GLCD_WriteData(S1D13700_SAD3H);
  GLCD_WriteData(S1D13700_SAD4L);
  GLCD_WriteData(S1D13700_SAD4H);

  GLCD_WriteCommand(S1D13700_CSRFORM);
  GLCD_WriteData(S1D13700_CRX);
  GLCD_WriteData(S1D13700_CSRF_P2);

  GLCD_WriteCommand(S1D13700_CGRAM_ADR);
  GLCD_WriteData(S1D13700_SAGL);
  GLCD_WriteData(S1D13700_SAGH);

  GLCD_WriteCommand(S1D13700_CSRDIR_R);

  GLCD_WriteCommand(S1D13700_HDOT_SCR);
  GLCD_WriteData(S1D13700_SCRD);

  GLCD_WriteCommand(S1D13700_OVLAY);
  GLCD_WriteData(S1D13700_OVLAY_P1);

  GLCD_WriteCommand(S1D13700_DISP_ON);
  GLCD_WriteData(S1D13700_FLASH);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_InitPorts(void)
{
  S1D13700_DATA_DIR = 0x00;
  S1D13700_CONTROL_DIR = 0x00;
  S1D13700_RES = 1;
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_WriteData(unsigned char dataToWrite)
{
  // M6800 Family
  S1D13700_CS = 0;

  S1D13700_DATA_PORT = dataToWrite;
  S1D13700_DATA_DIR = 0x00;

  S1D13700_A0 = 0;
  S1D13700_WR = 0;
  S1D13700_RD = 1;

  NOP();
  S1D13700_A0 = 0;
  S1D13700_WR = 0;
  S1D13700_RD = 0;
  S1D13700_CS = 1;
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_WriteCommand(unsigned char commandToWrite)
{
  S1D13700_CS = 0;
  S1D13700_DATA_PORT = commandToWrite;
  S1D13700_DATA_DIR = 0x00;

  S1D13700_A0 = 1;
  S1D13700_WR = 0;
  S1D13700_RD = 1;

  NOP();
  S1D13700_A0 = 0;
  S1D13700_WR = 0;
  S1D13700_RD = 0;
  S1D13700_CS = 1;
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
unsigned char GLCD_ReadData(void)
{
  unsigned char tmp;
  S1D13700_CS = 0;
  S1D13700_A0 = 1;
  S1D13700_WR = 1;
  S1D13700_RD = 1;

  NOP();
  S1D13700_DATA_DIR = 0xFF;
  NOP();

  tmp =  S1D13700_DATA_PORT_IN;

  NOP();
  S1D13700_A0 = 0;
  S1D13700_WR = 0;
  S1D13700_RD = 0;
  S1D13700_CS = 1;

  return tmp;
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_SetPixel(unsigned int x,unsigned int y, int color)
{
  unsigned char tmp = 0;
  unsigned int address = S1D13700_GRAPHICSTART + (40 * y) + (x/8); 
  GLCD_SetCursorAddress(address);

  GLCD_WriteCommand(S1D13700_MREAD);
  tmp = GLCD_ReadData();

  if(color)
    tmp |= (1 << (S1D13700_FX - (x % 8)));
  else
    tmp &= ~(1 << (S1D13700_FX - (x % 8)));

  GLCD_SetCursorAddress(address);
  GLCD_WriteCommand(S1D13700_MWRITE);

  GLCD_WriteData(tmp);
//  GLCD_WriteData(0xFF);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_SetCursorAddress(unsigned int address)
{
  GLCD_WriteCommand(S1D13700_CSRW);
  GLCD_WriteData((unsigned char)(address & 0xFF));
  GLCD_WriteData((unsigned char)(address >> 8));
}

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo michael,
hast du benedikts und mein posting gelesen?

benedikt hat auf ein delay nach dem command system set hingewiesen.

und meine wenigkeit würde ein delay von mind. 3ms nach dem reset 
einfügen.

danach würde ich mal die steuerleitungen (cs, a0, rd, wr) messen ob die 
tatsächlich auch angesteuert werden und wie lange.

p.s. doppeltes posten des gleichen codes bringt auch nicht viel.

gruss
gerhard

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  GLCD_InitPorts();
  S1D13700_RES = 0;
  Delay10KTCYx( 500 );
  S1D13700_RES = 1;
  Delay10KTCYx( 500 );

das delay is ja nun eingebaut ;)

aber die idee mit den steuerleitungen is gut, wofür hat man denn ein 
oszi :)

leider verwundert mich noch was anderes, sollte das display nicht 
zumindest irgendwas anzeigen wenn ich den konstrast voll aufdrehe?

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

Bewertung
0 lesenswert
nicht lesenswert
Michael H. wrote:

> leider verwundert mich noch was anderes, sollte das display nicht
> zumindest irgendwas anzeigen wenn ich den konstrast voll aufdrehe?

Wenn es nicht initialisiert ist nicht, denn erst mit dem System Set 
Command wird der Quarzoszillator gestartet und somit das LCD 
angesteuert.

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, bins nur von den kleinen 128x64 gewohnt das sie komplett zumachen 
und man den raster sieht :)

also signale sind alle da, ob deren polarität nun passt oder nicht, das 
sei dahingestellt ;)

kann auch nur immer 2 gleichzeitig anzeigen, hab nur ein HM1005 :/

Autor: Peter Birkenstock (atmelfriend)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier ist eine Initialisierungssequenz fuer Generic Mode, vielleicht 
hilft dirs.


    //Generic bus direct
    //Reset the chip
    S1d13700_Res_act;
    delay_ms(2);
    S1d13700_Res_inact;
    delay_ms(5);

    //Exit sleep mode after reset
    S1d13700_Command;       //Set virtual a15 to 1
    S1_PSMR = 0x00;         //8008
    delay_us(100);
    S1_MCR = 0x30;          //Dummy write, see manual 8000
    delay_us(100);

    S1_MCR = 0x30;          //Single panel 8000
    S1_HCSR = 87;           //FX 8001
    S1_VCSR = 10;           //FY 8002
    S1_CBPRR = 39;          //Bytes per line (320 / 8) - 1 8003
    S1_TCBPRR = 70;         //25 MHz
    S1_FHR = 239;           //240 lines 8005
    S1_HARR0 = 40;          //8006
    S1_HARR1 = 0;           //8007

    //First screen block starts at 0
    S1_SB1AR0 = 0x00;       //800b
    S1_SB1AR1 = 0x00;       //800c
    S1_SB1SR = 239;         //800d
    //Second screen block starts at 2580h = 320/8 * 240
    S1_SB2AR0 = 0x80;
    S1_SB2AR1 = 0x25;
    S1_SB2SR = 239;
    //Third screen block
    S1_SB3AR0 = 0x00;       //8011
    S1_SB3AR1 = 0x4b;       //8012
    //Forth screen block
    S1_SB4AR0 = 0x00;       //8013
    S1_SB4AR1 = 0x00;       //8014

    //Cursor, anyway not needed
    S1_CWR = 0x04;          //8015
    S1_CHR = 0x86;          //8016

    //Horizontal pixel scroll
    S1_HPSR = 0x00;         //801b

    //Overlay control
    S1_OR = 0x00;           //3 grafic layers, OR mode 8018
    S1_DAR = 0b11010100;    //Cursor attributes + display screen blocks 
on 800a

    //Erase the complete chip memory
    S1d13700_Data;                                      //Set the 
virtual A15 to Low
    memset((unsigned char*)S1d13700_MEMSTART_LAY1, 0x00, 
S1d13700_MEMSIZE);
    memset((unsigned char*)S1d13700_MEMSTART_LAY1, 0x20, 9600);

    #ifdef DEBUG_GEN
      printf("S1D13700 Text: ");
    #endif
    S1d13700_Command;       //Set virtual a15 to 1
    if(S1_MCR != 0x30)
    {
        S1_DER = 0x00;          //Display off to avoid demages
        global_err = GLB_ERR_S1;
        #ifdef DEBUG_GEN
          printf("FAILURE!\r\n");
        #endif
    }
    else
    {
        S1_DER = 0x01;          //Display enable 8009
        #ifdef DEBUG_GEN
          printf("OK\r\n");
        #endif
    }

    S1d13700_Data;                                      //Set the 
virtual A15 to Low
    S1d13700_txt_ptr = (unsigned char*)S1d13700_MEMSTART_LAY1;

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@michael:
es fehlt nach wie vor ein delay zwischen dem command system set und dem 
1.parameter:
GLCD_WriteCommand(S1D13700_SYSTEM_SET);
Delay10KTCYx( 300 );
GLCD_WriteData(S1D13700_SYS_P1);

gruss
gerhard

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke euch beiden :) werde mich heute nachmittag wieder dransetzen!

wenn ichs schaffe häng ich den quelltext klarerweise hier ins forum :)


aber nochmal zum konstrast:

egal wohin ich das poti drehe, es gibt weder beim reset noch sonstwann 
linien, oder eben ein komplett ausgefülltest display wie ichs von meinen 
kleinen mit dem ks108 kenne!

ist dieses verhalten normal oder haperts schon beim konstrast?

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@michael,
was steht den im datenblatt des lcd's zum thema kontrast-spannung?
normalerweise sind dort typ. werte für bestimmte temperaturen angegeben. 
den würde ich mal einstellen.

gruss
gerhard

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
datenblatt meint 26-30V, das display gibt 28V her

leider wars nicht das delay und es zeigt wirklich NICHTS an, in keinem 
zustand

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

Bewertung
0 lesenswert
nicht lesenswert
Mess mal am Quarz. Wenn der nicht schwingt ist der 13700 noch im Power 
Down Mode. Der Fehler liegt dann also irgendwo ganz am Anfang von der 
Initialisierung.

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, quarz schwingt nicht

werd dem mal nachgehn :)

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, habs auf generic umgelötet, leider bringt mich das nicht weiter :/

weder zeigt das display irgendwas an, noch schwingt der quarz :| 
leitungen passen, bin mit meinem latein am ende :/

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so das display zeigt nun endlich was an!!

das summen/fiepen allerdings krieg ich nicht weg und was er anzeigt is 
auch grauslich :|

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@michael:
>so das display zeigt nun endlich was an!!
wie kam es dazu?

kann es sein dass du auf den falschen layer schreibst?
wie sieht deine layeraufteilung aus?

gruss
gerhard

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es war scheinbar ein problem beim timing, die art wie ich auf die ports 
zugegriffen hab war wohl nicht ausreichend schnell/gleichzeitig.

hab mich dann etwas genauer an deinen link gehalten, nur gehts so 
halbwegs.

ich kann löschen, einzelne punkte (an falsche positionen) setzen und 
verworrene texte ausgeben.

außerdem flimmert die darstellung stark.

ich hoffe ich krieg das noch irgendwie in den griff, aber es ist eine 
erleichterung das es zumindest mal ein lebenszeichen von sich gegeben 
hat!

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo :)

Also ich kann nun den Textmodus uneingeschränkt nutzen.

Leider ist das beim Grafikmodus nicht so ganz der Fall.

Schon das löschen des Bildspeichers klappt nicht, nur ein kleiner Teil, 
die oberen 5-8 Zeilen werden gelöscht.

Ich komm nicht dahinter woran es nun liegt :|

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

Bewertung
0 lesenswert
nicht lesenswert
Könnte es sein, dass du nur auf 256Bytes Zugriff hast?
Bei 40Byte pro Zeile wären 256Bytes etwa 6,4 Zeilen.

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void GLCD_SetCursorAddress(unsigned int address)
{
  GLCD_WriteCommand(S1D13700_CSRW);
  GLCD_WriteData((unsigned char)(address & 0xFF));
  GLCD_WriteData((unsigned char)(address >> 8));
}

das sieht für mich recht brauchbar aus, es wird auch für den textmodus 
verwendet und 40*30 = 1200, da funzt es auch

sollte also kein fehler hierbei sein.

mir kommt eher vor als würde er den zeilenumbruch nicht richtig machen, 
also rechts über den rand schreiben.

soweit ichs verstanden habe hängt das aber von CR ab und das gilt sowohl 
für text als auch grafik.

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
korrektur, es sind eher 128byte

etwas mehr als 3 zeilen werden gelöscht :| das display macht mich 
langsam irre.

Autor: Ting yu Leung (lgeorge123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi morph (Gast), can you post the code of s1d13700.h as I need it on 
pic18f452 , thanks !!

Autor: morph1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
the code here isnt working, use the page search, i posted the current 
state somewhere else

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.