Salut
Bon apres d'autres recherches, je vais definitivement laisser tomber les cours de Bigonoff, pour le moment biensur, par manque de temps et me concentrer sur de la programmation en C, qui pour beaucoup est plus accessible pour les debutants... comme mouah
Bon donc je vais utiliser une PIC16F876 et organiser mon programme comme suit:
1 - Je recupere l'info analogique sur une entree ANA du micro, RAO/AN0 par exemple.
2 - je stocke la valeur num dans un tableau et quand j'ai accumule 5 valeurs, je fais la moyenne.
3 - Cette moyenne est ensuite transmise sur un port serie sous une forme de trame bien particuliere
Pour la partie 1:
J'ai fais des recherches sur la partie CAN du PIC et j'ai trouve differente version de comment faire...
Sur la data sheet francaise:
Programmation
Si des entrée de PORTE sont utilisées, placer le bit TRISE,PSPMODE à 0
Configurer les E/S en Analogique/digital/Référence (ADCON1)
Configurer les entrées analogiques en entrées (TRISA, TRISE)
Définir l'horloge de conversion, Valider le module (ADCON0)
Choisir le canal à convertir (ADCON0)
attendre temps d’acquisition (20 à 25 µs dans le cas général)
Lancer la conversion, GO_DONE = 1 (ADCON0)
Attendre fin de conversion, GO_DONE = 0 ou interruption si validée
Lire le résultat
Arrêter le convertisseur ou recommencer au point 6
SUr le site sympa de: http://angeliz.free.fr/langagec/howto_can.htm
Description des fonctions C
La fonction InitA_D configure l'entrée RA0 en mode analogique,
par l'intermédiaire des bits PCFG.
L'horloge de conversion est reglée sur 32Tosc, bits ADC.
Le bit ADFM positionne le résultat contenu dans ADRESH et ADRESL avec
une justification à droite, les six bits de poids forts de ADRESH sont de ce fait à 0.
L'utilisation des fonctions demande de les inclure dans votre programme
configurer RA0 en entrée, et déclarer les variables globales ci-dessous.
int iValAD, iResultat;
char cT;
Un simple appel de la fonction et iResultat récupère la valeur sur dix bits de la conversion.
La résolution est d'environ 5mV (1 bit = 5 mV).
iResultat=ConvertAD();
void InitA_D(void)
{
ADCS1=1; ADCS0=0; // Fosc 32
CHS2=0; CHS1=0; CHS0=0; // sélection de l'entrée analogique RA0
PCFG3=1; PCFG2=1; PCFG1=1; PCFG0=0;
ADFM=1; // justification bit à droite registre de réception ADRESH ADRESL
}
int ConvertAD(void)
{
ADON=1; // activation du convertisseur
cT=6;
while(cT--); // tempo de 23µs
iValAD=0;
ADGO=1; // démarrage conversion
while(ADGO); // si ADGO passe à 0 fin de conversion
iValAD=ADRESH;
iValAD<<=8;
iValAD|=ADRESL; // le résultat est contenu dans iValAD
ADON=0; // convertisseur arrêté
return iValAD;
}
Donc ma petite question est de comprendre les differences, je n'ai pas envie de recopier comme un cochon et ne rien comprendre...
Qui pourra m'aider ??
Merci d avance