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
Problème de démarrage avec un 16f887
-
tdegremont

Débutant- Messages : 30
- Enregistré en : novembre 2015
Bonjour à tous,
Je ne suis pas un expert dans la programmation de pic, et pour tout dire c'est même mon premier projet "complet", donc soyez indulgent si ma question est bête comme bonjour
Bon voilà, je suis en train de réaliser une mini station météo pour mon papa. le besoin est simple:
Affichage des températures avec 2 sondes (DS18B20)
Affichage de la vitesse du vent (signal front haut qui m'arrive d'un autre système).
J'ai programmé avec le compilateur mikroC pro, et j'ai utiliser la carte de développement EasypicV7. Jusque là, tout va bien.
Afin d'être plus clair, je joins le schéma ISIS ainsi que le code MikroC.
Donc sur ma carte tout est ok, et le programme fonctionne super bien.
Je me suis donc mis au soudage...et là soucis,on dirait que mon pic ne démarre pas rien ne se passe....
Quelqu'un aurait une piste????
merci d'avance
Je ne suis pas un expert dans la programmation de pic, et pour tout dire c'est même mon premier projet "complet", donc soyez indulgent si ma question est bête comme bonjour
Bon voilà, je suis en train de réaliser une mini station météo pour mon papa. le besoin est simple:
Affichage des températures avec 2 sondes (DS18B20)
Affichage de la vitesse du vent (signal front haut qui m'arrive d'un autre système).
J'ai programmé avec le compilateur mikroC pro, et j'ai utiliser la carte de développement EasypicV7. Jusque là, tout va bien.
Afin d'être plus clair, je joins le schéma ISIS ainsi que le code MikroC.
Donc sur ma carte tout est ok, et le programme fonctionne super bien.
Je me suis donc mis au soudage...et là soucis,on dirait que mon pic ne démarre pas rien ne se passe....
Quelqu'un aurait une piste????
merci d'avance
Code : Tout sélectionner
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
void Init_Device();
void vent(int *cond,unsigned *VentValue,char );
void temperature(int *cond,unsigned *temperatureValue,char ) ;
void luminosite(int *cond,unsigned *LumiValue,char );
unsigned Sensor();
void nextMenu();
// Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor:
// 18S20: 9 (default setting; can be 9,10,11,or 12)
// 18B20: 12
const unsigned short TEMP_RESOLUTION = 12;
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
const unsigned short VREF = 5;
const unsigned short LCD_FREQUENCE = 100;
unsigned int BP=0;
const unsigned short MENU_MAX_ID = 6;
unsigned short FACTOR_SPEED = 1;
unsigned TCu_Temp; //current deg
unsigned THi_Temp = 0xFC90; //-55 deg
unsigned TLo_Temp = 0x07D0; //125 deg
unsigned TCu_Freq; //Frequence
unsigned THi_Freq; //Frequence Max
unsigned TCu_Lumi = 0x00; //Luminosite en %
void Init_Device(){
PORTB = 0; // All PORTB pins are cleared
PORTA = 0x00; // All PORTA pins are cleared
TRISA = 0b00010100; // ques des sorties sauf RA4 en input du timer0 et RA2 en analogique
TRISB = 0b10000000; // All PORTB pins except PORTB.1 are configured as outputs
ANSEL = 0b00000100; // RA2/AN2 is analog input
//ADCON0 = 0b00001000; // Analog channel select @ AN2 -
ANSELH = 0; // Configure other AN pins as digital I/O
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
INTCON =0b00000100;
OPTION_REG = 0b10101111; //0b00101000; // TOCS=1 for Counter mode, PSA=1 for 1:1 prescaler
}
unsigned Sensor(){
unsigned Sensor_Tmp;
Ow_Reset(&PORTE, 2); // Onewire reset signal
Ow_Write(&PORTE, 2, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTE, 2, 0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTE, 2);
Ow_Write(&PORTE, 2, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTE, 2, 0xBE); // Issue command READ_SCRATCHPAD
Sensor_Tmp = Ow_Read(&PORTE, 2);
Sensor_Tmp = (Ow_Read(&PORTE, 2) << 8) + Sensor_Tmp;
return (Sensor_Tmp);
}
void temperature(int *cond,unsigned *temperatureValue,char temptxt[]){
unsigned int temp2write;
char temp_whole;
unsigned int temp_fraction;
char *temp = " 00.0";
temp2write=*temperatureValue;
if (temp2write & 0x8000) {
temp[0] = '-';
temp2write = ~temp2write + 1;
}
temp_whole = temp2write >> RES_SHIFT ;
if (temp_whole/100)
temp[0] = temp_whole/100 + 48;
else
temp[0] = ' ';
temp[1] = (temp_whole/10)%10 + 48; // Extract tens digit
temp[2] = temp_whole%10 + 48; // Extract ones digit
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
temp[4] = temp_fraction/1000 + 48; // Extract thousands digit
if(*cond==LCD_FREQUENCE) //Appel la fonction LCD tous les 100
{
Lcd_Out(1,1, temptxt);
Lcd_Out(2, 10, temp);
Lcd_Chr(2,15,178); // Print degree rond // If you see greek alpha letter try typing 178 instead of 223
Lcd_Chr(2,16,'C'); // Print degree character, 'C' for Centigrades
*cond=0;//Remise a 0 de la condition
}
}
void vent(int *cond,unsigned *VentValue,char temptxt1[]){
unsigned int temp2write;
char temp_whole;
unsigned int temp_fraction;
char *temp = "000.0";
temp2write=*VentValue;
if (temp2write & 0x8000) {
temp[0] = '-';
temp2write = ~temp2write + 1;
}
temp_whole = temp2write >> RES_SHIFT ;
if (temp_whole/100)
temp[0] = temp_whole/100 + 48;
else
temp[0] = ' ';
temp[1] = (temp_whole/10)%10 + 48; // Extract tens digit
temp[2] = temp_whole%10 + 48; // Extract ones digit
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
temp[4] = temp_fraction/1000 + 48; // Extract thousands digit
if(*cond==LCD_FREQUENCE) //Appel la fonction LCD tous les 100
{
Lcd_Out(1,1, temptxt1);
Lcd_Out(2, 10, " ");
Lcd_Out(2, 12, temp);
*cond=0;//Remise a 0 de la condition
TMR0=0;
}
}
void luminosite(int *cond,unsigned *LumiValue, char temptxt2[]){
unsigned long temp_Lumi;
unsigned int temp2voltage;
char txtvoltage[7];
temp_Lumi = *LumiValue ;
temp2voltage = temp_Lumi; //((temp_Lumi*(VREF*10))/1024)*2; // *5.0/1024.0
if(*cond==LCD_FREQUENCE) //Appel la fonction LCD tous les 100
{
IntToStr(temp2voltage, txtvoltage);
Lcd_Out(1,1, temptxt2);
Lcd_Out(2,10,txtvoltage);
Lcd_Chr(2,16,'%'); // Print degree character, 'C' for Centigrades
delay_ms(150);
*cond=0;//Remise a 0 de la condition
}
}
void nextMenu(){
if(PORTB.F7=1) {
BP++;
Lcd_Cmd(_Lcd_CLEAR);
Delay_ms(250);
}
if(BP==MENU_MAX_ID) BP=0;
}
void main() {
char strTemperatureCu[]= "Temperature ";
char strTemperatureLo[]= "Temperature min ";
char strTemperatureHi[]= "Temperature max ";
char strVitesseVentCu[]= "Vitesse vent kmh";
char strVitesseVentHi[]= "Rafale vent kmh";
char strLuminositeCu[] = "Reglage anemo. ";
int cond=0; //Condition pour l'affichage sur l'�cran LCD
Init_Device();
Lcd_Init(); //initialisation du LCD
Lcd_Cmd(_Lcd_CURSOR_OFF); //Enleve le curseur
Lcd_Cmd(_Lcd_CLEAR);
TMR0=0;
THi_Freq = 0;
while(1){
TCu_Lumi = ((ADC_Read(2)*(VREF*10))/1024)*2 ;
FACTOR_SPEED = TCu_Lumi;
TCu_Freq = (((TMR0)*FACTOR_SPEED));
if ((~TMR0IF)&&(THi_Freq<TCu_Freq)&&(BP==3)) THi_Freq=TCu_Freq;
TCu_Temp = Sensor();
if((int)TCu_Temp > (int)THi_Temp) THi_Temp = TCu_Temp;
if((int)TLo_Temp > (int)TCu_Temp) TLo_Temp = TCu_Temp;
cond=cond+1;//Incr�mente la variable cond
switch(BP) {
case 0:
temperature(&cond,&TCu_Temp,strTemperatureCu);//Appel la fonction temp�rature
nextMenu();
break;
case 1:
temperature(&cond,&TLo_Temp,strTemperatureLo);//Appel la fonction temp�rature
nextMenu();
break;
case 2:
temperature(&cond,&THi_Temp,strTemperatureHi);//Appel la fonction temp�rature
nextMenu();
TMR0=0;
break;
case 3:
vent(&cond,&TCu_Freq,strVitesseVentCu);
nextMenu();
break;
case 4:
vent(&cond,&THi_Freq,strVitesseVentHi);
nextMenu();
break;
case 5:
luminosite(&cond,&TCu_Lumi,strLuminositeCu);
nextMenu();
break;
}
}
}
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Problème de démarrage avec un 16f887
- Gérard

