Communication SPI avec un écran LCD - eDIPTFT43
Bonjour à tous,
voilà, je suis étudiant en électronique et je dois réaliser une communication en SPI avec un écran LCD tactile : eDIPTFT43 (Datasheet).
J'ai actuellement essayé d'envoyé une ligne de code simple en c grâce à mon microcontroleur C8051F320. les configuration d'initialisation du SPI :
- mode maître
- clock = 100 KHz
- clock au repos à '0' et actif sur le flanc montant
- mode 4 fils en maître unique
- état de départ du NSS : '1'
J'ai donc branché l'écran en tant que tel :
pin 6-9 à mon micro (miso, mosi, clk, ss)
pin 5 : reset au +5
pin 10 : à la masse, MSB first
pin 11 : à la masse, SPI mode
pin 14 : à la masse, clk au repos à 0
pin 15 : à la masse, actif sur le flanc montant
le reste n'as pas besoin d'être connecté pour mon utilisation.
voici le code que j'utilise pour écrire et recevoir :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| void Write_LCD (unsigned char *donnee, unsigned char longueur)
{
unsigned char bcc, i;
NSSMD0 = 0; // NSS utilisé comme commande du CS
// WRITE _____________________________________________________
while (!TXBMT); // attente buffer vide
SPI0DAT = DC1; // envoi DC1 (buffer d'envoie)
while (!SPIF); // attente de la fin de l'envoi
SPIF = 0; // reset flag
bcc = DC1;
while (!TXBMT); // attente buffer vide
SPI0DAT = longueur; // envoi la longueur des data
while (!SPIF); // attente de la fin de l'envoi
SPIF = 0; // reset flag
bcc = bcc + longueur;
for (i=0; i < longueur; i++)
{
while (!TXBMT); // attente buffer vide
SPI0DAT = donnee[i]; // envoi des donnée
while (!SPIF); // attente de la fin de l'envoi
SPIF = 0; // reset flag
bcc = bcc+donnee[i];
}
while (!TXBMT); // attente buffer vide
SPI0DAT = bcc; // envoi du BCC
while (!SPIF); // attente de la fin de l'envoi
SPIF = 0; // reset flag
while (!TXBMT); // attente buffer vide
SPI0DAT = 0x00; // envoi rien, juste pour la lecture
while (!SPIF); // attente de la fin de l'envoi
SPIF = 0; // reset flag
NSSMD0 = 1; // NSS utilisé comme commande du CS |
la transmission se fait très bien, j'arrive à lire ma commande grâce à l'oscilloscope, MAIS je ne recois jamais de bonne réponse de la port de mon slave.
Oscillograme :
http://www.hostingpics.net/viewer.ph...377scope10.png
sd : donnée série qui sont lue, ma trame de commande
d0 : CLK
d1 : MOSI
d2 : MISO
3 : SS
Le miso devrait me renvoyé le caractère x06 à la fin de la trame(ACK), mais il envoit des chose aléatoire tous le temps...
je sais plus trop quoi faire, j'ai peut-être loopé quelque chose, merci si vous arrivez à m'aider, cela ne doit pas être évident ^^. Bonne journée.