- 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
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
si tu as utilisé ceci
Code : Tout sélectionner
//char Soft_UART_Init(char *port, char rx_pin, char tx_pin, unsigned long baud_rate, char inverted);
Soft_UART_Init(&PORTA,3,4,9600,0);
tu peux voir que RA3 est la pin RX de l'UART software
RA4 la pin TX , effectivement
MAIS RA4 est la plupart du temps , Open collecteur .. il faut mettre une pull-up de 4,7K au +VCC
par contre ton choix de LED sur RA3 est mauvais .. car Soft UART RA3=RX
il y a conflit ..
à verifier aussi , si il faut mettre le parametre Inverted=0 ou Inverted=1 avec ton cordon TTL/USB
rappel: je n'ai pas de 16F88 sous la main ..pour tester
Me revoilou
Bon j'ai réussi a faire une connexion avec mon cordon et le pic. (USART Terminal réagit)
Par contre j'ai du un peu couper le code (version demo de mikroc)
Voici donc le code que j'ai envoyé dans le pic :
Code : Tout sélectionner
// Liaison terminal univoque PIC -> PC
// via adaptateur MAX232
// RA3 RX <--- not used
// RA4 TX --------------------> RX PC
// 0V ---------------------------> 0V
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 TEXTE[64];
unsigned char * txt;
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 SOFT_UART_Write_Text(char *txt)
{
while(*(txt)>0)
{
Soft_UART_Write(*(txt));
txt++;
}
}
void SOFT_UART_Write_CText(const char *txt)
{ unsigned char c;
while(*txt)
{ c=*(txt);
Soft_UART_Write(c);
txt++;
}
}
void main() {
OSCCON = 0b01000000; //Fréquence pour oscillateur interne. oscillateur 1 MHz
TRISA = 0b00001100; // port RA2 et RA3 en entree Entrée = 1, sortie = 0
TRISB = 0b00000000; // tous les port B en sortie. Entrée = 1, sortie = 0
CMCON=0; // inhibe les comparateurs
ANSEL = 0b00000100; // Configure AN2 en analog
PORTA.RA0 = 0; //Disable digit 1
PORTA.RA1 = 0; //Disable digit 2
txt=&TEXTE[0]; // initalise le pointeur txtx sur le debut du tableau TEXTE
//char Soft_UART_Init(char *port, char rx_pin, char tx_pin, unsigned long baud_rate, char inverted);
Soft_UART_Init(&PORTA,3,4,9600,0);
Delay_ms(100);
SOFT_UART_Write_CText("Init Liaison OK\r\n");
ADC_Init(); // Initialise module ADC
SOFT_UART_Write_CText("Init ADC OK\r\n");
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;
// affichage sur terminal PC
SOFT_UART_Write_CText("Mesure ADC L= ");
LongToStr(L,txt);
SOFT_UART_Write_Text(txt);
Soft_UART_Write(13);Soft_UART_Write(10); // CR LF saut d eligne
}
}
J'ai juste enlevé la partie qui affiche sur les 7 segs.
En revanche je ne sais pas trop bien paramétrer USART Terminal.
voici ce que j'obtiens comme résultat :
En ascii
Code : Tout sélectionner
þþþþþþþþþþþþþþþþþþ
En hex
Code : Tout sélectionner
0x00 0x00 0xFE 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFE 0x00 0x00
En dec
Code : Tout sélectionner
000 000 254 000 000 000 000 000 000 000 000 254 000 000 000 000 000 254
En bin
Code : Tout sélectionner
0b00000000 0b00000000 0b00000000 0b11111110 0b00000000 0b00000000 0b00000000 0b00000000 0b00000000 0b00000000 0b00000000 0b11111110 0b00000000 0b00000000
j'avoue qu'aucune de ces langues me parle
D'apres le code je devrais recevoir
Code : Tout sélectionner
Init Liaison OK
Code : Tout sélectionner
Init ADC OK
Code : Tout sélectionner
Mesure ADC L=
C'est bien sa ?
Voilà en gros ce que je peux vous dire pour le moment.
Tout le reste du soft est configuré comme ci dessous
Screenshot
paulfjujo a écrit :à verifier aussi , si il faut mettre le parametre Inverted=0 ou Inverted=1 avec ton cordon TTL/USB
J'avoue ne pas savoir ou se trouve ce paramètre.
Aller courage
@++
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Pas d'anomalies dans ton code excepté le fait qu'il faudra quand meme rajouter un delai dans la boucle
et un petit filtrage ADC, ça mange pas de pain.
Je l'ai testé sur mon 16F1847 ..OK
Je verrai plutot un probleme dans ta config bit .. FOSC mal configuré
post ta config
copier /coller dans un fichier txt ou dans ton source C
ou sauvegarde fichier de config dans toto.cfgsch (format config scheme)
Code : Tout sélectionner
unsigned int j;
j=1;
L=0;
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
// 1000 mV => 1000-500=500 1/10em de degres
L = L+ ADC_Read(1);
if ((j%10==0) && (j>9)) // 2me test pour eviter une erreur sur la 1ere valeur moyennée
{
// affichage sur terminal PC
L=L-5000; // -5000 car 10 fois -500 !
SOFT_UART_Write_CText("Mesure ADC L= ");
LongToStr(L,txt);
SOFT_UART_Write_Text(txt);
SOFT_UART_Write_CText(" 1/10em de degres \r\n"); // \r\n = CR LF saut de ligne
L=0;
}
j++;
Delay_ms(100);
}
tu devrais obtenir quelque chose comme cela
Init ADC OK
Init Liaison OK
Init ADC OK
Mesure ADC L= 5230 1/10em de degres
Mesure ADC L= 5230 1/10em de degres
Mesure ADC L= 5230 1/10em de degres
Mesure ADC L= 5230 1/10em de degres
Mesure ADC L= 5230 1/10em de degres
avec EA1=Vcc
Attention j'ai utilisé ADC1 sur lequel j'ai un potar pour regler 0 à Vcc
( et non ADC2 .)
Je souhaite m’excusè pour cette longue absence (Meme si j'essaie de passer le plus souvent possible. Comme beaucoup d'entre nous, je pratique l’électronique comme hobbies (du moins j’essaie )
Mais ces derniers temps j'ai du m’éloigner un peu (D'autres choses qui m'ont pris beaucoup de temps.) Mais je n'abandonne pas ce projet qui me hante depuis un moment.
J’espère donc bientôt remettre les mains dans le cambouis, ou plutôt dans les composants électroniques.
Néanmoins, J'ai quelques questions par rapport au message de paulfjujo.
paulfjujo a écrit : rajouter un delai dans la boucle et un petit filtrage ADC
Que veut tu dire par filtrage ADC ?
paulfjujo a écrit : Je verrai plutot un probleme dans ta config bit .. FOSC mal configuré post ta config
Désolé de ma faible connaissance en la matière, Comment puis-je te transférè ma config ? Je trouve ça ou dans mikroc ?
paulfjujo a écrit :copier /coller dans un fichier txt ou dans ton source C ou sauvegarde fichier de config dans toto.cfgsch (format config scheme)
J'ai absolument rien compris a cette phrase.
Pour ce qui est du code, tu souhaite que je l’injecte dans mon pic pour voir si j’obtiens bien le même résultat que toi ? c'est bien ça ?
Merci de votre aide et patience. Heureusement que des forum comme ça existe. Et dommage qu'il y ai des "chiant" comme moi
@++
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Dans projet
Edit Project
a droite : 2 boutons : Load scheme ou Save scheme
Charge ou sauve la config des bits dans un fichier avec extension * .cfgsch
nota: enlever l'extension .txt
qui une fois chargé doit donner:
CONFIG1 : $2007 : 0x3F18
CONFIG2 : $2008 : 0x3FFC
j'ai testé ce code avec un 16F1847 , mais devrait etre transposable ssans probleme pour un 16F88.
Verifie juste la config des bits et FOSC.
Code : Tout sélectionner
...
....
long Temp_res;
long L;
int j,k ;
...
void main()
{
OSCCON = 0b01000000; //Fréquence pour oscillateur interne. oscillateur 1 MHz
TRISA = 0b00001100; // port RA2 et RA3 en entree Entrée = 1, sortie = 0
TRISB = 0b00000000; // tous les port B en sortie. Entrée = 1, sortie = 0
CMCON=0; // inhibe les comparateurs
ANSEL = 0b00000100; // Configure AN2 en analog
// PORTA.RA0 = 0; //Disable digit 1
// PORTA.RA1 = 0; //Disable digit 2
txt=&TEXTE[0]; // initalise le pointeur txtx sur le debut du tableau TEXTE
//char Soft_UART_Init(char *port, char rx_pin, char tx_pin, unsigned long baud_rate, char inverted);
Soft_UART_Init(&PORTA,3,4,9600,0);
Delay_ms(100);
Soft_UART_Write_CText("16F88 1MHz MCP9700A\r\n");
Soft_UART_Write_CText("Init Liaison OK\r\n");
ADC_Init(); // Initialise module ADC
Soft_UART_Write_CText("Init ADC OK\r\n");
j=1;
L=0;
while(1)
{
// récuperation du Vout du MCP9700A + formattage en °C
// -50°C = (10mV)*(-50)+500 = 0mV
// 0°C = (10mV)*(0°C)+500 = 500mV
// 20°C = (10mV)*(20°C)+500 = 700mv
// 50°C = (10mV)*(50°C)+500 = 1000mv
// 1000 mV => 1000-500=500 1/10em de degres
L = L+ ADC_Read(1);
if ((j%10==0) && (j>9)) // 2me test pour eviter une erreur sur la 1ere valeur moyennée
{
// affichage sur terminal PC
// gamme en points 0 à 10240 => delta =10240
// gamme temperature -50°C à +450°C => delta =500
// gamme en mV 500*10= 5000mV avec +Vref ADC =Vcc=5,0V
Temp_res= L * 5000/10240 - 500;
Soft_UART_Write_CText("Mesure brute ADC L= ");
LongToStr(L,txt);
Soft_UART_Write_Text(txt);
Soft_UART_Write_CText(" => degres = ");
LongToStr(Temp_res,txt);
// petits echanges entre cases memoire pour inserer une virgule pour les 1/10em de degres
k=strlen(txt);
*(txt+k)=*(txt+k-1);
*(txt+k-1)=','; // on place la virgule ici
*(txt+k+1)=0;
// cas particulier , si mesure brute inferieure à 10 , il faut afficher un zero devant la virgule
// ça fait plus propre !
if (Temp_res<10) *(txt+k-2)='0';
Soft_UART_Write_Text(txt);
Soft_UART_Write(13);
Soft_UART_Write(10); // CR LF saut de ligne
L=0;
}
j++;
Delay_ms(100);
}
resulta display
Mesure brute ADC L= 0 => degres = -50,0
Mesure brute ADC L= 0 => degres = -50,0
Mesure brute ADC L= 0 => degres = -50,0
Mesure brute ADC L= 0 => degres = -50,0
Mesure brute ADC L= 62 => degres = -40,0
Mesure brute ADC L= 482 => degres = -20,5
Mesure brute ADC L= 887 => degres = -0,7
Mesure brute ADC L= 988 => degres = -0,8
Mesure brute ADC L= 1023 => degres = 0,1
Mesure brute ADC L= 1039 => degres = 0,7
Mesure brute ADC L= 1056 => degres = 1,5
Mesure brute ADC L= 1157 => degres = 6,4
Mesure brute ADC L= 1574 => degres = 26,8
Mesure brute ADC L= 2479 => degres = 71,0
Mesure brute ADC L= 3406 => degres = 116,3
Mesure brute ADC L= 4641 => degres = 176,6
Mesure brute ADC L= 6002 => degres = 243,0
Mesure brute ADC L= 7237 => degres = 303,3
Mesure brute ADC L= 8509 => degres = 365,4
Mesure brute ADC L= 9309 => degres = 404,5
Mesure brute ADC L= 9529 => degres = 415,2
Mesure brute ADC L= 9681 => degres = 422,7
Mesure brute ADC L= 9693 => degres = 423,2
Mesure brute ADC L= 9700 => degres = 423,6
Mesure brute ADC L= 9703 => degres = 423,7
Mesure brute ADC L= 9886 => degres = 432,7
Mesure brute ADC L= 10140 => degres = 445,1
Mesure brute ADC L= 9782 => degres = 427,6
Mesure brute ADC L= 10223 => degres = 449,1
Mesure brute ADC L= 10230 => degres = 449,5
Mesure brute ADC L= 10230 => degres = 449,5
Mesure brute ADC L= 10230 => degres = 449,5
Mesure brute ADC L= 10230 => degres = 449,5
Bon venom, Jérémy ta fait un superbe tutoriel sur ton capteur : viewtopic.php?p=6468#p6468
A+
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Tres bien ce tuto sur le MCP9701A !
pour Venom:
pour Version MikroC registered (avec le *.HEX )
Attention : avec Fosc 1MHz error sur 9600 bauds trop grande! => Fosc=8Mhz
version qui devrait etre OK avec MikroC NON enregistré
je l'ai testé OK avec un 16FL1847 .. pas de 16F88 sous la main
reduction de taille en eliliminant la lib Soft_UART
Print direct dans le registre TXREG à la place
Au Webmaster:
Probleme pour attachement de fichier en MP
1 seul possible.
malgré l'entete
Pour joindre un ou plusieurs fichiers joints :
Merci pour votre soutient a tous.
@temps-x et Jérémy
Merci pour le conseil et le tuto qui j’espère va grandement me faire avancer dans ce projet.
@paul
Merci pour les fichiers et pour la précision du Fosc. J'en prend note.
Je vous tiens au courant de l'avancement. Encore merci a tous.
@++
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 34 invités