Expert- Messages : 1948
- Âge : 67
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Enlève le PIC du support, mesure la tension d'alim aux pattes prévues. Si OK, tu remets le PIC (dans le bon sens, ce n'est pas une critique, juste pour que tu fasses attention),tu mets la sonde de l'oscillo sur RA6, je vois dans ta config que tu as choisis l'oscillateur interne, tu peux donc mesure Fosc/4 sur RA6.
Et tu viens dire ce qu'il en est.
Au fait, la programmation s'est bien passée?
Edit : correction d'une faute.
Et tu viens dire ce qu'il en est.
Au fait, la programmation s'est bien passée?
Edit : correction d'une faute.
Modifié en dernier par Gérard le mar. 16 févr. 2016 17:52, modifié 1 fois.
Problème de démarrage avec un 16f887
-
tdegremont

Débutant- Messages : 30
- Enregistré en : novembre 2015
ok Gérard, je vais faire ça.
Aux dernières mesures j'avais une tension stable de 5.03v aux bornes du pic, car on ne le vois pas sur la photo mais en dessous du pic il y a un condo de 0.1uF
Je versifierai de nouveau, et je sonderais RA6 comme tu me le propose...
on verra...
Quant à la programmation, oui cela s'est bien passé ...avec beaucoup de temps....j'en suis assez fier
Aux dernières mesures j'avais une tension stable de 5.03v aux bornes du pic, car on ne le vois pas sur la photo mais en dessous du pic il y a un condo de 0.1uF
Je versifierai de nouveau, et je sonderais RA6 comme tu me le propose...
on verra...
Quant à la programmation, oui cela s'est bien passé ...avec beaucoup de temps....j'en suis assez fier
Problème de démarrage avec un 16f887
-
Jérémy

Administrateur du site- Messages : 2758
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Hello ,
Je te propose dans un second temps, de mettre un jour tes programmes . Suivre ce lien : Programme pour environnement pour mikroC
En effet je vois sur tes photos que tes versions sont biens périmées !.
J'ai essayer vite fait en ouvrant mikro prog ( la V2.32), et je n'ai pas du tout le même screen que toi. Surtout sur la partie OSC. ca ne mange pas de pain d'essayer. je n'ai aps encore examiner ton hard.
La pin sur le RESET est bien avec une pull-up ? ( si il y en a une d'ailleurs)
Tiens nous au courant:

PS : tes photos ne sont pas très visible .suivre ce lien pour le bien de mes yeux
Re PS : merci de mettre le lien datasheet de ton PIC, c'est une bonne habitude à prendre : Suivre ce lien
Je te propose dans un second temps, de mettre un jour tes programmes . Suivre ce lien : Programme pour environnement pour mikroC
En effet je vois sur tes photos que tes versions sont biens périmées !.
J'ai essayer vite fait en ouvrant mikro prog ( la V2.32), et je n'ai pas du tout le même screen que toi. Surtout sur la partie OSC. ca ne mange pas de pain d'essayer. je n'ai aps encore examiner ton hard.
La pin sur le RESET est bien avec une pull-up ? ( si il y en a une d'ailleurs)
Tiens nous au courant:

PS : tes photos ne sont pas très visible .suivre ce lien pour le bien de mes yeux
Re PS : merci de mettre le lien datasheet de ton PIC, c'est une bonne habitude à prendre : Suivre ce lien
Problème de démarrage avec un 16f887
- paulfjujo

Maître- Messages : 3285
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
tu peux rajouter une les dans la boucle while pour verifier si le programme tourne...
il me semble ne pas avoir vu d'init ADC
tu peux rajouter une les dans la boucle while pour verifier si le programme tourne...
il me semble ne pas avoir vu d'init ADC
Code : Tout sélectionner
ADC_Init();
while(1){
TCu_Lumi = ((ADC_Read(2)*(VREF*10))/1024)*2 ;
FACTOR_SPEED = TCu_Lumi;
.. etc ..
Problème de démarrage avec un 16f887
-
tdegremont

Débutant- Messages : 30
- Enregistré en : novembre 2015
Gérard a écrit :Enlève le PIC du support, mesure la tension d'alim aux pattes prévues. Si OK, tu remets le PIC (dans le bon sens, ce n'est pas une critique, juste pour que tu fasses attention),tu mets la sonde de l'oscillo sur RA6, je vois dans ta config que tu as choisis l'oscillateur interne, tu peux donc mesure Fosc/4 sur RA6.
Et tu viens dire ce qu'il en est.
Au fait, la programmation s'est bien passée?
Edit : correction d'une faute.
Bonjour,
Hier soir j'ai effectué quelques mesures, donc:
la tension d'alimentation du PIC est de 4.885v (stable). cette tension est pratiquement la même que sur ma plaque easypic, j'en ai déduis que mon soucis ne venait pas de là.
J'ai ensuite sondé le signal sur la RA6 comme me le proposé Gérard. c'est une très bonne idée car cela a démontré que le programme était bien en cours d'exécution. (cf. photo.).
Note: si vous voyez des erreurs dans mes mesures ou dans le code...ne vous privez pas, je ne me vexerai pas
Bon, il était déjà tard mais j'ai eu comme une révélation
donc, un ptit coup de pompe à désouder...et hop....il est tard, mais ça marche hihihihihi
J'ai quand même quelques comportements différents:
1) le petit rond de température est représenté par un autre sigle chinois
2) le max température affiche 85C!!!!! je suis obligé de faire un reset manuel après le premier démarrage pour que cela fonctionne bien!!!????
3) Je dois peaufiner l'affichage de la vitesse car elle est un peu aléatoire.....
remarque: paulfjujo concernant ADC_Init, je l'avais mis au départ, mais avec ou sans, cela fonctionnait quand même, je me suis donc dis, autant enlever les choses pas obligatoire
merci à tous pour votre aide
A bientot
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Problème de démarrage avec un 16f887
-
tdegremont

Débutant- Messages : 30
- Enregistré en : novembre 2015
En fait, je ne comprends pas la lecture du signal sur la patte RA6, si une âme charitable peux m'expliquer cette mesure?
Dans ma compréhension des choses...mais je dois être totalement à l'ouest, donc n'hésitez pas à me corriger:
Déjà l'amplitude du signal, moi je lis 1.5 volts ?????? je me trompe???? si non, pourquoi je n'ai pas 4.88v???
la période du signal:
Je suis sur 1/5us donc je lis 2.2 carreaux pour un cycle donc 0.2us*2.2=0.44us
Fosc/4 donc ma frequence = 0.44us*4 = 1.76us
1.76us * 568181.82 = 1 Seconde
donc pour moi, il y aura environ 568182 cycle d'horloge en 1 seconde.
Qu'en pensez vous?
Dans ma compréhension des choses...mais je dois être totalement à l'ouest, donc n'hésitez pas à me corriger:
Déjà l'amplitude du signal, moi je lis 1.5 volts ?????? je me trompe???? si non, pourquoi je n'ai pas 4.88v???
la période du signal:
Je suis sur 1/5us donc je lis 2.2 carreaux pour un cycle donc 0.2us*2.2=0.44us
Fosc/4 donc ma frequence = 0.44us*4 = 1.76us
1.76us * 568181.82 = 1 Seconde
donc pour moi, il y aura environ 568182 cycle d'horloge en 1 seconde.
Qu'en pensez vous?
Problème de démarrage avec un 16f887
-
Jérémy

