PIC 16F877 / 16F874 Development Board v. 1.1 Siete il visitatore n. Click here for English version Pagina ottimizzata per risoluzione 1024x768 |
|
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 |
Attenzione: su questo stesso sito potete trovare la nuova versione (v. 1.2) del circuito qui descritto (versione 1.1). Se siete interessati non avete che da fare click su questo link Introduzione - A cosa serve la Development Board v. 1.1? Dopo aver realizzato la Evaluation Board per PIC 16F84 / 16C84
da me ideata e costruita secondo le mie esigenze,
passando ad un microcontrollore superiore ho deciso di
continuare con la stessa filosofia, ideando così un
circuito che potesse essere una comoda e versatile base
di sperimentazione e nello stesso tempo contenendo le
dimensioni dello stampato. Questa basetta, soprattutto,
permette di interfacciare il PIC con un qualsiasi
circuito esterno in modo molto versatile e allo stesso
tempo affidabile, permettendo di attribuire eventuali
malfunzionamenti elettrici al solo circuito esterno, e,
naturalmente, concentrandosi sul software; chi
solitamente utilizza le basette per prototipi sa bene
cosa voglia dire, quando qualcosa non funziona, andare a
testare gran parte dei terminali del circuito;
figuriamoci se si dovesse anche verificare che nessun
piedino del PIC sia vittima di un falso contatto ...
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 controllore dalla Development Board
(programmazione in-system). 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. 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, ad esempio quelli per la selezione del clock). Appena il chip è programmato, basta eseguire l'operazione inversa per avere nuovamente il PIC pronto all'uso e connesso al mondo esterno. Alla sezione "Programmazione" le operazioni da svolgere, in dipendenza del tipo di programmatore, della sua alimentazione e del 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 FREE limitata a 200 pin, realizzato dalla MERCO
Electronics, la quale mi ha 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.1 è stata progettata per essere alimentata con batterie 9-12V e interfacciata solamente con circuiti alimentati anch'essi a batterie a bassa tensione. 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. |
Caratteristiche e descrizione del circuito 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 (vedi figura 4 -
Disposizione dei componenti e disegno delle piste)
avverrà mediante la grafia Sx-n, ove n e x sono due
numeri interi; medesima grafia per i connettori JPx. Il
suffisso "E" indica semplicemente
"extra". Ad esempio, osservando il disegno di
fig. 4, il riferimento allo switch Sx-1 indica il primo
interruttore dello switch Sx a partire dall'alto; analogo
significato nel riferimento ai connettori. Ad esempio,
S6-4 non è connesso ad alcuna pista; quando aperto, S5-6
è connesso solo a S5-3 e a JP9-3; quando S5-6 e S3-6
sono chiusi, c'è connessione fra JP-3 il piedino 36 del
PIC. 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). 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 mediante 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 (solo 5 utilizzati), con
possibilità di fornire alimentazione al programmatore o
di riceverla da esso. Nota:
questa basetta NON supporta il Low Voltage Programming,
ma permette tranquillamente sia il funzionamento dei
microcontrollori che hanno tale funzione attivata (è
sufficiente chiudere tre switch per mantenere a massa
RB3), sia la programmazione degli stessi PIC con LVP a
"1" per mezzo di programmatori tradizionali. 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 un
circuito esterno, sia mediante prese per connettori
stabili che mediante connettori SIL per fili volanti
(vedi fotografie). Spie alimentazione: tre led
inseribili singolarmente mediante jumpers 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 ancora figura 4 - Disposizione dei componenti e disegno delle piste). Veniamo ora alla descrizione delle funzioni dei
diversi interruttori. |
Jumpers Quando chiuso, S7 permette al led D1 di indicare la presenza di tensione in uscita al 7805. S8 connette il led D2, 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. S9 connette invece il led D4, il quale 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, sulla stessa può avvenire un cortocircuito. Per evitare tale rischio, dovrebbe essere sufficiente interrompere la pista fra S5-3 ed S5-6 (lato sinistro del connettore), inserendo fra le due tracce così separate una resistenza da qualche decina o qualche centinaia di KOhm. Il funzionamento in modalità LVP non dovrebbe risentirne. NOTA BENE: non ho testato questa soluzione. 1-b) funzione LVP ATTIVATA
(in tal caso NESSUN programmatore deve essere connesso a
JP9 durante il normale funzionamento del PIC, essendo il
pin JP9-3 connesso alla massa del PIC che potrebbe essere
diversa da quella del programmatore). S3-3 su OFF (S3-3 isola il piedino RB3 del PIC da JP5) In tal modo durante il normale funzionamento RB3 risulta vincolata a massa 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 come indicato ai punti 1-a) o 1-b). 2) Alimentazione 2-a) dal 7805 (vedi figure E1, 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 figure E1, 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-3 su ON, S2-1 su ON, S2-2 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 Evaluation Board, si devono innanzitutto collegare a JP9 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, meglio utilizzare una batteria, la quale è flottante e si adegua al riferimento eventualmente imposto da un punto di connessione al circuito. Indipendentemente da quale sia il programmatore, consiglio vivamente, soprattutto nel caso il PIC sia collegato ad un circuito esterno mediante JP8, 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. Consiglio inoltre di isolare 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: questa basetta NON supporta il Low Voltage Programming. 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 D2 (circa 5 mA). Ecco come settare i dip-switch per la programmazione. 1) Programmatore che fornisce al PIC alimentazione (Vdd e Vss), /MCLR, RB6 e RB7. 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 NON DEVE essere connesso a JP9 durante
il normale funzionamento del PIC, essendo il pin JP9-3
connesso alla massa del PIC che potrebbe essere diversa
da quella del programmatore). S1 tutti su OFF 2) Programmatore che riceve alimentazione (Vdd e Vss) dalla basetta. In questo caso possiamo avere quattro configurazioni. 2-a) 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 OFF 2-b) funzione LVP DISATTIVATA,
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 2-c) funzione LVP ATTIVATA, alimentazione
dal 7805 (probabilmente è meglio che il
programmatore non sia connesso a JP9 durante il normale
funzionamento del PIC, essendo il pin JP9-3 connesso alla
massa del PIC). S6 tutti su OFF 2-d) funzione
LVP ATTIVATA, alimentazione da un circuito esterno
mediante JP8 (probabilmente è meglio che
il programmatore non sia connesso a JP9 durante il
normale funzionamento del PIC, essendo il pin JP9-3
connesso alla massa del PIC). 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. Si tratta di immagini a 100 dpi. Per avere le stesse immagini in una nuova finestra, ma a 300 dpi, da dove potrete stamparle, 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". In alternativa potete salvare le immagini (a 300 dpi) sul vostro hard disk o altra memoria di massa con l'opzione contestuale "Salva immagine 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 * 3 = 7.62 mm fra le due file (di UE1). Ovviamente, per non incorrere in grossolani errori di misura, nel caso della distanza fra pin contigui utilizzate 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 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. La distanza fra le file dovrebbe invece essere approssimativamente appena superiore ai 7.5 mm. Se una delle due distanze non fosse quella attesa , detta x la relativa misura, dovreste applicare un fattore di zoom orizzontale pari a 7.62/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. Lo schema elettrico non è, al momento, stampabile in maniera dettagliata. |
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) |
Sperando di esservi stato utile non mi resta che augurarvi buon lavoro! |