compte tours

Postby gibi » Wed Jul 25, 2007 12:00 am

Bonjour Yves,

Tu as de la chance, tu vas pouvoir te reposer pendant tes vacances. J'ai trouvé la solution. Voici mon code, il évite toutes erreurs lors d'hésitations multiples au passage de l'encoche.

#pragma INTERRUPT ir_Int0
void ir_Int0(void)
{
unsigned char k;
// le passage devant la fourche 1 déclenche l'interruption sur le font montant et
// sur le front descendant.

if (flag.bit.Cpt == true) // si mode comptage
{
flag.bit.bIR1 = IR1;
flag.bit.bIR2 = IR2;
if (flag.bit.bIR1 == false && flag.bit.bIR2 == true)
{
k=0;
}
if (flag.bit.bIR1 == true && flag.bit.bIR2 == false)
{
k=1;
}
if (flag.bit.bIR1 == false && flag.bit.bIR2 == false)
{
k=2;
}
if (flag.bit.bIR1 == true && flag.bit.bIR2 == true)
{
k=3;
}

switch(k)
{
case 0:
flag.bit.detectCpte = true; // entrée fourche comptage
flag.bit.detectDecCpte = false; // on n'est pas en mode décomptage
break;
case 1:
flag.bit.detectDecCpte = false; // on n'est pas en mode décomptage
if(flag.bit.detectCpte == true) // validation comptage
{
cpt++;
flag.bit.detectCpte = false;
if(cpt > MAXICPT)
{
flag.bit.Over=true;
}
else
{
flag.bit.Over=false;
}
}
break;
case 2:
flag.bit.detectDecCpte = true; // entrée fourche décomptage
flag.bit.detectCpte = false; // on n'est pas en mode comptage
break;
case 3:
flag.bit.detectCpte = false; // on n'est pas en mode comptage
if( flag.bit.detectDecCpte == true) // validation décomptage
{
flag.bit.detectDecCpte = false;
if (cpt > MINICPT)
{
cpt--;
if(cpt == MINICPT)
{
flag.bit.Null=true;
}
}
}
break;
}
}
}

Il y a peut-etre plus simple, mais comme cela le fonctionnement est impeccable.

Jean
gibi
 
Posts: 104
Joined: Fri Jan 17, 2014 4:36 pm

Postby ymasquel » Wed Aug 01, 2007 12:00 am

Bonjour Jean,

Content que tu aies une solution qui fonctionne. Je pense que ton code est un peu long mais s'il te permet de bien assimiler l'ensemble des évènements qui peuvent se produire dans ton montage c'est le principal.
Bonne continuation.

Amicalement, Yves.
Amicalement,
Yves.
ymasquel
Site Admin
 
Posts: 3392
Joined: Thu Jan 02, 2014 10:44 am
Location: Oise (60)

Postby gibi » Wed Aug 01, 2007 12:00 am

Bonjour Yves,

J'ai un peu réduit la longueur du code et tout se passe bien.
Le plus simple aurait été de placer une interruption positive (par ex) sur chaque fourche et de vérifier l'état des entrées, mais je préfère garder les interruptions pour ajouter un petit fréquencemètre et déterminer la vitesse (en t/mn) d'une perceuse ou d'un petit moteur bruhless.
A propos, vois-tu d'autres applications autour de ce thème : comptage et interruptions ?

Amicalement,
Jean
gibi
 
Posts: 104
Joined: Fri Jan 17, 2014 4:36 pm

Postby ymasquel » Wed Aug 01, 2007 12:00 am

Bonjour Jean,

Les modules de comptage dans les micro-contrôleurs sont également bien pratiques pour mesurer des durées, donc il est possible de calculer :
- des distances (echo d'une salve d'ultra-sons ou de lumière - plus difficile);
- des vitesses d'objets en déplacement (même principe mais au lieu de mesurer le temps que met la salve à revenir en écho tu mesures l'écart de fréquence entre les impulsions émises et celles revenues en écho) ce qui fait un cinémomètre radar personnel;
- le temps qu'il faut à un coureur pour quitter le starting-block lorsque le starter a donné l'ordre du départ;
- le temps que met une capacité à atteindre une certaine tension quand on la charge à travers diverses résistances (démonstration des constantes de temps) tu utilises également le module comparateur dans cette application;
- ...

Il y en a d'autres, il suffit de laisser couler ses idées.

Amicalement, Yves.
Amicalement,
Yves.
ymasquel
Site Admin
 
Posts: 3392
Joined: Thu Jan 02, 2014 10:44 am
Location: Oise (60)

Previous

Return to R8C/13 (01-2006)

Who is online

Users browsing this forum: No registered users and 1 guest