Pagina 3 di 6 PrimaPrima 12345 ... UltimaUltima
Risultati da 21 a 30 di 51
  1. #21
    Cumulonimbus L'avatar di verza81
    Data Registrazione
    Sep 2015
    Località
    Altavilla Vicentina (VI) - Lavoro casello A4 di Montecchio Maggiore (VI)
    Messaggi
    5,852
    Sei un genio, complimenti!

    Inviato dal mio ALE-L21 utilizzando Tapatalk
    Dati online su

    http://www.meteoaltavillavicentina.altervista.org/

    http://www.meteoaltavillavicentina.altervista.org/tabella.php

    Stazione Davis VP2 wireless con kit di ventilazione diurna

  2. #22
    Nimbostratus
    Data Registrazione
    Jul 2016
    Località
    Venezia Mestre CARPENEDO
    Messaggi
    2,064
    Eccoci con un'altra novita'
    Ho deciso di sviluppare prima il blocco di programma relativo alla comunicazione con il sensore di umidita', cosi' non ci penso piu' e il blocco e' gia' pronto per essere eventualmente riciclato nel programma per i microprocessori di interfaccia dei sensori remoti (ho un DHT22 di scorta ).
    Infatti mentre il barometro utilizza l'interfaccia I2C, per la quale posso utilizzare la porta seriale sincrona del microprocessore (quindi un pezzo di lavoro gia' pronto), il sensore di umidita' usa una comunicazione 1-Wire, ovvero un solo filo che trasmette e riceve dati secondo temporizzazioni ben precise. Anche se il mio microprocessore avesse una porta 1-Wire integrata non potrei utilizzarla, perche' il sensore usa un protocollo diverso da quello Dallas/Maxim (es. il sensore di temperatura DS18B20), quindi per poterci parlare devo scrivere l'intero blocco di programma da zero. Blocco ben ottimizzato e abbastanza compatto, forse complicato ma fatto in modo che il microprocessore non si blocchi se il sensore per qualche motivo non risponde, comprensivo di controllo sulla correttezza dei dati ricevuti: alla fine di ogni comunicazione, il sensore calcola e trasmette una somma di controllo, con solo 5 righe di programma posso rilevare errori nella ricezione, anche se la pista che collega i 2 e' lunga circa 16 cm...
    Quando riceve il segnale di chiamata dal microprocessore, il sensore trasmette in tutto 40 bit, divisi in 5 byte:
    RHH RHL TH TL CRC
    RHH e RHL il valore a 16 bit dell'umidita'
    TH e TL il valore a 16 bit della temperatura
    CRC gli 8 bit della somma di controllo
    I dati sono gia' calcolati e compensati, basta convertire quei numeri da base 2 a base 10 e visualizzarli interponendo il punto o la virgola tra unita' e decine.
    Il risultato e' visibile nel display, in alto a destra:
    DSC_9530.jpg
    Ho approfittato anche per modificare un pochino la maschera, mettendo la Vref al centro e aggiungendo tutti i dati letti dai sensori locali per confrontarli. Come sempre, il numero in basso e' la lettura dal potenziometro collegato al primo connettore a sinistra.

    A quanto pare... e' il mio tester che da' una lettura un po' farlocca sul sensore analogico! Come si vede la temperatura letta dalla sonda analogica corrisponde quasi perfettamente a quella letta dal sensore di umidita'...

  3. #23
    Nimbostratus
    Data Registrazione
    Jul 2016
    Località
    Venezia Mestre CARPENEDO
    Messaggi
    2,064
    Bene. Apportando qualche ottimizzazione e correggendo qualche piccolo svarione nelle procedure, ora funziona anche la lettura dal barometro.
    Purtroppo Microchip nei Pic a 8 bit ha implementato una gestione della porta I2C non macchinosa, ma che per trasmettere o ricevere qualche byte vuole abbastanza righe di programma perche' la comunicazione va gestita un passo alla volta attendendo sempre che il precedente sia completato. solo per leggere il dato di pressione dal sensore uso il doppio di righe che per il sensore di umidita'.
    In piu' il sensore che ho usato quando lo si alimenta, rimane in stato di standby, quindi ho dovuto scrivere altro blocco di programma per attivarlo e impostarlo, altrimenti restituisce sempre e solo 756 hPa.

    Domanda: la mia stazioncina Oregon non indica la lettura diretta della pressione, attualmente la lettura mi restituisce 1024 hPa... HP?

  4. #24
    Nimbostratus
    Data Registrazione
    Jul 2016
    Località
    Venezia Mestre CARPENEDO
    Messaggi
    2,064
    Dunque. Il barometro LPS25H da me utilizzato digitalizza il valore di pressione letto dal suo ponte piezoelettrico a 24 bit, la cui scala e' 4096 LSB/hPa, vale a dire che un aumento del numero di 4096 equivale a un aumento di 1 hPa. Per ottenere il valore di pressione, quindi, tramite programma non faccio altro che considerare la meta' superiore del numero, che effettivamente significa dividerlo per 4096, pero' perdendo il resto.
    Ora, posso implementare nel programma la procedura che divide un numero binario a 32 bit per uno a 16 bit, evitando cosi' di perdere i decimali.
    Domanda meteo e' di una qualche utilita' aggiungere decine di linee di programma e consumare circa 500 cicli del microprocessore (circa 250 µs a 8 MHz di quarzo), per acquisire la pressione atmosferica con i decimali di hPa? La scheda tecnica del sensore dichiara una precisione massima di 0.01 hPa.


    - - - Updated - - -

    PS: la procedura di lettura legge i registri giusti dal sensore, stamattina la pressione indicata e' diminuita da 1024 a 1022.

  5. #25
    Nimbostratus
    Data Registrazione
    Jul 2016
    Località
    Venezia Mestre CARPENEDO
    Messaggi
    2,064
    Intanto adesso modificando la sequenza di avvio e programmazione iniziale del sensore, la lettura e' piu' consona: 1008 hPa, vediamo se varia. perche' nella scheda tecnica della ST non c'e' scritto un cavolo, solo la lista di tutti i registri interni, breve descrizione del funzionamento della memoria FIFO interna e le caratteristiche elettriche.
    Devo stare attento all'ordine in cui scrivo le posizioni di memoria interne, soprattutto se devo scriverne una che oltre a quelli che voglio modificare, contiene bit definiti come RESERVED che dovrebbero essere i dati di calibrazione di fabbrica del sensore, per fortuna basta spegnerlo e riaccenderlo per ripristinare tutto a posto.

    - - - Updated - - -

    Scoperto un altro registro contenente bit RESERVED... prima o poi riusciro' a leggere il dato giusto?

  6. #26
    Nimbostratus
    Data Registrazione
    Jul 2016
    Località
    Venezia Mestre CARPENEDO
    Messaggi
    2,064
    Intanto ho un'altra piccola novita' che riguarda il sensore analogico montato sulla scheda.
    Ho sfruttato il fatto che il convertitore A/D esterno a 12 bit e' alimentato da una tensione stabilizzata di precisione di 4.096V, per utilizzare questa tensione anche come riferimento per il convertitore A/D integrato nel microprocessore, che utilizzo per campionare la temperatura letta dalla sonda LM35 montata sulla scheda, appunto.
    Ora, il convertitore integrato e' a 10 bit, quindi utilizzando quella tensione di riferimento ho una scala di lettura con passi quadruplicati, infatti era 0.4°C.
    Approfittando del fatto che la sonda e' collegata al microprocessore tramite un adattatore di impedenza, ovvero un amplificatore a guadagno 1, ho pensato di portarlo a 4: cosi' facendo recupero la precisione originaria di 0.1°C. e avendo inserito un trimmer nell'amplificatore, posso regolare finemente la lettura per allinearla a quella del sensore digitale o di un termometro campione.

  7. #27
    Socio Meteotriveneto L'avatar di gasgallo
    Data Registrazione
    Sep 2015
    Località
    Montello 170m - Pordenone 24m
    Messaggi
    487
    Ciao Paolo,

    ancora complimenti per tutto il lavoro che stai svolgendo!!
    Per quanto riguarda la precisione del sensore barometrico, io ti consiglio di utilizzare la precisione a 0.1hPa. Soprattutto se hai intenzione di memorizzare i dati e magari di plottarli. Fai conto che la pressione qui da noi oscilla tra i 980 e i 1040hPa, ma nella maggior parte dei casi si trova tra i 1000 e i 1020hPa. Per cui se tieni la precisione di 1hPa, avrai una lettura con un errore approssimabile al 5%, contro lo 0,5% della precisione a 0.1hPa.
    Ciao e ancora complimenti.
    Davis Vantage PRO 2 - Volpago del Montello (170mslm)
    Monitoraggio dei siti freddi del Montello (Valle di Piero Gobbo) e dei colli Berici (Busa Maran)
    Tutti i dati su: http://montellometeo.altervista.org

  8. #28
    Nimbostratus
    Data Registrazione
    Jul 2016
    Località
    Venezia Mestre CARPENEDO
    Messaggi
    2,064
    Allora andiamo sull'avanzato.
    LM35: sensore analogico, 1mV/0.1°C e li rileva, ma la scheda tecnica riporta un errore di 0.5°C e infatti il dato e' un po' ballerino (circa ±0.2), lo tengo come "riserva", vecchio ma funziona sempre e non ha bisogno di configurazione, basta collegare la sua uscita a un convertitore A/D.

    AM2302: sensore con comunicazione digitale a filo singolo, restituisce 2 numeri a 16 bit per umidita' e temperatura, una volta convertiti in base 10 basta visualizzare il punto tra prima e seconda cifra per avere la lettura, precisione 0.1% e 0.1°C, letture molto buone e igrometro abbastanza sensibile. Anche lui non ha bisogno di configurazione, basta chiamarlo e ti spara fuori i valori, attesa tra 2 acquisizioni almeno 2 secondi.

    LPS25H: qui andiamo sul piu' complicato. Dispone di una piccolissima memoria interna da dove leggo i valori di pressione e temperatura, ma dove posso anche scrivere diversi settaggi. Essendo pensato per strumenti di misura a batterie, alimentandolo si pone in stato di standby con la sola porta di comunicazione attiva, per poterci tirare fuori qualcosa devo prima "accenderlo" programmando l'apposito bit nella memoria. Casini con i settaggi a parte (in ST potevano spendere qualche paginetta in piu' nella scheda tecnica...), il formato dei dati in uscita e' piu' complesso.
    Pressione: un numero a 24 bit. Per ottenere il valore in hPa devo dividerlo per 4096, che a programma si puo' eseguire in un attimo facendo 12 divisioni per 2 consecutive (2^12=4096), ma che ha il difetto di eliminare la parte decimale, portando a una precisione di 1 hPa. Se voglio conservarla, invece devo proprio effettuare una divisione con resto, l'algoritmo ce l'ho ma e' comunque piu' complessa, anche perche' alla fine devo convertire in base 10 risultato e resto (parte decimale) ed eseguire un arrotondamento ricorsivo della parte decimale per eliminare le cifre oltre i decimi. In tutti i barometri digitali che ho avuto sotto mano non ho mai visto i decimi di hPa, per questo domandavo.
    Temperatura: ho rinunciato a visualizzare questo dato, perche' la formula per ricavarla in °C e' 42.5+(N/480) dove N e' il numero a 16 bit restituito dal sensore. Una piu' semplice no eh... mi tengo il dato dell'altro sensore digitale.

    Intanto provo la retroilluminazione. Forse sostituiro' il transistor NPN con un Mosfet a canale N, per guadagnare un pochino di luminosita' (adesso la alimento a 4.3V che e' proprio al limite delle specifiche, con il Mosfet dovrei salire a 4.8-4.9)
    DSC_9531.jpg
    E la pressione adesso e' 1017... chi ci capisce qualcosa da questo sensore e' bravo

  9. #29
    Nimbostratus
    Data Registrazione
    Jul 2016
    Località
    Venezia Mestre CARPENEDO
    Messaggi
    2,064
    Sono 2 giorni che il sensore continua a segnare 1008, in casa ho un barometro analogico d'epoca (circa 50 anni ) che segna circa 1009, quindi potrebbe anche essere plausibile, vediamo se varia... leggo le locazioni di memoria giuste perche' all'accensione segna un valore diverso che viene subito corretto alla prima lettura. Sperem...

    Intanto oggi mi dovrebbero arrivare le 8 memorie per il datalogger, ma soprattutto il nuovo microprocessore piu' potente per proseguire nello sviluppo: PIC18F45K20

  10. #30
    Cumulonimbus L'avatar di verza81
    Data Registrazione
    Sep 2015
    Località
    Altavilla Vicentina (VI) - Lavoro casello A4 di Montecchio Maggiore (VI)
    Messaggi
    5,852
    Paolo, così per curiosità, quanto spendi più o meno di materiale per una stazione del genere?
    A grosse linee ovviamente...
    Dati online su

    http://www.meteoaltavillavicentina.altervista.org/

    http://www.meteoaltavillavicentina.altervista.org/tabella.php

    Stazione Davis VP2 wireless con kit di ventilazione diurna

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •