
                        DAILY   TIMER


INTRODUZIONE
Il progetto qui presentato nasce dalla necessit di rimpiazzare un vecchio
orologio per il controllo degli orari di funzionamento dell'impianto di
riscaldamento. In commercio sono disponibili molti modelli (a catalogo)
ma dopo aver visitato 3 negozi senza trovare nulla disponibile ,  ho
pensato di realizzarne uno personalmente , anche in considerazione del
fatto che questi oggetti hanno un costo ragionevole , ma non propriamente
trascurabile ,e buona parte del materiale occorrente era gi in mio
possesso .  (ovviamente se  calcolo il tempo necessario a sviluppare
il progetto ne avrei acquistati 10, ma questo  un altro discorso)


Le prestazioni che volevo ottenere erano le segg.
        2 canali di uscita
        almeno 10 impostazioni
        mantenimento dell'ora per almeno 4 ore in mancanza di alimentazione
        dimensioni ridotte
        display alfanumerico  2 righe da 16 caratteri
        basso consumo
        indicatore a led sullo stato di funzionamento del timer
        precisione ragionevole (5-6 sec./settimana)
La scelta  ovviamente caduta su un microcontrollore .
Per la precisione il modello PIC16F84 che ,per gli hobbisti , e non solo 
particolarmente conveniente ;  riscrivibile moltissime volte ,non occorre
cancellarlo con gli UV ,ha un ragionevole spazio EPROM ,ha 64 byte di EEPROM
e sopratutto sul WEB vi si pu trovare un'infinit di applicazioni.

        PRESTAZIONI     OTTENUTE

        2 canali di uscita
        20 impostazioni totali
        tenuta ora > 24h
        impostazioni tramite 2 pulsanti
        Led di segnalazione di funzionamento corretto (impulso breve)
                          o di anomalia (impulso lungo)
        Display LCD da 2 righe x 16 caratteri
        Verifica ogni ora della validit dei dati contenuti in EEPROM
                          e nel RTC
        Timeout di sicurezza su pressione tasti
        Semplice men di selezione funzioni ed impostazioni dati
        Watch dog di sicurezza nel caso si bloccasse il programma
        Visualizzazione continua dell'ora attuale , dello stato delle
                          uscite e di tutte le impostazioni in EEPROM

MODO d'impiego
La programmazione del timer  praticamente uguale a quella che normalmente
si usa per gli orologi da polso digitali.
Si utilizzano  2 pulsanti che chiameremo  PDx  e  PSx   rispettivamente a
destra e a sinistra del display ; come regola generale si pu dire  che
PDx effettua l'avanzamento dei numeri/funzioni  e PSx serve per la conferma
della voce selezionata.
Accendendo il timer la prima volta il led indicher una condizione di errore
 tralasciare questa indicazione e procedere nel ....

 METTERE a PUNTO l'ORA
Con PSx  scorrere le voci del men e fermarsi su    SET Clock
premere PDx , sulla II riga del display dovrebbe apparire un'indicazione
di ora ( del tutto casuale) ed il cursore si dovrebbe posizionare dopo
le ore ; con il PSx far avanzare le ore fino alla ora desiderata ,
a questo punto premere PDx ed il cursore passer sui minuti effettuare
la messa a punto per i minuti .
Tenere presente che quando l'orologio sar avviato i secondi saranno a 00
per cui impostare l'ora al prossimo minuto.
Inoltre  sempre attivo un timer di sicurezza che se non rileva la pressione
di un tasto entro 90 secondi resetta il sistema.
Per cui non impostare un'ora distante pi di 1 minuto dall'ora attuale
oppure premere ogni tanto PDx in attesa della coincidenza delle 2 ore.

VERIFICA/MODIFICA  SETPOINT
Con PSx scorrere le voci del men e fermarsi su    EDIT Rec.
premere PDx ,dopo la scritta  rec. appare una lettera ( da  A  a T ) che
indica a quale record appartiene l'ora che  appare sulla II riga del display
oltre all'ora del setpoint  visualizzato il modo di attivazione delle uscite
I codici di attivazione hanno il segg. significato :

     OUT=0      setpoint disattivo , viene bypassato
     OUT=1      attiva    l'uscita 1    disattiva l'uscita 2
     OUT=2      disattiva l'uscita 1    attiva    l'uscita 2
     OUT=3      attiva    l'uscita 1    attiva    l'uscita 2
     OUT=4      disattiva l'uscita 1    disattiva l'uscita 2

Ogni volta che si modifica/aggiunge un setpoint viene ricalcolata la
checksum di tutte le impostazioni presenti in EEPROM e visualizzata
sul display.

FUNZIONI speciali
Con PSx scorrere le voci del men e fermarsi su    Func.
premere PDx ,dopo la scritta  Func. appare un numero ( da 00 a 09 )
I codici attivi sono i segg.
        00 = visualizza i codici di errore che il programma ha rilevato
             sono indicati 2 byte il I indica lo stato degli errori
             al momento attuale ,il II lo stato degli errori al momento
             in cui  intervenuto il W.D. del micro.
             Per il significato dei vari bit fare riferimento al sorgente.
        03 = cancella tutti gli errori di cui sopra
        09 = azzera tutta la EEPROM quindi tutti i setpoint sono portati
             in modo disabilitato



DESCRIZIONE     hardware

PIC16F84
Deve necessariamente essere il modello F84 in quanto sono utilizzate
circa 60 locazioni di memoria ram che il modello C84 non ha disponibili.
Viene usato sia il watch-dog che il power-on interno pertanto accertarsi
che il programmatore sia compatibile con il modello F84 in quanto
i bit di configurazione cambiano tra i due modelli.

Condensatori oscillatore 4.000MHz
Con i valori indicati a schema ,sul mio prototipo il quarzo oscilla
a 4.000.035Hz ; consiglio se si ha disponibile un frequenzimetro di
controllare la frequenza di oscillazione ed eventualmente correggerla
variando leggermente C2 .
Da evitare i risonatori ceramici per la loro scarsa precisione.

PCF8593
Consiste in un completo RTC orologio/calendario con interfaccia IIC ed
oscillatore integrato appositamente studiato per funzionare con i
quarzi a 32768Hz. Il suo consumo in stand-by  estremamente ridotto
( 4uA nel caso peggiore).
Potrebbe essere sostituito con il PCF8583 salvo variare l'indirizzo
a cui risponde sia da software che da hardware .
La precisione di tutto il sistema dipende in massima parte da questo
componente , in quanto il programma si sincronizza ogni ora con
l'orologio del PCF8593.
Sul mio esemplare con i valori indicati ho ottenuto una deriva di circa
4sec alla settimana ; sufficiente per la mia applicazione.
Chi volesse tarare esattamente la frequenza dell'oscillatore pu sostituire
C4 (10pF) con un compensatore da 5 - 30pF ;in questo caso non prelevare
il segnale da misurare dai pin dell'oscillatore ma aggiungere una resistenza
da 5-10k collegata tra +5v e pin 7(int) del PCF ; su questo piedino 
normalmente presente un onda quadra ad 1Hz .
Occorre curare il layout del circuito ed evitare di fare passare piste o
fili vicino al quarzo da 32KHz in quanto i fronti ripidi dei segnali
possono interferire con l'oscillatore .
Tenere presente che se non inizializzato come orologio l'oscillatore
rimane disabilitato.
Volendo , con relativamente poche modifiche si potrebbe anche non utilizzare
l'RTC e garantendo l'alimentazione continua al circuito far funzionare il
timer anche senza questo componente ; in questo caso occorre per variare
la frequenza del quarzo a 4.194.304Hz per eliminare gli errori cumulativi
che si avrebbero con il quarzo da 4MHz

SUPER-CAP
Condensatore da 47milliF 5.5V ,permette il funzionamento del RTC in
mancanza di alimentazione ; teoricamente con questo valore di capacit
si avrebbe una autonomia di circa 3 ore ,in pratica sul mio esemplare
dopo 36 ore non si rilevano alterazioni ai dati contenuti nel RTC.
Ho usato questo componente per 3 motivi  1) ne avevo disponibili
2) occupa meno spazio di 2 accumulatori NiCd  3)non richiede le attenzioni
necessarie per gli accumulatori .
Volendolo sostituire consiglierei di usare una pila all'ossido di argento
da 3V  con i terminali a saldare , in questo caso occorre sostituire la
R19 con un diodo (anodo collegato alla pila per evitare di caricarla) ;
questa soluzione dovrebbe garantire almeno 5-6 anni di autonomia.
Come ultima alternativa si pu ripiegare su 2 elementi NiCd da 100mA/h
o meno , occorre aumentare la R19 a 470 ohm .

CIRCUITO di POWER-DOWN
Questo circuito  fondamentale per la tenuta dei dati nel PCF8593
Quando la tensione di alimentazione scende sotto i 9-10v il circuito
commuta immediatamente stato ,isola il supercap dal 5v per evitare
di scaricarlo  e mantiene in reset il micro per impedirgli di  accedere
eventualmente al PCF8593 .

DISPLAY LCD
Il modello utilizzato  abbastanza anziano e probabilmente non pi
reperibile ;  comunque perfettamente intercambiabile con modelli
recenti purch siano basati sul controllore HD44780 .
L'unica differenza consiste nella tensione di regolazione del contrasto
che nei modelli recenti pu andare da 0v a +5v mentre nel LM016 deve
essere leggermente negativa .
Il display  collegato con il pin R/W costantemente ha massa .
Questo ha permesso di risparmiare lo spazio di codice per effettuare il
test se il display  pronto a ricevere nuovi caratteri ed un pin di
uscita del PIC16F84 ; per contro occorre inserire dei ritardi per
essere sicuri che l'HD44780 abbia il tempo necessario ad eseguire
le operazioni richieste .

ICL7660
Si tratta di un convertitore di tensione da positiva a negativa .
Se il display utilizzato non richiede una tensione di controllo
negativa si pu tranquillamente eliminare il 7660 ed i componenti
relativi .

LED
Il led usato sul pannello frontale  un modello a bassa corrente
ed essendo normalmente acceso con impulsi relativamenti brevi
non lo sostituirei , si potrebbe aumentare la corrente di pilotaggio
ma sebbene il PIC possa fornire 20mA in uscita  meglio mantenersi
su valori pi bassi.
Gli altri led collegati in serie alle basi dei transistori di uscita
hanno lo scopo di garantire il livello 0 al transistore e sono utili
come indicatori per lo stato delle uscite.

ALIMENTAZIONE
Tutto il circuito consuma tra i 10 e 30mA  (uscite a parte)
Come uscite si pu collegare rel ,led , rel statici purch non
consumino pi di 100mA.
Se l'alimentazione del circuito viene prelevata da una apparecchiatura
elettromeccanica prevedere un opportuno filtraggio per evitare che disturbi
dovuti a commutazioni provochino dei malfunzionamenti al timer.

DESCRIZIONE     software
Il sorgente  stato scritto per l'assembler fornito gratuitamente
dalla Microchip. ( versione 01.40 o pi recente )
Non credo che sia utilizzabile senza modifiche con altri assemblatori.
Qualora fosse necessario riassemblare il file ricordarsi di attivare
l'opzione c-  diversamente si avranno centinaia di errori in quanto
l'assembler fa distinzione tra nomi scritti in maiuscolo/minuscolo.

Alcune routine sono state copiate  da programmi/utility prelevate
da internet  ( un ringraziamento agli autori ) ed adattate al mio
programma .

Nel sorgente sono precaricate in EEPROM le impostazioni di setpoint
queste ovviamente sono adatte al mio uso ; si possono variare a piacere
occorre tenere presente che la checksum indicata a fine tabella 
calcolata per i miei valori ; quando il programma verr avviato si
accorger della differenza e segnaler l'errore ,bisogna quindi far
ricalcolare la check  scegliendo un setpoint qualunque e riconfermalo.
Inoltre bisogna attivare sul programmatore per PIC la scrittura della
EEPROM che normalmente non viene effettuata.


Non credo che sia possibile aggiungere altre funzioni in quanto sono
rimaste libere solamente una decina di locazioni per il programma ;
inoltre per fare stare tutto il programma nelle 1024 word disponibili
ho legato molte routine tra di loro in maniera non propriamente ortodossa
spostarne/modificarne una si corre il rischio di bloccare tutto.
Una modifica che si potrebbe attuare in maniera relativamente semplice
 quella relativa all'eliminazione del PCF8593 , come detto precedentemente
questa libererebbe alcune decine di word utilizzabili per altre funzioni.


