Forum: Mikrocontroller und Digitale Elektronik EPD Inintialisierung -> delayMs()


von List G. (mirza_g)


Lesenswert?

Hallo zusammen,

Das ist mein erstes Projekt, so verstehe wenn euch von mir übel ist :)
ich sollte EPD Display von Electronic Assembly
initialisieren. Das Problem liegt darin, dass ich die Funktion
1
delayMs()
 nicht definieren weiß. Deswegen bitte ich um eure Hilfe. Dazu gibt´s 
Code, die ich implementiert habe. Anbei sende ich euch Datenblatt von 
meinem Controller.

Danke im Voraus!
LG
1
const UINT16 lut_data[] =
2
{  
3
  0x82,0x00,0x00,0x00,0xAA,0x00,0x00,0x00,0xAA,
4
  0xAA,0x00,0x00,0xAA,0xAA,0xAA,0x00,0x55,0xAA,
5
  0xAA,0x00,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,
6
  0xAA,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,
7
  0x15,0x15,0x15,0x15,0x05,0x05,0x05,0x05,0x01,
8
  0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
9
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
10
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
11
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
12
  0x45,0xF1,0xFF,0x5F,0x55,0x01,0x00,0x00,0x00,
13
};
14
15
void spiOut(UINT8 display_data)
16
{
17
  UINT16 count;
18
  UINT16 cs=0;
19
  UINT16 sdin;
20
  UINT16 sclk;
21
  for(count = 0;count<8;count++)  //send bit 7...0
22
         {
23
    if(display_data&0x80) //consider leftmost bit,set line high if bit is 1,low if bit
24
      sdin=1;
25
    else
26
      sdin=0;
27
    sclk=1;
28
    display_data <<= 1;
29
    sclk=0;
30
  }
31
  cs=1;
32
}
33
void writeCmd(char display_data)
34
{
35
  UINT16 dc=0;
36
  spiOut(display_data);
37
}
38
39
void writeData(char display_data)
40
{
41
  UINT16 dc=1;
42
  spiOut(display_data);
43
}
44
45
void init(void)
46
{
47
  UINT16 i;
48
  
49
  UINT16 cs=1;        //perform reset CS idle=1
50
  UINT16 sclk=0;
51
  UINT16 rst=1;
52
  delayMs(1);
53
  rst=0;
54
  delayMs(2);
55
  rst=1;
56
  delayMs(3);
57
  
58
  writeCmd(0x10);    //do not enter deep sleep mode
59
  writeData(0x00);
60
  
61
  writeCmd(0x11);    //data entry mode setting, 0x01, Y decrement, X dincrement
62
  writeData(0x01);
63
  writeCmd(0x44);    //set RAM X-address start-end position
64
  writeData(0x00);  //RAM X-address start at 00H
65
  writeData(0x11);  //RAM X-address end et 11H -> 17D, that is (17+1*4=72) start-end position
66
  
67
  writeData(0xAB);  //RAM Y-address start at ABH -> 171D
68
  writeData(0x00);  //RAM Y-address end at 00H
69
  writeCmd(0x4E);    //set RAM x address count to 0
70
  writeData(0xAB);
71
  
72
  writeCmd(0xF0);  //booster feedback selection, 0x1F -> internal feedback is used
73
  writeData(0x1F);   //0x83
74
  writeCmd(0x21);    //bypass the RAM data into the display,enable pass
75
  writeCmd(0x03);
76
  writeCmd(0x2C);  //write VCOM register
77
  writeData(0xA0);
78
  writeCmd(0x3C);  //board waveform, board voltage
79
  writeData(0x63);
80
  writeCmd(0x22);  //enable sequence, CLK -> CP ->
81
  writeData(0xC4);
82
  
83
  writeCmd(0x32);  //write LUT register
84
  for(i=0;i<90;i++)
85
  writeData(lut_data[i]);
86
}
87
88
void fillDisplay(UINT16 dat)  //0xFF=white, 0x00=black, 0x55=grey 1, 0xAA = gray 2
89
{
90
  UINT16 i;
91
  
92
  writeCmd(0x24);  //data write into RAM after this command
93
  
94
  for(i=0;i<3096;i++)    //3096 = 172x72/8x2, (2-Bit per dot)
95
  {
96
    writeData(dat);
97
  }
98
  writeCmd(0x20);
99
  
100
  //Booster disable
101
  writeCmd(0x22);  //display updata sequence option, in page 33
102
  writeData(0x02);
103
  writeCmd(0x20);
104
}

