lcd

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 ...)

merci

hummmm

ça n'a pas l'aire d'être tout à fait ce que je pensais
mais plus une question de vitesse de communication

j'ai bon ?

Salut,

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

ça confirme ce que j'avais lu

merci

bonjour,

suite à mes essais, j'ai un pb avec l'afficheur

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 ?

merci

ps : le code au cas ou ...

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11,5, 4, 3, 2);
const int sensorpin = A0;
int compteur = 1;
float temptot;
float tempmoy;
float tmin = 1000.0;
float tmax = 0.0;

void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}

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.

merci

pourquoi 2 condensateurs ?

bon le 100µF au - du LCD a réglé le PB

MErci

ps : mais si tu as une réponse à ma question sur les 2 condo je suis preneur

maintenant c'est le capteur de T° divague. Je vais ouvrir un autre post

encore merci

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)

Merci pour l'info

en tous cas, le "gros" règle déjà apparemment le pb

reste le lm35 qui pécouille

a+

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.

oui, c'est ce que je viens de voir

c'est ça qui fait sauter ma T° (enfin, la T° moyenne)

du coups, je suis passé sur une moyenne "glissée" sur une centaine de mesures

merci et a+

ps : au fait, j'ai rajouté une R220 sur le capteur et ça aide bien aussi ...