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 ---
Forum général sur le langage C !

Modérateur : Jérémy

[Programmation] La gestion de Fonction
HVDifusion
Débutant
Débutant
Messages : 43
Enregistré en : décembre 2015

#41 Message par HVDifusion » lun. 29 août 2016 20:51

D'accord merci.

Je vais voir ça demain.

[Programmation] La gestion de Fonction
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#42 Message par HULK28 » mar. 30 août 2016 00:36

HVDifusion a écrit :
Première chose ton ANSEL marche pas et le ANSELH non plus,je sais pas pourquoi.


Bonsoir,

la première chose à faire quand on ne sait pas comment utiliser une commande ou même si cette commande ou ressource est disponible dans le PIC, est d'aller ouvrir le fichier des définitions disponible dans tous compilateurs.
Par exemple chez MikroC il faut aller dans le répertoire -> MikroC Pro for PIC > Defs
Dans defs tu cherches ton µC, par exemple P16F628.c et tu y verras que ANSEL n'y est pas (en faisant un Edit puis Find).
S'il avait été disponible tu aurais vu comment il était déclaré et il t'aurait suffit de l'utiliser de la même manière.
Cette méthode est valable pour toutes les commandes et ressources de chaque PIC géré par le compilateur.
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

[Programmation] La gestion de Fonction
HVDifusion
Débutant
Débutant
Messages : 43
Enregistré en : décembre 2015

#43 Message par HVDifusion » mar. 30 août 2016 20:31

Salut,

Bon j'ai essayer le programme,ça a l'air de fonctionné mais la led bleu fait des micro clignotement super faible.

Surement du a ton chrono%2,donc tu prend la valeur du chrono et du fait un modulo 2 pourquoi?.

[Programmation] La gestion de Fonction
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#44 Message par Jérémy » mar. 30 août 2016 21:13

Bon j'ai essayer le programme,ça a l'air de fonctionné mais la led bleu fait des micro clignotement super faible.


Il faut qu'on soit sur que cela fonctionne avant d’aller plus loin. cela doit venir de ma routine de clignotement.
Tu parle de LED bleu ? sur quel broche ?

Le fait de faire modulo permet de sortir les chiffres pairs et impairs, mais j'ai pas testé en vrai . Apparemment ca fonctionne pas lol.
par exemple 2%2 donne 0 comme résultat .
ensuite 3%2 donne 0,5 donc normalement considéré comme "1" .
ensuite 4%2 donne 0
ensuite 5%2 donne 0,5 donc normalement considéré comme "1" .
mais ca n'as pas l'air de focntionner bizarre . Peut etre qu'il arrondi 0.5 en 0.

essaye en mettant un strictement supérieur pour voir.

Code : Tout sélectionner

//------------------------------------------------------------------------------
void clignotement()
   {    
     if ((
chrono%2)>)
        {
         
Debug=0;
        }
    else
        {
         
Debug=1;
        }
   } 


Sinon
C'est en faisant des erreurs, que l'on apprend le mieux !!!

[Programmation] La gestion de Fonction
HVDifusion
Débutant
Débutant
Messages : 43
Enregistré en : décembre 2015

#45 Message par HVDifusion » mar. 6 sept. 2016 19:57

Salut,

Désolé j'ai beaucoup a faire en ce moment.

J'ai tester a nouveau le programme,j'ai modifier un peut le temps d'attente pour détecter l'impulsion et je l'ai passé a 1000ms pour avoir le temps de retirer puis de mettre le pontage.

Ici quand je simule l'impulsion la LED Debug s'allume et reste allumée.

Voici le code :

Code : Tout sélectionner

// Definition PORTB Pin
#define VoltCheck PORTB.B2
#define Signal PORTB.B1
#define Debug PORTB.B4

// Set Variable
unsigned int compteur, chrono, pause1heure, pause15minutes, alarme3minutes , i ;

//------------------------------------------------------------------------------
void interrupt()
{
 if (INTCON.T0IF == 1)  // If TMR0 Overflowing
    {
      INTCON.T0IF = 0;  // Réarmement du flag
      TMR0 = 100;        // Offset du timer0
      compteur++;           // 10ms time incrémente
      if (compteur >= 100)  // 1 seconde d'écoulée
         {
            Debug =~ Debug; // LED d'activitée
            chrono++;   // On icrémente le chrono
            compteur = 0;   // On raz time
            Debug = 0;
         }
    }
}

//------------------------------------------------------------------------------
void clignotement()
   {
     if ((chrono%2)>0 )
        {
         Debug=0;
        }
    else
        {
         Debug=1;
        }
   }


//------------------------------------------------------------------------------
void main()
{
 PORTB = 0; // PORTB en digital
 TRISB = 0b00000100; // RB1 Out RB2 IN

 PCON.B3 = 1; // 4Mhz oscillator

 // configuration TIMER0
  OPTION_REG = 0b10000101; // pull up disable,presc 1:64
  TMR0 = 100;
  INTCON = 0x80;  // GIE activé,  l'INT timer0 n'est pas encore activée

// Initialisation Variable
pause1heure = pause15minutes = alarme3minutes = chrono = compteur = i = 0 ;

Signal = 0;

for (i=0; i<=5; i++)
 {
    Signal =~ Signal; // on inverse la led
    delay_ms (350);
 }

 //------------------------------------------------------------------------------
 while(1){

    if (VoltCheck == 1)   // Contact maintenu
    {
       pause1heure = pause15minutes = alarme3minutes= chrono = compteur = 0 ;
       T0IE_bit = 0;  // On arrete le chrono
    }
    else
    {
     delay_ms(10);         // Pause antirebond

     if  ((pause1heure==0) && (pause15minutes==0))
         {
           delay_ms(1000);         // Pause detection d'impulsion
           if  (VoltCheck == 1)   // C'était juste une impulsion
               {
                 pause1heure = 1;       // On fait une pause d'une heure
               }
               else              // Le contact est toujours pas maintenu
               {
                 pause15minutes = 1;   // On attend 15 minutes
               }
           chrono = 0;
           compteur = 0;
           T0IE_bit = 1;          // On lance le chrono
         }
    }

//-------------------------   ATTENTE 1 HEURE   --------------------------------
  if ( pause1heure == 1 )
      {
        if (chrono >= 60) // l'attente d'une heure est finie
          {
             pause1heure = 0;    // On arrete la pause d'une heure
             T0IE_bit = 0;  // On arrete le chrono
          }
          else
          {
            clignotement();
           }
      }

//-------------------------   ATTENTE 15 MINUTES   -----------------------------
      if ( pause15minutes == 1)
        {
            if (chrono >= 15)
               {
                  pause15minutes = 0;    // On arrete la pause 15 minutes
                  alarme3minutes = 1;    // On active l'alarme pour 3 minutes
                  Signal = 1;            // On active l'alarme
                  chrono = 0;            // RAZ du chrono
                  compteur = 0;              // RAZ de l'offset
               }
        }
  }
 }


On va bien finir par débug,j'espère juste que le client ne va pas trop s'impatienté XD.

[Programmation] La gestion de Fonction
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#46 Message par Jérémy » mar. 6 sept. 2016 20:00

hello HVDifusion,
ravi d'avoir des news !

je regarde ça tout de suite ! car mon module GSM me donne beaucoup de fil a retordre !

On va bien finir par débug,j'espère juste que le client ne va pas trop s'impatienté XD.

Il ne tient qu'a toi d’accélérer ! Moi je suis chaud comme la braise ..... on verra plus tard pour ma commission humour!!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

[Programmation] La gestion de Fonction
HVDifusion
Débutant
Débutant
Messages : 43
Enregistré en : décembre 2015

#47 Message par HVDifusion » mar. 6 sept. 2016 20:16

Salut,

Ben j'ai proposé ça au client pour lui faire plaisir car on avais rien en kit dans notre magasin d'électronique avec des fonctions aussi spécifique.

Mais javais précisé au client que je connaissais a peine les bases donc il étais prévenus,surtout qu'il a lui même complexifier les fonctions qui étais sensée être bien plus simple de base donc pas ma faute mdr.

Si tu veux une commission on s'arrangeras si tu veux :p.

[Programmation] La gestion de Fonction
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#48 Message par Jérémy » mar. 6 sept. 2016 20:36

Alors le HIC c'est que je m'y perds et qu'il faut reprendre !

Ici j'ai supprimer la fonction 1 Heures pour ne garder que les 15minutes .
la led debug clignote quand le chrono tourne , pour nous montrer qu'il fonctionne !

La led signal sera notre témoin de fonctionnement !

Donc si Voltcheck passe à 0, on attend 1 seconde, si il est encore = 0 , alors on léve le drapeau de 15 minutes, on allume la led signal , on raz le chrono et le compteur .
Voltcheck = 0
pause15minutes = 1
Signal =

