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

Un delay utilisant Timer0 entre deux if statement?
Bigheart39
Membre
Membre
Messages : 5
Enregistré en : janvier 2018

#1 Message par Bigheart39 » mar. 9 janv. 2018 16:02

bonjour, ceci est mon premier post sur ce forum

j' ai appris le pic utilisant le compiler mikroc

ma question comment je peut mettre un delay utilisant Timer0 d'un pic 16F877a ,entre deux if statement ?? :mur: :mur:
aider moi SVP :cry: :cry: ,merci Merci !

Un delay utilisant Timer0 entre deux if statement?
paulfjujo
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 784
Âge : 67
Enregistré en : juillet 2015
Localisation : 01120
Contact :

#2 Message par paulfjujo » mar. 9 janv. 2018 17:23

bonjour,

et bienvenu parmi nous ..

Bigheart39 a écrit : ma question comment je peut mettre un delay utilisant Timer0 d'un pic 16F877a ,entre deux if statement ?


Ta question n'est pas suffisament explicite pour qu'on puisse te donner un quelconque avis ..
Essaie de donner un exmple concret de ce que tu veux faire .
quelle est la FOSC utilisée sur ce PIC ?
L'outil MikroC Timer Calculator doit deja te fournir la base pour le timer0 ..



A suivre ..

Un delay utilisant Timer0 entre deux if statement?
Bigheart39
Membre
Membre
Messages : 5
Enregistré en : janvier 2018

#3 Message par Bigheart39 » mer. 10 janv. 2018 19:10

paulfjujo a écrit :bonjour,

et bienvenu parmi nous ..

Bigheart39 a écrit : ma question comment je peut mettre un delay utilisant Timer0 d'un pic 16F877a ,entre deux if statement ?


Ta question n'est pas suffisament explicite pour qu'on puisse te donner un quelconque avis ..
Essaie de donner un exmple concret de ce que tu veux faire .
quelle est la FOSC utilisée sur ce PIC ?
L'outil MikroC Timer Calculator doit deja te fournir la base pour le timer0 ..



A suivre ..


Salut a tous,merci palufjujo pour ta reaction rapide :bravo:
mon idee c d'ecrire une conditon if();mais entre la premiere if et la deusieme if(); un minimum du temps "time" <=4minutes :mur: :mur:

#define motor portb.f0
#define motor_dir trisb.f0

unsigned char time;
trisa.f0=0;=====================>je declare le pin a0 comme une entree
porta.f0=0;
.
.
.
while(1){

if(porta.f0==1 )/*la premiere fois la condition est directe realiser */=========(1)
{
motor=1;
}
.
.
.
if(porta.f0==1 &&time>=4minutes )/*pour la deusieme fois le pic assure un écart du temps pas moins de 4 minutes */==========(2)
{
motor=1;
}
else motor =0;


beh je travaille avec le celebre pic16f877a et une crystal de 20Mhz
merci
Merci !

Un delay utilisant Timer0 entre deux if statement?
Jérémy
Administrateur du site
Administrateur du site
Messages : 1882
Âge : 38
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » mer. 10 janv. 2018 21:10

 ! Message de modération :
Bonsoir,

Pour plus de clareté merci de mettre ton code entre balise code ! voici la procédure


Pour ton code ceci me chagrine

Code : Tout sélectionner

trisa.f0=0;=====================>je declare le pin a0 comme une entree


Mettre le registre à 0 correspond à mettre toutes les broches en SORTIE et non en entrée
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Un delay utilisant Timer0 entre deux if statement?
Bigheart39
Membre
Membre
Messages : 5
Enregistré en : janvier 2018

#5 Message par Bigheart39 » mer. 10 janv. 2018 21:47

Salut Jérémy
wi ta raison le port est un entrée donc :

Code : Tout sélectionner


porta
.f0=1;
trisa.f0=1;
 

Désolé pour ca car je ss encore dubétant :geek: ,avez vous des proposition a propos de ma question :idea: :idea: :?: ?
merci

Un delay utilisant Timer0 entre deux if statement?
Jérémy
Administrateur du site
Administrateur du site
Messages : 1882
Âge : 38
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » mer. 10 janv. 2018 22:04

Tu dois créer une temporisation . cette temporisation une fois le nombre de boucle nécessaire va lever un drapeau ( flag) t'indiquant que 4 minutes se sont écoulées .

Pour créer une tempo il existe plusieurs solutions ! c'est tu comment faire une temporisation sur interruption et la régler ?

PS attention au langage SMS STP.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Un delay utilisant Timer0 entre deux if statement?
Bigheart39
Membre
Membre
Messages : 5
Enregistré en : janvier 2018

#7 Message par Bigheart39 » jeu. 11 janv. 2018 13:11

bonjour
a propos de temporisation ,j'ai essyé avec le programme Timer ,en mettant le Timer0 comme un conteur c'est ce que j'ai trouvé :

Code : Tout sélectionner


char timer1
,timer2
void InitTimer0
(){
  OPTION_REG    = 0x86;
  TMR0       = 100;
  INTCON    = 0xA0;
}

void Interrupt(){
  if (TMR0IF_bit){
    TMR0IF_bit    = 0;
    TMR0       = 100;
   timer1++;
   if(timer1==100){ timer1=0; timer2++;}//le sitting est de 10 ms de delay *100fois=1seconde 
  }
}

le probleme n'est pas au timer mais comment je peut comparais entre la premiere if(1)et la meme if(2) en mettant en compte l'ecart désirer de 4 minute (par exemple) entre les deux [ if(1) = if(2) ] :mur: ......es'que je suis en bon sens ou bien vous me proposer d'autre chose ? :cry:
merci

Un delay utilisant Timer0 entre deux if statement?
paulfjujo
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 784
Âge : 67
Enregistré en : juillet 2015
Localisation : 01120
Contact :

#8 Message par paulfjujo » jeu. 11 janv. 2018 18:15

bonsoir,

4 mn => 240 sec

Code : Tout sélectionner




void InitTimer0
(){
  
OPTION_REG     0x87;
  
TMR0         61;
  
INTCON     0xA0;
}
 
void Interrupt(){
  if (
TMR0IF_bit){ 
    
TMR0IF_bit     0;
    
TMR0         61;
    
Cpt1++;
    if(
Cpt1>99)
    {
     
Cpt1=0;
     
Cpt2++;
     }
    
//Enter your code here
  
}
}








if(
  (porta.f0==1) ||  (Cpt2>240))
{
motor=1;

}
else motor =0;


donc si le moteur est en marche depuis plus de 4' , tu ne peux pas l'arreter
C'est ce que tu veux ..?
il faut penser à la suite .. il faudra bien l'arreter un jour ce moteur

ATTENTION :
Cpt2 sur 1 byte => 240,241..255,0,1,2..

nota: evite d'utiliser des variables "timer1" et "timer2"
c'est trop sujet à erreur et confusion avec les timer1 et timer2
utilise plutot Cpt0 et Cpt1 ou Cpt2
ou carrement
comptage_IT_Timer0
comptage_Seconde

Un delay utilisant Timer0 entre deux if statement?
Jérémy
Administrateur du site
Administrateur du site
Messages : 1882
Âge : 38
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#9 Message par Jérémy » jeu. 11 janv. 2018 23:17

Bonsoir,

J'avoue que ta formulation n'est pas très explicite. essaye de mieux expliquer ce que tu veux faire, pour que l'on puisse mieux t'aider.

Bigheart39 a écrit :Source du message if(timer1==100){ timer1=0; timer2++;}//le sitting est de 10 ms de delay *100fois=1seconde

Sur cette ligne , essaye de ne pas faire une comparaison d'égalité mais de supérieur ou égale, c'est une bonne habitude a prendre pour éviter les plantages.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Un delay utilisant Timer0 entre deux if statement?
Bigheart39
Membre
Membre
Messages : 5
Enregistré en : janvier 2018

#10 Message par Bigheart39 » ven. 12 janv. 2018 15:49

Bonjour
merci Jérémy ,vous étes raison ce que vous viens de dire la comparaison égale ou supérieur,la temporisation est obligatoire(pas minimum de time>=4minutes) ,mon projet il s'agit d'un régulateur de température "temp" ,ce régulateur doit assuré un écart de temps entre le déclenchement et l'enclenchement pas minimum de time>= 04 minutes

Code : Tout sélectionner


char temp
,temperature désirée;

void InitTimer0(){
  OPTION_REG     = 0x87;
  TMR0         = 61;
  INTCON     = 0xA0;
}
 
void Interrupt
(){
  if (TMR0IF_bit){ 
    TMR0IF_bit     
= 0;
    TMR0         = 61;
    Cpt1++;
    if(Cpt1>99)
    {
     Cpt1=0;
     Cpt2++;
     }
    //Enter your code here
  }
}

if(
  (temp>(temperature désirée+5) && (Cpt2>240))// 
{
motor=1;
}
if(
 temp<=temperature désirée) motor =0;
 

mais ce conteur est 1 byte peut etre lorsque l’exécution de code ce byte,CPT1=0;comme vous disiez :mur:
paulfjujo a écrit :Source du message ATTENTION :
Cpt2 sur 1 byte => 240,241..255,0,1,2..


Retourner vers « Langage C »

Qui est en ligne

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