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 ---
Modérateur : Jérémy
[RESOLU] thermomètre afficheur 7 segments
Bonjour a tous,
Je suis tomber sur un ancien projet qui était de récupéré la valeur d'un MCP9700A et de l'afficher sur 2 afficheur 7 segments multiplexer.
MCP9700A
Bon le projet avait bien avancer, j'ai même acheter le plus gros du matériel pour le faire sur breadbord, voir même en dur
.
Le MCP9700A et les afficheurs sont relier a un 16F88. pour le moment il fonctionne sous simulation mais avec une petite latence entre le premier 7seg et le second.
Donc dans un premier temps, ma question est : d’après vous, est-ce que le code est le montage vous semble correcte ?
Voici le montage sous simulation :
Mise a jour le 10/05/2017
Et voici le code :
D'avance merci
@++
Je suis tomber sur un ancien projet qui était de récupéré la valeur d'un MCP9700A et de l'afficher sur 2 afficheur 7 segments multiplexer.
MCP9700A
Bon le projet avait bien avancer, j'ai même acheter le plus gros du matériel pour le faire sur breadbord, voir même en dur
Le MCP9700A et les afficheurs sont relier a un 16F88. pour le moment il fonctionne sous simulation mais avec une petite latence entre le premier 7seg et le second.
Donc dans un premier temps, ma question est : d’après vous, est-ce que le code est le montage vous semble correcte ?
Voici le montage sous simulation :
Mise a jour le 10/05/2017
Et voici le code :
Code : Tout sélectionner
///////////////////////////////
// name : thermometre //
// create : venom //
// date : 12/11/2015 //
// pic : 16f88 1MHz //
///////////////////////////////
long L; // Initialise un long L
int temp_res; // Initialise temp_res
int val1; // Initialise val1
int val2; // Initialise val2
int boucle_a; // Initialise boucle_a
unsigned char font[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // Charge les chiffres de 0 aa 9 en HEXA dans le font
void main() {
OSCCON = 100; //Fréquence pour oscillateur interne. oscillateur 1 MHz
TRISA = 0b00000100; // port A2 en entrée. Entrée = 1, sortie = 0
TRISB = 0b00000000; // tous les port B en sortie. Entrée = 1, sortie = 0
PORTA.RA0 = 0; //Disable digit 1
PORTA.RA1 = 0; //Disable digit 2
CMCON=0; // inhibe les comparateurs
ANSEL = 0b00000100; // Configure AN2 en analog
ADC_Init(); // Initialise module ADC
Delay_ms(100);
while(1){
// récuperation du Vout du MCP9700A + forume transformation °C
// 0°C = (10mV)*(0°C)+500 = 500mV
// 20°C = (10mV)*(20°C)+500 = 700mv
// 50°C = (10mV)*(50°C)+500 = 1000mv
L = ADC_Read(2)*500;
L = L>>10;
L = L-42; //42
temp_res = L ;
for(boucle_a=0 ; boucle_a<100 ; boucle_a++)
{
val2 = temp_res / 10; //recupere la dizaine de la valeur
PORTB = font[val2]; //Envoie le chiffre en HEXA au portB
PORTA.RA0 = 1; //active le port RA0
Delay_ms(10); //delay de 10 milisecondes
PORTA.RA0 = 0; //desactive le port RA0
val1 = temp_res % 10; //recupere l'unité de la valeur
PORTB = font[val1]; //Envoie le chiffre en HEXA au portB
PORTA.RA1 = 1; //active le port RA1
Delay_ms(10); //delay de 10 milisecondes
PORTA.RA1 = 0; //desactive le port RA1
Delay_ms(10);
}
/*PORTA.RA3 = 1; //active le port RA3
Delay_ms(1000); //delay de 500 milisecondes
PORTA.RA3 = 0; //desactive le port RA3
Delay_ms(1000); //delay de 500 milisecondes */
}
}D'avance merci
@++
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par venom le lun. 31 juil. 2017 14:31, modifié 31 fois.
thermomètre afficheur 7 segments
thermomètre afficheur 7 segments
Merci Gerard,
J'ai modifier le code dessus. ai-je bien configurer ANSEL de cette manière ?
@++
J'ai modifier le code dessus. ai-je bien configurer ANSEL de cette manière ?
@++
thermomètre afficheur 7 segments
thermomètre afficheur 7 segments
Comme ci-dessus ?
quel est la différence entre :
0b00000100
et
0x00000100
@++
quel est la différence entre :
0b00000100
et
0x00000100
@++
thermomètre afficheur 7 segments
thermomètre afficheur 7 segments
Oula c'est compliqué tout ça pour moi
. Mais merci pour ses précisions Paul.
Mais si je met l'un ou l'autre sur ANSEL ça fonctionne sous simulation. Donc que choisir ?
@++
Mais si je met l'un ou l'autre sur ANSEL ça fonctionne sous simulation. Donc que choisir ?
@++
thermomètre afficheur 7 segments
- Gérard

Expert- Messages : 1938
- Âge : 67
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
venom a écrit :Comme ci-dessus ?![]()
quel est la différence entre :
0b00000100
et
0x00000100
@++
Si tu as un doute, tu peux écrire TRISA = 4 ; c'est le bit 2 qui sera à 1 (comme Paul l'a dit)
Pour b... ou 0x... je ne sais pas, faut voir la doc du compilateur.
EDIT : je viens de relire ce que Paul a dit, 0x..., c'est de l'exa donc 100 hexa = 256 en décimal (il est trop fort Paul
thermomètre afficheur 7 segments
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
Dans tous les cas
ANSEL ne peut pas contenir une valeur sur 32 bits telle que 0x00000100 !
il (le compilateur) est donc peut etre assez intelligent pour transformer 0x00000100 en 0b00000100
à verifie rdans le fichier ASM resultant d ela compilation
sinon tu mets
0x00000100 4 en binaire
ou 0x04 4 en hexadecimal
ainsi que TRISA=4 comme l'a souligné Gerard !
Dans tous les cas
ANSEL ne peut pas contenir une valeur sur 32 bits telle que 0x00000100 !
il (le compilateur) est donc peut etre assez intelligent pour transformer 0x00000100 en 0b00000100
à verifie rdans le fichier ASM resultant d ela compilation
sinon tu mets
0x00000100 4 en binaire
ou 0x04 4 en hexadecimal
ainsi que TRISA=4 comme l'a souligné Gerard !
thermomètre afficheur 7 segments
Merci des precisions Paulfjujo.
Je pense que le compilateur modifie en effet car je n'ai pas d'erreur lors de la compilation si ANSEL = 0x00000100. Mais bon a vérifier sur le ASM
@++
Je pense que le compilateur modifie en effet car je n'ai pas d'erreur lors de la compilation si ANSEL = 0x00000100. Mais bon a vérifier sur le ASM
@++
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités
