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
@++

