EPD Inintialisierung -> delayMs()

OP #3511106
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
 }
OP #3511154
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!
Moderator (Firma: Titel) Persönliche Seite #3511159
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?
Moderator (Firma: Titel) Persönliche Seite #3511192
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!
OP #3511217
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 !? ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren