Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Ecran TFT 1.8" en SPI avec driver ST7735
- sylvain54
Amateur- Messages : 194
- Âge : 52
- Enregistré en : août 2015
- Localisation : Dans l'est de la France
Bonjour à tous,
Je vous propose un petit post concernant l'utilisation d'un écran TFT de 1.8 pouces sous MikroC. C'est un écran que vous pouvez trouver sur Ebay ici par exemple : Ecran TFT 1.8 SPI pour un peu plus de 3 €.
Vous trouverez son datasheet ici : Datasheet
Pour le faire fonctionner, je suis parti d'une librairie existante pour les PIC24 qui utilise le mode software (bit banging pour les intimes ) que l'on peut trouver sur libstock. Je l'ai portée (et j'ai corrigé quelques bugs) pour les PIC18 en mode SPI Hardware.
Pour vous en montrer l'utilisation, nous allons réaliser un thermomètre graphique. Il vous faudra comme matériels : une sonde DS18B20 de Maxim Dallas Datasheet sonde DS18B20, 1 résistance de 47 R, quelques fils, une alimentation en 5 V pour le Vcc et le BL du TFT (penser à mettre les masses en commun) ou un level converter. Pour terminer, de mon coté comme platine de test et programmateur, j'ai pris ma carte Easypic v7. Concernant le PIC, j'ai pris un 18F4620, pour le datasheet, c'est ici : http://ww1.microchip.com/downloads/en/DeviceDoc/39626e.pdf . Je lui ai accouplé un quartz à 20 Mhz.
Passons aux connexions, rien de compliqué :
Comme vous le voyez, avec ce pic en 40 broches, pas mal de broches sont encore libres. Pour les possesseurs de l'Easypic, il faut penser à mettre le jumper de la sonde DS18B20 sur la bonne broche, dans mon cas, j'ai choisi RE2.
En cas de changement du PIC, il faudra penser à connecter les bonnes broches SPI sur l'écran TFT. Ce sont les broches DIN et CLK de l'écran. Sur le datasheet du 18F4620 cela donne ça :
Cela donne coté TFT, la broche CLK relié à RC3 et DIN à RC5 (SPI Data Out du Pic)
Passons maintenant au code source.
Le code source du projet est zippé en pièce jointe à ce post :
Il est composé d'un fichier SPI_TFT.h. Dans ce fichier, vous trouverez les fonctions de bases pour faire fonctionner notre écran TFT. C'est également dans ce fichier que vous pouvez changer les connexions du TFT en ce qui concerne CS, RST, D/C.
Les connexions que j'ai choisies sont pour le Pic 18F4620, vous pouvez les adapter selon vos besoins et votre Pic:
Dans ce fichier se trouve aussi la police de texte utilisée dans notre exemple.
Un fichier nommé Fonc_Graph.c. Ce fichier reprend les fonctions utilisées par la librairie. Vous y trouverez aussi les paramètres attendus par la fonction
Un fichier Thermometre_TFT.h qui est le corps du programme
Je vous ai remis les connections en entête pour mémoire :
5 fonctions son créées :
- Une pour formater la température de notre DS18B20 pour notre écran TFT : Display_Temperature()
- Une pour récupérer la température de la sonde : Dallas_Read()
- Une pour créer le squelette de notre thermomètre : Draw_Thermo()
- Une pour mettre à jour le segment qui représente la température pour notre thermomètre : Thermo_Graph()
- La dernière est notre fonction main()
Dans Dallas_Read(), rien d'extraordinaire, je passe donc
Dans Display_Temperature(), nous allons nous attarder un peu sur la fin :
Dans cette partie, j'affecte une résolution à 0.5°C près, la variable char DS18B20_Thermo contiendra pour 20.5°C la valeur 205.
Valeur que je divise par 5 et convertie en int avec atoi. Cette nouvelle valeur est stockée dans New_Graph_Value pour notre thermomètre graphique.
La fonction Draw_Thermo() construit le squelette de notre thermomètre. J'ai placé ici tous les éléments graphiques qui ne changent pas.
La fonction Thermo_Graph() met à jour notre thermomètre. 1 barre de 1 pixel de haut est égale à 0.5°C.
Dans cette fonction, on analyse si l'ancienne valeur est supérieure ou inférieure à l'ancienne.
Après c'est une histoire de pixels, le pixel 0 est en haut à droite, tout en découle :
Nous arrivons à la fonction main :
- Configuration des ports du PIC
- Init du SPI et du TFT
- La fonction Draw_Thermo() est volontairement mise ici puisque le squelette du thermomètre n'est jamais mis à jour.
- La boucle while, qui ne contient que le strict minimum :
Je ne sais pas si vous avez remarqué, la première ligne de la boucle while permet d'effacer l'ancienne valeur en l'écrivant de nouveau mais cette fois çi en noir.
Précisions :
Le thermomètre ne prend pas en compte les valeurs négatives (sauf l'affichage de la température brute) et ne supporte pas les températures supérieures à 50. Si vous souhaitez utiliser ce code pour un thermomètre intérieur, il faut rajouter une condition if dans Thermo_Graph() pour ne mettre à jour que si New_Graph_Value est compris entre 0 et 50.
On peut augmenter l'amplitude en diminuant la résolution.
Le TFT doit être alimenté en 5V (Vcc et BL) mais la logique doit être en 3.3V. Il faut donc programmer son pic en 5V et le passer ensuite en 3.3V. Vous pouvez également intercaler un level converter entre votre PIC et votre TFT.
Les librairies MikroC à inclure dans votre projet sont : Conversions, C-Stdib, C_String, C_Type, One_Wire, SPI.
Si vous souhaitez utiliser cet écran TFT dans un autre projet, il faut enregistrer dans le dossier de votre projet SPI_TFT.h et le fichier Fonc_Graph.c.
Il faut ensuite ajouter ces deux fichiers à votre projet. Pour se faire, allez dans la fenêtre "Project Manager" puis pour ajouter Fonc_Graph.c, clic droit sur sources et choisissez "add Existing file"
Chercher votre fichier et valider par enregistrer.
Pour le fichier SPI_TFT.h, clic droit sur Header files et et choisissez "add Existing file", chercher votre fichier et valider par enregistrer.
Vous devriez obtenir cette arborescence :
Pour les fusibles, pensez à valider l'utilisation d'un quartz externe :
Conclusion :
Ceci est une manière de faire, je pense qu'il y en a d'autres et peut être mieux codées. De la clémence, je suis autoditacte
Voilà un écran pas cher qui permet pas mal de chose (enfin je trouve )
On peut facilement se créer des boutons supplémentaires (du style check button, radio button, etc..)
On a plus de place que sur un écran de 4*20 lignes
On a de la couleur
En espérant que j'aurai été clair, si besoin de précisions, je suis à votre disposition.
Résultat en vidéo :
https://youtu.be/fT2Ri6A5bWk
A ++ Sylvain
Je vous propose un petit post concernant l'utilisation d'un écran TFT de 1.8 pouces sous MikroC. C'est un écran que vous pouvez trouver sur Ebay ici par exemple : Ecran TFT 1.8 SPI pour un peu plus de 3 €.
Vous trouverez son datasheet ici : Datasheet
Pour le faire fonctionner, je suis parti d'une librairie existante pour les PIC24 qui utilise le mode software (bit banging pour les intimes ) que l'on peut trouver sur libstock. Je l'ai portée (et j'ai corrigé quelques bugs) pour les PIC18 en mode SPI Hardware.
Pour vous en montrer l'utilisation, nous allons réaliser un thermomètre graphique. Il vous faudra comme matériels : une sonde DS18B20 de Maxim Dallas Datasheet sonde DS18B20, 1 résistance de 47 R, quelques fils, une alimentation en 5 V pour le Vcc et le BL du TFT (penser à mettre les masses en commun) ou un level converter. Pour terminer, de mon coté comme platine de test et programmateur, j'ai pris ma carte Easypic v7. Concernant le PIC, j'ai pris un 18F4620, pour le datasheet, c'est ici : http://ww1.microchip.com/downloads/en/DeviceDoc/39626e.pdf . Je lui ai accouplé un quartz à 20 Mhz.
Passons aux connexions, rien de compliqué :
Comme vous le voyez, avec ce pic en 40 broches, pas mal de broches sont encore libres. Pour les possesseurs de l'Easypic, il faut penser à mettre le jumper de la sonde DS18B20 sur la bonne broche, dans mon cas, j'ai choisi RE2.
En cas de changement du PIC, il faudra penser à connecter les bonnes broches SPI sur l'écran TFT. Ce sont les broches DIN et CLK de l'écran. Sur le datasheet du 18F4620 cela donne ça :
Cela donne coté TFT, la broche CLK relié à RC3 et DIN à RC5 (SPI Data Out du Pic)
Passons maintenant au code source.
Le code source du projet est zippé en pièce jointe à ce post :
Il est composé d'un fichier SPI_TFT.h. Dans ce fichier, vous trouverez les fonctions de bases pour faire fonctionner notre écran TFT. C'est également dans ce fichier que vous pouvez changer les connexions du TFT en ce qui concerne CS, RST, D/C.
Les connexions que j'ai choisies sont pour le Pic 18F4620, vous pouvez les adapter selon vos besoins et votre Pic:
Code : Tout sélectionner
// TFT module connections
sbit TFT_CS at LATC1_bit; //CS => PORTC RC1
sbit TFT_CS_Direction at TRISC1_bit;
sbit TFT_RST at LATC2_bit; //RST => PORTC RC2
sbit TFT_RST_Direction at TRISC2_bit;
sbit TFT_RS at LATC6_bit; //D/C => PORTC6
sbit TFT_RS_Direction at TRISC6_bit;
// End of TFT module connections
Dans ce fichier se trouve aussi la police de texte utilisée dans notre exemple.
Un fichier nommé Fonc_Graph.c. Ce fichier reprend les fonctions utilisées par la librairie. Vous y trouverez aussi les paramètres attendus par la fonction
Un fichier Thermometre_TFT.h qui est le corps du programme
Je vous ai remis les connections en entête pour mémoire :
Code : Tout sélectionner
/* TFT Connections
CLK => PORTC RC3 logique en 3.3 v
DIN => PORTC RC5 logique en 3.3 v
BL => + 5v avec Résistance de 47R
CS => PORTC RC1 logique en 3.3 v
RST => PORTC RC2 logique en 3.3 v
D/C => PORTC6 logique en 3.3 v
GND => GND
VCC => 5V
*/
5 fonctions son créées :
- Une pour formater la température de notre DS18B20 pour notre écran TFT : Display_Temperature()
- Une pour récupérer la température de la sonde : Dallas_Read()
- Une pour créer le squelette de notre thermomètre : Draw_Thermo()
- Une pour mettre à jour le segment qui représente la température pour notre thermomètre : Thermo_Graph()
- La dernière est notre fonction main()
Dans Dallas_Read(), rien d'extraordinaire, je passe donc
Dans Display_Temperature(), nous allons nous attarder un peu sur la fin :
Code : Tout sélectionner
// Convert temp_fraction to characters
DS18B20_Temp[4] = temp_fraction/1000 + 48; // Extract thousands digit
// on applique une résolution à 0.5 près
if (temp_fraction/1000 <5) {
DS18B20_Thermo[2] = 0 +48;
}
else {
DS18B20_Thermo[2] = 5 + 48;
}
Thermo_Temp = atoi(DS18B20_Thermo); //Conversion d'un Char en Int
New_Graph_Value = Thermo_Temp/5;
Display_ASCII8X16(70,70,DS18B20_Temp, WHITE);
}
Dans cette partie, j'affecte une résolution à 0.5°C près, la variable char DS18B20_Thermo contiendra pour 20.5°C la valeur 205.
Valeur que je divise par 5 et convertie en int avec atoi. Cette nouvelle valeur est stockée dans New_Graph_Value pour notre thermomètre graphique.
Code : Tout sélectionner
Thermo_Temp = atoi(DS18B20_Thermo); //Conversion d'un Char en Int
New_Graph_Value = Thermo_Temp/5;
La fonction Draw_Thermo() construit le squelette de notre thermomètre. J'ai placé ici tous les éléments graphiques qui ne changent pas.
La fonction Thermo_Graph() met à jour notre thermomètre. 1 barre de 1 pixel de haut est égale à 0.5°C.
Dans cette fonction, on analyse si l'ancienne valeur est supérieure ou inférieure à l'ancienne.
Après c'est une histoire de pixels, le pixel 0 est en haut à droite, tout en découle :
Code : Tout sélectionner
void Thermo_Graph() {
if (New_Graph_Value > Old_Graph_Value) {
int i;
for (i = (125 - Old_Graph_Value) ; i > (125 - New_Graph_Value); i--) {
fillRect(23, i , 4, 1, RED); //je rajoute un segment rouge
}
Old_Graph_Value = New_Graph_Value; //Mise à jour de Old_Graph_Value lorsque l'on sort de la boucle for
}
if (New_Graph_Value < Old_Graph_Value) {
int i;
for (i = (125 - Old_Graph_Value) ; i < (125 - New_Graph_Value); i++) {
fillRect(23, i , 4, 1, BLACK); //je rajoute un segment noir pour masquer le rouge
}
Old_Graph_Value = New_Graph_Value; //Mise à jour de Old_Graph_Value lorsque l'on sort de la boucle for
}
}
Nous arrivons à la fonction main :
- Configuration des ports du PIC
- Init du SPI et du TFT
- La fonction Draw_Thermo() est volontairement mise ici puisque le squelette du thermomètre n'est jamais mis à jour.
- La boucle while, qui ne contient que le strict minimum :
Code : Tout sélectionner
while(1) {
Display_ASCII8X16(70,70,DS18B20_Temp, BLACK);
Dallas_Read();
Thermo_Graph();
delay_ms(1000);
}
}
Je ne sais pas si vous avez remarqué, la première ligne de la boucle while permet d'effacer l'ancienne valeur en l'écrivant de nouveau mais cette fois çi en noir.
Précisions :
Le thermomètre ne prend pas en compte les valeurs négatives (sauf l'affichage de la température brute) et ne supporte pas les températures supérieures à 50. Si vous souhaitez utiliser ce code pour un thermomètre intérieur, il faut rajouter une condition if dans Thermo_Graph() pour ne mettre à jour que si New_Graph_Value est compris entre 0 et 50.
On peut augmenter l'amplitude en diminuant la résolution.
Le TFT doit être alimenté en 5V (Vcc et BL) mais la logique doit être en 3.3V. Il faut donc programmer son pic en 5V et le passer ensuite en 3.3V. Vous pouvez également intercaler un level converter entre votre PIC et votre TFT.
Les librairies MikroC à inclure dans votre projet sont : Conversions, C-Stdib, C_String, C_Type, One_Wire, SPI.
Si vous souhaitez utiliser cet écran TFT dans un autre projet, il faut enregistrer dans le dossier de votre projet SPI_TFT.h et le fichier Fonc_Graph.c.
Il faut ensuite ajouter ces deux fichiers à votre projet. Pour se faire, allez dans la fenêtre "Project Manager" puis pour ajouter Fonc_Graph.c, clic droit sur sources et choisissez "add Existing file"
Chercher votre fichier et valider par enregistrer.
Pour le fichier SPI_TFT.h, clic droit sur Header files et et choisissez "add Existing file", chercher votre fichier et valider par enregistrer.
Vous devriez obtenir cette arborescence :
Pour les fusibles, pensez à valider l'utilisation d'un quartz externe :
Conclusion :
Ceci est une manière de faire, je pense qu'il y en a d'autres et peut être mieux codées. De la clémence, je suis autoditacte
Voilà un écran pas cher qui permet pas mal de chose (enfin je trouve )
On peut facilement se créer des boutons supplémentaires (du style check button, radio button, etc..)
On a plus de place que sur un écran de 4*20 lignes
On a de la couleur
En espérant que j'aurai été clair, si besoin de précisions, je suis à votre disposition.
Résultat en vidéo :
https://youtu.be/fT2Ri6A5bWk
A ++ Sylvain
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par sylvain54 le mar. 1 mars 2016 08:39, modifié 2 fois.
Ecran TFT 1.8" en SPI avec driver ST7735
-
passionneElectr
Débutant- Messages : 61
- Enregistré en : février 2016
Ecran TFT 1.8" en SPI avec driver ST7735
Ecran TFT 1.8" en SPI avec driver ST7735
- sylvain54
Amateur- Messages : 194
- Âge : 52
- Enregistré en : août 2015
- Localisation : Dans l'est de la France
Merci pour les encouragements
Non, je n'ai pas d'autre doc que celle du driver.
Pour le lecteur de carte, on y accède aussi via SPI. Il y a deux connecteurs sur cet écran. 1 juste pour utiliser l'écran et 1 second pour utiliser l'écran et le lecteur SD
Je t'ai fait une petite photo :
Par contre, je n'ai pas encore essayé de rentrer en contact avec lui
Est-ce que tu as un document concernant le schema du module Afficheur et support carte SD ?
Non, je n'ai pas d'autre doc que celle du driver.
Pour le lecteur de carte, on y accède aussi via SPI. Il y a deux connecteurs sur cet écran. 1 juste pour utiliser l'écran et 1 second pour utiliser l'écran et le lecteur SD
Je t'ai fait une petite photo :
Par contre, je n'ai pas encore essayé de rentrer en contact avec lui
Ecran TFT 1.8" en SPI avec driver ST7735
- sylvain54
Amateur- Messages : 194
- Âge : 52
- Enregistré en : août 2015
- Localisation : Dans l'est de la France
passionneElectr a écrit :salut,
joli application. dans ta vidéo on ne voit que l’écran mais pas la platine (avec pic) ni la sonde....
A+
J'avais essayé de filmer avec ma Gopro mais on ne voyait pas bien le résultat sur l'écran. J'ai donc pris ma petite caméra microscope et pas de plan large possible avec elle.
Désolé.
++ Sylvain
Ecran TFT 1.8" en SPI avec driver ST7735
-
Jérémy
Administrateur du site- Messages : 2738
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir,
Très joli tuto sur l'utilisation de cet écran !! . mais aussi sur le sonde de température .
Je tiens à te remercier de ta participation, c'est exactement l'esprit et l'élan que je souhaite pour ce forum. Alors vraiment MERCI !!.
J'ai scruté un peu le code .
Pourquoi dessiner des rectangles au lieu de ligne ?
Je n'ai pas compris l'utilité de cette fonction de delay ? c'est toi qui la faite ? ( ligne 405 du fichier SPI_TFT.h)
C'est vrai que la vidéo manque un chouille de pep's, mais c'est pas forcement évident ! . un briquet et un glaçon sur la sonde aurait été plus dynamique pour les yeux
Encore Merci au nom du forum FantasPic . ca me met du baume au cœur de voir ca ! Et je me dis que j'ai pas passer tout ce temps a faire le forum pour rien !
PS: Me permet tu d’apporté quelques changements esthétiques sur le Tuto ? comme mettre la vidéo dans le premier sujet et dans le format qui va bien ?
Très joli tuto sur l'utilisation de cet écran !! . mais aussi sur le sonde de température .
Je tiens à te remercier de ta participation, c'est exactement l'esprit et l'élan que je souhaite pour ce forum. Alors vraiment MERCI !!.
J'ai scruté un peu le code .
Pourquoi dessiner des rectangles au lieu de ligne ?
Je n'ai pas compris l'utilité de cette fonction de delay ? c'est toi qui la faite ? ( ligne 405 du fichier SPI_TFT.h)
Code : Tout sélectionner
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
{
for(j=0;j<1000;j++);
}
}
C'est vrai que la vidéo manque un chouille de pep's, mais c'est pas forcement évident ! . un briquet et un glaçon sur la sonde aurait été plus dynamique pour les yeux
Encore Merci au nom du forum FantasPic . ca me met du baume au cœur de voir ca ! Et je me dis que j'ai pas passer tout ce temps a faire le forum pour rien !
PS: Me permet tu d’apporté quelques changements esthétiques sur le Tuto ? comme mettre la vidéo dans le premier sujet et dans le format qui va bien ?
Ecran TFT 1.8" en SPI avec driver ST7735
- sylvain54
Amateur- Messages : 194
- Âge : 52
- Enregistré en : août 2015
- Localisation : Dans l'est de la France
Merci Jeremy
J'ai pris des rectangles car au départ je ne savais pas quelle résolution j'allais prendre, comme je suis fainéant , j'ai gardé le principe des rectangles au lieu des lignes.
Non, cette fonction n'est pas de moi, elle était dans le code d'origine et je l'ai laissé.
Il est vrai
Pas de problème pour moi, tu peux modifier à ta volonté (pour le lien vidéo, je n'ai pas trouvé comment ajouter une vidéo directement dans le corps du topic)
De rien, je t'en réserve d'autres . Même si il n'y a que peu de personnes qui participent pour le moment, les échanges sont très intéressants et il y en a pour tous les niveaux.
La prochaine fois, j'essayerai de faire mieux pour la vidéo, c'est promis
++ Sylvain
Pourquoi dessiner des rectangles au lieu de ligne ?
J'ai pris des rectangles car au départ je ne savais pas quelle résolution j'allais prendre, comme je suis fainéant , j'ai gardé le principe des rectangles au lieu des lignes.
Je n'ai pas compris l'utilité de cette fonction de delay ? c'est toi qui la faite ? ( ligne 405 du fichier SPI_TFT.h)
Non, cette fonction n'est pas de moi, elle était dans le code d'origine et je l'ai laissé.
un briquet et un glaçon sur la sonde aurait été plus dynamique pour les yeux
Il est vrai
PS: Me permet tu d’apporté quelques changements esthétiques sur le Tuto ? comme mettre la vidéo dans le premier sujet et dans le format qui va bien ?
Pas de problème pour moi, tu peux modifier à ta volonté (pour le lien vidéo, je n'ai pas trouvé comment ajouter une vidéo directement dans le corps du topic)
Encore Merci au nom du forum FantasPic . ca me met du baume au cœur de voir ca !
De rien, je t'en réserve d'autres . Même si il n'y a que peu de personnes qui participent pour le moment, les échanges sont très intéressants et il y en a pour tous les niveaux.
La prochaine fois, j'essayerai de faire mieux pour la vidéo, c'est promis
++ Sylvain
Ecran TFT 1.8" en SPI avec driver ST7735
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités