PROGRAM NEW_GLADE_SPRAY
' ------------------------------------------------------------------------------
' ------------------------------ MICROCONTROLLORE ------------------------------
' ------------------------------ PIC 12F683 ------------------------------
' --------------------------- 09 LUGLIO 2021 ----------------------------
' ------------------------------------------------------------------------------
' GESTIONE DEL DIFFUSORE DI PROFUMO "GLADE SCJ-180".
' IL DIFFUSORE IN QUESTIONE SPRUZZA A CADENZA IMPOSTABILE OGNI 9, 18 O 36 MIN.
' OPPURE OGNI VOLTA CHE SI PREME IL PULSANTE MANUALE. (COMMUTA VERSO MASSA)
' UN PERSONAGGIO RUSSO HA MESSO IN RETE UNA MODIFICA CHE PERMETTE DI TENERE
' ACCESO IL DIFFUSORE MA SENZA CHE EROGHI IL PRODOTTO, COMODO PER L'UTILIZZO
' CON IL PULSANTE CHE C'E' DIETRO IL DISPOSITIVO. BASTA TAGLIARE UNA PISTA!!
' LINK: https://bravikov.wordpress.com/2016/06/12/
' NELLO SPECIFICO HA TAGLIATO LA PISTA SUL COMMUTATORE ALLA POSIONE '9 MINUTI'.
' VOGLIO CHE L'EROGAZIONE AVVENGA A INTERVALLI DI ORE IN MODO DA NON SATURARE
' L'AMBIENTE ED EVITARE TOSSE, STARNUTI E POSSIBILI REAZIONI ALLERGICHE.
' INOLTRE LA RICARICA DUREREBBE MOLTO PIU' A LUNGO...
' PER LA PRIMA VOLTA UTILIZZERO' LA FUNZIONE 'SLEEP' PER IMPOSTARE IL PIC
' A CONSUMARE UNA CORRENTE RIDOTTISSIMA DATO CHE IL GLADE VA CON 2 STILO AA.
' MI ASPETTO, COME DA MANUALE, DI CONSUMARE CIRCA UNA QUARANTINA DI MICROAMPERE
' PIU I 37 CHE ASSORBE IL DIFFUSORE....... TOTALE NON PIU' DI 80 MICROAMPERE.
' UTILIZZO TRE PIN COME INGRESSI PER LA PROGRAMMAZIONE DELLA PAUSA TRA LE
' EROGAZIONI, PER ORA HO DECISO PER UN SET DA 3, 4 E 5 ORE.
' UN PIN E' DEDICATO ALL'ATTIVAZIONE DELL'EROGATORE SIMULANDO LA PRESSIONE
' SUL TASTO "MANUALE" SUL RETRO DEL DISPOSITIVO.
' L'ALTRO PIN IN FASE DI DEBUG LO UTILIZZO COME TEST POINT, POI LO ELIMINO.
' PARTO CON IL CONCETTO CHE IL TASTO METTE A GND UN PIN DEL CONTROLLER, QUINDI
' COLLEGO DIRETTAMENTE IL FILO DEL PULSANTE AL PIN DEL PIC SETTATO COME OUTPUT.
' FACCIO DUE ESPERIMENTI E VEDO COME BUTTA... ALTRIMENTI AGGIUNGERO' UN BC337.
' ORA MI INFORMO SUL FUNZIONAMENTO DELLA FUNZIONE "SLEEP" PERCHE' VORREI FARE
' ASSORBIRE AL MIO PIC LA MINOR CORRENTE POSSIBILE DALLA BATTERIA.
' --------------------------------- MODIFICHE ----------------------------------
' STUDIO...STUDIO...STUDIO...STUDIO...STUDIO.........
' QUALCHE ORA DOPO SONO STATO IN GRADO DI ATTIVARE UNO "SLEEP" PROFONDO
' DI CIRCA 2,3 SECONDI CHE METTE IN STANDBY IL MICRO ASSORBENDO POCHISSIMI uA.
' FARO' IN MODO DI PORTARE A 2 SECONDI QUESTO INTERVALLO WDG E POI ANDRO' A
' INCREMENTARE LA VARIABILE DI CONTEGGIO A STEP DI X UNITA'.
' IL PRINCIPIO SI BASA SULLA FUNZIONE "SLEEP" (IN ASSEMBLER) CHE POI VIENE
' RISVEGLIATA DAL WATCHDOG IMPOSTATO TRAMITE IL SUO PRESCALER (1:128).
' METTENDO IN PAUSA IL MICRO PER N-CICLI OTTENGO UN RITARDO NOTEVOLE CHE
' VIENE A SUA VOLTA CONTEGGIATO IN UNA VARIABILE DI TIPO BYTE.
' IN PRATICA, AL POSTO DI UTILIZZARE UN TIMER IN INTERRUPT SFRUTTO IL SISTEMA
' INTERRUPT DEL WATCHDOG CHE VA PIU' LENTO E FA RISPARMIARE CORRENTE.
' HO DECISO DI PROGRAMMARE I PIN DI INGRESSO IN QUESTO MODO:
' NELLA VARIABILE BYTE CI STANNO BENISSIMO 108 CONTEGGII, PARI A 8 ORE DI PAUSA
' CHE VERRANNO PROGRAMMATI FACENDO LA COMBINAZIONE SU TRE PIN DEL PIC:
' CONCETTO:
' IN UN'ORA CI SONO 3600 SECONDI
' NESSUN PIN A GND = 1 ORA DI PAUSA
' PIN SET1 COLLEGATO A GND = + 1 ORA (AGGIUNGO 3600 SECONDI)
' PIN SET1 COLLEGATO A GND = + 2 ORE (AGGIUNGO 7200 SECONDI)
' PIN SET1 COLLEGATO A GND = + 4 ORE (AGGIUNGO 14400 SECONDI)
' LA SOMMA TOTALE DEI PIN PROGRAMMA 28800 SECONDI, PARI A 8 ORE DI PAUSA,
' LE COMBINAZIONI RESTANTI PERMETTONO INTERVALLI TRA 1 E 8 ORE (STEP DI 1 ORA)
' ------------------------------------------------------------------------------
' SABATO 10 LUGLIO:
' LASCIO COSI' COM'E' LA TEMPORIZZAZIONE DEL WATCHDOG PERCHE' PENSAVO CHE SI
' POTESSE IMPOSTARE UN VALORE A PIACIMENTO, IN MODO DA GENERARE UN INTERRUPT
' CON CADENZA DI UN SECONDO O SUOI MULTIPLI. MA NON E' COSI'.
' POSSO SOLO IMPOSTARE I PRESCALER A BASE 2 A PARTIRE DALLA FREQUENZA BASE DI
' 31 KHZ FINO A DIVIDERLA PRIMA PER 65536 E POI PER 128.
' (STUDIANDO HO SCOPERTO UN SECONDO PRESCALER... HIHIII)
' CON LA DIVISIONE MASSIMA POSSIBILE OTTENGO UN 'RISVEGLIO' OGNI 5 MINUTI ~,
' IN REALTA' SONO 4 MINUTI E 58 SECONDI MA VARIA DA DISPOSITIVO A DISPOSITIVO
' E IN BASE ALL'ALIMENTAZIONE DEL PIC... TENGO BUONO IL VALORE DI 5 MINUTI!
' RICALCOLO TUTTO E SOSTITUISCO IL VALORE 3600 (SECONDI IN UN ORA) CON IL
' NUOVO VALORE DI 12. (60 MINUTI : 5 MINUTI = 12)
' ALLA FINE PER RAGGIUNGERE UN ORA DOVRANNO INTERVENIRE 12 WEAK-UPS !!
' IN QUESTA APPLICAZIONE LA PRECISIONE TEMPORALE NON E' NECESSARIA TANT'E' CHE
' ANCHE IL MANUALE DEL PIC SPIEGA CHE IL WATCHDOG SFRUTTA IL SUO OSCILLATORE
' INTERNO A 31 KHZ FORMATO DA UNA RETE RC DEFINITA 'INSTABILE'.... QUINDI...
' ----------------------------------------------------
' A PAG. 23 DEL PDF SI LEGGE:
' The LFINTOSC (Low-Frequency Internal Oscillator)
' is uncalibrated and operates at 31 kHz.
' .......QUINDI MI ACCONTENTO......
'ac:PIC12F683_PDF
' ----------------------------------------------------
' HO TESTATO IL COLLEGAMENTO TRA I DUE PROCESSORI E HO DECISO CHE L'USCITA LA
' COLLEGO DIRETTAMENTE AL FILO DEL PULSANTE MANUALE PERCHE' NON DA PROBLEMI.
' IN ORIGINE IL PULSANTE E' COLLEGATO DIRETTAMENTE AL PIN 10 DEL PROCESSORE
' 'GLADE' QUINDI I DUE MICRO SARANNO COLLEGATI DIRETTAMENTE TRAMITE QUESTO PIN.
' NATURALMENTE METTERO' UN DIODO PER EVITARE CORTOCIRCUITI SUL PIN DI USCITA
' DEL PIC QUANDO ANDRO' A PREMERE IL PULSANTE MANUALE
' --- RIASSUMENDO ----
' IL PROCESSORE 'GLADE' E' ACCESO MA NON CONTEGGIA IL COUNTDOWN (CUT PIN 9).
' QUANDO IL MIO COUNTDOWN RAGGIUNGE IL TEMPO IMPOSTATO TRAMITE I TRE INGRESSI
' VIENE GENERATO UN IMPULSO NEGATIVO DI 100 MILLISECONDI CHE SIMULA IL
' SEGNALE BASSO GENERATO DAL PULSANTE MANUALE SUL RETRO DEL VAPORIZZATORE GLADE.
' __ __
' Vcc O| |_| |O GND
' OUT TEST GP5 O| |O GP0 INPUT SET1
' OUTPUT GP4 O| |O GP1 INPUT SET2
' N.C. GP3 O|_______|O GP2 INPUT SET3
' ------------------------------
' IMPOSTAZIONI DEI PIN DI INPUT
' DEL PIC ( 0 = GND 1 = -|- )
' ------------------------------
' PIN n ~ (5) (6) (7)
' ------------------------------
' VALUE ~ SET3 SET2 SET1
' ------------------------------
' 1 ORA ~ -|- -|- -|-
' 2 ORE ~ -|- -|- GND
' 3 ORE ~ -|- GND -|-
' 4 ORE ~ -|- GND GND
' 5 ORE ~ GND -|- -|-
' 6 ORE ~ GND -|- GND
' 7 ORE ~ GND GND -|-
' 8 ORE ~ GND GND GND
' ------------------------------
' DOMANI SE HO VOGLIA COLLEGO IL TUTTO...
' ------------------------------------------------------------------------------
' DOMENICA 18 LUGLIO: DA OGGI IN POI LA NUOVA NIPOTINA (NORA) DOVREBBE NASCERE.
' NEI GIORNI SCORSI HO PROGRAMMATO E IMPLEMENTATO IL CIRCUITO NEL DIFFUSORE.
' TUTTO HA FUNZIONATO A MERAVIGLIA FINO A QUANDO 2 GIORNI FA HO RIFATTO IN
' TECNOLOGIA SMD IL NUOVO CIRCUITO STAMPATO GRANDE COME L'UNGHIA DEL MIGNOLO.
' MI SONO PERO' ACCORTO DI DUE COSE:
' 1) NON HO MESSO IL DIODO DI PROTEZIONE TRA PULSANTE E USCITA DEL PIC
' 2) I TEMPI SONO SBALLATI, A VOLTE ACCELERA E A VOLTE NO.... PERCHE???
' RIPENSANDO AI PROBLEMI CHE QUESTO PIC MI AVEVA DATO NEGLI ANNI TRASCORSI, HO
' REALIZZATO CHE E' MEGLIO CHE UTILIZZI IL SISTEMA DEL 'MIRRORING' SU GPIO.
' STAMATTINA HO SEMPLIFICATO ANCHE LA ROUTINE CHE LEGGE GLI INGRESSI, POI HO
' DISATTIVATO IL 'BOR' PERCHE' HO IL SENTORE CHE, FUNZIONANDO A BATTERIA, SE
' LA TENSIONE DI ALIMENTAZIONE FLUTTUA E' PROBABILE CHE IL MICRO SI RESETTI.
' SMONTO E RIASSEMBLO IL DIFFUSORE APPLICANDO LE NUOVE MODIFICHE, IMPOSTO PER
' LE SOLITE 4 ORE E LO PROVERO' NEI PROSSIMI GIORNI.
' MONTATO IL TUTTO IL CONSUMO E' STABILE SU 150 MICROAMPERE, NON MALE... MA
' MI SEMBRANO UN PO' TROPPI.... DO VE HO SBAGLIATO?
' P.S: ....DAI NORA CHE ABBIAMO VOGLIA DI VEDERTI !!!!
' ------------------------------------------------------------------------------
' --------------------------
' SABATO MATTINA, 24 LUGLIO:
' NORA E' ANCORA IN PANCIA.... E' DI 3,6 KG MA E' GIA' UNA TIPA TOSTA!
' CLAUDIA INVECE E' ANDATA A FARE UN GIRO A PIEDI SULLA CICLABILE VERSO CORNO.
' HO AVUTO UN SETTIMANA PIENA DI IMPEGNI QUINDI RIPRENDO IN MANO ADESSO IL
' PROGETTINO PER LA MODIFICA AL DIFFUSORE. VOGLIO CAPIRE DI PIU'...
' PRIMA HO SMANETTATO UN PO' COL SOFTWARE PER CAPIRE PERCHE' L'ASSORBIMENTO E'
' PIU' ALTO RISPETTO A QUELLO CHE DICE IL MANUALE, HO STUDIATO IL PROBLEMA E
' PENSO CHE IL TUTTO NASCA DAL FATTO CHE UTILIZZO IL CLOCK A 8 MHZ.
' MI SONO DIVERTITO A DISASSEMBLARE IL CODICE COMPILATO CON DIVERSE OPZIONI E
' HO VISTO CHE IL COMPILATORE NON SGARRA. E' STATO IMPORTANTE IMPOSTARE LA
' GIUSTA FREQUENZA DI CLOCK PER FARE IN MODO CHE IL COMPILATORE CALCOLI LE
' GIUSTE PAUSE TRAMITE I CICLI DI LOOP ANNIDATI.
' UN BUG DEL SISTEMA E' CHE SE IMPOSTO LA FREQUENZA DI 31 KHZ (0.031000) E POI
' LA SALVO COME PREFERITA CON ESTENSIONE '.CFGSCH' QUANDO POI LA RICARICO MI
' TORNA UNA FREQUENZA SBAGLIATA.
' HO RISOLTO EDITANDO IL FILE DI CONFIGURAZIONE 'P12F683_WATCHDOG_31KHZ.cfgsch'
' IMPOSTANDO LA RIGA 'DEVICE_CLOCK>0,031000</DEVICE_CLOCK>' CON LA VIRGOLA...
' ADESSO POSSO SELEZIONARE QUESTA CONFIGURAZIONE SENZA PIU' ERRORI.
' HO IMPOSTATO 'OSCCON' PER FUNZIONARE CON IL CLOCK A 31 KHZ, IL PIC SI SVEGLIA
' SEMPRE DOPO 5 MINUTI E ME LO SEGNALA COL LED BLU, ORA PROVO A SCOLLEGARLO
' DAL PROGRAMMATORE E LO METTO SOTTO IL MICROAMPEROMETRO PER VEDERE SE QUALCOSA
' E' MIGLIORATO OPPURE SE CI DEVO STUDIARE ANCORA UN PO' SU.
' -----------------------------
' SABATO POMERIGGIO, 24 LUGLIO:
' DALLE PROVE EFFETTUATE HO RISCONTRATO CHE, ATTIVANDO LE WEAK-PULLUP INTERNE
' E METTENDO A MASSA GLI INGRESSI USATI PER LA PROGRAMMAZIONE DELLA PAUSA, LA
' CORRENTE ASSORBITA E' MOLTO PIU' ALTA DI QUELLA CHE MI ASPETTAVO.
' SENZA LE PULLUP ATTIVATE (MA ATTIVE SOLO DURANTE LA LETTURA) GLI INGRESSI
' FLUTTUANO E CONSUMANO CORRENTE, COSI' HO OPTATO PER APPLICARE LE RESISTENZE
' DI PULL-UP ESTERNE. HO UTILIZZATO TRE RESISTENZE DA 2,7 MEGAOHM VERSO +VCC
' E HO DISABILITATO DEFINITIVAMENTE TUTTE LE WEAK-PULLUP INTERNE.
' IN QUESTO MODO QUANDO IL MICRO SI ADDORMENTA HO UN CONSUMO BASE DI 1,3 uA
' SOMMATO A 1,5 uA PER OGNI INGRESSO A MASSA. L'ASSORBIMENTO E' ULTRASTABILE!
' CON LA PROGRAMMAZIONE DI 4 ORE (2 PIN A MASSA) ASSORBE 4,3 uA.... WAAUUUU!!
' HO MODIFICATO LO SCHEMA E APPLICHERO' 3 RES IN SMD SUL MODULINO.
' .............SARA' FORSE LA VOLTA BUONA?? ORA PASSO ALL'AZIONE!!
' ................FATTO! HO APPLICATO SOLO UNA RESISTENZA SUL PIN APERTO POI
' HO MISURATO L'ASSORBIMENTO TOTALE DEL VAPORIZZATORE CON IL PIC COLLEGATO E
' ADESSO HO UNA CORRENTE DI FONDO DI 36 uA. CORRENTE TOTALE, CAPITO?
' PASSO A RIASSEMBLARE IL 'COSO', VITI, MOLLE, BATTERIE...
' HO ATTIVATO L'AGGEGGIO ALLE 15:40, ORA MI ASPETTO IL PRIMO SPRUZZO INTORNO
' ALLE 19:40 E POI VIA COSI' CIRCA OGNI 4 ORE. ....PER OGGI PASSO E CHIUDO....
' ------------------------------------------------------------------------------
' MARTEDI' 27 LUGLIO: NORA NON SI E' ANCORA VISTA... CHE 'FFAMO?
' L'AGGEGGIO MALEDETTO SPRUZZA ALLA CAZZO E FA QUEL CHE VUOLE, L'HO SPENTO
' GIA LA SERA DI SABATO PERCHE' SI ERA ATTIVATO ALMENO TRE VOLTE IN TRE ORE!
' CONTROLLANDO L'OUTPUT DELLA COMPILAZIONE MI ACCORGO SOLO ORA CHE CON IL CLOCK
' IMPOSTATO A 31 KHZ ALCUNE PARTI DEL PROGRAMMA NON VENGONO COMPILATE MA
' VENGONO 'TRALASCIATE' COME MOSTRA L'AVVISO IN COLOR VIOLETTO!!! SARA' QUESTO?
' IL PARTICOLARE RIGUARDA LA COMPILAZIONE DELLE ROUTINE CON I 'DELAYS'.
' RIMETTO IL MIO SOLITO CLOCK A 8 MEGA, AGGIUNGO UN 100nF IN PARALLELO AL TASTO
' CHE SERVE A SPRUZZARE IN MANUALE E RIPROVO. POI CONTROLLERO' SE L'ASSORBIMENTO
' RIMANE NEL GIUSTO RANGE. (TESTATO ORA, SEMBRA DI SI, 1,1 MICROAMPERE!)
' HO RIMONTATO IL DIFFUSORE E L'HO ATTIVATO ALLE 11:36 (SET 4 ORE) POI L'HO
' POSIZIONATO QUI DAVANTI A ME ALLA POSTAZIONE DEL COMPUTER DEL LABORATORIO.
' VEDRO' DI CONTROLLARLO DAL VIVO E SPERO DI NON TOCCARLO MAI PIU' !!
' NEL CASO VEDRO' DI TOGLIERE IL MICRO ORIGINALE E DI PILOTARE DIRETTAMENTE
' IL PONTE AD 'H' CON IL PIC, MAGARI IMPOSTANDOGLI UNA PAUSA FISSA.
' ------------------------------------------------------------------------------
' MERCOLEDI' 28 LUGLIO: ...NORA SEMPRE PIU' TRANKY... BEATA LEI!
' FUNZIONA TUTTO ALLA PERFEZIONE, IL PIC NON AVEVA PROBLEMI MA A CAUSARE IL
' NOIOSO PROBLEMA DEGLI SPRUZZI ALLA CAZZO E' IL SOFTWARE DEL GLADE!
' AVENDO ISOLATO IL PIN CHE SELEZIONA I 9 MINUTI, E' PROBABILE CHE IL SW NON
' SAPPIA COSA FARE, E FIN QUI VA BENISSIMO. ALL'INIZIO AVEVO TESTATO CHE TUTTO
' RIMANEVA IN STAND BY SENZA QUESTO PIN COLLEGATO A MASSA.... INVECE...
' SUCCEDE PERO' CHE DOPO UN COMANDO MANUALE INVIATO DAL PIC, AVVENGA UN NUOVO
' SPRUZZO DOPO CIRCA MEZZ'ORA. IL PROBLEMA CREDO SIA L'INTERRUPT SUL PULSANTE
' CHE OLTRE AD ESEGUIRE UN CICLO VADA A RESETTARE QUALCHE VARIABILE 'STRANA'.
' NON FA NIENTE, VORRA' DIRE CHE AL POSTO DI SEI SPRUZZATE AL GIORNO NE FARA'
' DODICI AL POSTO DELLE SESSANTASEI (66) IMPOSTATE COL SELETTORE SU '36 MIN.'
' NATURALMENTE METTERO' SOTTO CONTROLLO L'APPARECCHIETTO PER QUALCHE GIORNO.
' ******************************************************************************
' ******************************************************************************
' 31 LUGLIO.... FINALMENTE E' NATA NORA E SIAMO TUTTI FELICI E RINCOGLIONITI!!
' ******************************************************************************
' ******************************************************************************
' ------------------------------------------------------------------------------
' ------------------------------------------------------------------------------
' 02 SETTEMBRE 2021
' MI SONO ROTTO LE BALLE QUINDI CREO UNA NUOVA VERSIONE DEL SOFTWARE!!
' SECONDA VERSIONE, LA PRIMA DAVA PROBLEMI DI TEMPORIZZAZIONE CASUALE.
' --------------------------------- MODIFICHE ----------------------------------
' ELIMINO I DIPSWITCHES ESTERNI E FISSO UNA PAUSA A PIACIMENTO (PROVO 2 ORE).
' ------------------------------------------------------------------------------
' DOPO MADONNE SANTISSIME HO DECISO DI RIFARE UN SOFTWARE CHE ALIMENTA IL
' DIFFUSORE PER CIRCA UNA DECINA DI SECONDI, SFRUTTA UNA CARATTERISTICA DEL
' "SUO FIRMWARE ORIGINALE" E POI LO SPEGNE, GLI TOGLIE FISICAMENTE TENSIONE.
' AVEVO NOTATO CHE QUANDO SI METTONO LE BATTERIE COL DIFFUSORE ACCESO, QUESTO
' DOPO POCHI SECONDI INIZIA UNA EROGAZIONE PER POI METTERSI IN PAUSA IN BASE
' A COME VIENE SETTATO IL COMMUTATORE.
' ADESSO, IL PIC PILOTA UN MOSFET CHE A SUA VOLTA ALIMENTA IL DIFFUSORE PER
' UNA DECINA DI SECONDI, IL TEMPO DI FARGLI FARE UNO SPRUZZO CON TUTTA CALMA.
' POI IL PIC SI METTE A DORMIRE PER IL TEMPO IMPOSTATO. (TEMPO FISSO!)
' HO IMPOSTATO IL PIC PER SVEGLIARSI OGNI 5 MINUTI CIRCA DALLO SLEEP MODE.
' UN PRESCALER FA IN MODO DI ACCUMULARE QUESTO INTERVALLO PER RAGGIUNGERE
' LE DUE ORE, COSI' SARA' FORZATO L'INTERVALLO TRA DUE SPRUZZATE.
' PROVO IL SOFTWARE SUL GLADE DEL LABORATORIO POI VEDRO' SE STAVOLTA HO
' AZZECCATO IL MODO GIUSTO PER PILOTARE IL CAPRICCIOSO E MALEDETTO AGGGEGGIO!!
' NATURALMENTE IL PULSANTE SUL RETRO ADESSO RIMANE INTERDETTO IN QUANTO
' IL DIFFUSORE GLADE NON E' PIU' ALIMENTATO COSTANTEMENTE.
' APPENA APPLICATE LE BATTERIE, DOPO 5 SECONDI ESEGUO UNA BELLA SPRUZZATINA.
' UNA SECONDA EROGAZIONE AVVIENE SUBITO DOPO 5 MINUTI E SERVE A TESTARE CHE
' IL COUNTER DEL WATCHDOG FACCIA IL SUO DOVERE, POI LE SUCCESSIVE EROGAZIONI
' AVVERRANNO A CADENZA DI DUE ORE CIRCA. (O COME DA IMPOSTAZIONE...)
' --------------------------------- MODIFICHE ----------------------------------
' 2 SETTEMBRE 2021 - PROGRAMMATO IL GLADE DEL LABORATORIO (USO TEST)
' 7 SETTEMBRE 2021 - RI-PROGRAMMATO IL GLADE DEL BAGNO
' IN FUTURO VEDRO' DI IMPLEMENTARE UN RISVEGLIO TRAMITE IL PULSANTE ESISTENTE
' IN MODO DA RENDERLO OPERATIVO COME IN ORIGINE. PENSAVO DI RESETTARE IL PIC.
' PROVERO' AD ABILITARE IL PIN MCLR E A FARE QUALCHE ESPERIMENTO.
' APPROFITTO PER AGGIORNARE LO SCHEMA ELETTRICO CON LA MODIFICA 'FIXED'
' --------------------------------- MODIFICHE ----------------------------------
' 10 SETTEMBRE 2022 - AGGIORNAMENTO PER IL MIO AMICO STEFANO (RIVELLO)
' PROGRAMMO UN MICRO E METTO INSIEME UN CIRCUITINO ANCHE PER LUI DA UTILIZZARE
' NEL LOCALE DOVE FUMA LA PIPA. LASCIO LA PAUSA IMPOSTATA CON CADENZA DUE ORE.
' STEFANO MI HA DATO UNA BELLA DRITTA, METTERE UN PULSANTINO N.C. PER
' FARE PARTIRE UNA EROGAZIONE SUPPLEMENTARE RESETTANDO IL PIC. GRANDE!!
' CERCHERO' IN INTERNET UN MINIPULSANTE N.C. DA SOSTITUIRE A QUELLO ESISTENTE,
' BASTERA' STACCARE MOMENTANEAMENRE TENSIONE AL PIC E IL RESTO VERRA' DA SE.
' ------------------------------------------------------------------------------
' 24 AGOSTO 2024 - NUOVO AGGIORNAMENTO PER IL MIO AMICO STEFANO (RIVELLO)
' GLI HO COSTRUITO ANCORA DUE CIRCUITI PER DUE EROGATORI MA STRANAMENTE
' UNO NON NE VOLEVA SAPERE DI FUNZIONARE. HO APPURATO IERI CHE IL MODELLO
' DEL DISPOSITIVO NON ERA QUELLO PER CUI HO PROGETTATO QUESTO SOFTWARE.
' DOPO AVER FATTO DUE PROVE ABBIAMO CAPITO LA CAUSA DEL PROBLEMA, E CIOE'
' CHE IL TEMPO DI LAVORO ASSEGNATO AL PIC NON ERA SUFFICIENTE PER ALIMENTARE
' CORRETTAMENTE IL CIRCUITO DELL'EROGATORE 'DIVERSO'.
' COSI' HO AUMENTATO IL TEMPO DI LAVORO A VENTI SECONDI, DATO CHE L'AGGEGGIO
' QUANDO VIENE ALIMENTATO ESEGUE UNA SPRUZZATA DOPO 15 SECONDI. EVVAI, FUNGE!
' PER CURIOSITA' HO FATTO UNA RICERCA TRAMITE GOOGLE (AIR WICK) MA NON HO
' TROVATO NESSUN RISCONTRO RIGUARDO AL MODELLO CHE FACEVA I CAPRICCI,
' DEDUCO CHE STEFANO ABBIA RICICLATO UN VECCHISSIMO MODELLO DI EROGATORE
' IL QUALE HA UN LED VERDE A BORDO CHE LAMPEGGIA OGNI CINQUE SECONDI.
' ....INUTILE DIRE CHE NEPPURE LA RICERCA PER IMMAGINI MI HA AIUTATO.
' ------------------------------------------------------------------------------
' ------------------------------------------------------------------------------
' ---------------------------------- INCLUDES ----------------------------------
' ------------------------------------------------------------------------------
' ------------------------------------------------------------------------------
' ---------------------------- DICHIARAZIONI GLOBALI ---------------------------
' ------------------------------------------------------------------------------
' ------------------------------------------------------------------------------
' ----------------------------------- SIMBOLI ----------------------------------
' ------------------------------------------------------------------------------
' ------------------------------------------------------------------------------
' ----------------------------------- COSTANTI ---------------------------------
' ------------------------------------------------------------------------------
' ------------------------------------------------------------------------------
CONST
'-----------
' CONFIGURAZIONE TIPI DI OSCILLATORE
MHZ_8_OUT = %01110000 'OSC ESTERNO A 8MHZ
MHZ_4_OUT = %01100000 'OSC ESTERNO A 4MHZ
MHZ_2_OUT = %01010000 'OSC ESTERNO A 2MHZ
MHZ_1_OUT = %01000000 'OSC ESTERNO A 1MHZ
KHZ_500_OUT = %00110000 'OSC ESTERNO A 500KHZ
KHZ_250_OUT = %00100000 'OSC ESTERNO A 250KHZ
KHZ_125_OUT = %00010000 'OSC ESTERNO A 125KHZ
KHZ_31_OUT = %00000000 'OSC ESTERNO A 31KHZ
MHZ_8_INT = %01110001 'OSC INTERNO A 8MHZ
MHZ_4_INT = %01100001 'OSC INTERNO A 4MHZ
MHZ_2_INT = %01010001 'OSC INTERNO A 2MHZ
MHZ_1_INT = %01000001 'OSC INTERNO A 1MHZ
KHZ_500_INT = %00110001 'OSC INTERNO A 500KHZ
KHZ_250_INT = %00100001 'OSC INTERNO A 250KHZ
KHZ_125_INT = %00010001 'OSC INTERNO A 125KHZ
KHZ_31_INT = %00000001 'OSC INTERNO A 31KHZ
' ------------------------------------------------------------------------------
CONST
'-----------
' CONFIGURAZIONE PRESCALER DEL WATCHDOG (OPTION REGISTER)
OPTREG_WDT_1 = %00000000
OPTREG_WDT_2 = %00000001
OPTREG_WDT_4 = %00000010
OPTREG_WDT_8 = %00000011
OPTREG_WDT_16 = %00000100
OPTREG_WDT_32 = %00000101
OPTREG_WDT_64 = %00000110
OPTREG_WDT_128 = %00000111
' ------------------------------------------------------------------------------
CONST
'-----------
' CONFIGURAZIONE PRESCALER DEL WATCHDOG (WDTCON REGISTER)
WDTCON_WDT_32 = %00000000
WDTCON_WDT_64 = %00000010
WDTCON_WDT_128 = %00000100
WDTCON_WDT_256 = %00000110
WDTCON_WDT_512 = %00001000
WDTCON_WDT_1024 = %00001010
WDTCON_WDT_2048 = %00001100
WDTCON_WDT_4096 = %00001110
WDTCON_WDT_8192 = %00010000
WDTCON_WDT_16384 = %00010010
WDTCON_WDT_32768 = %00010100
WDTCON_WDT_65536 = %00010110
' ------------------------------------------------------------------------------
CONST
'-----------
' VARIE DI COMODO
ACCESO = 1 'STATO ON
SPENTO = 0 'STATO OFF
ALTO = 1 'BIT ALTO
BASSO = 0 'BIT BASSO
VERO = 1 'CONDIZIONE VERA
FALSO = 0 'CONDIZIONE FALSA
PREMUTO = 0 'TASTO PREMUTO
NON_PREMUTO = 1 'TASTO RILASCIATO
GPIO_MASK = %00000010 'MASCHERA USCITE SULLA PORTA GPIO
' N. DI WEAK-UP DEL WATCHDOG PER RAGGIUNGERE CIRCA 1 ORA
N_WEAKUP_FOR_HOURS = 12
' ORE DI ATTESA TRA UNA EROGAZIONE E LA SUCCESSIVA (2 ORE)
TEMPO_DI_PAUSA = 2 * N_WEAKUP_FOR_HOURS
' SECONDI IN CUI RIMARRA' ATTIVA L'USCITA
WORK_TIME = 20
'-------------------------AS SBIT VARIABILI SISTEMA--------------------------
'WSAVE AS SBIT AT BYTE $70 SYSTEM'COPIA DI W
'SSAVE AS SBIT AT BYTE BANK0 SYSTEM 'COPIA DI STATUS
'PSAVE AS SBIT AT BYTE BANK0 SYSTEM 'COPIA DI PCLATH
'FSAVE AS SBIT AT BYTE BANK0 SYSTEM 'COPIA DI FSR
'----------------------------------------------------------------------------
' ------------------------------COLLEGAMENTI PINS----------------------------
' ----------------------------------IN/OUT-----------------------------------
'USCITE
'--------------------------
DIM
' I PIN DI USCITA LI DEFINISCO MA POI LI UTILIZZO CON MASCHERA AND
O_POWER AS SBIT AT GPIO.1 ' GATE DEL MOSFET
'INGRESSI
'--------------------------
DIM
' I PIN DI INGRESSO LI DEFINISCO MA POI LI UTILIZZO CON MASCHERA AND
' -------------------------VARIABILI ARRAY---------------------------------
DIM
' -------------------------VARIABILII WORD---------------------------------
DIM
' -------------------------VARIABILI BYTE----------------------------------
DIM
GPIO_MIRROR AS BYTE 'LA USO IN AND CON LA GPIO
AWAKENING AS BYTE 'CONTATORE DEI 'RISVEGLI' DEL WATCHDOG
' --------------------------VARIABILI BIT----------------------------------
DIM
O_SPRAY AS SBIT AT GPIO_MIRROR.1 'USCITA MOSFET
' ------------------------INIZIO PROCEDURE---------------------------------
SUB PROCEDURE COUNTDOWN() 'INCREMENTA E COMPARA IL TEMPO TRASCORSO TRA 'SLEEPS'
'CHE APPROSIMATIVAMENTE VALE 5 MINUTI (300 SECONDI)
DIM N_CICLI AS BYTE
INC(AWAKENING) 'INCREMENTA LA VARIABILE DI CONTEGGIO DELLA PAUSA
IF AWAKENING >= TEMPO_DI_PAUSA THEN ' CONFRONTO SE LA PAUSA SUPERA LA
AWAKENING = 0 ' SOGLIA IMPOSTATA, QUINDI RESETTO IL
O_SPRAY = ACCESO ' CONTEGGIO E ALIMENTO IL DISPOSITIVO
GPIO = GPIO_MIRROR AND GPIO_MASK
'---------
FOR N_CICLI = 1 TO WORK_TIME * 10 ' PAUSA DI 20 SECONDI SPEZZETTATA
DELAY_MS(100) ' PER NON IMPALLARE IL PIC, INTANTO
CLRWDT ' AZZERO IL CONTATORE DEL WATCHDOG
NEXT N_CICLI ' OGNI 100 MILLISECONDI.
'---------
O_SPRAY = SPENTO ' INFINE TOLGO TENSIONE AL DISPOSITIVO
GPIO = GPIO_MIRROR AND GPIO_MASK
END IF
END SUB
' ------------------------------------------------------------------------------
' ------------------------------- INIZIALIZZAZIONE -----------------------------
' ------------------------------------------------------------------------------
MAIN: ' MAIN PROGRAM
TRISIO = %00111101 ' TUTTI INGRESSI TRANNE GPIO.1
GPIO = %00000000 ' OUT PIN GPIO.1 BASSO, MOSFET INTERDETTO
' PSA=1 - PRESCALER ASSEGNATO AL WATCHDOG + DIVISIONE 1:128
OPTION_REG = %00001000 + OPTREG_WDT_128
' SWDTEN=1 - ON WATCHDOG + PRESCALER 1:65536
WDTCON = %00000001 + WDTCON_WDT_65536
OSCCON = MHZ_8_INT ' OSCILLATORE INTERNO 8 MHZ - PIN I/O
INTCON = %00000000 ' NESSUN INTERRUPT ABILITATO
T1CON = %00000000
ANSEL = %00000000 ' IMPORTANTE!! I/O DIGITALI=0 - ADC=1!!
CMCON0 = %00000111 ' COMPARATORI OFF - TUTTO DIGITALE
CMCON1 = %00000000
ADCON0 = %00000000
WPU = %00000000 ' WEAK PULLUP OFF, ESTERNI DA 2M OHM CONSUMANO MENO
IOC = %00000000 ' NESSUN INTERRUPT ON CHANGE
' ------------------------------------------------------------------------------
' ------------------------------ START PROGRAMMA -------------------------------
' ------------------------------------------------------------------------------
O_SPRAY = SPENTO ' ASSICURO IL MOSFET INTERDETTO (GATE = 0 VOLT)
GPIO = GPIO_MIRROR AND GPIO_MASK
DELAY_MS(5000) ' ASSICURO 5 SECONDI DI PAUSA COSI' NON SPRUZZO
' NEGLI OCCHI QUANDO CI METTO LE BATTERIE :)
' FARO' UN PRIMO SPRUZZO QUANDO DARO' TENSIONE (INSERIMENTO/CAMBIO BATTERIE)
AWAKENING = TEMPO_DI_PAUSA
CLRWDT ' AZZERO IL CONTATORE DEL WATCHDOG
COUNTDOWN() ' ESEGUO IL PRIMO CICLO E FARA' SUBITO UNO SPRUZZO
' FARO' UN SECONDO SPRUZZO DOPO 5 MINUTI
AWAKENING = TEMPO_DI_PAUSA - 1
CLRWDT ' AZZERO IL CONTATORE DEL WATCHDOG
' ------------------------------------------------------------------------------
' ------------------------- POLLING DEL MAIN PROGRAM ---------------------------
' ------------------------------------------------------------------------------
WHILE TRUE ' CICLO IN CONTINUAZIONE TRA 'WHILE' E 'WEND'
' SCRIVO COSI' L'ISTRUZIONE 'SLEEP' PERCHE' IN ROSSO E' PIU' VISIBILE :)
' ----------
ASM ' METTO IL PIC A DORMIRE PER CIRCA 5 MINUTI.
SLEEP ' QUANDO IL WATCHDOG INTERVIENE ESCO DA QUESTO "SLEEP"
END ASM ' E PROSEGUO CON LA NORMALE ESECUZIONE DEL PROGRAMMA...
' ----------
COUNTDOWN() ' CHIAMO LA ROUTINE CHE CONTEGGIA I RISVEGLI...
WEND
END.