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
traduction du C en mikroC
bonjour a tous,
je cherche a controler le frond d'1 signal par pic issu d'1 codeur incremental pour savoir le sens....
j ai trouve 1 solution mais je veut la traduire en mikroC pour comprendre le prog pr l adapter selon mes besoins...voila donc le prog :
Code:
///////////////////////////////
#define SIG_A PIND.2
#define SIG_B PIND.3
#define INC_MAX 100
#define INC_MIN 0
/* Les lignes précédentes sont à ajuster
en fonction du codeur et du µcontroleur.
On peut par exemple les placer dans un fichier .h à part.
*/
#define INCREMENTER \
if (var<INC_MAX) var++;\
var_ab=(SIG_A<<1)+SIG_B;
#define DECREMENTER \
if (var>INC_MIN) var--;\
var_ab=(SIG_A<<1)+SIG_B;
unsigned var=0; //variables globales
interrupt[14] void gray() // interruption sur compteur (toutes les 1,6ms)
{
static unsigned char var_ab=0;
switch (var_ab){
case 0:if(SIG_A==0 && SIG_B==1) INCREMENTER
else if(SIG_A==1 && SIG_B==0) DECREMENTER
break;
case 1:if(SIG_A==1 && SIG_B==1) INCREMENTER
else if(SIG_A==0 && SIG_B==0) DECREMENTER
break;
case 2:if(SIG_A==0 && SIG_B==0) INCREMENTER
else if(SIG_A==1 && SIG_B==1) DECREMENTER
break;
case 3:if(SIG_A==1 && SIG_B==0) INCREMENTER
else if(SIG_A==0 && SIG_B==1) DECREMENTER
}
///////////
merci
je cherche a controler le frond d'1 signal par pic issu d'1 codeur incremental pour savoir le sens....
j ai trouve 1 solution mais je veut la traduire en mikroC pour comprendre le prog pr l adapter selon mes besoins...voila donc le prog :
Code:
///////////////////////////////
#define SIG_A PIND.2
#define SIG_B PIND.3
#define INC_MAX 100
#define INC_MIN 0
/* Les lignes précédentes sont à ajuster
en fonction du codeur et du µcontroleur.
On peut par exemple les placer dans un fichier .h à part.
*/
#define INCREMENTER \
if (var<INC_MAX) var++;\
var_ab=(SIG_A<<1)+SIG_B;
#define DECREMENTER \
if (var>INC_MIN) var--;\
var_ab=(SIG_A<<1)+SIG_B;
unsigned var=0; //variables globales
interrupt[14] void gray() // interruption sur compteur (toutes les 1,6ms)
{
static unsigned char var_ab=0;
switch (var_ab){
case 0:if(SIG_A==0 && SIG_B==1) INCREMENTER
else if(SIG_A==1 && SIG_B==0) DECREMENTER
break;
case 1:if(SIG_A==1 && SIG_B==1) INCREMENTER
else if(SIG_A==0 && SIG_B==0) DECREMENTER
break;
case 2:if(SIG_A==0 && SIG_B==0) INCREMENTER
else if(SIG_A==1 && SIG_B==1) DECREMENTER
break;
case 3:if(SIG_A==1 && SIG_B==0) INCREMENTER
else if(SIG_A==0 && SIG_B==1) DECREMENTER
}
///////////
merci
traduction du C en mikroC
traduction du C en mikroC
traduction du C en mikroC
traduction du C en mikroC
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
lakyou a écrit :...et le codeur incrémental je peux le réaliser moi-même. merci
encore faut-il nous en donner le caracteristiques ... on est pas devins.
pour un simple encoder, il faut au minimum
// ---- test encoder rotatif Keyes
// pin CLK 20 pulses par tour -> vert -> RB0
// pin DT 20 pulses par tour -> Jaune -> RB1
// pin SW= Switch repos=1 Appuyé=0 -> Orange -->RB2
pour valider le comptage , mais pas indispensable
on suppose alors que le PIC utilisé puisse gerer les interruption sur RB0
à chaque clock sur RB0 (pas (=angle de ) de rotation) => interruption => lecture etat RB1 pour defnir le sens de rotation
et comptage des pulses..
commence par chercher de ce coté
interruption RB0 dans la datasheet du 16F628.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 114 invités