Get Adobe Flash player

Sveglia digitale con lettore MP3

User Rating:  / 1
PoorBest 

Link Articolo Originale: http://www.grix.it/viewer.php?page=10895

 

 

Introduzione

Sin dall'era delle valvole, moltissime erano le persone che possedevano in casa una radio.

Dagli anni 50 in poi, dopo l'invenzione del transistor (1947), i dispositivi elettronici sono progressivamente diventati sempre più piccoli e più efficienti dal punto di vista applicativo.

Negli anni '80 iniziano a diffondersi le prime radiosveglie che sono in grado di riprodurre brani musicali più piacevoli del solito "bip!-bip!". Diventano così sempre più piccole e sempre più gradevoli esteticamente con il passare degli anni fino ad arrivare ad oggi, nell'era del digitale, nella quale sono molto diffusi dispositivi in grado di riprodurre file MP3,MP4,AVI ecc..

Perché non unire le due cose e creare una sveglia in grado di svegliarci con il nostro brano musicale preferito?

Parte da qui il progetto che viene di seguito presentato. In quest'opera si intende presentare la progettazione, lo sviluppo e la costruzione di una sveglia digitale con driver MP3. Viene, inoltre, allegato un manuale applicativo relativo alle funzioni del dispositivo.

L'idea di creare un congegno con queste caratteristiche nasce del percorso di studi affrontato durante questi ultimi tre anni: il connubio fra conoscenze di Elettronica, Sistemi Automatici, Telecomunicazioni, Tecnologia Disegno e Progettazione Elettronica mi ha portato a realizzare quest'oggetto dalla notevole utilità applicativa.

 

 

La scelta dei componenti, il processo di produzione e le funzionalità raggiunte si sono rivelati ottime ricerche e studi da presentare all'esame di maturità.

 

Parte 1: Descrizione tecnica del dispositivo

 

 

1.1 Caratteristiche principali

 

La sveglia digitale è stata realizzata con l'utilizzo di un PIC18F4520, un microcontrollore ad 8 bit prodotto da Microchip in grado di svolgere funzioni attraverso la programmazione del firmware. In questo caso, ho utilizzato il linguaggio ad alto livello C18 che, attraverso l'interfaccia-compilatore MPLAB, mi ha permesso di decidere che funzioni far svolgere al PIC.

Per la fase di sviluppo del progetto, è stata utilizzata la scheda EasyPIC 5 di MikroElektronika, la quale ha consentito di risparmiare molto tempo nella fase di programmazione, essendo, questa, dotata di pulsanti, display e quanto necessario per l'implementazione del codice e per eventuali verifiche pratiche di funzionamento.

Per la decodifica dei brani MP3, ho utilizzato l'integrato VS1011 di VLSI Solutions, il quale è un dispositivo in grado di svolgere la funzione di codifica (come registratore) e di decodifica (come riproduttore) di segnali audio stereo. Inoltre, attraverso un firmware particolare che viene scritto nel VS1011 attraverso il PIC, è possibile gestire la ricerca del brano che si desidera utilizzare come  sveglia scegliendolo tra quelli archiviati un una comune memoria MMC/SD. In questo caso, è stata sostituita da una microSD che, nonostante abbia protocollo di trasmissione proprietario, può essere connessa in modalità compatibile, ossia non vengono collegati due pin della schedina, funzionando così in modo analogo alla MMC.

Il termometro digitale è stato realizzato con un TC77 prodotto da Microchip.

La parte di amplificazione è stata, invece, gestita attraverso un integrato, nella fattispecie un TDA7052 prodotto da Philips, il quale mi ha permesso di ottenere un amplificatore audio da 1W, potenza più che sufficiente per questo genere di applicazione.

 L'alimentazione dell'intero sistema è gestita, per il blocco principale, da un trasformatore da 9V e da un LM7805, il quale garantisce 5V continui all'intero blocco; per la parte del decoder MP3, l'alimentazione è gestita da due integrati LM317, che presentano all'uscita circa 3V ciascuno, permettendomi così di alimentare sia la parte analogica sia la parte digitale del dispositivo.

 

La parte di amplificazione è stata, invece, gestita attraverso un integrato, nella fattispecie un TDA7052 prodotto da Philips, il quale mi ha permesso di ottenere un amplificatore audio da 1W, potenza più che sufficiente per questo genere di applicazione.

 L'alimentazione dell'intero sistema è gestita, per il blocco principale, da un trasformatore da 9V e da un LM7805, il quale garantisce 5V continui all'intero blocco; per la parte del decoder MP3, l'alimentazione è gestita da due integrati LM317, che presentano all'uscita circa 3V ciascuno, permettendomi così di alimentare sia la parte analogica sia la parte digitale del dispositivo.


Illustrazione 1 - Schema a blocchi del sistema generale Sveglia

 

 

 

1.1.1 Il PIC18F4520

 

       Il PIC18F4520, come accennato in precedenza, è un microcontrollore ad 8 bit prodotto Microchip, dotato di tutti i moduli, pin I/O, protocolli ed interrupt necessari per la creazione della sveglia.Questo componente ricopre, infatti, un ruolo fondamentale per il funzionamento della sveglia, in quanto al suo interno viene fatto girare il programma che si occupa della gestione del tempo, dell'encoder MP3 e della visualizzazione sul display.

Nell'illustrazione 2 viene riportato il pinout di questo componente in modo da poter comprendere meglio le sue caratteristiche e funzionalità.

Per ulteriori informazioni sui vari moduli del PIC18F4520 si rimanda al datasheet allegato.

 

Illustrazione 3 - Pinout PIC18F4520

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Tornando alle funzionalità utilizzate per il progetto (che verranno illustrate nel dettaglio nei paragrafi successivi), bisogna evidenziare che questo modello di PIC è dotato di tecnologia nanoWatt, la quale rappresenta un'importantissima innovazione nel campo elettronico, in quanto riduce all'osso il dispendio energetico del calcolatore; si è deciso, quindi, di mantenere una prospettiva non solo tecnica ma anche rispettosa dell'ambiente, che, di questi tempi, è una prerogativa indispensabile per produrre oggetti energeticamente efficienti.

Per la connessione fra le varie schede (in particolare per la periferica MP3) mi sono avvalso dell'utilizzo del modulo Master Synchronous Serial Port (MSSP)1 ed in particolare della SPI, un protocollo di comunicazione sincrona molto utilizzato assieme all'I2C.

Da non dimenticare l'uso essenziale degli interrupt per la generazione della temporizzazione (par. 1.1.2) fondamentale per il funzionamento dell'orologio, non utilizzando un RTC2.

Il PIC18F4520 si presenta ,dunque, come un dispositivo versatile e, nonostante questa categoria di microcontrollori sia stata sostituita da altri più veloci (PIC24,dsPIC ecc..), essa risulta essere la soluzione più appropriata per questo genere di applicazione.

 

La Master Synchronous Serial Port (MSSP) supporta la SPI a 3 fili (tutti e 4 i modi) e i modi Master e Slave anche per l'I2C

Real Time Clock

 

1.1.2 La temporizzazione e le sveglie

La temporizzazione

Un orologio non è un orologio se i secondi non scorrono, per questo è necessaria una temporizzazione che permetta al PIC di far verificare questa condizione.

In questo caso, si è scelto di impiegare il Timer0 del PIC e, sfruttando i 4MHz del clock, utilizzare un prescaler che divida la frequenza.

Attraverso un preset viene fornito il secondo esatto, base fondamentale del calcolo orario.

Non è difficile immaginare il timer come una sorta di orologio diviso in 65536 parti (dal momento che utilizziamo il timer come contatore di impulsi a 16 bit, cioè con modulo 216 = 65536). Imporremo che la frequenza di clock del uC arrivi al timer divisa per 16 (ossia anteporremo al timer un prescaler con coefficiente di divisione PRE = 16). Ogni passettino compiuto dalla lancetta (ovvero ogni unità su 65536 che passa) rappresenta un'unità di tempo tbit.


Illustrazione 3 - Il TMR0 con prescaler 16

 

Fissata, quindi, la frequenza dell'oscillatore, il numero di passi compiuti dalla 'lancetta' del timer e il valore del prescaler, si passa a determinare il valore Toverflow ovvero il giro completo della 'lancetta'.

Come è evidente il secondo non è generato in maniera precisa. Per ovviare a questo problema, basta introdurre un preset che faccia avanzare l'orologio di un numero di passi tale da vanificare il ritardo prodotto dall'imprecisione derivante dall'equazione sopra riportata.

Considerando il Toverflow=1,048576 secondi e volendo ottenere un T=1,000000 secondi, calcoliamo un delta delle due quantità per sapere di quanto ritarda l'orologio ad ogni giro.

Volendo anticipare l'orologio ad ogni tbit di una quantità tale da farci ottenere un orologio preciso abbiamo dunque che il preset vale

     A questo punto, nella routine di servizio dell'interrupt che dovrà generare il secondo, basta imporre che l'orologio parta da 3036 invece che da 0. Esso parte così con l'anticipo adeguato ad ottenere il secondo preciso.

Prima di tutto, bisogna inizializzare il TMR0:

void hw_init(void){

 

 

 

OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_16);

WriteTimer0(3036);

INTCON2bits.TMR0IP=1;

INTCONbits.TMR0IF=0;

INTCONbits.TMR0IE=1;

RCONbits.IPEN=1;

INTCONbits.GIEL=1;

INTCONbits.GIEH=1;

}

