PIC 16F877 / 16F874 Development Board v. 1.2
Link Articolo Originale: http://www.fiacopetti.it/pic16f877db12.htm
La Development Board v. 1.1 connessa ad un display LCD. Risulta ben visibile (leggi oltre, nella descrizione) la fila di led per controllare lo stato logico di 8 fra porte di I/O e terminali di circuiti esterni. Naturalmente, se possedete un oscilloscopio a 8 tracce, potete anche farne a meno. :-)) In basso a destra il cavo di programmazione. |
Sotto, il PCB della Development Board (versione 1.0) - A destra, la DB v. 1.1 in funzione |
Argomenti simili su questo sito: PIC 16F84 F.F. Evaluation Board |
Caratteristiche del circuito Come con la Evaluation Board per PIC 16F84 / 16C84 , ideata in base alle mie esigenze, anche per un microcontrollore superiore ho deciso di ideare e realizzare un circuito che possa essere una comoda e versatile base di sperimentazione. Questa basetta, infatti, permette di interfacciare il PIC con un qualsiasi circuito esterno in modo molto versatile e allo stesso tempo affidabile, permettendo di attribuire in fase di sviluppo eventuali malfunzionamenti elettrici al solo circuito esterno, e, naturalmente, di concentrarsi sul software. Microcontrollori supportati: 16F877, 16F874 Nota: la piedinatura del PIC 16F877 è compatibile (verso l'alto) con quella dei microcontrollori PIC 18F442,18F452, 18F448, 18F458. Questa basetta è stata progettata per il PIC 16F877 e testata con esso (e in questa pagina ad esso faremo sempre riferimento); il circuito, comunque, dovrebbe essere adatto anche per i modelli menzionati (18F4x2 e 18F4x8), con le seguenti note: a) il piedino OSC2 risulterebbe multiplexato con RA6 Veniamo dunque alle caratteristiche principali della DB12:
Come anticipato, questo circuito non è un programmatore di PIC, ma può essere facilmente interfacciato con uno dei numerosi programmatori che è possibile reperire, permettendo quindi di non rimuovere mai il microcontrollore dalla Development Board (programmazione in-system). NOTA: le figure relative al layout e agli schemi contenuti più avanti in questa pagina sono in bassa risoluzione, per ovvi problemi di tempo di caricamento delle pagina, ma, i relativi link rimandano a schemi a risoluzione migliore. Quando fate click su un link relativo a una figura (ad es. il layout) e si apre una nuova finestra contenente una immagine con buona risoluzione, consiglio di non chiuderla, perché potrebbe essere comoda da avere sott'occhio durante la lettura e in particolare per l'illustrazione degli esempi riportati. Nel disegnare questo circuito ho perseguito l'obiettivo della versatilità, e, nello stesso tempo, anche la possibilità di poter montare solamente i componenti di interesse, rendendo in tal modo questa D.B. non dispendiosa. Immagini per la realizzazione Se volete costruire la Development Board (dopo aver letto in particolare la sezione "Riconoscimenti e avvertenze"), potete trovare qua sotto i links per salvare le immagini necessarie (risoluzione 300 dpi), accessibili comunque anche in altri punti di questa pagina. Layout lato rame a 300 dpi (316 KB) Perché così tanti dip-switch? Ho scelto di utilizzare uno switch per ognuno dei terminali che talvolta vanno isolati o connessi ad altri terminali particolari (ad es., durante le fasi di programmazione), sia per garantire un sicuro isolamento elettrico, sia perché i semplici buffer 3-state possono non essere comodi da utilizzare e potrebbero anche dare qualche problema (ad. es., per il /RESET e l'alimentazione). In ogni caso, durante la normale alternanza programmazione / utilizzo, ad esempio quando si sviluppa il software, per consentire la programmazione del chip è generalmente sufficiente eseguire delle operazioni molto semplici, non più di pochi secondi, ponendo tutti gli switch di alcuni dip-switch su OFF e tutti quelli di un altro dip-switch su ON (altri dip-switch possono invece essere lasciati come sono). Appena il chip è programmato, basta eseguire l'operazione inversa per avere nuovamente il PIC pronto all'uso e connesso al mondo esterno. Nella sezione "Programmazione" le operazioni da svolgere, in base al tipo di programmatore, alla sua alimentazione e al valore del bit LVP del PIC, sono elencate in dettaglio per la massima comodità d'uso. Riconoscimenti e avvertenze L'ideazione del progetto è totalmente personale; un riconoscimento va comunque al software che mi ha permesso di realizzare il layout del circuito elettrico. Si tratta del programma PCB Elegance v. 2.0, che io posseggo in versione FREEWARE limitata a 200 pin, realizzato dalla MERCO Electronics, la quale mi ha inoltre concesso l'autorizzazione al suo uso anche per scopi non personali. Nota bene: Sebbene sia in teoria possibile utilizzare altre forme di alimentazione, la Development Board v 1.2 è stata progettata per essere alimentata con batterie 9-12V e interfacciata solamente con circuiti alimentati anch'essi a batterie a bassa tensione. E' comunque presente un fusibile da circa 800 mA; vedi avvertenze sul fusibile nell'elenco dei componenti. In ogni caso, siate sempre certi di sapere con esattezza ciò che state facendo! Trattandosi di materiale messo gratuitamente a disposizione di chiunque lo desideri, ne è assolutamente vietata ogni forma di utilizzazione a fini commerciali. |
Prima di procedere con la descrizione del circuito, introduciamo una nota operativa. Note per la identificazione degli switch e dei terminali dei connettori Il riferimento ad un particolare interruttore dello switch Sx avverrà mediante la grafia Sx-n; medesima grafia per i connettori JPx. Il suffisso "E" indica semplicemente "extra". Il riferimento allo switch Sx-1 indica il primo interruttore dello switch Sx a partire dall'alto; analogo significato in riferimento ai connettori. Nell'immagine qui sotto, ad esempio, S6-4 non è connesso ad alcuna pista, JP9-6 è connesso a S5-6 e, quando questo è su ON, anche a R7 e a R6.
Per un altro esempio vedi figura 4 a 200 dpi - Disposizione dei componenti e disegno delle piste (la versione a 300 dpi, stampabile con buona qualità, è accessibile alla sezione layout, ma richiede più tempo per essere caricata rispetto a quella a 200 dpi, più che sufficiente per un'occhiata). In figura 4, ad esempio, quando S5-6 e S3-6 sono chiusi, c'è connessione fra JP9-6 e il piedino 36 del PIC (RB3) attraverso R6; quando S5-6 e S3-6 sono aperti, e S3-3 è chiuso, il piedino RB3 del PIC è connesso solo a JP5-5. Caratteristiche e descrizione del circuito Torniamo adesso alle possibilità offerte dalla Development Board. Se volete, invece di leggere subito la descrizione delle varie caratteristiche del circuito, per rendervi conto di ciò che questa basetta può permettervi di fare potete anche dare un'occhiata a qualcosa di molto più pratico, ovvero come settare gli switch per il normale funzionamento . Alimentazione del circuito: il circuito è stato progettato per essere alimentato mediante batteria 9-12V, ma è possibile utilizzare anche una sorgente continua non regolata 7-15V (un 7805 fornisce +5V regolati al PIC, ad un eventuale programmatore e ad un eventuale circuito esterno), oppure alimentazione da un circuito esterno mediante JP8 - S6 (in quest'ultimo caso si consultino i datasheet Microchip per il range di valori ammessi). NOTA BENE: il fusibile protegge solo la sorgente di alimentazione applicata su J1 (o JPE15); tale fusibile va scelto in funzione del tipo di alimentatore utilizzato, e deve prevedere un adeguato margine di sicurezza (ad esempio, per un alimentatore in grado di erogare 500 mA, consiglio fusibili dell'ordine di 250 mA o poco più). Inoltre, anche la tensione di ingresso al 7805 determina il valore del fusibile, in quanto questo deve evitare anche eccessiva dissipazione di potenza da parte del 7805 stesso (vedi avvertenze sul fusibile all'elenco dei componenti). IN OGNI CASO, il fusibile non deve essere di valore superiore ad 800mA. Piedino /MCLR: è possibile controllarlo mediante circuito esterno o mediante programmatore, connetterlo mediante pull-up direttamente a Vdd, oppure anche tramite capacità a Vss in modo da implementare un circuito di Power On (peraltro già presente nel PIC); esiste anche la possibilità di resettare il PIC durante il funzionamento mediante il pulsante S4. Connessione da e verso l'esterno di Vdd, Vss, /MCLR: connessione da o verso un circuito esterno di Vdd, Vss, /MCLR (quest'ultimo indipendentemente da quale sia la sorgente di alimentazione); connessione di Vdd e Vss da o verso un qualunque programmatore. Sorgente di oscillazione per la generazione del clock: connettore con la possibilità di ospitare un quarzo (testati: 4MHz, 8 MHz, 12 MHz, 20 MHz), modalità RC con resistenza regolabile, per una oscillazione regolabile su un vastissimo range (testato solo parzialmente), fino a qualche MHz; Possibilità di programmare il PIC direttamente sulla Evaluation Board: è possibile connettere la basetta ad un programmatore mediante connettore a 6 poli, con possibilità di fornire alimentazione al programmatore o riceverla da esso. Questa basetta supporta sia il Low Voltage Programming e il funzionamento dei microcontrollori che hanno tale funzione attivata (è sufficiente chiudere uno switch per mantenere a massa il piedino RB3), sia la programmazione a mezzo di programmatori tradizionali e il funzionamento dei PIC con LVP disattivato. Da notare che i PIC in cui il LVP è attivato possono essere programmati ANCHE con il metodo tradizionale (la modalità di programmazione viene attivata con 12V sul piedino di /MCLR). Connessione da e verso l'esterno dei piedini di I/O: tutti i piedini di I/O sono portati a connettori per interfacciare il PIC con circuiti esterni, sia mediante prese per connettori stabili che mediante connettori SIL per fili volanti (vedi fotografie). Spie alimentazione: tre led (uno è inseribile mediante jumper) indicano la presenza di alimentazione in parti diverse del circuito e ricordano di prestare attenzione ad evitare conflitti elettrici fra le possibili sorgenti di alimentazione. Qualche applicazione |
Funzione dei vari connettori e dip-switch Se volete, invece di leggere subito la descrizione dei vari connettori e dip-switch, potete dare un'occhiata a qualcosa di molto più pratico, ovvero come settare gli switch per il normale funzionamento; potrete così facilmente rendervi conto di ciò che questa basetta può permettervi di fare. Come anticipato, la selezione fra le diverse modalità di funzionamento avviene mediante dip-switch (vedi ancorafigura 4 - Disposizione dei componenti e disegno delle piste). Veniamo ora alla descrizione della funzione dei diversi interruttori. S1 - Controllo di alimentazione e reset Alimentazione. Con S1-1 e S1-2 su ON si invia al PIC l'alimentazione positiva proveniente dal 7805, ovvero +5V regolati, e lo si connette al comune del medesimo regolatore, che coincide con il comune del circuito di alimentazione esterno (J1 o JPE15). In particolare, lo switch S1-1 è per il positivo a +5V (Vdd) e lo switch S1-2 è per la massa (Vss). S5 - Connessione a programmatori S2 - Clock S3 - Programmazione e modalità LVP S6 - Alimentazione e reset da o verso circuiti esterni |
Jumpers e LED. Il led D2 indica la presenza di alimentazione in uscita al 7805. A led acceso, fare molta attenzione a non inviare anche al PIC l'alimentazione proveniente dal 7805 nel caso in cui al microcontrollore arrivi già alimentazione attraverso JP9 (programmatore) o JP8. Il fusibile serve ad interrompere l'alimentazione al 7805 nel caso in cui l'assorbimento superi il valore nominale del fusibile stesso; il fusibile serve a preservare da sovraccarico eventuali alimentazione esterne in ingresso al solo 7805, ovvero non ha effetto su alimentazioni collegate attraverso JP8 o JP9; inoltre, in caso di cortocircuito, non è affatto detto che riesca ad evitare danni al chip, al programmatore e ad eventuali circuiti esterni collegati alla basetta, nonché all'alimentatore stesso, a qualunque connettore (J1, JP8 o JP9) sia collegato. S7 inserisce il led D3, il quale, in tal caso, indica la presenza di alimentazione al PIC, sia essa proveniente dal 7805, tramite S1, da JP9 tramite S5 o da JP8 tramite S6 Il led D4 indica la presenza di tensione fra i piedini 1 e 2 del connettore JP8; tale tensione può ovviamente essere quella fornita dal circuito che alimenta il PIC (il 7805, tramite S1, o il programmatore, tramite JP9 e S5), con S6-1 e S6-3 chiusi, oppure provenire dal connettore JP8 (in tal caso essa raggiunge il PIC solo se S6-1 e S6-3 sono chiusi. |
Normale funzionamento Come settare gli switch per le varie modalità di lavoro Di seguito viene descritto come settare gli switch per le varie modalità di funzionamento. A prima vista può sembrare complicato, ma ci si accorgerà ben presto che si tratta di una procedura semplice e che nello stesso tempo garantisce una grande versatilità. Poco oltre potete trovare alcune figure che illustrano praticamente come disporre gli switch nei casi più comuni. 1) Selezione modalità LVP 1-a) funzione LVP DISATTIVATA (il programmatore può essere permanentemente connesso a JP9, essendo quest'ultimo isolato durante il normale funzionamento). S3-6 su OFF (in tal modo il piedino RB3 del PIC viene isolato da S5-6) Da notare che, nel caso la funzione LVP sia DISATTIVATA, e si esegua invece la procedura 1-b) relativa ai PIC che abbiano la funzione LVP ATTIVATA, se la porta RB3 viene utilizzata come output non si dovrebbero avere particolari problemi: RB3 verrebbe infatti collegata a massa attraverso la serie di R6-R7, con un 'assorbimento dell'ordine di 5V / 20 KOhm = 250 microAmpere. Se la porta venisse invece utilizzata come input, tale corrente dovrebbe essere fornita dal circuito collegato a RB3, il che potrebbe alterare il livello del segnale. 1-b) funzione LVP ATTIVATA (il programmatore può essere permanentemente connesso a JP9, essendo quest'ultimo isolato durante il normale funzionamento). S3-3 su OFF (S3-3 isola il piedino RB3 del PIC da JP5-5) In tal modo, durante il normale funzionamento, RB3 risulta portata a massa attraverso un pull-down e il PIC non può entrare accidentalmente in modalita programmazione, cosa che invece potrebbe avvenire lasciando RB3 flottante. Dopo il settaggio degli switch relativi alla funzione LVP, elenchiamo ora come settare i vari switch per il normale funzionamento del PIC. Si parte da tutti gli switch su OFF, eccetto quelli eventualmente su ON (S3-3 e S3-6) come indicato ai punti 1-a) o 1-b). 2) Alimentazione 2-a) dal 7805 (vedi figura E1, figura E2) Porre S1-1 e S1-2 su ON (S6-1, S6-3 su OFF). 2-b) dall'esterno tramite JP8 Porre S6-1 e S6-3 su ON (S1-1, S1-2 su OFF). 3) RESET Nota: per resettare il microcontrollore durante il funzionamento è disponibile (e talvolta preferibile ad altri metodi) un pulsante di Reset (S4). 3-a) Reset con pull-up a Vdd (caso usuale) (vedi figura E1, figura E2) Porre S1-3 su ON (S1-4 su OFF, S6-2 su OFF) 3-b) Reset con pull-up a Vdd e capacità verso massa Porre S1-3 su ON, S1-4 su ON (S6-2 su OFF) 3-c) Reset controllato dall'esterno attraverso JP7-2 Porre S6-2 su ON (S1-3 su OFF, S1-4 su OFF) 4) Clock 4-a) Clock generato mediante quarzo (vedi figura E1) S2-5 su ON, S2-6 su ON (S2-1 su OFF, S2-2 su OFF, S2-3 su OFF, S2-4 su OFF) 4-b) Clock generato mediante rete RC (vedi figura E2) S2-3 su ON (S2-1 su OFF, S2-2 su OFF, S2-4 su OFF, S2-5 su OFF, S2-6 su OFF) 4-c) Segnali OSC1 e OSC2 PRELEVATI da JP1 S2-1 su ON, S2-2 su ON (S2-3 su OFF, S2-4 su OFF, S2-5 su OFF, S2-6 su OFF) 4-d) Clock generato mediante quarzo e segnali su OSC1 e OSC2 PORTATI a JP1 S2-5 su ON, S2-6 su ON , S2-1 su ON, S2-2 su ON (S2-3 su OFF, S2-4 su OFF) 4-e) Clock generato mediante rete RC e segnali su OSC1 e OSC2 PORTATI a JP1 S2-1 su ON, S2-2 su ON, S2-3 su ON (S2-4 su OFF, S2-5 su OFF, S2-6 su OFF) 5) Porte RB6 e RB7 Durante il normale funzionamento vanno connesse a JP5. Porre S3-1 su ON, S3-2 su ON, S3-4 su OFF, S3-5 su OFF 5) Porta RB3: vedi 1), selezione modalità LVP Esempi di settaggio degli switch. Ecco alcuni esempi pratici di settaggio degli switch. Sono evidenziati in rosso gli switch da porre su ON; gli altri devono essere tutti su OFF.
Programmazione Per programmare il PIC senza rimuovelo dalla Development Board, si devono collegare a JP9 gli opportuni segnali e tensioni provenienti dal programmatore. In dipendenza dal tipo di quest'ultimo, si deve adottare la giusta configurazione degli switch. Se non altrimenti specificato, tutti gli switch devono essere posti su OFF! In ogni caso, siate sempre consapevoli di ciò che fate! Fate molta attenzione al conflitto fra le alimentazioni, e tenete presente che anche collegare fra loro due terminali "comune" (o massa, o terra) di alimentatori diversi può provocare seri danni ai circuiti! Ad esempio, se alimentate il PIC e il programmatore con due diversi alimentatori, collegare fra loro i terminali "comune" (indispensabile) può essere molto pericoloso per la sopravvivenza dei circuiti stessi! Stessa cosa può succedere se state programmando il PIC con un programmatore collegato al computer e lo alimentate con un alimentatore! Quando avete dei dubbi, e dovete utilizzare due alimentatori, meglio utilizzare una batteria, la quale è flottante e si adegua al riferimento imposto. Indipendentemente da quale sia il programmatore, consiglio vivamente, soprattutto nel caso il PIC sia collegato ad un circuito esterno, di scollegare i terminali RB6, RB7 e RB3 del PIC dal connettore JP5 ponendo su OFF S3-1, S3-2 e S3-3 durante la programmazione. Può essere una buona idea isolare anche i piedini Osc1 e Osc2 ponendo su OFF tutti gli switch di S2. I piedini RB7 e RB6 del PIC, naturalmente, devono essere collegati tramite S3-4 e S3-5 (ON) ai piedini S5-5 e S5-4 (notare l'inversione), e da questi al programmatore collegato a JP9 ponendo su ON, appunto, gli switch S5-5 e S5-4. Nota: come detto, questa basetta supporta il Low Voltage Programming (per programmatori che pilotano anche il pin RB3). Per la programmazione vedere oltre. Se il vostro PIC ha la funzione di LVP attivata, come accade ad esempio quando il chip è nuovo, per poterlo utilizzare senza problemi in normale funzionamento dovete seguire le istruzioni descritte in tale sezione (vedi "normale funzionamento"). Siate inoltre sicuri che, nel caso sia il programmatore a fornire alimentazione al PIC, esso sia in grado di erogare una corrente sufficiente anche all'alimentazione del led D3 (circa 5 mA); se non ne siete sicuri, potete disattivare il led stesso aprendo il relativo jumper (S7). Ecco come settare i dip-switch per la programmazione. 1) Programmatore che FORNISCE al PIC alimentazione (Vdd e Vss) e i segnali /MCLR, RB6 e RB7; nel caso di LVP, il programmatore deve pilotare anche RB3. Si devono distinguere due casi. 1-a) funzione LVP DISATTIVATA (il programmatore può essere permanentemente connesso a JP9, essendo quest'ultimo isolato durante il normale funzionamento). S1 tutti su OFF 1-b) funzione LVP ATTIVATA (il programmatore può essere permanentemente connesso a JP9, essendo quest'ultimo isolato durante il normale funzionamento). S1 tutti su OFF 2) Programmatore che RICEVE alimentazione (Vdd e Vss) dalla basetta (tramite JP9), e fornisce su JP9 i segnali /MCLR, RB6 e RB7; nel caso di LVP, il programmatore deve pilotare anche RB3. In questo caso possiamo avere quattro configurazioni. 2-a1) funzione LVP DISATTIVATA, alimentazione dal 7805 (il programmatore può essere permanentemente connesso a JP9, essendo quest'ultimo isolato durante il normale funzionamento). S6 tutti su OFFdare alimentazione al circuito (mediante uno solo fra S1 e S6) S1-1, S1-2 su ON Porre nell'ordine: S1 tutti su OFF 2-b1) funzione LVP ATTIVATA, alimentazione dal 7805 (il programmatore può essere permanentemente connesso a JP9, essendo quest'ultimo isolato durante il normale funzionamento). S6 tutti su OFF 2-b2) funzione LVP ATTIVATA, alimentazione da un circuito esterno mediante JP8 (il programmatore può essere permanentemente connesso a JP9, essendo quest'ultimo isolato durante il normale funzionamento). S1 tutti su OFF |
Elenco dei componenti Nota: tutti i resistori sono da 1/4 W, 5% di tolleranza. R1 - 10 KOhm Dove trovare i componenti? I componenti sono abbastanza standard, dovreste essere in grado di trovarli in qualunque negozio di articoli elettronici. Per quanto riguarda il PIC, potete ordinarlo (magari anche insieme alla basetta e a gran parte dei componenti) presso uno dei numerosi rivenditori on-line di materiale elettronico. |
Realizzazione del circuito Sono riportate, nelle seguenti immagini, le figure relative al layout del circuito e alla disposizione dei componenti. Se non le avete ancora salvate attraverso i link all'inizio di questo articolo, potete farlo anche da qui. Le immagini visibili qua sotto sono a 100 dpi. Per avere le stesse immagini, ma a 300 dpi, in una nuova finestra, da dove potrete stamparle o salvarle, potete fare click direttamente su quelle visibili qui sotto o sui link sottostanti, oppure, se utilizzate un sistema Windows (TM) 95/98, utilizzare il tasto destro del mouse e scegliere "Apri collegamento in un'altra finestra". Da questa stessa pagina, potete salvare le immagini a 300 dpi, non le sottostanti, sul vostro hard disk o altra memoria di massa con l'opzione contestuale "Salva OGGETTO con nome" e stamparle in un secondo tempo con il browser o altri programmi. Con il browser si potrebbero avere problemi di dimensioni, mentre ad esempio Imaging (TM) di Windows (TM) dovrebbe stampare automaticamente con le dimensioni reali. Se avete dei dubbi sulle dimensioni della stampa ottenuta, e temete che non sia a grandezza reale, provate a misurare le distanze fra i fori per i componenti DIL, che deve risultare di 2.54 mm fra piedini contigui e di 2.54 mm * 6 = 15.24 mm fra le due file nel caso di U1. Ovviamente, per non incorrere in grossolani errori di misura, nel caso della distanza fra pin contigui utilizzate ad esempio quella fra il primo e il nono piedino di una fila, assicurandovi che sia di 2.54 mm * (9-1) = 20.32 mm. Non riuscirete naturalmente ad apprezzare i centesimi di millimetro, e forse neppure i decimi (non avrebbe neppure molto senso viste le dimensioni finite delle piazzole e dei loro fori), ma se la vostra misura è appena superiore ai 20 mm dovreste essere a posto. Per verificare la correttezza della scala orizzontale, potete ad esempio misurare la distanza fra due reofori di una resistenza, che deve essere di 2.54 mm * 4 = 10.16 mm. Se una delle due distanze non fosse quella attesa , detta x la relativa misura, dovreste applicare un fattore di zoom orizzontale pari a 10.16/x e un fattore di zoom verticale pari a 20.32/x. Nella figura n. 4 si nota la disposizione dei componenti con la basetta vista dall'alto e in trasparenza. Da essa si può notare come il layout del lato componenti vada riprodotto sul circuito come se fosse con il lato stampato opposto al rame; per quanto riguarda il layout della parte inferiore (saldature) il lato di stampa è invece quello che andrebbe appoggiato al rame. Gli schemi sottostanti sono in bassa risoluzione, per ovvi problemi di tempo di caricamento delle pagina, ma, come detto, i relativi link rimandano a schemi a risoluzione migliore. |
Fig. 3 - Disposizione dei componenti sulla basetta | Fig. 4 - Disposizione dei componenti e disegno delle piste inferiori (lato rame, rosso) e superiori (lato componenti, blu) |