|
|
titolo: Centralina meteo 2007/08 |
data.: 24/01/08 |
| file.: |
descr.: Definizione funzionalità software gestione centralina |
Realizzazione di un programma in linguaggio assembler 8051 per la scheda a microcontrollore 8051 della centralina che svolga le seguenti funzioni:
Realizzazione di un programma in linguaggio visual C per PC che svolga le seguenti funzioni:
Realizzazione di pagina Web in codice PHP che svolga le seguenti funzioni:

| Grandezza | Valore Attuale | Min giorno | Max giorno | Min giorno prec. | Max giorno prec. | Acq |
| Te1 | X | X | X | X | X | X |
| Te2 | X | X | X | X | X | X |
| VelV | X | X | X | X | X | X |
| DirV | X | X | ||||
| Um | X | X | X | X | X | X |
| Ins | X | X | X | X | X | X |
| Vbatt | X | X | X | X | X |
Definizione variabili principali:
| Nome | Dim. | Locazione mem. | Descrizione |
| Te1 | 1 byte | Esterna | Ultimo valore di temperatura Te1 letto, (Raw 0=-20° 255=56°) |
| MaxGTe1 | 1 byte | Esterna | Massimo valore di temperatura Te1 della giornata, (Raw 0=-20° 255=56°) |
| MinGTe1 | 1 byte | Esterna | Minimo valore di temperatura Te1 della giornata, (Raw 0=-20° 255=56°) |
| MaxGPTe1 | 1 byte | Esterna | Massimo valore di temperatura Te1 della giornata precedente, (Raw 0=-20° 255=56°) |
| MinGPTe1 | 1 byte | Esterna | Minimo valore di temperatura Te1 della giornata precedente, (Raw 0=-20° 255=56°) |
| PBTe1 | 2 byte | Esterna | Puntatore al buffer di memorizzazione temperatura Te1 su memoria esterna. |
| MTe1 | 2 byte | Interna | Accumulo per media Te1 |
| CTe1 | 1 byte | Interna | Conteggio per media Te1 |
| TacqTe1 | 1 byte | Interna | Conteggio per tempo acq Te1 |
| Te2 | 1 byte | Esterna | Ultimo valore di temperatura Te2 letto, (Raw 0=-20° 255=56°) |
| MaxGTe2 | 1 byte | Esterna | Massimo valore di temperatura Te2 della giornata, (Raw 0=-20° 255=56°) |
| MinGTe2 | 1 byte | Esterna | Minimo valore di temperatura Te2 della giornata, (Raw 0=-20° 255=56°) |
| MaxGPTe2 | 1 byte | Esterna | Massimo valore di temperatura Te2 della giornata precedente, (Raw 0=-20° 255=56°) |
| MinGPTe2 | 1 byte | Esterna | Minimo valore di temperatura Te2 della giornata precedente, (Raw 0=-20° 255=56°) |
| PBTe2 | 2 byte | Esterna | Puntatore al buffer di memorizzazione temperatura Te2 su memoria esterna. |
| MTe2 | 2 byte | Interna | Accumulo per media Te2 |
| CTe2 | 1 byte | Interna | Conteggio per media Te2 |
| TacqTe2 | 1 byte | Interna | Conteggio per tempo acq Te2 |
| VelV | 1 byte | Esterna | Ultimo valore di velocità vento letto, (Raw 0=<da definire> 255=<da definire>) |
| MaxGVelV | 1 byte | Esterna | Massimo valore velocità vento della giornata, (Raw 0=<da definire> 255=<da definire>) |
| MinGVelV | 1 byte | Esterna | Minimo valore velocità vento della giornata, (Raw 0=<da definire> 255=<da definire>) |
| MaxGPVelV | 1 byte | Esterna | Massimo valore velocità vento della giornata precedente, (Raw 0=<da definire> 255=<da definire>) |
| MinGPVelV | 1 byte | Esterna | Minimo valore velocità vento della giornata precedente, (Raw 0=<da definire> 255=<da definire>) |
| PVelV | 2 byte | Esterna | Puntatore al buffer di memorizzazione velocità vento su memoria esterna. |
| MVelV | 2 byte | Interna | Accumulo per media velocità vento |
| CVelV | 1 byte | Interna | Conteggio per media velocità vento |
| TacqVelV | 1 byte | Interna | Conteggio per tempo acq velocità vento |
| DirV | 1 byte | Esterna | Ultimo valore della direzione del vento. |
| PDirV | 2 byte | Esterna | Puntatore al buffer di memorizzazione direzione vento su memoria esterna. |
| MDirV | 2 byte | Interna | Accumulo per media direzione vento |
| CDirV | 1 byte | Interna | Conteggio per media direzione vento |
| TacqDirV | 1 byte | Interna | Conteggio per tempo acq direzione vento |
| Um | 1 byte | Esterna | Ultimo valore di umidità relativa letto, (Raw 0=<da definire> 255=<da definire>) |
| MaxGUm | 1 byte | Esterna | Massimo valore di umidità relativa della giornata, (Raw 0=<da definire> 255=<da definire>) |
| MinGUm | 1 byte | Esterna | Minimo valore di umidità relativa della giornata, (Raw 0=<da definire> 255=<da definire>) |
| MaxGPUm | 1 byte | Esterna | Massimo valore di umidità relativa della giornata precedente, (Raw 0=<da definire> 255=<da definire>) |
| MinGPUm | 1 byte | Esterna | Minimo valore di umidità relativa della giornata precedente, (Raw 0=<da definire> 255=<da definire>) |
| PUm | 2 byte | Esterna | Puntatore al buffer di memorizzazione livello umidità su memoria esterna. |
| MUm | 2 byte | Interna | Accumulo per media livello umidità |
| CUm | 1 byte | Interna | Conteggio per media livello umidità |
| TacqUm | 1 byte | Interna | Conteggio per tempo acq livello umidità |
| Ins | 1 byte | Esterna | Ultimo valore di insolazione letto, (Raw 0=<da definire> 255=<da definire>) |
| MaxGIns | 1 byte | Esterna | Massima insolazione della giornata |
| MinGIns | 1 byte | Esterna | Minima insolazione della giornata |
| MaxGPIns | 1 byte | Esterna | Massima insolazione della giornata precedente |
| MinGPIns | 1 byte | Esterna | Minima insolazione della giornata precedente |
| PIns | 2 byte | Esterna | Puntatore al buffer di memorizzazione livello di insolazione su memoria esterna. |
| MIns | 2 byte | Interna | Accumulo per media livello di insolazione |
| CIns | 1 byte | Interna | Conteggio per media livello di insolazione |
| TacqIns | 1 byte | Interna | Conteggio per tempo acq livello umidità |
| Vbatt | 1 byte | Esterna | Ultimo valore di tensione batteria letto, (Raw 0=<da definire> 255=<da definire>) |
| MaxGVbatt | 1 byte | Esterna | Massimo valore di tensione batteria della giornata, (Raw 0=<da definire> 255=<da definire>) |
| MinGVbatt | 1 byte | Esterna | Minimo valore di tensione batteria della giornata, (Raw 0=<da definire> 255=<da definire>) |
| MaxGPVbatt | 1 byte | Esterna | Massimo valore di tensione batteria della giornata precedente, (Raw 0=<da definire> 255=<da definire>) |
| MinGPVbatt | 1 byte | Esterna | Minimo valore di tensione batteria della giornata precedente, (Raw 0=<da definire> 255=<da definire>) |
| MVbatt | 2 byte | Interna | Accumulo per media livello tensione batteria |
| CVbatt | 1 byte | Interna | Conteggio per media livello tensione batteria |
| TacqVbatt | 1 byte | Interna | Conteggio per tempo acq livello tensione batteria |
| cSec | 1 byte | Interna | Centesimi di secondo |
| Sec | 1 byte | Interna | Ore |
| Min | 1 byte | Interna | Minuti |
| Ore | 1 byte | Interna | Secondi |
| FTe1 | 1 bit | Interna | Flag indicante intervallo di acquisizione temperatura Te1 scaduto |
| FTe2 | 1 bit | Interna | Flag indicante intervallo di acquisizione temperatura Te2 scaduto |
| FVelV | 1 bit | Interna | Flag indicante intervallo di acquisizione velocità vento scaduto |
| FDirV | 1 bit | Interna | Flag indicante intervallo di acquisizione direzione vento scaduto |
| FUm | 1 bit | Interna | Flag indicante intervallo di acquisizione livello umidità scaduto |
| FIns | 1 bit | Interna | Flag indicante intervallo di acquisizione livello insolazione scaduto |
| FVbatt | 1 bit | Interna | Flag indicante intervallo di acquisizione tensione batteria scaduto |
| FFTe1 | 1 bit | Interna | Flag indicante buffer temperatura Te1 pieno |
| FFTe2 | 1 bit | Interna | Flag indicante buffer temperatura Te2 pieno |
| FFVelV | 1 bit | Interna | Flag indicante buffer velocità vento pieno |
| FFDirV | 1 bit | Interna | Flag indicante buffer direzione vento pieno |
| FFUm | 1 bit | Interna | Flag indicante buffer livello umidità pieno |
| FFIns | 1 bit | Interna | Flag indicante buffer livello insolazione pieno |
Definizione costanti principali:
| Nome | Dim. | Descrizione | Valore assegnato |
| BufTe1K | 2 bytes | Start buffer temperatura Te1 | |
| BufTe2K | 2 bytes | Start buffer temperatura Te2 | |
| BufVelVK | 2 bytes | Start buffer velocità vento | |
| BufDirVK | 2 bytes | Start buffer direzione vento. | |
| BufUmK | 2 bytes | Start buffer livello umidità | |
| BufInsK | 2 bytes | Start buffer livello insolazione | |
| LBufTe1K | 2 bytes | Lunghezza buffer temperatura Te1 | |
| LBufTe2K | 2 bytes | Lunghezza buffer temperatura Te2 | |
| LBufDirVK | 2 bytes | Lunghezza buffer direzione vento | |
| LBufVelVK | 2 bytes | Lunghezza buffer velocità vento | |
| LBufUmK | 2 bytes | Lunghezza buffer livello umidità | |
| LBufInsK | 2 bytes | Lunghezza buffer insolazione | |
| TacqTe1K | 1 byte | Tempo di acquisizione temperatura Te1 (min.) | |
| TacqTe2K | 1 byte | Tempo di acquisizione temperatura Te2 (min.) | |
| TacqDivVK | 1 byte | Tempo di acquisizione direzione vento (min.) | |
| TacqVelVK | 1 byte | Tempo di acquisizione velocità vento (min.) | |
| TacqUmK | 1 byte | Tempo di acquisizione livello umidità (min.) | |
| TacqInsK | 1 byte | Tempo di acquisizione livello insolazione (min.) | |
| CTe1K | 1 byte | Numero valori per media temperatura Te1 | |
| CTe2K | 1 byte | Numero valori per media temperatura Te2 | |
| CDivVK | 1 byte | Numero valori per media direzione vento | |
| CVelVK | 1 byte | Numero valori per media velocità vento | |
| CUmK | 1 byte | Numero valori per media livello umidità | |
| CInsK | 1 byte | Numero valori per media livello insolazione |
Esempio di sistemazione delle variabili su memoria esterna.
| Cella di memoria contenente |
Indirizzo | Valore |
| Te1 | 9000H | 0..255 |
| MaxGTe1 | 9001H | 0..255 |
| MinGTe1 | 9002H | 0..255 |
| MaxGPTe1 | 9003H | 0..255 |
| MinGPTe1 | 9004H | 0..255 |
| PBTe1 | 9005H | 0..65535 |
| Te2 | 9007H | 0..255 |
| MaxGTe2 | 9008H | 0..255 |
| MinGTe2 | 9009H | 0..255 |
| MaxGPTe2 | 900AH | 0..255 |
| MinGPTe2 | 900BH | 0..255 |
| PBTe2 | 900CH | 0..65535 |
| ... | ... | ... |
Esempio di sistemazione dei valori acquisti memoria esterna.
| Cella di memoria contenente |
Indirizzo | Valore |
| Te1Acq1 | BufTe1K | 0..255 |
| Te1Acq2 | BufTe1K+1 | 0..255 |
| Te1Acq3 | BufTe1K+2 | 0..255 |
| ... | ... | ... |
| Te2Acq1 | BufTe2K | 0..255 |
| Te2Acq2 | BufTe2K+1 | 0..255 |
| Te2Acq3 | BufTe2K+2 | 0..255 |
| ... | ... | ... |


Timer 0 sarà utilizzato per generare la base dei tempi per l'orologio e eventuali conteggi di temporizzazione, deve essere impostato in modo di funzionamento 1 e deve chiamare il proprio servizio di interruzione ogni 10ms.
La porta seriale deve essere configurata per un velocità di trasferimento da 9600b/s, 8 bit di dati e un bit di stop, timer 1 svolge la funzione di generatore di clock per la porta seriale e deve essere impostato nel modo di funzionamento 2
Vedi: http://xnullo/corso/labsitel/docs/scheda_8051/seriale.htm


Algoritmo da utilizzare per rilevamento ed acquisizione di ciascuna grandezza: Te1,Te2, VelV, DirV, Um, Ins, Vbatt

Interpretazione dei nomi indicati nel diagramma di flusso:
| ValADC | Valore appena letto dall'ADC |
| Media | Risultato della media, corrisponde a:Te1,Te2,VelV,DirV,Um, Ins, Vbatt |
| AccMedia | Variabile di accumulo media, corrisponde a:MTe1,MTe2,MVelV,MDirV,MUm, MIns, MVbatt |
| ContMedia | Contatore media, corrisponde a:CTe1,CTe2,CVelV,CDirV,CUm, CIns, CVbatt |
| ContMediaK | N.valori da mediare, corrisponde a:CTe1K,CTe2K,CVelVK,CDirVK,CUmK, CInsK, CVbattK |
| MinMax | Subroutine che si occupa dell'
elaborazione del minimo e del massimo della giornata N.B. non è previsto il rilevamento del massimo del minimo di DirV |
| Acq | Subroutine di acquisizione in memoria.
N.B. non è prevista l'acquisizione in memoria di VBatt. |
Algoritmo di rilevazione del massimo e minimo della giornata

