Signal analogique avec pic16f877a

Bon j’ai testé et je pense que mes LEDs consomment trop :sweat_smile:
Du coup histoire de garder la même alim je voudrai piloter les leds par la masse mais je vois pas bien comment faire a part avec les diodes pilotables (j’ai oublié le terme exact). Vous en pensez quoi ?

Par la masse avec tes LED’s ce sera kifkif, transistors ou réseau de transistors indispensables.
Ou en trouver avec faible consommation (2mA).
Autre solution : multiplexer l’allumage des LED’s :scream:
Les adressables auxquelles tu fais allusion (WS2812A et consorts) seraient une solution car leur alim pourrait être prise directement sur ton 5V. Mais il faut générer le train d’impulsions pour les activer, ça va se compliquer…
Si tu es amené à continuer d’expérimenter, il est intéressant de te faire une petite plaque avec 10 LED’s et 10 transistors NPN tout venant et les résistances qui vont bien. Tu ajoutes de la barrette sécable pour connecter facilement.

A mon avis, le problème est ailleurs!..

Il peut ne laisser que 2 ou 3 led’s connectées pour voir.
Quelle valeur pour les résistances en série ?

J’espère qu’il utilise bien une R pour limiter le courant, sinon la led, COUIC !..

Bonjour a tous. Merci pour vos réponses. J’ai pas eut le temp de m’y remettre mais je vais retester ça ce weekend, notamment en rajoutant les LEDs une par une.
J’aurai une autre question. Est ce que je peux traiter la valeur de adressh/adressl directement comme un entier ou est-ce qu’il faut que je fasse la conversion binaire/décimal moi même ?

Difficile de répondre à une question que l’on ne comprend pas.
Pourriez vous détailler ?

J’ai tendance à dire que tu nous parles des 2 registres qui contiennent le résultat de conversion de l’ADC. Tu ne peux pas les utiliser directement, il faut faire une conversion dans un type d’entier qui « encaisse » 10 bits.

Dans ce cas, il faut également tenir compte du paramètre de justification!

Left justify, ou right justify dans le paramétrage initial du résultat ?

1 « J'aime »

Je suppose que le prog est en C

Effectivement la routine de conversion du résultat doit tenir compte de ce qui a été mis dans ADCON1.ADFM, sinon le résultat va être assez zarbi :wink:

image

Ca ne change rien!
Il faut connaitre cette option du paramétrage AD, pour savoir comment le résultat de la conversion a été stocké.
Bit 7 d’Acon1

Zut, tu m’as grillé au poteau!

Dans mon programme je justifie sur adressh et ignore les deux derniers bits qui se trouve dans adressl. Donc si je comprends bien vos réponse je ne peux pas écrire un truc du style :
int a = adressh

Si tu es certain que ta valeur tient sur les 8 bits tu peux effectivement travailler directement avec le registre. Mais gare aux surprises.

C’est cool si on peut faire ça. J’aurai juste à mettre un offset pour prendre en conte que ma plage de valeur commence a 2^2 au lieu de 2^0

Ba non!

Ca limite simplement la résolution du convertisseur AD!
Au lieu d’avoir une résolution sur 10 bits, elle ne sera que sur 8.
Vous aurez donc Vref / 256 par pas de mesure, au lieu de Vref / 1024 par pas.

Oui je viens de réfléchir et je me rend conte que c’est plus compliqué que juste un offset mais ok je vais me démerder comme ça

Tu peux travailler avec les 8 bits de poids faible uniquement, mais uniquement si tu es certain que la tension à mesurer ne va pas monter au dessus de celle qu’il est possible de coder sur 8 bits.
Dans notre cas : 5V et 1024 pas, la mesure sera limitée à quelques 1,24V.

Si on veut rester sur 8 bits, il vaut mieux cadrer sur les poids forts en faisant un décalage de 2 bits avant l’écriture de l’octet. Mais franchement, autant apprendre à travailler en 16 bits. En C, ce n’est pas plus compliqué.
Enfin, ne pas hésiter à passer sur les processeurs 32 bits, un PIC32 démarre autour de 2€, probablement moins cher que les PIC16F, que l’on peut qualifier d’obsolètes. Cela permet ensuite d’envisager des applications plus ambitieuses sans être limité par un matériel ancien.