bonjour,
je regarde actuellement le LCD LCM1602C qui est livré avec le kit de dmarrage Arduino
j'ai bien compris l'usage des pins D0 à D7 pour le codage de l'affichage en 4 bits ou en 8 bits
j'ai bien jué avec l'hello World
mais quelqu'un peut il me préciser les différences de fonctionnement en 4 ou en 8 bits ?
la différence est où ? juste dans une plus large série de caractères affichables ? (du style Maj/Min, caractères spéciaux ...)
Nan la différence est au niveau de la vitesse. En 4 bits, on transmet les données par 4 bit, en 8-bit par paquet de 8 bits donc deux fois plus rapidement. Sur un LCD de ce type la vitesse n'est pas primordiale donc le mode 4 bit suffit largement et permet d'économiser 4 pins
je l'ai monté avec 2 potentiomètres pour régler le contraste (1 pour le contraste du fond, l'autre pour le contraste des caractères)
j'ai monté uncapteur de T°
et j'affiche la T°
bref rien de bien révolutionnaire
tout est OK durant quelques dizaines de secondes (entre 10 et 50s) puis l'afficheur s'affole et j'ai un défilement anarchique de n'importes quels caractères
de temps en temps, mon affichage revient mais avec des T° du style -1700°
j'ai ajouté une sortie sur le moniteur série histoire de surveiller mon capteur de T° et là les chiffres sont bons
donc mon code semble OKn le capteur de T° aussi
c'est mon LCD qui pédale dans la semoule ou un pb de branchement ?
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Mx:");
lcd.print(tmax);
lcd.print(" Mn:");
lcd.print(tmin);
int sensorval = analogRead(sensorpin);
float temp = (((sensorval/1024.0)*5.0)-0.5)*100;
lcd.setCursor(0, 1);
//le capteur est sensible et varie beaucoup
//il faut donc en calculer la moyenne permanente
temptot = temptot + temp;
tempmoy = temptot/compteur++;
lcd.print(" Temp : ");
lcd.print(tempmoy);
Serial.println(tempmoy);
//attends 5 secondes avant de calculer les min max du fait de la variation du capteur
if (millis() > 5000)
{
if (tempmoy > tmax) {tmax = tempmoy;}
if (tempmoy < tmin) {tmin = tempmoy;}
}
}
Normalement avant de faire un nouvelle affichage (avant tout tes print() donc) on fait un lcd.clear() (pas sûr que ça résolve ton problème mais sait-on jamais)
Sinon problème d'alim "classique" sur les lcd. Faut rajouter un condo polarisé >
100µF+ 1 de 100nf aux bornes du lcd.
un gros condo permet de répondre aux appel de courant du LCD et donc de stabiliser la tension en évitant qu'elle chute brusquement. Les condensateurs plus petits permettent de filtrer les parasites. je suis pas du tout un spécialiste dans le domaine du filtrage, mais c'est un problème courant et ce sont des valeurs "typiques" à utiliser (je mets des " " car évidemment ça dépend du type de parasite et de la taille du consommateur)
Il y a un problème dans le calcul de ta moyenne. La variable compteur est un int donc au bout de 32767 itération elle devient négative. Au bout de 65536 itération elle repasse par 0.
Pour régler les problèmes de bruit de mesure, il est plus simple de faire :
soit une moyenne glissante sur un certain nombre de mesures successives. On place les mesures dans un tableau et on calcul une moyenne sur ses éléments. A chaque itération on remplace la plus ancienne valeur
soit un filtre passe-bas simple de type tempFiltre = k * tempFiltre + (1-k) * temp. temp mesure courante, tempFiltre valeur précédente. k supérieur à 0 et toujours inférieur à 1. k de l'ordre de 0,75 pour un filtrage pas trop énergique. Plus k est élevé plus l'historique est prépondérant sur la mesure actuelle.