Actuellement en charge d'un projet de centrale de mesure, j'ai opté pour le microcontrôleur Atmega1284p. Je code sous l'IDE d'Arduino et j'utilise mes 8 entrées analogiques, seulement je me retrouve confronté à un sacré problème... je vous avoue n'avoir pas encore lu la datasheet de 400 pages en entier et pourtant j'en ai parcouru un bon bout.
Initialement, mon problème était que "à vide" (comprendre Vs des capteurs = 0V car rien de connecté), le CAN d'Arduino me renvoie une valeur comprise entre 200 et 300 environ.
J'ai donc décidé d'utiliser une résistance de 10k pour tirer la patte à la masse lorsqu'il n'y a rien de connecté. Hourra ça marche, mais un autre problème m'inquiète encore plus...
Imaginons que je teste le débit et la température. Bah si je mets 5V sur la température, ça me met une valeur de 1023 du CAN sur le débit... En revanche lorsque j'alimente la pin "débit" en 5V celle-ci reste à une valeur du CAN de 0...
Bref c'est assez tordu et compliqué à expliquer, et surtout pour moi, inexplicable.
Pour résumer le comportement des pins n'est pas du tout logique, alors que le micro-contrôleur est neuf et que j'ai vérifié au moins 119 fois l'assignation des PINS sous Arduino -_-
A noter également que j'ai essayé plusieurs manières de définir l'alimentation des ports analogiques à 5V (via AVCC et AREF avec analogReference()). Mais cela ne change rien... de toute façon j'ai lu que par défaut celle-ci était fixée à 5V car j'utilise une Arduino UNO pour uploader mes programmes et pour la communication USB (en effet je développe en parallèle une appli Processing).
Je souhaite vraiment résoudre ce problème au plus vite car le projet presse et je ne vois pas comment me sortir de cette galère !
Conscient d'aovir été très imprécis je vous invite à me demander des précisions si vous pensez connaître la source du problème.
Déjà est-ce que tu jettes à la poubelles au moins la première mesure sur chaque pin ? En effet il y a un CAN multiplexé sur 8 entrée. Ca veut dire que si tu lance un nouvel analogread(), le multiplexeur va choisir le bon "canal", puis le CAN "fait la mesure". Hors il n'est pas rare qu'il que l'entrée du CAN reste chargée par la précedente mesure, et que donc elle soit faussée. Ce phénomène se voit particulièrement quand on fait des grand écart comme tu sembles l'expliquer. Perso quand je veux être sur de mon coup et que j'ai pas d'autres impératifs j'écris une routine du genre :
int lectureA(int pin) {
for(int i=0;i<10;i++) analogread(pin);
float average=0;
for(int i=0;i<10;i++) average += analogread(pin);
return average/10.0;
}
La je joue vraiment la grosse sécurité, ce qui se paie par une certaines perte de temps. Mais dans la plupart des applications c'est négligeable, à toi d'adapter.
En adaptant ton code et après l'avoir implanté ça ne change rien malheureusement. Pour rentrer un peu dans les détails j'ai mis tout le port analogique à la masse via des résistances de 10k sauf la pin A0 (40) qui est reliée normalement à la tension de sortie du capteur de débit, que j'ai ici forcée à 5V, et magie le CAN me retourne 0 sur cette pin mais 1023 sur la pin A2, utilisée pour la tension de sortie du capteur de pression que j'ai fixée à la masse... A noter que seul la pin A2 me retourne 1023 ...
C'est à n'y rien comprendre Quelqu'un a-t-il déjà utilisé ce micro-contrôleur pour traiter des signaux analogiques (Atmega1284p) ?
Pour préciser la pin A2 me retourne 1023 mais la pin A1 me retourne une valeur variant de 50 à 60 (elle est aussi à la masse...)
Je sais que cela ressemble à une mauvaise assignation des pins mais je vous assure que ce n'est pas le cas, ou alors les numéros des pins ont été inversés par Atmel!!!
Oui, d'ailleurs j'ai dû télécharger le fichier texte qui décrit les paramètres à appliquer à l'Atmega1284p qui ne se trouve pas dans ma version de l'IDE (1.6.0). Ceci dit ce que tu dis m'interpelle, si ça vient de là ça pourrait tout expliquer, je vais me pencher sur le fichier en question.
Par ailleurs connaissez-vous une version d'IDE qui prend en charge l'Atmega1284p seul ? En effet il n'est pas (encore) intégré à même une Arduino, je suis sur une version "standalone".
Breman:
Je sais que cela ressemble à une mauvaise assignation des pins mais je vous assure que ce n'est pas le cas, ou alors les numéros des pins ont été inversés par Atmel!!!
Sauf que Atmel et Arduino n'ont rien à voir (en plus du fait que c'est open source donc chacun fait ce qu'il veut). J'ai majoritairement trouvé ce pinout :
Ok merci. Bon, ça semble bien venir d'un mauvais mapping (pourtant ça semble pas très logique puisque que ce soit "dans un sens ou dans l'autre" les pins ne se suivent pas de 0 à 7 ou de 7 à 0...).
J'ai chopé la config sur GitHub - maniacbug/mighty-1284p: Mighty 1284P Platform for Arduino qui est donc la même que la première que tu as postée et du même coup la même que je pensais utiliser... Cela dit vos réponses me font vraiment penser à un problème de mapping que je soupçonnais déjà... je vais réinstaller la config dans le doute, merci de votre aide.
Bon et bien après réinstallation du fichier de config, CA MARCHE! un grand merci, même si la réponse était assez évidente (oui je me sens un peu con ).
Les dernières versions de l'IDE permettent de charger une "extension" donnant le support du 1284 dans différentes configurations. Il faut utiliser le board manager accessible par Outils/Type de carte/Boards Manager.