Interpretazione dei nomi indicati nel diagramma di flusso:
| Media | Risultato della media, corrisponde a:Te1,Te2,VelV,DirV,Um, Ins, Vbatt |
| MinG | Minimo valore della giornata, corrisponde a:MinGTe1, MinGTe2, MinGVelV, MinGUm, MinGIns, MinGVbatt |
| MaxG | Massimo valore della giornata, corrisponde a:MaxGTe1, MaxGTe2, MaxGVelV, MaxGUm, MaxGIns, MaxGVbatt |
Algoritmo di acquisizione.
Lo schema di allocazione dei buffers su Ram esterna deve come indicato in figura


Interpretazione dei nomi indicati nel diagramma di flusso:
| Media | Risultato della media, corrisponde a:Te1,Te2,VelV,DirV,Um, Ins, Vbatt |
| MemExt[P] | Cella di memoria esterna puntata da P |
| P | Puntatore al buffer su memoria esterna, corrisponde a:PBTe1,PBTe2,PBVelV,PBDirV,PBUm, PBIns |
| BufK | Indirizzo di inizio del buffer, corrisponde a:BufTe1K, BufTe2K, BufVelVK, BufDirVK, BufUmK, BufInsK |
| LBufK | Dimensione del buffer, corrisponde a:LBufTe1K, LBufTe2K, LBufVelVK, LBufDirVK, LBufUmK, LBufInsK |
| FF | Flag indicante il buffer pieno |
La porta seriale RS232 sarà utilizzata per il trasferimento dati da Centralina meteo e PC
Si ipotizza un funzionamento Master Slave dove il ruolo di slave spetta alla centralina. La centralina rimane sempre in ascolto e processa le eventuali richiesta fatte da PC e risponde in base alla richiesta.
Si articola in 4 comandi
| wrmemb:
Scrivi il byte indicato alla memoria esterna alla cella di indirizzo
indicato Flusso dati ricevuto dalla seriale (in bytes):
Flusso dati trasmesso alla seriale (in bytes): non viene trasmesso nulla. |
||||||||
| rdmemb:
Leggi un byte dalla memoria esterna alla cella di indirizzo
indicato
Flusso dati ricevuto dalla seriale (in bytes):
Flusso dati trasmesso alla seriale (in bytes):
|
||||||||
| wrmem:
Scrivi n. bytes alla memoria esterna
a partire dalla cella di indirizzo indicato. 0>n>256 Flusso dati ricevuto dalla seriale (in bytes).
Flusso dati trasmesso alla seriale (in bytes): non viene trasmesso nulla. |
||||||||
| rdmem:
Leggi n. byte dalla memoria esterna a
partire dalla cella di indirizzo
indicato.
0>n>256 Flusso dati ricevuto dalla seriale (in bytes):
Flusso dati trasmesso alla seriale (in bytes):
|




r_rdmem

wrmemb = 07h
rdmemb = 08h
wrmem = 0Bh
rdmem = 0Ch
check acall rx ck2 cjne a,#wrmemb,ck3 sjmp r_wrmemb ck3 cjne a,#rdmemb,ck4 sjmp r_rdmemb ck4 cjne a,#wrmem,ck5 sjmp r_wrmem ck5 cjne a,#rdmem,ck6 sjmp r_rdmem
fine: reti
r_rdmemb: acall rx mov dpl,a acall rx mov dph,a movx a,@dptr acall tx sjmp fine r_wrmemb: acall rx mov dpl,a acall rx mov dph,a acall rx movx @dptr,a sjmp fine r_wrmem: acall rx mov dpl,a acall rx mov dph,a acall rx mov 7FH,a lr_wr acall rx movx @dptr,a inc dptr djnz 7FH,lr_wr sjmp fine r_rdmem: acall rx mov dpl,a acall rx mov dph,a acall rx mov 7FH,a lr_rd movx a,@dptr acall tx inc dptr djnz 7FH,lr_rd jmp fine rx jnb ri,$ rxf clr ri mov a,sbuf ret tx mov sbuf,a jnb ti,$ clr ti ret