A chaque boucle on va vérifie si le chrono est >= 15. Quand il le devient supérieur on passe Signal à 1

Code : Tout sélectionner

// Definition PORTB Pin
#define VoltCheck PORTB.B2
#define Signal PORTB.B1
#define Debug PORTB.B4

// Set Variable
unsigned int compteurchronopause1heurepause15minutesalarme3minutes ;

//------------------------------------------------------------------------------
void interrupt()
{
 if (
INTCON.T0IF == 1)  // If TMR0 Overflowing
    
{
      
INTCON.T0IF 0;  // Réarmement du flag
      
TMR0 100;        // Offset du timer0
      
compteur++;           // 10ms time incrémente
      
if (compteur >= 100)  // 1 seconde d'écoulée
         
{
            
Debug =~ Debug// LED d'activitée
            
chrono++;   // On icrémente le chrono
            
compteur 0;   // On raz time
         
}
    }
}


//------------------------------------------------------------------------------
void main()
{
 
PORTB 0// PORTB en digital
 
TRISB 0b00000100// RB1 Out RB2 IN

 
PCON.B3 1// 4Mhz oscillator

 // configuration TIMER0
  
OPTION_REG 0b10000101// pull up disable,presc 1:64
  
TMR0 100;
  
INTCON 0x80;  // GIE activé,  l'INT timer0 n'est pas encore activée

// Initialisation Variable
pause1heure pause15minutes alarme3minutes chrono compteur ;

Signal 0;

for (
i=0i<=5i++)
 {
    
Signal =~ Signal// on inverse la led
    
delay_ms (350);
 }

 
//------------------------------------------------------------------------------
 
while(1){

 
//-------------------------   TEST VOLTCHECK  -----------------------------
    
if (VoltCheck == 1)   // Contact maintenu
        
{
          
delay_ms(50);
            
            if (
VoltCheck == 1)    
                {
                   
pause1heure pause15minutes alarme3minuteschrono compteur ;
                   
T0IE_bit 0;  // On arrete le chrono
                
}
            else
                {
                 
delay_ms(50);         // Pause antirebond
                 
if  ((pause1heure==0) && (pause15minutes==0))
                     {
                       
delay_ms(1000);         // Pause detection d'impulsion
                       
if  (VoltCheck == 1)   // C'était juste une impulsion
                           
{
                             
pause1heure 1;       // On fait une pause d'une heure
                             
pause15minutes 0;
                           }
                           else              
// Le contact est toujours pas maintenu
                           
{
                             
pause15minutes 1;   // On attend 15 minutes
                             
pause1heure 0;
                             
Signal 0;
                           }
                       
chrono 0;
                       
compteur 0;
                       
T0IE_bit 1;          // On lance le chrono
                     
}
                }
        }
//-------------------------   ATTENTE 15 MINUTES   -----------------------------
      
if ( pause15minutes == 1)
        {
            if (
chrono >= 15)
               {
                  
pause15minutes 0;    // On arrete la pause 15 minutes
                  
alarme3minutes 1;    // On active l'alarme pour 3 minutes
                  
Signal 1;            // On active l'alarme
                  
chrono 0;            // RAZ du chrono
                  
compteur 0;              // RAZ de l'offset

               
}
        }
  }
 }
 
C'est en faisant des erreurs, que l'on apprend le mieux !!!

[Programmation] La gestion de Fonction
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#49 Message par Jérémy » mar. 6 sept. 2016 20:37

Si tu me laisse un peu de temps je vais faire le montage sur ma carte Easy PIC car la c'est quand même galère de débugger a distance !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

[Programmation] La gestion de Fonction
HVDifusion
Débutant
Débutant
Messages : 43
Enregistré en : décembre 2015

#50 Message par HVDifusion » mar. 6 sept. 2016 20:43

Oh easy pic le must mdr.

Si un jour je programme plus et mieux j'achète cette plaque elle est géniale.

Prend ton temps si tu veut le faire sur easy pic pas de soucis.

Et si je serais riche je te payerais chère pour que tu me donne des cours lol.

Bon j'ai tester le programme :

J'enlève le pontage,la LED DEBUG clignote avec COMPTEUR puis après 15s la LED SIGNAL passe a 1.

Comme tu la bien écrit dans le programme donc cette partie fonctionne correctement ainsi que le timer.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 130 invités