Diverse ESP32 e diverse letture NTC !?!?!

Il discorso è che pensavo che ESP32 fosse migliore di un NANO però, probabilmente, mi sbagliavo!

Non e' questione di migliore o peggiore: un microprocessore (come qualunque altra cosa) va scelto in funzione di quello che si deve fare.
Con l'ESP32 puoi fare cose completamente fuori dalla portata di una NANO e non c'e' dubbio che per altre applicazioni e' meglio una NANO ...

adesso salta fuori che il riferimento interno non è nemmeno da paragonare a quello di Atmel

L'errore del riferimento interno dei due micro e' analogo e cioe' circa +-10%

ho fatto la prova su DIECI NANO e non ce n'è uno che sbagli: tutte letture quasi identiche!!!

Mi sembra che tu non abbia colto il significato del mio post precedente.
La NANO, come la UNO e le Arduino in generale, usa di default la tensione di alimentazione come riferimento dell'ADC e quindi la configurazione corretta per misurare una NTC.

il bello è che non è previsto un riferimento esterno

Questo e' il vero limite

Marco

steve-cr:
(ehh ma vuoi mettere? leggo a 12bit ! Cosa leggo non lo so, però leggo!).

Sulimarco:
L'errore del riferimento interno dei due micro e' analogo e cioe' circa +-10%
La NANO, come la UNO e le Arduino in generale, usa di default la tensione di alimentazione come riferimento dell'ADC e quindi la configurazione corretta per misurare una NTC.

Con un +/-10% di errore della tensione di riferimento direi che la configurazione dell'arduino è "corretta" per n-mila cose in più rispetto alle esp. LM35? Leggere la tensione di una batteria per capire quando "staccarsi"? In pratica, gli input analogici per cosa si dovrebbero usare su una esp?
Senza un aref esterno effettivamente tanto valeva leggere a 4 bit. ::slight_smile:

Sulimarco:
.....
L'errore del riferimento interno dei due micro e' analogo e cioe' circa +-10%
......

Io non sto parlando dell'errore del riferimento interno: sto parlando di una cosa molto più grave.
Sto dicendo che su dieci NANO ottengo la stessa misura e su tre ESP32 ottengo tre misure!
Quindi c'è un errore diverso tra i due chip

Infatti, andando sul forum della Espressif, ho trovato alcuni post che si lamentavano di QUESTO problema e che cioè, se si pensava alla produzione di qualcosa su larga scala, non si poteva pensare di eseguire una taratura per OGNI scheda.

La stessa Espressif ha risposto che era alla ricerca di una soluzione con i Fuses e che avrebbe standardizzato i suoi chip tarandoli uno a uno in fase di produzione.
Però è un post dei primi del 2018.

Sulimarco:
Non e' questione di migliore o peggiore: un microprocessore (come qualunque altra cosa) va scelto in funzione di quello che si deve fare.

Ho provato un 8266 e mi sono trovato bene, ma aveva solo un ingresso analogico.

Poi sono passato su ESP32.
Se mi dai 16 GPIO ANALOGICI, poi non puoi venirmi a dire che ho sbagliato processore in funzione di ciò che devo fare...

ADC Calibration

The esp_adc_cal/include/esp_adc_cal.h API provides functions to correct for differences in measured
voltages caused by variation of ADC reference voltages (Vref) between chips. Per design the ADC
reference voltage is 1100mV, however the true reference voltage can range from 1000mV to 1200mV
amongst different ESP32s.

Magari sapere come utilizzare la API dentro un programma...

Il +-10% dell'Atmega328 vale per il riferimento interno ad 1.1V, mentre normalmente si usa la tensione di alimentazione che, in questo caso, è sempre la stessa, per cui è normale che si ottengono gli stessi valori.

Anche a me stupisce invece questa variabilità fa ESP32, ma io tendo ad usare sensori digitali proprio per evitare problemi simili.

Si, lo stavo pensando anche io, perchè se fossero anche I2C basta una coppia di extender.

Nel forum di Espressif ho trovato di tutto, compreso il finimondo, anche perché non si può mettere in produzione un chip con 18 analogiche di cui 6 però non vanno se hai il wifi e le altre hanno una TOLLERANZA che ha range diversi per ogni scheda e VALORI DI PARTENZA E ARRIVO (in volt) differenti per ogni scheda !!!!!

I chip della ESPRESSIF datati 012018 in su sono tarati uno a uno ma per quelli prima bisogna giocare con i fuses, quindi non penso sia il caso...

Se usi i DS18B20 non hai bisogno di extender e li puoi mettere tutti nella stessa catena, distinguendoli dal seriale.

Anche se la discussione è un pò vecchiotta, provo lo stesso a chiedere se per caso qualcuno sa se il fastidioso problema riscontrato da steve-cr è stato risolto nelle ultime versioni di ESP32, cioè in quelle "MINI" (escludendo il fatto delle pre-tarature di fabbrica).

Io non sono ancora riuscito a risolverlo. Tantomeno ho avuto schede "tarate di fabbrica".

Ma non mi aspettavo granché: compro ancora oggi Arduino Nano e devo riscrivere il bootloader perchè "di fabbrica" non funziona il watchdog....

steve-cr:
Ma non mi aspettavo granché: compro ancora oggi Arduino Nano e devo riscrivere il bootloader perchè "di fabbrica" non funziona il watchdog....

E' perché tu compri cloni e NON originali (o compri da gente che ti vende fondi di magazzino) dato che è da parecchio che "Arduino™ AG" ha aggiornato le schede Nano ed usa Optiboot (lo stesso bootloader della UNO), tanto è vero che nell'IDE ci sono le due versioni, Arduino Nano ed Arduino nano (old bootloader) ... ::slight_smile:

Dal file boards.txt:

nano.name=Arduino Nano

nano.upload.tool=avrdude
nano.upload.protocol=arduino

nano.bootloader.tool=avrdude
nano.bootloader.unlock_bits=0x3F
nano.bootloader.lock_bits=0x0F

nano.build.f_cpu=16000000L
nano.build.board=AVR_NANO
nano.build.core=arduino
nano.build.variant=eightanaloginputs

## Arduino Nano w/ ATmega328P
## --------------------------
nano.menu.cpu.atmega328=ATmega328P

nano.menu.cpu.atmega328.upload.maximum_size=30720
nano.menu.cpu.atmega328.upload.maximum_data_size=2048
nano.menu.cpu.atmega328.upload.speed=115200

nano.menu.cpu.atmega328.bootloader.low_fuses=0xFF
nano.menu.cpu.atmega328.bootloader.high_fuses=0xDA
nano.menu.cpu.atmega328.bootloader.extended_fuses=0xFD
nano.menu.cpu.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

nano.menu.cpu.atmega328.build.mcu=atmega328p

## Arduino Nano w/ ATmega328P (old bootloader)
## --------------------------
nano.menu.cpu.atmega328old=ATmega328P (Old Bootloader)

nano.menu.cpu.atmega328old.upload.maximum_size=30720
nano.menu.cpu.atmega328old.upload.maximum_data_size=2048
nano.menu.cpu.atmega328old.upload.speed=57600

nano.menu.cpu.atmega328old.bootloader.low_fuses=0xFF
nano.menu.cpu.atmega328old.bootloader.high_fuses=0xDA
nano.menu.cpu.atmega328old.bootloader.extended_fuses=0xFD
nano.menu.cpu.atmega328old.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex

nano.menu.cpu.atmega328old.build.mcu=atmega328p

Guglielmo

Ma che tensioni usi per il riferimento e per il partitore con la NTC? Deve essere LA STESSA!

A prescindere dalla tensione, se ho una board ESP32 con già attaccate delle sonde analogiche, o anche solo delle resistenze o un tastierino su ingresso analogico, al cambio della scheda le letture sono differenti...

gpb01:
E' perché tu compri cloni e NON originali.....

Vabbè, dai, con il prezzo di un originale mi compro 10 cloni: riprogrammarli è il meno che mi possa capitare, no?

Dato poi che usando UNO as ISP si riprogrammano in 5 secondi, al contrario di USBtinyISP dove ce ne volevano almeno 30, diciamo che ci guadagno sempre.... :smiley: :smiley: :smiley: :smiley: :smiley:

steve-cr:
A prescindere dalla tensione, se ho una board ESP32 con già attaccate delle sonde analogiche, o anche solo delle resistenze o un tastierino su ingresso analogico, al cambio della scheda le letture sono differenti...

Secondo come è collegata, può risentire o meno della variazione della tensione di riferimento!

steve-cr:
Vabbè, dai, con il prezzo di un originale mi compro 10 cloni ...

Pienamente d'accordo, ma però NON è corretta la frase:

steve-cr:
... compro ancora oggi Arduino Nano e devo riscrivere il bootloader perchè "di fabbrica" non funziona il watchdog ...

... dove si potrebbe intendere che "Arduino™ AG" ancora le produca con il vecchio bootloader non funzionante :wink:

Guglielmo

A prescindere dalla tensione, se ho una board ESP32 con già attaccate delle sonde analogiche, o anche solo delle resistenze o un tastierino su ingresso analogico, al cambio della scheda le letture sono differenti...

IL motivo te l’ho spiegato piu’ di un anno fa

Le NTC hanno bisogno di un ADC che sia in grado di fare una lettura raziometrica, cioe' con il riferimento che dipenda dalla tensione di alimentazione.
L' ESP32 e' in grado solo di fare letture assolute, legate al suo riferimento interno, che tra l'altro ha ampie tolleranze.

e Dataman te l’ha ribadito adesso

Ma che tensioni usi per il riferimento e per il partitore con la NTC? Deve essere LA STESSA!

Hai due possibilità (non so quale è realizzabile):

  1. fornisci all'ADC come tensione di riferimento la stessa tensione che alimenta la NTC
  2. alimenti la NTC con la tensione di riferimento interna dell'ESP32.

Io vorrei solo essere sicuro che voi avete usato DIVERSE schede ESP32, perchè la teoria è teoria, ma poi la pratica....
Quindi se avete uno schema da consigliarmi in modo che col cambio di una ESP32 con un'altra ESP32 non debba rifare tutte le tarature, ben venga...

gpb01:
... dove si potrebbe intendere che "Arduino™ AG" ancora le produca con il vecchio bootloader non funzionante :wink:

hai ragione. Errore mio.

steve-cr:
Se avete uno schema da consigliarmi in modo che col cambio di una ESP32 con un'altra ESP32 non debba rifare tutte le tarature, ben venga...

Ancora non ci hai detto come hai collegato la NTC... :slight_smile: