Signal analogique avec pic16f877a

Polling du bits ? C’est a dire?

Scruter le bit 2 dans une boucle, avec sortie de la boucle quand le bit en question passe à zéro.

Il n’est pas interdit d’utiliser des sortie d’un port libre, pour faire varier le niveau au fur et à mesure du déroulement du programme.

Celà vous permettrait de voir ce qui se passe à divers endroits stratégiques.

(répéter l’état du fameux bit, par exemple)

Vous sauriez au moins s’il varie ou pas.

Le code de base fait bien le polling, il ne manquait que l’activation de l’ADC.

Donc le code pour résumer :

ADCON0.GO = 1; // lance l’acquisition
while(ADCON0.GO){}; // boucle ici tant que le résultat de la mesure n’est pas disponible dans le registre ADRESH car à ce moment le PIC repasse ADCON0.GO à zéro pour signaler la fin de l’opération

Attention tout de même aux LED’s car dans les chinoises il y a de tout. Ce serait bien de mesurer la consommation d’une pour en avoir le coeur net. Autre test : la mettre sous 5V avec une résistance de 1,5k ou 2,2k en série : si elle éclaire plein pot c’est une faible consommation.

1 « J'aime »

Comme il y a un USART sur ce PIC tu peux aussi utilement faire une trace sur un terminal genre CoolTerm, ça aide bien. Bien entendu il faut un convertisseur série/USB genre CH340G. Eviter les FDTI chinois : le driver détecte que la puce est un fake et ne fonctionne pas. Du coup il faut installer un vieux driver et en bloquer les mise à jour, mais bonjour les blocages des ports virtuels.

L’idée est bonne, mais c’est une nouvelle source d’erreur potentielle.

Notre ami va devoir se farcir le chapitre de l’ USART !!!

Selon moi il vaut mieux commencer par l’USART que par l’ADC, ça aide à savoir ce qui se passe :crazy_face:

Bah, on peut utiliser le Port C, D, ou E, pour afficher le résultat de pointeurs internes, judicieusement disposés au long du programme.
Il est bien rare que l’on n’ait pas une ou deux pinoches inutilisées sur ces micros à 40 pattes.

Un coup d’oscillo sur les différents bits du port, et l’on a rapidement une idée d’ou le programme ne passe pas, ou encore quand les indicateurs ne bloblottent pas comme prévu.

Je me dépanne souvent de cette façon.

C’est ce que notre ami veut faire, une visualisation du contenu binaire du registre.
Les débutants ont rarement un oscillo, du coup c’est le moment de se bricoler une sonde logique.

Y’en a une belle sur mon site, peut-être un poil compliquée mais j’ai toujours des PCB vierges de dispos. :wink:

1 « J'aime »

Alors la vous me perdez complet :sweat_smile:
Donc si j’ai a peut près compris un code comme ç, serait mieux :

ADCON0 = 0b10000001
while(1){
ADCON0.GO = 1
PORTC.F0 = ADCON0.GO; état bit GO
while(ADCON0.GO){}
PORTC.F0 = ADCON0.GO; état bit GO
PORTB = ADRESH

On peut dire que de refléter l’état du bit ADCON0.GO sur le PORTC c’est ceinture et bretelles…
Et il manque les « ; » en fin de ligne, XC8 ne va pas aimer…
Sinon ça devrait fonctionner.

ADCON0 = 0b10000001 <<<
Il est bien ON

J’ai vu après coup et édité ma réponse :slight_smile:

Il est facile de se faire avoir!
Plus haut, j’ai fait la même chose en inversant une condition.

Merci je vais tester ça ce soir

Pour les points virgules, tris etc… Je les pas oublié, juste pas mis dans ma réponse pour faire light

Il existe la balise « Code » pour publier sur le forum. :wink:

1 « J'aime »

On gribouille si rarement du charabia sur le forum, qu’on aura déjà oublié pour la prochaine occasion!.. :grinning:

surement, mais elle n’est pas proposée dans les icônes en tête de réponse :wink:

Merci pour l’info Jacques.
D’un autre côté, c’est très rare de publier du code sur ce forum . :mort_de_rire: