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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager