Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
La tesina che porto quest'anno è la realizzazione di una matrice LED RGB 10x10 controllata da 4 PIC16F877 con approfondimenti relativi a ogni componente e a ogni stadio della realizzazione
TEEA (tecnologie elettrico-elettroniche) - transistor,condensatori e oscillatori, diodi, PIC16F877
MECCANICA - test flessione, azioni vincolari e test resistenza temperature basse ed elevate
TTIM - progettazione, cablaggio e programmazione
PROGETTO
Completata la stesura dello schema elettrico si passa alla fase di
assemblaggio.
Nella foto sottostante (fig. 2.5) si può notare il test di lampeggio e
sincronizzazione dei PIC (posti su una basetta breadboard),
alimentati tramite l’alimentatore stabilizzato a 4,8V. pag.
20
L’alimentatore stabilizzato utilizzato è un PS-305D fabbricato dalla
ditta UG MULTIMEDIA.
Questo modello può fornire una tensione massima in uscita di 30V
e una corrente di 5A. Anche se si tratta di un modello a basso costo
possiede quattro potenziometri che permettono una regolazione
precisa di correnti e tensioni.
Nella fotografia che succede si può invece riconoscere PROJECT Ω e
il Microchip PICKIT3 utilizzati per la programmazione dei quattro PIC
16F877 utilizzati nel progetto.
Completata la fase di test sono passato al cablaggio sulla millefori.
La basetta ha dimensioni importanti rispetto alle solite millefori: ha
una lunghezza di circa 235 mm, e un altezza di 160 mm. pag.
21
La prima operazione di assemblaggio è stata quindi la suddivisione
della basetta per la disposizione dei componenti. Sono partito
tracciando delle linee che delimitavano la posizione della matrice e
ho quindi inserito gli zoccoli nei quali si incastrano i PIC
(fig. 2.7) . pag.
22
Completata la saldatura degli zoccoli ho iniziato quella dei resistori
THT (fig. 2.8) pag.
23
Infine ho montato i componenti attivi e ho effettuato gli ultimi
collegamenti tra il PIC e le uscite tramite saldatura a stagno (fig.
2.9). pag.
24
Ecco la scheda prototipale della matrice completamente
assemblata (fig.3.0):
MICROCONTROLLORE
16F877
Il microcontrollore è un dispositivo che, a differenza del
microprocessore, non necessita di altri componenti esterni per
funzionare (fig. 3.1); infatti il microcontrollore contiene al suo
interno tutti gli apparati che garantiscono l’immediato
funzionamento senza ricorrere a componenti aggiuntivi.
Il componente sul quale si è basata tutta la progettazione è stato
proprio il PIC. Questo doveva avere molti I/O per poter controllare al
meglio la matrice, utilizzando il minor numero di microcontrollori;
stabilito il numero di pin da utilizzare la scelta si è basata sul
rapporto qualità/prezzo, ovvero ciò che veniva fornito dal PIC (in
termini di componentistica interna come la quantità di RAM, gli SFR,
gli ingressi analogici e la possibilità di poter controllare le uscite in pag.
25
PWM ) in relazione al prezzo. La possibilità di avere tutti questi
componenti interni al PIC (anche se non utilizzati al momento e
integrati per applicazioni future) e il basso costo (3,84 €) hanno
portato alla scelta del PIC 16F877 della famiglia Microchip.
Introduzione generale
Il PIC 16F877 è un microcontrollore fabbricato dall’azienda
Microchip Technology. Questo microcontrollore fa parte della
famiglia “midrange” e utilizza una tecnologia a 8 bit che consente
di mantenere i costi di produzione molto bassi ma, allo stesso
tempo, permette una grande flessibilità di utilizzo. In commercio lo
si può trovare sia in configurazione SMD, sia nella classica
configurazione THT che gli consentono di essere impiegato sia nelle
applicazioni industriali che in quelle hobbistiche (fig. 3.2). Nel
progetto sono stati utilizzati componenti che sfruttano tecnologia pag.
26
THT (compreso il PIC) per due motivi principali: il primo riguarda il
cablaggio, in quanto si utilizzava una basetta millefori e quindi era
molto difficile l’utilizzo di componenti SMD; il secondo motivo
riguarda l’intercambiabilità, poiché utilizzando componenti THT
montati su zoccoli risulta molto più facile rimpiazzare il
microcontrollore in caso di guasto o malfunzionamento rispetto a
componenti SMD. La programmazione del PIC 16F877 può avvenire
sia tramite porta seriale (attraverso basette predisposte con
zoccolo), oppure tramite i programmatori Microchip più versatili e
veloci nella programmazione. Per programmare i PIC utilizzati nella
matrice ho fatto ricorso ad un programmatore Microchip
compatibile anche con il 16F877: il PIC kit 3.
Configurazione
piedinatura pag.
27
Come si può vedere in figura 3.2 il PIC 16F877 in configurazione
THT ha 40 pin: 4 vengono usati per l’alimentazione del PIC, uno per
il reset (MCLR) e gli altri (ben 33) funzione di I/O.
Di seguito vengono riportati nomi e le funzioni dei pin del PIC
16F877 pag.
28 pag.
29
Nella realizzazione della matrice sono state utilizzati tutti gli I/O
come uscite digitali per controllare i led RGB e i transistor; il piedino
MCLR è stato portato a +Vdd senza nessun pulsante di reset, in
quanto ritenuto inutile ai fini dell’applicazione. Nessun pulsante ne
nessun ingresso controlla la matrice: appena collegata
all’alimentazione può svolgere in autonomia il lavoro per il quale è
stata programmata.
Essendo (il circuito della matrice) già molto complesso per via
dell’inutilizzo di multiplexer è stato deciso di non utilizzare nessun
ingresso analogico ma, attraverso alcune prove su breadboard con
delle fotoresistenze, il PIC 16F877 ha svolto il suo lavoro in modo
ottimale fornendo risultati concordi con le ipotesi effettuate.
Architettura interna
Il PIC 16F877 ha delle particolarità non solo per quanto concerne
gli I/O, ma anche l’architettura interna; infatti questo PIC adotta
l’architettura Harvard (fig. 3.3) che consente al microcontrollore di
poter svolgere l’azione di estrazione (fetch) e di esecuzione
(execute) di due istruzioni diverse nello stesso ciclo macchina, pag.
30
completando così un operazione in soli due cicli macchina (un ciclo
macchina corrisponde a 4 cicli di clock).
Utilizzando questa architettura si presentano svantaggi per quanto
riguarda sia la complessità circuitale, sia il costo, ma che si
tramutano concretamente in una maggior velocità nell’esecuzione
delle istruzioni rispetto all’architettura Von-Neumann (fig. 3.4).
L’architettura Von-Neumann è usata per microcontrollori poco
costosi che necessitano di
una velocità minore rispetto a
quelli precedentemente
trattati; questa architettura
ha una minor complessità
circuitale che permette di
ridurre i costi di produzione.
Nella figura 3.5 si riporta la
successione di operazioni
eseguite dal PIC 16F877 con
architettura Harvard in uno spaccato di 3 cicli macchina: pag.
31
Ed ecco il calcolo per stabilire la durata di un ciclo macchina con il
quarzo da 20MHz: 1
1 6 = =0,00000005=0,05
T µs=50 ns
= =20∙
T ; f 10 6
f 20 ∙ 10
Quindi 1 ciclo macchina sarà uguale a:
−9
=4 =200
TCY ∙ 50 ∙10 ns
La maggior parte delle istruzioni viene eseguita in un solo ciclo
macchina, anche se le operazioni di salto (call, goto, return)
vengono soddisfatte in due cicli macchina.
Registri interni e SFR pag.
32
Il 16F877 ha una locazione al suo interno che contiene un registro
chiamato SFR (special function register). L’SFR (fig. 3.6) a sua volta
è ripartito in molteplici sezioni, ognuna avente un preciso indirizzo;
ogni indirizzo è normalmente formato da 8 bit (dal bit 0 al bit 7) e
andando ad agire sul singolo bit, cambiandolo di stato, è possibile
svolgere delle precise operazioni.
L’ SFR è suddiviso in 4 banchi che sono settabili distintamente; lo
special function register fa parte, insieme ai registri general
purpose, della RAM.
I registri general purpose vengono spesso utilizzati nelle operazioni
di conteggio per memorizzare risultati, oppure possono essere
utilizzati per immagazzinare dati di operazioni logiche. pag.
33
Di seguito vengono riportati (come da datasheet) le locazioni dell’
SFR e dei registri general purpose con i relativi indirizzi con sistema
numerico esadecimale: pag.
34 pag.
35 pag.
36 pag.
37
All’interno del programma della matrice
sono stati usati solo i primi 2 banchi (0 e 1)
che si configurano attraverso uno dei
registri più importanti: il registro STATUS
(fig. 3.8).
Questo particolare registro prevede 8 bit
(dal bit 0 al bit 7) ma solo il 5 e il 6 (RP0-RP1) sono usati per
selezionare il banco. Attraverso le combinazioni riportate in fig. 3.7
si può decidere il banco e procedere alla programmazione.
Il 16F877 è composto da una PORTA da 6 Bit , una PORTB, PORTC,
PORTD da 8 Bit, e per finire una PORTE da 3 Bit. Per settare queste
porte si ricorre ai registri TRISA, TRISB, TRISC, TRISD e TRISE che
consentono di poter determinare quali pin di una specifica PORT
debbano risultare ingressi, e quali uscite; il procedimento avviene
portando a 0 i bit di un TRIS per ottenere un output, mentre
portando a 1 i bit di un altro tris si ottiene un input.
Nella figura 3.9 un esempio dell’associazione tra TRIS e PORT (in
questo caso viene riportato l’esempio di PORTC e TRISC con 8 bit,
ma la relazione non cambia rispetto gli altri registri che svolgono la
funzione di I/O). pag.
38
Per velocizzare la fase di programmazione è stata preparata una
tabella nella quale vengono riportati tutti i pin dei 4 PIC con il
numero del rispettivo LED nel quadrante:
Elenco quadrante quadrante quadrante quadrante
I/0 PIC alto sx alto dx basso sx basso dx
RA0 LED 9 led 9 LED 9 LED 5
RA1 LED 10 led 10 LED 10 LED 4
RA2 LED 14 led 11 LED 14 LED 10
RA3 LED 15 led 12 LED 15 LED 9
RA4
RA5 LED 20 led 14 LED 20 LED 7
RB0 LED 8 led 8 LED 8 LED 12
RB1 LED 7 led 7 LED 7 LED 11
RB2 LED 6 led 6 LED 6 LED 6
RB3
RB4 LED 4 led 4 LED 4 LED 8
RB5 LED 3 led 3 LED 3 LED 3
RB6 LED 2 led 2 LED 2 LED 2
RB7 LED 1 led 1 LED 1 LED 1
RC0 LED 25 led 21 LED 25 LED 20
RC1 LED 19 led 22 LED 5 LED 19
RC2 LED 5 led 25 LED 19 LED 25
RC3
RC4 TR 3 (blu) TR3 (blu) TR 3 (blu) TR 3 (blu)
RC5 LED 21 led 24 LED 21 LED 23
RC6 TR 2 TR 2 (verde) TR 2 (verde) TR 2 (verde)
(verde)
RC7 LED 16 led 23 LED 16 LED 24
RD0
RD1
RD2 LED 18 LED 5 LED 18 LED 21
RD3 LED 17 LED 13 LED 17 LED 22
RD4 TR 1 TR 1 (rosso) TR 1 (rosso) TR 1 (rosso)
(rosso)
RD5 LED 13 led 20 LED 13 LED 18
RD6 LED 12 led 19 LED 12 LED 17
RD7 LED 11 led 18 LED 11 LED 16 pag.
39
RE0 LED 22 led 15 LED 22 LED 15
RE1 LED 23 led 16 LED 23 LED 14
RE2 LED 24 led 17 LED 24 LED 13
Nella fig. 4.0 è possibile vedere la suddivisione della matrice in
quadranti oltre che il primo-ultimo led contrassegnati dal proprio
numero.
Prima di eseguire qualunque operazione di assegnazione degli I/O si
devono settare le uscite come analogiche o digitali. Per fare ci&ogr