Per la regolazione del preset all'interno della routine di servizio, il codice da utilizzare è il seguente:

                void ISR_Tmr0 (void){

                               if(INTCONbits.TMR0IF==1){

                               INTCONbits.TMR0IF=0;

                               WriteTimer0(3036);

                               update_clock(&clock);

                                flag = 1;

                                }

In questo modo si è ottenuta la base dei tempi esatta per far funzionare l'orologio.

 

 

Le sveglie

Arrivando al punto focale del progetto, si vuole analizzare la strategia ideata per avere due sveglie impostabili in orari diversi e rinviabili di 5minuti fino a un massimo di due volte.

Sostanzialmente, una sveglia non fa altro che comparare l'ora impostata con l'ora corrente e, nel caso avvenga che i due valori siano uguali, essa suona.

Più precisamente, vengono comparate sia le ore che i minuti, altrimenti, se la sveglia viene fissata alle 17:35:00 e questo comando non viene imposto alle 17:00:00, la sveglia suonerà.

In questo modo, invece, la sveglia suona all'ora fissata.

Per fare in modo che ciò avvenga, sono state create delle funzioni 'drill' che comparano l'ora dell'orologio con quella impostata e, nel caso in cui si verifichi l'uguaglianza, attivano un'uscita del PIC in modo da far suonare un buzzer (oppure far partire una canzone attraverso l'encoder MP3) .

Traducendo tutto questo in C18 si ottiene che:

se((ora orologio=ora sveglia)e(minuti orologio=minuti sveglia))

                { se((minuti orologio=minuti sveglia)){                

                               attivo l'uscita per far suonare il buzzer

                                stampo il messaggio che preferisco sul display

                }

}

L'utente deve essere messo in grado di poter spegnere la sveglia oppure di poterla rinviare, per garantire ciò la sveglia suonerà solo per un minuto se l'utente non preme alcun pulsante, oppure possono essere premuti due pulsanti, uno che permette di disattivare una sveglia (nel caso fossero attive entrambe le sveglie viene disattivata solo quella che sta suonando) e l'altro che permette di rinviare la sveglia di 5 minuti, passati i quali si può scegliere di premere sempre gli stessi due pulsanti, uno per disattivare e uno per rinviare di altri 5minuti.

Una volta passati in totale 10 minuti dal primo orario di sveglia qualsiasi pulsante dei due venga premuto la sveglia si disattiverà.

Pseudocodice:

Se(sveglia=orologio){

                buzzer=1;

                Se (pulsante sveglia=1){

                     buzzer=0;

                }

                Se(pulsante snooze=1){

                     minuti sveglia=minuti sveglia +5;

                     conteggio++;

                     }        

                Se(conteggio=2){

                               Se(pulsante sveglia=1){

                                    buzzer=0;}

                Se(pulsante snooze=1){

                                    buzzer=0;}

}//sveglia=orologio

 

1.1.3 Il TC77

Il TC77 è un sensore di temperatura digitale adatto a piccole applicazioni a basso costo.

I sensori di temperatura integrati sfruttano il fatto che nelle giunzioni a semiconduttore (diodi e

transistor) la tensione e la corrente sono fortemente dipendenti dalla temperatura. La dipendenza è peraltro notevolmente lineare. Per la giunzione PN ideale è possibile ricavare il legame tra la differenza di potenziale VAK e la corrente I, noti i livelli di drogaggio delle zone P ed N, le loro dimensioni fisiche e la temperatura di lavoro T della giunzione

:

 

dove:

q          carica dell'elettrone [ q = 1.602 x 10-19 coulomb ]

VAK       differenza di potenziale ai capi della giunzione PN [V]

k          costante di Boltzman [ k = 1.38066 x 10-23 J/K ]

T          temperatura assoluta della giunzione [K]

mentre la corrente di saturazione I0 è espressa da:

 

dove:

A          sezione della giunzione [m2]

DN        velocità di diffusione dei portatori di minoranza nella zona N della giunzione [m/s]

LN         lunghezza di diffusione dei portatori di minoranza nella zona N della giunzione [m]

NA        densità del materiale drogante di tipo P (accettore) [atomi/m3]

DP        velocità di diffusione dei portatori di minoranza nella zona P della giunzione [m/s]

LP         lunghezza di diffusione dei portatori di minoranza nella zona P della giunzione [m]

ND        densità del materiale drogante di tipo N (donatore) [atomi/m3]

 

ni         densità del materiale semiconduttore intrinseco [atomi/m3]

Dalla prima equazione, con semplici passaggi algebrici, è possibile ricavare il legame tra temperatura e differenza di potenziale ai capi del diodo:

 

VT = kT/q         Tensione termica, che vale all'incirca 26mV a 25°C

Se forziamo una corrente I costante nel diodo, mediante un opportuno generatore di corrente costante, si vede immediatamente che la differenza di potenziale VAK ai capi del diodo è direttamente proporzionale alla temperatura T espressa in gradi Kelvin.

Nella pratica il legame tra le due grandezze dipende dalle tante non idealità della giunzione PN impiegata nel sensore, ma i progressi della microelettronica ci vengono in soccorso: la stessa tecnologia che permette di integrare microprocessori sempre più potenti, ci consente di inserire nel circuito di misura un sistema di calibrazione e di linearizzazione del sensore completamente digitale. Il dispositivo TC77 rileva la tensione VAK ai capi del diodo, la amplifica e la converte in un dato digitale mediante un convertitore analogico digitale integrato nel dispositivo; a questo punto, il valore numerico viene elaborato per via digitale in base ad una curva di calibrazione e di linearizzazione della risposta memorizzata all'interno dello stesso trasduttore.Il risultato numerico consiste in un valore binario a 13 bit in complemento a 2, capace quindi di rappresentare valori numerici positivi e negativi (il TC77 produce un risultato esprimibile in gradi centigradi) con la risoluzione di 0,0625°C / bit e con una accuratezza migliore di 1°C sull'intera scala di lavoro, estesa da -55°C a +125°C.

Illustrazione 4 - Schema a blocchi TC77

 

Il trasduttore TC77 compie autonomamente tre misurazioni di temperatura al secondo e le rende disponibili ad un sistema a microprocessore o a microcontrollore mediante una pratica interfaccia seriale sincrona di tipo SPI.

 

Illustrazione 8 - Trasduzione della temperatura in digitale

 

 

 

 

 

 

 

 

Pseudocodice:                                            

attivo il chip select per la lettura

leggo i primi 8 bit dalla SPI e li metto nella variabile

shifto di 8 posti i dati appena letti per permettere la seconda lettura  

leggo la seconda parte dei dati

disattivo il chip select del TC77

scorrimento per eliminare i 3 bit meno significativi (conservando il segno!)

conversione in formato float per la visualizzazione in decimale

trasformo il dato binario in decimale

trasformo da float a stringa

stampo la temperatura

 

 

 

 

 1.1.4 Il VS1011

 

 

Come previsto dal progetto, si intende  utilizzare un encoder MP3 per la riproduzione di brani durante il suono della sveglia. Il componente che si è deciso di utilizzare è il VS1011 di VLSI Solutions. Esso è, di fatto, in grado di riprodurre, attraverso opportune configurazioni hardware e software, files MP3 contenuti dentro una schedina di memoria MMC. Al suo interno, contiene un DSP ed un DAC per la conversione da bit ad audio, e memorie RAM e ROM per il boot esterno.

Grazie alle varie configurazioni nelle quali può essere utilizzato, il VS1011 ricopre gran parte delle necessità nelle applicazioni di MP3-encoding.

La modalità con la quale si è deciso di utilizzare il VS1011 nella sveglia è la modalità Standalone: l'encoder riceve dei comandi attraverso la linea seriale del PIC (in questo esempio è stata utilizzata la SPI), il quale va a scrivere all'interno di determinati registri dell'encoder alcuni valori, che rappresentano le funzioni che esso è in grado di svolgere.

Nella fattispecie, il PIC dovrà fare il boot dell'encoder ad ogni avvio, andando a scriverci all'interno i comandi da eseguire. Al termine di questa operazione il PIC ordinerà al VS1011 di riprodurre un brano (che può essere scelto attraverso l'opportuno comando in software) ogni qualvolta la sveglia suoni.

Il VS1011 è molto versatile dal punto di vista del Software, in quanto tutte le operazioni che esso svolge possono essere comandate in maniera abbastanzasemplice: si passa dalla selezione brano al controllo volume. Tutto questo può essere, infatti, impostato da codice.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Illustrazione 6 - Il VS1011 visto all'interno

 

 

 

Alcuni esempi di comandi sono riportati qui di

seguito:

VOLUME D'USCITA

// set VS output volume

// see vs1011.pdf, page 35, SCI VOL (RW) Register

void VolumeVS (unsigned char vol)

{

                unsigned int v_stereo;

                v_stereo = vol;

                v_stereo <<= 8;

                v_stereo += vol;

                WriteVS10xxRegister(VS_REG_VOL, vol);           

}

 

 

 

 

SCELTA BRANO

void SongVS(unsigned int track)

{

                track += 0x8000;

                WriteVS10xxRegister(VS_REG_AICTRL0, track);

}

 

 

 

 

ESECUZIONE VS1011

// start VS execution

void StartVS(void)

{

                // init SCI CLOCKF register (see vs1011.pdf, page 32, Example 1: For a 12.288MHz XTALI with clock doubler)

                WriteVS10xxRegister(VS_REG_CLOCKF, 0x9800);           

                // init SCI VOL register: set initial volume to half range

                // (from 0-max volume to 0xFE-min volume; NOTE: 0xFF will activate analog powerdown mode)

                // see vs1011.pdf, page 35, SCI VOL (RW) Register

                VolumeVS(0x7F);           

                // start code execution

                WriteVS10xxRegister(VS_REG_AIADDR, 0x0030);

}

Per tutti i riferimenti applicativi, tecnici o di ogni altro genere consultare i files relativi al VS1011 allegati.

 

1.1.5 Il TDA7052

Per ottenere un volume adeguato alle esigenze della sveglia, si è reso necessario progettare un amplificatore dalle dimensioni ridotte e dalla potenza limitata. A questo scopo, si è adottato il TDA7052 di Philips, il quale fornisce in uscita una potenza di 1W, valore più che sufficiente per il genere di applicazione; oltretutto, come descritto nel paragrafo precedente, il volume può essere regolato sia attraverso software sia attraverso un potenziometro collocato all'ingresso del circuito di amplificazione.

Questo genere di integrato, dovendo dissipare poca potenza, non richiede l'utilizzo di dissipatori esterni ed anche i componenti"di contorno" sono pochi; per la sveglia, infatti, si è scelto di utilizzare uno schema fornito dal produttore. Con l'aggiunta di un potenziometro logaritmico da 5kΩ e due condensatori,uno plastico da 100nF ed uno da 220μ, si è ottenuto un amplificatore affidabilecon distorsione molto bassa. Altre applicazioni e caratteristiche del dispositivo sono reperibili sul datasheet allegato. 

 

 

 

 

 

 

 

Illustrazione 7 - Schema utilizzato per l'utilizzo del TDA7052

 

 

1.2 Dettaglio su schede e periferiche

In questa parte del manuale si intende descrivere tecnicamente le varie parti della sveglia.

Allo stato attuale il software di interfaccia tra PIC e VS1011 contiene ancora dei bug tali da non renderlo affidabile. Si è preferito in questa sede presentare il progetto finale non prevedendo l'utilizzo della scheda periferica con l'encoder MP3 (conseguentemente anche l'amplificatore non viene utilizzato), tuttavia, le schede descritte sono comunque complete in ogni parte e sono state progettate per essere interconnesse fra di loro. Negli schematici e nei PCB allegati, infatti, si trovano già le allocazioni per i connettori utilizzati fra una scheda e l'altra, dunque, per la realizzazione completa del progetto, è necessario rivedere soltanto la parte di software relativa all'encoder MP3.

La sveglia è fondamentalmente formata da 3 schede: la scheda centrale con CPU, alimentazione, connettori per la seriale, pulsanti e visualizzazione su display, scheda encoder MP3 e scheda amplificatore.

Le tre schede verranno dettagliate nei paragrafi successivi, indicando i componenti utilizzati in ognuna, gli schemi elettrici e alcune immagini illustrative del progetto.

Il lavoro presentato all'esame non avrà neppure il TC77, quindi anche la parte di software che verrà caricata sul PIC sarà priva di queste parti.

In allegato sono state comunque inserite due versioni del firmware, quella "base" che verrà caricata per l'esame e quella "completa" che prevede anche le altre periferiche.

In futuro saranno pubblicate anche le parti relative al progetto completo in ogni parte con altre aggiunte.

L'idea per una nuova versione di questo progetto prevede anche l’inserimento di altre funzioni quali  data e riconoscimento dei giorni della settimana e degli anni bisestili, passaggio all'ora solare/legale, implementazione della comunicazione seriale asincrona USART del PIC per il settaggio dell'ora attraverso il PC e per il controllo di temperatura e ora.

Sarebbe interessante poter far comunicare più sveglie fra loro via wireless utilizzando la trasmissione seriale in modo tale da effettuare il controllo senza avere la sveglia sotto mano,  di modo che, possedendo più sveglie di questo genere, si potrebbero impostare tutte direttamente da un'interfaccia sul PC a distanza, e monitorare la temperatura in ogni stanza in cui sia installato uno di questi dispositivi.

Sono già stati creati dei "prototipi" di codice per ottenere alcune di queste nuove funzioni, tuttavia si preferisce pubblicare il tutto a lavoro concluso.

 

 

 

 

 

 

 

 

 

 

 1.2.1 La scheda principale

 

La scheda principale racchiude al suo interno la CPU rappresentata dal PIC, il quale svolge tutti i calcoli e gestisce le varie periferiche, l'unità di alimentazione, il display e i pulsanti per l'interfaccia utente e, infine, i connettori per l'interconnessione fra schede.

Nello specifico, il PIC utilizzato è il PIC18F4520 già descritto in precedenza; l'unità di alimentazione prevede un trasformatore 220V/9V seguito da un ponte di diodi e da un filtro capacitivo collegato ad un LM7805, per ottenere i 5V necessari ad alimentare il PIC, e a due LM317, utilizzati per avere 3.1V con lo scopo di alimentare la parte analogica e la parte digitale del VS1011 (servono alimentazioni separate).

Il display viene pilotato attraverso le uscite della PORTB del PIC e alimentato con l'LM7805 utilizzato per il PIC.

La scheda è fornita di connessione ICSP, indispensabile per non dover togliere e rimettere ogni volta il PIC nel suo zoccolo; ogni qualvolta si desidera riprogrammarlo, è sufficiente connettere la periferica ICD (ICD2, ICD3, ecc) di Microchip.

 

 

 

 

Lo schema elettrico adottato è il seguente:

 

Il relativo PCB (16x10cm):

 

clicca per ingrandire

 

 

clicca per ingrandire

 

 

N.B. Per la realizzazione di tutti gli schematici e PCB è stato utilizzato il software Eagle 5.9.0

 

 

1.2.2 Periferica MP3

Come preannunciato, il progetto prevede l'utilizzo di una scheda encoder MP3 per la suoneria della sveglia. Questa scheda ha a bordo l'encoder MP3 VS1011, il connettore per la memoria MMC/SD, il connettore per lo scambio di dati via seriale con il PIC ed il connettore per l'alimentazione.

Sono, inoltre, presenti sulla scheda tutti i componenti necessari al funzionamento dell'encoder.

Schema elettrico:

 

clicca per ingrandire

 

Relativo PCB (8cm altezza x 8.5cm larghezza):

 

N.B. Le aree tratteggiate rappresentano le piazzole di massa per l'alimentazione analogica e quella digitale!

 

 

1.2.3 Periferica amplificatore

Per ottenere un volume adeguato è stato necessario utilizzare un amplificatore di segnale.

Nella fattispecie si è deciso di utilizzare l'integrato TDA7052, sulla scheda periferica infatti è

presente questo componente assieme ai componenti che lo contornano.

Schema elettrico:

 

 

 

 

 

 

 

PCB (4.6cm altezza x 4.5cm larghezza):

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3 Il protocollo SPI

Dal primo paragrafo si è iniziato a parlare della connessione SPI. Ma cos'è di preciso questa SPI?

La SPI (Serial Peripheral Interface) è un protocollo utilizzato per la interconnessione fra dispositivi esterni al microcontrollore ed il microcontrollore stesso e, assieme all'I2C (Inter-Integrated Circuit), rappresenta una pietra miliare per la trasmissione seriale sincrona; in breve, la trasmissione avviene con una cadenza scandita dal clock della CPU. Più precisamente, si parla di dispositivi master e slave: in questo progetto, ad esempio, il PIC è l'unità master che controlla il flusso di dati mentre il TC77 ed il VS1011 sono gli slave che scambiano dati solo se il PIC glielo ordina.

Si è scelto di utilizzare questo tipo di protocollo perché semplice da gestire via software, resistente e adatto per connessioni corte assicurando estrema affidabilità. Questo tipo di protocollo risulta molto versatile, in quanto si può scegliere se inviare i dati sul fronte di salita oppure sul fronte di discesa di SCK; questi dati verranno letti sul fronte opposto a quello scelto per l'invio.

È possibile, inoltre, inviare e ricevere dati contemporaneamente attraverso i piedini SDO ed SDI.

Fra le configurazioni software possibili, si è in grado di controllare i fronti attivi in trasmissione e ricezione; in questo modo vengono creati i 4 cosiddetti "mode" in base allo stato logico di due bit, precisamente il bit CPOL (Clock Polarity) ed il registro CPHA (Clock Phase). I 4 mode riconosciuti dall'MSSP sono quindi: (1;1), (1;0), (0;1), (0;0).

Il primo bit (COL) indica il livello di riposo del clock (0 = riposo a livello logico basso; 1 = riposo a livello logico alto). Il secondo bit definisce come vengono adoperati i fronti di salita e di discesa del clock: se CPHA vale 0 il dato viene trasmesso quando il clock passa dallo stato di riposo allo stato attivo (e letto in corrispondenza del fronte opposto); viceversa se CPHA vale 1 il dato viene trasmesso quando il clock passa dallo stato attivo allo stato di riposo (e letto in corrispondenza del fronte opposto). 

 

 

 

 

 

 

 


Parte 2: Istruzioni Operative

 

 

 

 

2.1 Introduzione

In questa seconda parte della tesina, si vogliono illustrare le funzioni operative della sveglia. Partendo dalle diverse funzioni svolte dai vari pulsanti, si vuole arrivare ad un'illustrazione completa di tutto il funzionamento del dispositivo per l'"utente finale".

Si è deciso di utilizzare un'interfaccia utente molto semplice, composta da 6 pulsanti e un deviatore, attraverso i quali è possibile regolare l'ora, fissare ed attivare/disattivare le varie sveglie, attivare/disattivare il sensore di temperatura e la retroilluminazione, utilizzare la funzione SNOOZE per posporre l'orario della sveglia e accendere/spegnere il dispositivo.

La visualizzazione delle azioni viene affidata ad un display retroilluminato, il quale permette la consultazione dell'ora anche al buio.

La sveglia è dotata di doppia alimentazione, ovvero può funzionare sia attraverso l'inserimento, tramite jack, di un trasformatore 9V sia con un accumulatore da 9V ricaricabile, il quale può rimanere all'interno del dispositivo e ricaricarsi quando la sveglia è collegata alla rete domestica.

Sul lato destro del dispositivo è presente un adattatore per microSD, utilizzato per la lettura dei brani, caricati sulla schedina di memoria, e la loro esecuzione quando la sveglia suona.

 

 

2.2 Funzioni principali

Funzioni dei pulsanti presenti sul coperchio:

 

 

 

 

 

 

 

 DISATTIVA SVEGLIA - TEMPERATURA - AVANZA STATO

 

SNOOZE - SELEZIONE SVEGLIE ATTIVE

IMPOSTAZIONI SVEGLIA 1 - INCREMENTO

IMPOSTAZIONI SVEGLIA 2 - DECREMENTO

IMPOSTA OROLOGIO

RETROILLUMINAZIONE ON-OFF

 

 

POWER ON/OFF

 

 

DISATTIVA SVEGLIA - TEMPERATURA - AVANZA STATO - Questo pulsante permette l'interruzione dell'esecuzione del brano MP3 durante la sveglia e disattiva la relativa sveglia in funzione (sveglia 1 o sveglia 2).

            Attraverso la pressione di questo pulsante, durante la visualizzazione della scritta "Orologio", è possibile attivare il sensore di temperatura, che verrà mostrata in gradi Celsius sul display.

            Utilizzando questo pulsante nel menu di Sveglia1 o Sveglia2 è possibile avanzare nella regolazione di Ore, Minuti e Secondi.

 

 

 

 

 

 

Sensore di Temperatura Disattivato
Sensore di Temperatura  Attivo  

 

 

Premendo il pulsante "Impostazioni Sveglia1"
Premendo il pulsante "Avanza Stato"
Premendo il pulsante "Avanza Stato"
Premendo il pulsante "Avanza Stato"

 

 

SNOOZE - SELEZIONE SVEGLIE ATTIVE - Questo pulsante è il pulsante di attivazione dello snooze. Durante l'esecuzione del brano, permette all'utente di rinviare la sveglia di 5 minuti.

            Durante la visualizzazione di "Orologio", premendo questo pulsante, si sceglierà quale sveglia attivare; è possibile attivare 0, 1 o 2 sveglie. In base alle sveglie attive, accanto alla scritta "Orologio", appariranno i seguenti simboli:

Sveglie disattivate
Una pressione: Sveglia1 attiva
Due pressioni: Sveglia2 attiva
Tre pressioni: Sveglia1 e Sveglia2 attive
Quattro pressioni: Sveglie disattivate

 

 

IMPOSTAZIONI SVEGLIA 1 - INCREMENTO - Premendo questo pulsante durante la visualizzazione di "Orologio", si entra nel menu di regolazione della Sveglia1, potendo così impostarne i parametri di Ore, Minuti e Secondi.

            Attraverso questo stesso pulsante, si è in grado di incrementare le variabili di Ore, Minuti e Secondi di Sveglia1, Sveglia2 e Orologio entrando nei relativi menu.

            Sul display appariranno i seguenti messaggi:

 

 Pressione del pulsante durante "Orologio":
si entra nel menu di Sveglia1
 
 Ulteriore pressione: Incremento Ore  
 Avanza stato: si passa alla regolazione dei -Minuti  
 Ulteriore pressione: Incremento Minuti  
 Avanza stato: si passa alla regolazione dei Secondi  
 Ulteriore pressione: Incremento Secondi  
Avanza stato: la regolazione viene salvata e si ritorna a "Orologio"  

 

 

 

 

 

 

 

 

 

 IMPOSTAZIONI SVEGLIA 2 - DECREMENTO - Premendo questo pulsante durante la visualizzazione di "Orologio", si entra nel menu di regolazione della Sveglia2, potendo così impostarne i parametri di Ore, Minuti e Secondi.

            Attraverso questo stesso pulsante, si è in grado di decrementare le variabili di Ore, Minuti e Secondi di Sveglia1, Sveglia2 e Orologio entrando nei relativi menu.

 Pressione del pulsante durante "Orologio":

si entra nel menu di Sveglia1
Ulteriore pressione: Decremento Ore
Avanza stato: si passa alla regolazione dei -Minuti
Ulteriore pressione: Decremento Minuti
Avanza stato: si passa alla regolazione dei Secondi
Ulteriore pressione: Decremento Secondi
Avanza stato: la regolazione viene salvata e si ritorna a "Orologio"

 

 

IMPOSTA OROLOGIO - La pressione di questo pulsante permette di entrare nel menu Orologio. Premendolo più volte si scorreranno le modalità di regolazione (Ore, Minuti e Secondi) fino a tornare alla schermata principale.

            Per incrementare e decrementare i parametri si utilizzeranno gli appositi pulsanti ("Incremento" e "Decremento").

Schermata principale
Prima pressione  
Seconda pressione  
Terza pressione  
Quarta pressione - Ritorno a schermata principale  

 

 

RETROILLUMINAZIONE ON-OFF - Premendo questo pulsante durante la visualizzazione della schermata principale, sarà possibile attivare oppure disattivare la retroilluminazione del display.

 

 

 

 

POWER ON/OFF - Questo deviatore permette l'accensione e lo spegnimento del dispositivo.

 

 

 

 

 

 

 

2.2.1 L'orologio

            L'orologio è la funzione primaria della sveglia. La schermata principale del dispositivo riporta, infatti, la scritta "Orologio".

            Come già descritto in precedenza, l'orologio viene impostato attraverso i pulsanti "Imposta Orologio"," Incremento" e "Decremento". Più precisamente, il pulsante "Imposta Orologio" serve a passare dalla regolazione delle ore a quella dei minuti a quella dei secondi.

            Ogni qualvolta si desideri modificare le impostazioni di Ore, Minuti e Secondi, è sufficiente premere rispettivamente i pulsanti "Incremento" e "Decremento".

            Ad esempio, se ci si trova nello stato di "Reg. Ore" (Regolazione Ore), per aumentare/diminuire le ore bisognerà premere il pulsante "Incremento"/"Decremento"  del numero di volte necessario per ottenere l'ora voluta; se si decide di modificare anche il campo "Minuti", premendo il pulsante "Imposta Orologio", apparirà sul display "Reg. Minuti" (Regolazione Minuti); il procedimento di modifica è analogo a quello delle ore, ossia, premendo "Incremento" o "Decremento", i minuti aumenteranno o diminuiranno di tante volte quante sono le pressioni su ciascuno dei pulsanti. Questa procedura è attuabile anche per la regolazione dei secondi.

            Per passare dalla regolazione delle ore a quella dei minuti a quella dei secondi e, successivamente, tornare alla schermata principale "Orologio", è sufficiente premere il pulsante "Imposta Orologio":

 

 

 

 

"Orologio"    ->           "Reg. Ore"     ->             "Reg. Minuti"     ->          "Reg. Secondi"    ->           "Orologio"

 

                                              "Imposta Orologio"                  "Imposta Orologio"                            "Imposta Orologio"                            "Imposta Orologio"

 

 

2.2.2 Le sveglie

            Le due sveglie presenti nel dispositivo sono programmabili in maniera indipendente fra loro. Allo stesso modo, indipendente è l'attivazione delle stesse. Per programmarle, i pulsanti a disposizione sono "Impostazioni Sveglia1-Incremento", "Impostazioni Sveglia2-Decremento" e "Avanza Stato".

            Per le modalità di regolazione si rimanda alle spiegazioni riportate nel paragrafo precedente alle voci "IMPOSTAZIONI SVEGLIA1-INCREMENTO", "IMPOSTAZIONI SVEGLIA2-DECREMENTO" e "DISATTIVA SVEGLIA - TEMPERATURA - AVANZA STATO".

 

2.2.3 La funzione SNOOZE

            La funzione SNOOZE permette di posticipare e ripetere la sveglia di 5 minuti alla volta (fino a un massimo di 10 minuti) dal momento in cui essa suona. Per fare ciò, durante il suono della sveglia, è necessario premere il pulsante "Snooze", il quale lo rinvia di 5 minuti. Se, passati i 5 minuti, si desidera posporre nuovamente l'allarme, si ripeta l'operazione. Dopo due posticipi, al suono della sveglia, non sarà più possibile utilizzare lo SNOOZE, poiché, anche premendo il rispettivo pulsante, la sveglia si disattiverà.

             Nel caso si volesse disattivare la sveglia senza posticiparla, o dopo il primo o il secondo rinvio, è sufficiente premere il pulsante "Disattiva sveglia".

 

2.2.4 La riproduzione di file MP3

            La riproduzione del file MP3 prescelto avviene automaticamente al suono della sveglia. Il caricamento del file deve avvenire tramite il trasferimento dello stesso in una scheda di memoria SD/MMC da inserire nell'apposito alloggiamento.

 

 

 

 

 

 

 

 

 2.2.4 La visualizzazione della temperatura

 

            La visualizzazione della temperatura avviene attraverso la pressione del pulsante "Temperatura"; pertanto, se questo viene premuto nello stato "Orologio", sul display verrà riportata la temperatura dell'ambiente in gradi celsius. Ripetendo l'operazione, si ritornerà allo stato di partenza ("Orologio"). 

 


BIBLIOGRAFIA:

Per il ricavo dell'equazione della giunzione PN:

J. Millman and C. C. Halkias, Integrated Electronics: Analog and Digital Circuits and Systems, Mc Graw Hill,  1972.

 

 

 

 

Per il TC77:

B. Baker, A Baker's Dozen: Real Analog Solutions for Digital Designers, Elsevier, 2005.

DS20092A: Thermal Sensor with SPI ™ Interface, Microchip Technology Inc., 2002.

S. Bible and J. Lepkowski, AN913: Interfacing the TC77 Thermal Sensor to a PICmicro® Microcontroller, Microchip Technology Inc., 2004.

J. Lepkowski, AN871: Solving Thermal Measurement Problems Using The TC72 And TC77 Digital Silicon Temperature Sensors, Microchip Technology Inc., 2003.

 

 

 

 

 

 

 

 

Per il microcontrollore:

DS39500A: PICmicro® 18C MCU Family Reference Manual, Microchip Technology Inc., 2000.

DS39631E: PIC18F2420/2520/4420/4520 Data Sheet, Microchip Technology Inc., 2008.

DS80363A: PIC18F2420/2520/4420/4520 Rev. B4 Silicon Errata, Microchip Technology Inc., 2008.

DS51288G: MPLAB® C18 C COMPILER USER’S GUIDE, Microchip Technology Inc., 2005.

DS51295E: MPLAB® C18 C COMPILER GETTING STARTED, Microchip Technology Inc., 2005.

DS51297F: MPLAB® C18 C COMPILER LIBRARIES, Microchip Technology Inc., 2005.

DS51537C: PIC18 CONFIGURATION SETTINGS ADDENDUM, Microchip Technology Inc., 2005.

DS51764B: IN-CIRCUIT DEBUGGER DESIGN ADVISORY, Microchip Technology Inc., 2009.

 

 

 

 

Display:

HD44780U (LCD-II) Dot Matrix Liquid Crystal Display Controller/Driver, Hitachi, 2007

 

 

 

 

Decoder MP3:

VS1011e - MP3 AUDIO DECODER, Version 1.05, VLSI Solutions, 2009.

VS10XX - APPLICATION NOTES, Version 0.73, VLSI Solutions, 2005.

VS10XX AppNote: USER APPLICATIONS, Version 1.00, VLSI Solutions, 2006.

VS10xx Standalone Player, Rev. 1.18, VLSI Solutions, 2009.

 

 

 

 

Amplificatore:

TDA7052 1 W BTL mono audio amplifier, Philips Semiconductors, 1994.

 

 

 

 

Regolatori di tensione:

DS007746: LM78XX Series Voltage Regulators, National Semiconductor Corporation, 2000.

 

 

DS009063: LM117/LM317A/LM317 3-Terminal Adjustable Regulator, National Semiconductor Corporation, 2011.

 

 


 

 

 SORGENTI E FILES UTILI:

 

Schemi e PCB per Eagle : http://www.grix.it/UserFiles/dozen92/File/Schematici%20e%20PCB.zip

Datasheets : http://www.grix.it/UserFiles/dozen92/File/Datasheets.zip

Firmware solo Sveglia: http://www.grix.it/UserFiles/dozen92/File/Firmware_Sveglia_Base.zip

Firmware con VS1011: http://www.grix.it/UserFiles/dozen92/File/Firmware_Sveglia_VS1011.zip


Risultato:

 

 

 

          Il dispositivo è stato ideato come regalo per una ragazza molto speciale. :D

 

 

 

 

Login Form

Elettronica Open Source