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 : 1653
- Âge : 65
- 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
Expert- Messages : 2597
- Âge : 73
- 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 44 invités