j'essaye de raccorder un anémomètre (contact ILS) sur un PCF8583. L'objectif est d'avoir un composant autonome à faible consommation qui enregistre pendant 30 minutes les impulsions issues de l'anémomètre. Trente minutes, c'est la durée du sommeil profond de l'ESP32. actuellement Je fais des essais en simulant les impulsions par une sortie PWM de l'ESP32 la plage de fréquence ciblée va de 1 à 200hz. Soit de 2.4 à 240 kM/H de vent.
J'obtiens le même résultat que toi (1666665 en boucle) .....si je câble mal le PCF8583 sur le bus I2C ou si je ne mets pas à la masse son entrée A0.
Bien câblé il compte les fronts descendants reçus sur son entrée OSC0 OSCI
La bibliothèque indiquée date de 7 ans et , malgré la mise en garde du compilateur, donne de bons résultats avec un ESP32 .
tsalut,
je crains que les paramètres de la fonction LEDC le fonctionnement du test
avec une fréquence de 50hz et une précision 20 bits et une plage de 50% cela fonctionne voir image. reste a trouver la cause de la répétitions des valeurs?
avec une fréquence de 50hz et une précision 8bits et une plage de 50% cela donne la même trace que #1 voir image
comme indiqué par @uaem avec une résolution de 8 bits tu ne peux pas descendre à 50Hz (lances l'exemple ledcfrequency.ino indiqué dans ton fil de discussion précédent pour connaître Fmin et Fmax pour chaque résolution, y compris pour résolution > 16 dans le cas de l'ESP32)
Pour le premier cas je pense que l'intervalle entre deux lectures du contenu du PCF8583 est peut être un peu court vue la fréquence qui sort sur ton GPIO13,
Du coup tu risque de revenir lire le PCF8583 avant qu'il ait eu le temps de s'incrémenter ...d'où les doublons
Ceci dit quand on délègue le comptage à un compteur extérieur c'est pour le laisser faire son job, venir le relever de temps à autre , pas pour suivre en permanence son comptage à une unité près.
Le code ci dessous ne me donne pas de doublons :
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "PCF8583.h"
// declare an instance of the library for IC at address 0xA0
// A0 pin connected to ground)
PCF8583 counter(0xA0);
void setup() {
delay(4000);
Serial.begin(115200);
// Produire un signal carré à 1 Hz sur GPIO14
ledcAttach(14, 1, 20); // GPIO14, 1Hz, Résolution 20bits
ledcWrite(14, 524288); // GPIO14, rapport cyclique 50% pour une résolution de 20bits
// Initialialiser le PCF8586 en mode Comptage d'Impulsions et non en mode RTC
counter.setMode(MODE_EVENT_COUNTER);
counter.setCount(0);
}
void loop() {
// relever le compteur toutes les secondes
Serial.println(counter.getCount());
delay(1000);
}
salut,
j'ai de nouveau des dificultés éventuèlement de cablage mais OU?
pour diagnostiquer j'utilise deux codes utilitaires le premier test le réseau I2C et indique le nombre et l'adresse du ou des esclaves présent. Le deuxième configure uniquement le PCF8583 en compteur d'impulsion puis va lire le registre dans le PCF pour vérifier qu'il est bien configurer.
code du test I2C
#include <Wire.h>
void setup() {
Serial.begin(115200); // Configurer le moniteur série
while (!Serial) {
// Attendre l'ouverture du moniteur série (utile sur certaines plateformes)
}
Serial.println("Scan du bus I²C en cours...");
Wire.begin(); // Initialiser la communication I²C
int devicesFound = 0;
for (uint8_t address = 1; address < 127; address++) {
Wire.beginTransmission(address);
if (Wire.endTransmission() == 0) {
Serial.print("Périphérique I²C détecté à l'adresse 0x");
if (address < 16) Serial.print("0"); // Ajouter un zéro pour les adresses < 0x10
Serial.println(address, HEX);
devicesFound++;
}
}
if (devicesFound == 0) {
Serial.println("Aucun périphérique I²C détecté.");
} else {
Serial.print("Nombre total de périphériques détectés : ");
Serial.println(devicesFound);
}
}
void loop() {
// Rien à faire dans la boucle principale pour ce test
}
J'ai éxécuter ce code je joins la trace du moniteur
tu es un peu trop avare en informations détaillées
Dans ce fil de discussion on ne connais pas ton montage , dans un autre fil de discussion (pourquoi
multiplier les fils ?) la photo n'était , du moins pour moi, pas exploitable.
tu parles de 'codes utilitaires' pour diagnostiquer , le scanner I2C en est-il?
si oui fait il apparaître des pb ?
EDIT : je découvre qu'entre temps tu as modifié le message précédent et ajouté des informations.
Lorsque tu constates 1666665 en boucle , sans toucher au montage, lances le scanner I2C et donnes ici son résultat
(pour moi ce 1666665 en boucle s'obtient (avec la bibliothèque que nous utilisons tous les 2) quand le PCF8586 est mal câblé, je l'obtiens à tous les coups si je retire la liaison SCL ou SDA ou l'alimentation du PCF8586)
Mal alimenté , avec des impulions envoyées sur OSC0 (fil blanc).....et OSCI forcé à Vdd .. le comptage ne peut fonctionner ....d'où le 1666665 produit en boucle dans ce genre de situation par la bibliothèque utilisée .
relies le fil blanc à OSCI , patte 1 du PCF8586 en retirant tout ce qui actuellement y est raccordé, sauf éventuellement le petit condensateur. Ne relies rien à OSCO.
J'ai ensuite repris le câblage sur la platine en essayant de le réaliser aussi fidèle que possible vis-à-vis du schéma. Il n'a plus de résistance de pull up donc la résistance de pull up interne, seul le condo de 100 nano farad reste entre le GND et OSCI. Je le soumets.
J'ai ensuite vérifié au fluke que chaque point qui devait avoir du 3,3v l'avait bien et de même pour le GND. j'ai aussi mis le fluke sur OSCI et l'affichage sur le fluke bagotait bien.
j'ai ensuite passé le code I2C pour vérifier que l'esclave 0x50 était bien reconnu, puis le code compteur pour vérifier que le PCF était bien paramètrè le regristre 0 contenait bien le code 0x20.
Malheureusement le résultat est toujours la même trace moniteur
1666665
1666665
1666665
1666665
1666665
1666665
peux-tu me dire dans ce code, quel est le rôle de la ligne 6 delay(4000);
retarder le premier println() par rapport au démarrage pour éviter, dans mon cas , les 'signes cabalistiques' qui sortent parfois en tête dans le moniteur (ce sujet a fait l'objet d'un fil de discussion récent)
Pour le reste je suis, pour l'instant, trop pressé pour répondre.
As tu testé un autre exemplaire de PCF8586 au cas ou ton forçage antérieur de VDD sur OSCO aurait abîmé le premier et le rendant incapable de compter les impulsions reçues ?
salut,
j'ai tester 5 composants numérotés de 1 à 5 sachant que le 1 est celui qui était utilisé. j'ai tester successivement le 4 autres, le résultats et identique.
j'ai vu que dans les exemple de code, il y a en un pour tester le PCF en RTC, J'ai utiliser ce code en modifiant le code pour l'adresse de l'esclave en 0X50 et la vitesse du moniteur à 115200. Pour le câblage j'ai retirer le fil sur OSCI.
la trace du moniteur n'est pas encourageante
configsip: 0, SPIWP:0xee
bonjour,
pourrais tu nous dire, si ce tableau de plages de fréquence par rapport au nombre de bits de résolution est disponible jusqu'à 20 bits qui le maximum pour l'ESP32.
cdlt