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

traduction du C en mikroC
lakyou
Membre
Membre
Messages : 3
Enregistré en : avril 2017

#1 Message par lakyou » dim. 2 avr. 2017 17:16

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

traduction du C en mikroC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » lun. 3 avr. 2017 12:05

bonjour,

quel MCU ?
quelles sont les pins utilisées ?
quel compteur (timer 0, Timer1, timer2 ...)
Init du programme ?
Aide toi, le ciel ou FantasPic t'aidera

traduction du C en mikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » lun. 3 avr. 2017 12:43

 ! Message de modération :
Bonjour à tous et Bienvenue lakyou,

Petit rappel des règles du forum :
- évitez le langage SMS: règles.
- Mettre le code entre les balises prévues à cet effet: procédure.

Merci également de fournir le maximum d'informations pour faciliter le travail des membres qui souhaitent t'aider. Une bonne description du probléme est un net avantage !

Bonne journée
C'est en faisant des erreurs, que l'on apprend le mieux !!!

traduction du C en mikroC
lakyou
Membre
Membre
Messages : 3
Enregistré en : avril 2017

#4 Message par lakyou » lun. 3 avr. 2017 12:50

Bonjour;
Le prog mentionné ci-dessus ce n'est q'1 programme téléchargé et moi je voudrais un prog en mikroC en utilisant soit un pic16f84 ou 16f628...et le codeur incrémental je peux le réaliser moi-même. merci

traduction du C en mikroC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » lun. 3 avr. 2017 16:30

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.
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

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