Signal digital de 3V

Bonjour,

Je cherche à détecter le front descendant d’un compteur à gaz qui délivre un signal de 3V qui passe à 0V à chaque 0,1 litre pendant 10 millisecondes.
analogReference () ne marche pas et je ne sais pas si influence le seuil LOW/HIGHT de l’entrée digital 2 et en plus je veux commander par la suite un moteur brushless avec une commande 0-5V. Donc je voudrais juste modifier l’entrée 2.
J’ai vu que l’on pouvez modifier la datasheet, que la 2?
Comment faire?

#include <LiquidCrystal.h>
#include <LCDKeypad.h>

/**
 * Tachymétre minimaliste avec une carte Arduino
 */

// Bug-fix pour Arduino 1.0.6
#define NOT_AN_INTERRUPT -1
LCDKeypad lcd;       // création de l'objet LCD Touches

/* constantes pour la broche de mesure */
const byte PIN_SIGNAL = 2;
//analogReference (EXTERNAL);

/* Variables pour la mesure */
volatile unsigned long periode = 0;

/** Fonction d'interruption pour la mesure entre deux fronts */
void tick() {
  static unsigned long previousMicros = 0;
  unsigned long currentMicros = micros();
  
  /* Calcul le temps écoulé depuis le précédent front */
  periode = currentMicros - previousMicros;
  
  /* Met à jour la variable pour la prochaine interruption */
  previousMicros = currentMicros;
}

/** Fonction setup() */
void setup() {
  
  /* Initialise le port série */
  lcd.begin(16,2);
  
  /* Met la broche en entrée */  
  pinMode(PIN_SIGNAL, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(PIN_SIGNAL), tick, LOW);
  
  /* Permet une première màj de "periode" */
  delay(500);
}

/** Fonction loop() */
void loop() {

  /* Affiche le résultat de la mesure en litres/minute */
  lcd.print( (1000 * 60 ) / (periode * 10) ) ;
  delay(1000);
  lcd.clear ();
  }

Bonjour,

si ton arduino fonctionne à 5v, le niveau HIGH pour une entrée à 3v n'est pas garanti
si tu ne veux pas te servir d'une entrée analogique, tu peux t'en sortir en mettant une simple diode genre 1N4148 entre ton entrée 2 et ton compteur :
arduino --|>|-- compteur

et comme il y a du gaz en face, je rajouterais une résistance de 1k pour sécuriser le tout
arduino --|>|---[==]-- compteur

si ton arduino fonctionne à 5v, le niveau HIGH pour une entrée à 3v n’est pas garanti

En mode ceinture plus bretelle oui il n’y a pas de garantie.
Mais on dispose de la datasheet du microcontrôleur :

Pour les accès I2C la datasheet est formelle : la norme CMOS est appliquée et pour lire un niveau 1 logique il faut appliquer un niveau électrique supérieur ou égal à 3,8V.

Par contre pour les entrées digitales classiques Atmel fourni les courbes et un signal de 3V sera reconnu comme un niveau haut avec un micro Atmel avr .

Attention ceci ne concerne que les micro d’architecture avr, rien ne sera garanti avec un micro d’un autre fournisseur ou d’une autre architecture.

Avec le micro atmega328p de la carte UNO :

Lecture garantie niveau “0 logique”
328p_niveau_0.jpg

Lecture garantie niveau “1 logique”
328p_niveau_1.jpg

Hystérésis :

hysteresis_328p.png

Bonjour et pour aller plus loin et rester facilement comprehensible , vous pouvez aussi utiliser une simple fonction de mappage afin de convertir le 0 -> 3 V en 0 -> 5 V :

map(valeur,min,max,transMin,transMax);

ce qui donne ici :

valeurCapteurGaz5 = map ( valeurCapteurGaz , 0 , 3 , 0 , 5 ); ca ne modifie evidement pas la tension .

mais c ' est peut etre plus facile a utiliser ensuite pour gerer tes autres trucs .

En mode ceinture plus bretelle

qu'est-ce qu'ils entendent par threshold voltage ?
est-ce que c'est Vin High Min (ce qui serait clair pour tout le monde), ou bien la tension de basculage du mosfet d'entrée, à laquelle il faudrait aussi ajouter la tension d'hystérésis ?

C'est de l'hystérésis tout ce qu'il y a de plus classique.
Prenons une hystérésis de 0,1 V et un seuil de basculement bas centré sur 2V

Le basculement sur le front montant se fera pour 2V + hystérésis = 2,1 V
Le basculement sur le front descendant se fera à 2V.

Un circuit correctement conçu introduit toujours de l'hystérésis sur les seuils de basculement.
Cela évite que l'entrée "bagote " sur du bruit aléatoire --> tant que l'amplitude du bruit est inférieure à l'hystérésis le circuit reste stable..

Dans le cas des figures on aurait pour Vcc = 5v :
Vin Low Max = 2v1
Vin High Min = 2v6
V hysteresis = 0v5
cela semble on ne peut plus cohérent, mais voudrait aussi dire que la tension de basculement est pile poil égale à 2v35, sans le moindre 1/10 de volt d'erreur : ça me laisse quand-même perplexe

(il ne faut pas confondre hystérésis et tolérance sur la tension de basculement)