Ich hab auch diese hier http://www.microchip.com/forums/m523604.aspx 
gefunden aber weiß nicht, wie ich das implementieren kann. 
Warum...verstehe nicht ganz gut wie mein Controller überhaupt 
funktioniert!
1
void DelayMs(unsigned int msec) 
2
 { 
3
     unsigned int tWait, tStart; 
4
          
5
     tWait=(SYS_FREQ/2000)*msec;        //    SYS_FREQ        (80000000) 
6
     tStart=ReadCoreTimer(); 
7
     while((ReadCoreTimer()-tStart)<tWait);        // wait for the time to pass 
8
  
9
 }

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

List G. schrieb:
> tWait=(SYS_FREQ/2000)*msec;        //    SYS_FREQ        (80000000)

Wenn dein Controller tatsächlich mit 80MHz läuft, würde diese Zeile 
schon bei einem Delay von 2ms zu einem Überlauf des 'unsigned int' 
führen. Prüf doch bitte nochmal, ob das nicht etwa 8 MHz sind und ob 
SYS_FREQ überhaupt definiert ist.

: Bearbeitet durch User
von List G. (mirza_g)


Lesenswert?

Matthias Sch. schrieb:
> List G. schrieb:
>> tWait=(SYS_FREQ/2000)*msec;        //    SYS_FREQ        (80000000)
>
> Wenn dein Controller tatsächlich mit 80MHz läuft, würde diese Zeile
> schon bei einem Delay von 2ms zu einem Überlauf des 'unsigned int'
> führen. Prüf doch bitte nochmal, ob das nicht etwa 8 MHz sind und ob
> SYS_FREQ überhaupt definiert ist.

na das ist nur ein Beispiel, das ich im Netz gefunden hab. Wie kann ich 
im Datenblatt auslesen auf welcher Frequenz arbeitet mein Controller ?
danke!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

List G. schrieb:
> Dazu gibt´s Code, die ich implementiert habe.
List G. schrieb:
> na das ist nur ein Beispiel, das ich im Netz gefunden hab.
Wie jetzt nochmal?
Für mich war bisher immmer "implementieren != finden"

> Wie kann ich im Datenblatt auslesen auf welcher Frequenz arbeitet
> mein Controller ?
Im Datenblatt findest du das nicht unittelbar. Welchen streng geheimen 
Controller mit welchen Quarz hast du denn?

: Bearbeitet durch Moderator
von List G. (mirza_g)


Lesenswert?

aha ich hab gefunden..also Min. bei 0.95Mhz und Max bei 1.05Mhz

von List G. (mirza_g)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

List G. schrieb:
> da ist mein Controller
Hach.

WELCHEN Mikrocontroller willst du mit diesem selbst gefundenen 
C-Programm beglücken? Oder umgangssprachlicher: mit WAS steuerst du das 
Display an?

: Bearbeitet durch Moderator
von List G. (mirza_g)


Lesenswert?

also NFC M7894 B13 Chip :)

von List G. (mirza_g)


Lesenswert?

> Oder umgangssprachlicher: mit WAS steuerst du das
> Display an?

Du hast recht heh

von spess53 (Gast)


Lesenswert?

Hi

>da ist mein Controller
>http://www.lcd-module.de/fileadmin/eng/pdf/zubehoe...

Der Controller auf dem das Programm läuft ist gemeint. Das ist der 
Displaycontroller.

MfG Spess

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

List G. schrieb:
> also NFC M7894 B13 Chip :)
Ach, der! Damit ist es ja ganz einfach...

Dann jetzt noch den Schaltplan bitte und dann sind wir auch gleich 
fertig. Hör mal: DU hast ein Problem und suchst Hilfe. Und deshalb 
solltest du freiwillig alles bereitstellen, dass Andere die dir evtl. 
helfen können das auch wollen.

BTW: bitte keine Doppelposts!

von List G. (mirza_g)


Lesenswert?

Lothar Miller schrieb:
> List G. schrieb:
>> also NFC M7894 B13 Chip :)
> Ach, der! Damit ist es ja ganz einfach...
>
> Dann jetzt noch den Schaltplan bitte und dann sind wir auch gleich
> fertig. Hör mal: DU hast ein Problem und suchst Hilfe. Und deshalb
> solltest du freiwillig alles bereitstellen, dass Andere die dir evtl.
> helfen können das auch wollen.
>
> BTW: bitte keine Doppelposts!

ja du hast wirklich recht..wenn ich wusste was ich bereit stellen muss, 
wahrscheinlich brauche deine Hilfe überhaupt nicht !? ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.