entree-analogique.ino
L'ADC 12 bits du H7 offre seize fois la résolution des Uno classiques. La fenêtre glissante de 16 mesures donne des tensions stables pour un capteur industriel 0-3,3 V ou un diviseur de batterie.
Matériel requis
Une Arduino Portenta H7 (module ST STM32H747 double cœur Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 Mo SDRAM, connecteur haut-density), alimentée par USB-C ou 5 V. 1 potentiomètre 10 kΩ pour tester (ou capteur 0-3,3 V).
Câblage
Curseur sur A0, extrémités sur 3V3 et GND. Entrée strictement ≤ 3,3 V (les broches ne sont pas 5 V tolérantes côté ADC).
Fonctionnement
analogReadResolution(12) exploite toute la conversion ; la moyenne logicielle divise le bruit par 4. Référence de conversion 3,3 V.
Exécution
Arduino IDE avec le core « Arduino Mbed OS Portenta Boards » : choisir « Portenta H7 » (cœur M7), le port USB-C puis Téléverser. Le sélecteur M7/M4 du mode DFU permet de charger aussi le cœur M4.
Variantes
Échantillonner en DMA (API Mbed ADC) pour un flux rapide, ou caler une référence externe pour la précision.
entree-analogique.ino
// ADC 12 bits (0..4095) sur A0 avec moyenne glissante.
const int CANAL = A0;
const int NB = 16;
uint16_t fenetre[NB];
int idx = 0;
bool plein = false;
unsigned long t0 = 0;
void setup() {
analogReadResolution(12);
Serial.begin(9600);
}
void loop() {
if (millis() - t0 < 100) return;
t0 = millis();
fenetre[idx] = analogRead(CANAL);
idx = (idx + 1) % NB;
if (idx == 0) plein = true;
int n = plein ? NB : idx;
if (!n) return;
uint32_t somme = 0;
for (int i = 0; i < n; i++) somme += fenetre[i];
uint32_t moyenne = somme / n;
float tension = moyenne * 3.3f / 4095.0f;
Serial.printf("brut=%lu U=%.3f V\n", moyenne, tension);
}