Administrateur du site- Messages : 2758
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Hello ,
Ne prends pour argent comptant mes paroles , je ne suis pas sur de moi !;
déjà pour la tension moi je vois sur le Channel 1 2V/div . carreaux de haut donc 6V !
Il me semble que sur RA6 tu vois l'horloge généré par ton PIC . D’après ton image oscillo et ton programme( pas de préscaler) moi je dirais . que tu as 2 carreaux pour une période : donc 10µs .
Comme F= 1/T . on aurait donc : F=1/10µs= 1 000 000 . Soit 1 Mhz . Fosc= F x 4 = soit 4 Mhz
Ca me parait bizarre !
Ne prends pour argent comptant mes paroles , je ne suis pas sur de moi !;
déjà pour la tension moi je vois sur le Channel 1 2V/div . carreaux de haut donc 6V !
Il me semble que sur RA6 tu vois l'horloge généré par ton PIC . D’après ton image oscillo et ton programme( pas de préscaler) moi je dirais . que tu as 2 carreaux pour une période : donc 10µs .
Comme F= 1/T . on aurait donc : F=1/10µs= 1 000 000 . Soit 1 Mhz . Fosc= F x 4 = soit 4 Mhz
Ca me parait bizarre !
Problème de démarrage avec un 16f887
- Gérard

Expert- Messages : 1948
- Âge : 67
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Sur RA6, on voit 1/4 de la fréquence d'horloge. On voit une période de 10µs, soit 100kHz donc ton PIC tourne a 400kHz.
Coté amplitude, je vois aussi 6V, problème de calibration verticale?
Jérémy, l'inverse de 10E-6 = 100 000 et pas 1 000 000.
Coté amplitude, je vois aussi 6V, problème de calibration verticale?
Jérémy, l'inverse de 10E-6 = 100 000 et pas 1 000 000.
Problème de démarrage avec un 16f887
- paulfjujo

Maître- Messages : 3285
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Gérard a écrit :Sur RA6, on voit 1/4 de la fréquence d'horloge. On voit une période de 10µs, soit 100kHz donc ton PIC tourne a 400kHz.
Coté amplitude, je vois aussi 6V, problème de calibration verticale?
Moi, je vois plutot le commutateur base de temps sur 0,5µS en tenant compte de la percepective de la photo
la graduation valeur 10µS est bien plus haut sur le commutateur
ce qui serait coherent avec 2x0,5=1 µS => 1Mhz pour FOSC/4 sur RA6 , donc FOSC=4Mhz
6V d'amplitude , je plussoies aussi pour un PB de calibration .
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités
