Per chi volesse cimentarsi con gli esercizi sui PIC proposti dal prof. Gottardo, ecco una scheda di sviluppo adatta allo scopo. Contattando il professore all'indirizzo e-mail ad.noctis@gmail.com è possibile avere al prezzo di costo sia il solo PCB realizzato in modo professionale sia l'intera scheda già montata.

PIC Versatile I.D.E.

Micro-GT PIC_ultimate

Per ottenere un singolo esemplare del PCB scrivere a ad.noctis@gmail.com  fino ad esaurimento scorte

Tutti i tutorial disponibili nelle pagine precedenti posso essere sperimentati con questo sistema di sviluppo

 

Con I.D.E. si intende Integrated developed enviroment quindi Cn sistema di sviluppo per progetti a microcontrollori, della serie PIC, in grado di integrare un elevato numero di dispositivi periferici. La scheda elettronica contiene: Un programmer seriale compatibile 8076, L'alloggiamento per un display LCD 2x16 caratteri, l'alloggiamento per un display grafico GLCD (graphic liquid cristal display) 128 x 64 punti, un ponte ad H da 8 ampere continui, un dual full bridge L298 per il pilotaggio di un motore passo/passo bipolare oppure due motorini DC da al massimo 2 ampere, un display led a 7 segmenti a 4 digit pilotabile in multiplexer fornendo un codice BCD all'integrato di decodifica, 16 pulsanti commutabili tramite jumper in pull up o pull down a gruppi di 4, 24 uscite massime digitale indicate con diodi LED, Streep di accesso diretto all I/O del PIC, 8 ingressi analogici simulati con trimmer multigiro. Un gran numero di dip switch e di ponticelli selezionabili permettono di cambiare la funzionalità dei vari punti di connessione ai PIC. E' possibile collegare facilemente un elevato numero di servomotori. Il sistema è predisposto per programmare i PIC 40, 28, 18 pin dual in line, ed altri tipi in modalità ICSP (in circuit serial programming) ed è possibile spostare il segnale di clock, o addirittura selezionare un secondo quarzo tramite un opportuno settaggio dei jumper con gli appositi ponticelli.

Il supporto PCB sviluppato in tecnologia FR4 (dual layer) misura 164 mm x 156mm.

Dopo avere lanciato la procedura di sbroglio automatico il PCB si presenta come nella foto sottostante, possiamo notare che manca un solo collegamento fortunatamente di interesse marginale tra il LED 11 e il jumper SV13. Tenteremo di risolvere manualmente il problema ma in caso di esito negativo si dovrà procedere eseguendo questo collegamento tramite un ponte di filo wrap. Il risultato è comunque molto soddisfacente data la complessità del circuito e le compatte dimensioni. Il circuito va ora ottimizzato aumentando dove possibile le piste. sarà anzi d'obbligo aumentare al massimo gli spessori nelle zone adibite al controllo di potenza, ovvero nella parte che riguarda il ponte ad H e il circuito integrato multiwatt L298 per il pilotaggio del motore stepper bipolare.

scarica l'immagine del layout con lo sbroglio

Nella prossima immagine vediamo un esemplare del PCB realizzato.

I files costruttivi gerber sono reperibili contattando bonzisandy88@hotmail.com   che facendovi da interprete vi aiuterà nell'ordinazione presso una fabbrica cinese.

Scarica il PDF dello schema elettrico

Scarica Lo schema elettrico e il PCB in formato Eagle

 

Nelle sottostanti foto vediamo alcuni esemplari della Micro-GT PIC versatile IDE assemblate da utenti internet dopo essersi procurati il PCB.

Esemplare montato da Luca Luise, utente di www.grix.it. Dopo avere realizzato questo meraviglioso esemplare, ed avere eseguito numerosi test si è offerto di poter eseguire i montaggi per i meno esperti. Per sapere quanto vi costa un esemplare montato e collaudato mettetevi in contatto con lui passando sempre attraverso all'indirizzo mail ad.noctis@gmail.com

Esemplare eseguito da Matteo Pontarollo, allievo del centro sociale culturale ZIP (zona industriale di Padova  centrozip@libero.it ), in una delle edizioni del corso base di programmazione dei PIC. Nello zoccolo è installato il PIC16F877A.

Alimentazione.

Alimentate la scheda con qualsiasi tensione, sia continua che alternata (è stato inserito un ponte raddrizzatore che provvede all'eventuale inversione),  compresa tra un minimo di 15V, dato che in alcuni punti devono esserci 13,2V per flaschare il PIC e si deve tenere conto della caduta di drop-out degli LM stabilizzatori, e un valore "ragionaevole" per la sopportazione degli stessi. Potrebbe essere ad esempio 18Va.c. oppure 24V d.c., fate attenzione che raddrizzando l'alternata si deve moltiplicare il valore di targa del trasformatore per la radice di due, ovvero 1,4.   In ogni caso non superate mai i 30V, ovvero circa il valore di schianto degli LM.

Posizione del LED che segnala l'accensione del sistema di sviluppo Micro-GT

Comunicazione seriale con la scheda Micro-GT PIC.

La comunicazione seriale come anche programmazione con la Micro-GT avviene tramite il connettore seriale DB9  femmina montato a bordo. Benchè sarebbe meglio collegarsi tramite una vera porta seriale di un PC desktop il link può avvenire anche tramite un adattatore USB->RS232 per l'interfacciamento con gli odierni notebook che non montano più questa porta  Per flaschare il PIC si usa la modalità ICSP (in circuit serial programming) per la quale è necessario costruire in connettore a 5 conduttori, visibile in figura, per il quale ci si troverà avvantaggiati se vengono rispettatiti medesimi colori.

Connettore ICSP, da costruire usando 5 posizione di streep line femmina (se possibile rispettare i colori).

La corretta posizione del connettore ICSP è mostrata nella prossima figura. si potrà usare indifferentemente il connettore ICSP1 o ICSP2 a bordo della scheda dato che questi sono in parallelo e possono addirittura permettere la programmazione di due chip alla volta (uno esterno alla scheda). Si raccomanda, qualora siano stati rispettai i colori, di tenere il marrone a destra. Il suggerimento di rispettare i colori è dovuto al fatto che non essendo ancora stato rilasciato il software dedicato "MG-Lab", di cu si si sta curando l'amico Fabio, provvisoriamente useremo il PICPRO2009 (facilmente trovabile in rete) che riconoscerà il dispositivo come "8076", oppure ICPROG settato come JDM impostazione cavo invertito (dipenderà dal cavo seriale impiegato).

i connettori ICSP si trovano proprio sopra ai regolatori di tensione.

Lanciando ICPROG 2009, ed entrando nella sezione di test e comunicazione, in alto a destra, a scheda alimentata, questa risponde segnalando la posizione corretta del capo libero dei fili colorati del connettore ICSP in questione. manovra fondamentale per la programmazione del microcontrollore.  E' bene tenere sempre gli schemi alla mano.

PICPROG 2009, durante la funzione di test suggerisce a che pin collegare i fili colorati che sono stati impiegati per la costruzione del connettore ICSP. Queste cambiano ogni volta che si cambia il chip che intendiamo programmare.

impostazioni ICSP

Durante la comunicazione e l'esecuzione del test con l'ausilio di PICPROG2009 vedrete lampeggiare i tre LED a fianco dei connettori ICSP, noterete subito che la sequenza non è perfettamente uguale in quanto due led risulteranno invertiti. Non preoccupatevi per questo, ricordatevi che state usando un software di ripiego, ovvero uno provvisorio fino a quando non sarà pronto lo specifico MG-Lab in cui la cosa è già risolta. Si tratta comunque solo di una segnalazione di bit in transito (quindi nessun problema),

 Led di segnalazione dello stato dei bus di programmazione e comunicazione.

Il cavo seriale da impiegare sarà di tipo con due connettori CANNON DB9 maschio dal lato scheda PIN to PIN ovvero una semplice prolunga. Non eseguiamo alcun incrocio.

schema di cablaggio del cavo seriale da utilizzare.

.

 

Studio modulare del progetto.

 

Modulo alimentatore a due livelli.

Il modulo permette l'alimentazione del circuito con due livelli di tensione, uno adatto alla programmazione dei dispositivi PIC pari a circa 13,5 volt e uno TTL (5V) per la normale alimentazione dei circuiti logici. La tensione di 13,2 è ottenuta sfruttando il generatore di corrente presente al pin centrale dei regolatori di tensione positivi serie uA78xx. Su questo piedino è presente un generatore di corrente che spinge costantemente 4mA verso la massa creando il riferimento per la circuiteria interna. Inserendo due diodi polarizzati direttamente tra il piedino centrale e la massa si somma alla tensione regolata due volte la tensione di giunzione Vgamma=0,6 volt. Otteniamo così i 13,2 sufficienti per commutare i pic in programmazione. Nel PCB è stato inserito un punto di test nei pressi dell'elettrolitico C9 che mette a disposizione un punto di massa. scopriremo sviluppando i propri progetti quanto sia utile questo punto di accesso alla massa.

La linee che vediamo uscire dal positivo dell'elettrolitici C2 porta la tensione ai connettori per la programmazione seriale in circuit (ICS1 e ICS2).

IL regolatore di tensione IC3 è un uA7805, e fornisce la tensione logica TTL a tutto il circuito. Il Led Power indica che il dispositivo è alimentato.

nota importante: Per come è stato progettata la sezione alimentazione è possibile alimentare il circuito con qualsiasi tensione sia continua che alternata benchè compresa tra 9 volte e 36 volt che rappresenta il limita massimo del regolatore uA7812 che incontriamo per primo dopo il ponte di diodi.

La sezione di alimentazione fornisce circa 1 ampere più che sufficiente per ogni situazione di sviluppo in laboratorio.

 

Modulo ingressi digitali.

Il modulo comprende 16 pulsanti normalmente aperti del tipo da  montaggio sul circuito stampato congeniati per poter lanciare in azione premuto sia un 1 logico che uno 0, a seconda di come vengono configurati tramite i ponticelli connessi agli streep SV1,SV2,SV3,SV4. Allineando i jumper tutti a sinistra i pulsanti premuti lanciano l'uno logico (le resistenze infatti fungono da pull down mentre allineando i jumper a destra la medesima azione comporta il lancio di uno zero logico (le resistenze fungono da pull up).

Gli ingressi sono stati sezionati a gruppi di 4 tramite gli steep SV1,SV2,SV3,SV4 in modo da massimizzare la versatile del circuito. Si potrà ad esempio simulare a multipli di 4 sia pulsanti N.C. che N.A. a bordo macchina, ad esempio 4 N.C.  e12 N.A.  E' molto utile anche la funzionalità di isolamento accessibile agendo sul dip S11 e sul dip S12 (aprire i microinterruttori). ogni pulsante in questo caso continua ad essere alimentato e correttamente vincolato elle tensioni TTL (rimane attiva la configurazione NA e NC sui jumper), ma ora possiamo portare tramite cavi flat ognuno di questi segnali in qualsiasi punto del circuito o addirittura fuori della scheda dopo aver riferito la scheda esterna alla stessa massa.  L'acceso diretto ai pulsanti è possibile collegando i cavi flat agli streep SV29 e SV30.

sezione ingressi della scheda Micro-GT, si osservino i jumper di ipostazione pull-up, pull-down

nota importante: il jumper JP3 va chiuso quando si è intenzionati a programmare il PIC 16F84 o un compatibile a 18 pin. La chiusura di JP3 comporta la connessione a massa del pin 5 indispensabile per l'alimentazione del dispositivo, ovviamente in questo caso la linea non deve trovare interruzioni quindi il dip S11 dovrà avere obbligatoriamente la linea 4-13 in posizione ON. Obbligatorio in questo caso è anche chiudere il connettore streep SV2 in modalità PULL UP perchè solo in questo caso la linee si troverà a massa. Attenzione all'inversione di polarità nell'alimentazione del dispositivo anche se la scheda dovrebbe impedire errori così grossolani dato che ponendo sia Vdd che Vss a una tensione positiva o flottante non comporta ha come conseguenza la distruzione del PIC. Il  tasto S6 abbina la funzione MCLR al caso di PIC16F84 o microcontrollore compatibile pin to pin. In caso si volesse utilizzare questa funzione bisogna configurare il gruppo di pulsanti S5,S6,S7,S8 obbligatoriamente con le resistenze di PULL UP (jumper allineati a destra sul secondo gruppo). Se non si ha questa accortezza il programma nel PIC non si avvia perchè riceve costantemente un segnale di reset.

 

Modulo uscite digitali.

Il modulo comprende 24 uscite digitali a livello logico TTL, il cui stato è evidenziato dall'accensione di un LED. Ognuno dei tre byte di uscita è escludibile agendo sui microinterruttori 1,2,3 del dip S13 con la corrispondenza:

S13   1 -> PORT D

S13   2 -> PORT C

S13  3 ->  PORT D

 

E' possibile accedere direttamente ai PORT B, PORT C, PORT D, collegandosi direttamente ai connettori streep SV18 (PORT D),  SV22 e SV23 (PORT C), e SV17 (PORT B). Nel caso di accesso diretto al PORT si raccomanda di non caricare l'uscita del microcontrollore con correnti maggiore di poche decine di milliampere, usare una di queste uscite per pilotare direttamente la bobina di un relè sarebbe davvero un errore da principiante che porta al danneggiamento del dispositivo. Si ricorda inoltre che per ragioni di semplicità circuitale non è stato previsto per nessun ingresso/uscita l'opto isolamento, d'altro canto questo è un sistema di sviluppo e non un PLC anche se per prove di laboratorio ne può fare le veci.

Modulo uscite digitali, ogni led è indicato con la serigrafia relativa alla versione 40 pin, in giallo le reti resistive.

 

Micro-GT PIC modello base.

Per un utente principiante l'assemblaggio completo della Micro-GT potrebbe essere un carico economico un pò fastidioso anche se non impossibile. In attesa di avere le competenze tecniche per utilizzare tutti i moduli presenti nel layout ci si può limitare al solo assemblaggio della parte essenziale del digital I/O. La scheda assume l'aspetta visibile nella foto:

Le caratteristiche tecniche rimangono comunque di tutto rispetto se comparate con molti prodotti commerciali. Il modello base mostrato in figura presenta:

Notiamo la posizione del cavo ICSP, il conduttore marrone è il primo a sinistra, mentre il rosso può rimanere scollegato perchè esiste nel PCB una ridondanza per quel filo.

MCLR bug Fix per uso come modello base.

Quando si intende utilizzare la Micro-GT PIC versatile IDE son i PIC a 28 pin o a 40 pin come il 16F876 o il 16F877, o gli equivalenti della serie 18, si può rinunciare ad alcune condizioni particolari di utilizzo che la scheda può fornire quando vengono istallati PIC di uso in realtà piuttosto raro. Per un utilizzo più rapido del connettore ICSP eseguimo na piccol modifica che consiste in:

 . Questa semplice modifica è documentata nelle foto che seguono:

taglio della pista. Il conduttore è tagliato all'altezza del Vias (foro metallizzato) della pista affianco. Come possiamo vedere è stato rimosso il solder grattando delicatamente la superficie della pista con il cutter. Questa manovra va fatta prestando un pò di attenzione anche se realmente la scheda non è così delicata da comprometterne la funzionalità. 

Saldiamo il nuovo streep a due posizioni nel posto che abbiamo così ricavato. nella foto risulta quasi invisibile ma prestando attenzione lo possiamo vedere, si trova parallelo al bordo el deepswitch di sinistra, il più vicino allo zoccolo textool. 

Nella modalità esecuzione del programma infiliamo il jumper nello streep line a due posizioni, nella foto lo vediamo in blu. ho scelto questo colore per evidenziarne la presenza.

Nella modalità programmazione, infiliamo lo streep solo in uno dei due pin dello streep line (obbligatoriamente quello di destra)  e in quello di sinistra infiliamo invece il cavo marrone del connettore ICSP, ovvero il suo pin 1. Questa modifica risolve qualsiasi conflitto di tensioni che potrebbe verificarsi tra la modalità di esecuzione e la modalità programmazione dei pic a 40 e a 28 pin.

Vediamo girare una demo sul processore 16F877A, si tratta del classico effetto supercar, ricordiamoci di allineare gli streep line SV13 e SV14 a destra, questo disabilita il quarzo a 4Mhz passando il bus ai pin collegati ai LED, ovvero RB5 e RB4 come possiamo facilmente vedere con gli schemi alla mano. 

download filmato dl test "supercar al PORTB" della Micro-GT PIC versatile IDE

Modulo LCD 2x16 caratteri.
Il modulo permette la gestione di un comune modulo LCD del tipo HD44780 compatibile, interfacciato con il metodo a 4-bit.
Esso permetterà di mostrare eventuali messaggi di avviso, oppure mostrare dati o ancora riportare la temperatura rilevata da un sensore.
E' possibile utilizzare due diversi modelli di display che differiscono dalla diversa disposizione dei PIN .

La scheda Micro-GT versatile I.D.E. presenta solo l'alloggiamento e i PIN a cui collegare il display tramite uno o più cavi flat, per evitare lo spreco di risorse visto che l'uso dell'LCD è una delle tante possibili funzionalità.

Il jumper JP6 consente l'accensione della retroilluminazione, ovvero l'alimentazione anodo-catodo dei led integrati (PIN 15 anodoe 16 catodo, lato display), mentre lo streep a 3 terminali SV25 consente il collegamento via cavo flat dei primi tre terminali dell'LCD e costituisce l'alimentazione a 5 volt e la regolazione del contrasto.

Relativamente alle tre linee necessarie per i controlli RS/RW/E è stato inserito il connettore a tre terminali SV4. coincidente per il PIC 16F877A con il PORT D.

Attenzione: Uno zoccolo ZIF a 40 pin della 3M vale, su ebay 0,99 dollari, pari a 0,75€, non fatevi fregare! Comprate su ebay anche se dovete aspettare 10 giorni. Spedizione compresa vi costa meno di 5 €.

Le linee dati invece potranno essere prelevate in uno dei punti di "direct access" al port con la libertà di decidere (a seconda del software  sviluppato per il PIC) la modalità a 4 o a 8 bit.


download la documentazione tecnica del display

In alcuni modelli la fila di pin è riportata (in parallelo) anche sul lato inferiore del supporto PCB del display. Collegarsi a quello sopra o sotto non fa differenza, usiamo quindi quello più comodo per i cablaggi.

 

Descrizione
I
l display a cristalli liquidi o LCD (dall'inglese Liquid Crystal Display) collegabile a questo modulo è dotato di 2 linee di 16 caratteri ciascuna. I display LCD più comuni reperibili in commercio, hanno un'interfaccia ideata da Hitachi che, nel tempo, è diventata uno standard industriale utilizzato anche da altre case produttrici.

Funzione dei vari pin del display

PIN

Nome

Funzione

1

GND

Ground - Pin che deve essere collegato al negativo d’alimentazione.

2

VDD

Power Supply - Pin da collegare a +5V d’alimentazione.

3

Vo

A questo Pin si deve applicare una tensione variabile da 0 a +5V tramite un trimmer per regolare il contrasto del display.

4

RS

Register Select - Questo pin è una linea di controllo con cui si comunica al display se si sta inviando sul bus dati (linee da DB0 a DB7) un comando (RS=0) oppure un dato (RS=1).

5

R/W

Read, Write - Questo pin è un’altra linea di controllo con cui si comunica al display se s’intende inviare un dato al display (R/W=0) oppure leggere un dato dal display (R/W=1).

6

E

Enable - Questo pin è una linea di controllo con cui si può abilitare il display ed accettare dati ed istruzioni dal bus dati (E=1).

7

DB0

Data Bus line 0 - Le linee su cui transitano i dati tra processore e display.

8

DB1

Data Bus line 1

9

DB2

Data Bus line 2

10

DB3

Data Bus line 3

11

DB4

Data Bus line 4

12

DB5

Data Bus line 5

13

DB6

Data Bus line 6

14

DB7

Data Bus line 7

15

A

Pin per il collegamento della retroilluminazione se presente.

16

K

Pin per il collegamento della retroilluminazione se presente.

Dei 16 pin presenti se ne utilizzano però solamente 7


RS   Register select signal
E     Enable signal
R/W read/wrwite selection
DB4 Data bit 4
DB5 Data bit 5
DB6 Data bit 6
DB7 Data bit 7


Le linee dati, RS ed E, non sono dotate di una resistenza pull-down per forzare a massa la linea quando non utilizzate. Questo è stato voluto per poter mantenere la compatibilità con altre applicazioni come I/O digitale nei medesimi pin. Nella maggior parte dei casi il sistema funzionerà ugualmente, ma se dovesse essere necessario aggiungere le tre resistenze di pulldown non ci saranno grossi problemi ad istallarne esternamente, o a bordo del display. Si potrà addirittura usare lo streep line SV16 in combinata con SV6 (vedere lo schema) per connettere le tre resistenze successivamente chiuse verso il più vicino punto di massa.
Il trimmer R55 connesso al pin Vo, tramite lo streep line SV25  permette di regolare il contrasto del LCD.

 

Modulo Display a 7 segmenti a 4 digit.

Il modulo permette la gestione di 4 digit a catodo comune pilotabili in modalità multiplexer, ovvero sarà necessario generare con il processore un Nibble BCD sul bus dati e l'abilitazione del digit corrispondente tramite il lancio di un Bit sulle basi dei transistor BC337 utilizzati in saturazione/interdizione che permetteranno l'accensione del digit corrispondente.

particolare del display a sette segmenti e del driver CD4511, in evidenza anche il deepswitch di sezionamento e i 4 BJT per multiplexare i digit.

Attenzione: il PCB presenta la sequenza da sinistra verso destra dis3, dis2, dis1, dis4 per ragioni di comodità di sbroglio.

scarica la documentazione dell'integrato CD4511

Il circuito integrato CD4511 (equivalente al TTL 74LS48 e LS248) si fa carico della decodifica dei quattro bit BCD generati con il PIC. Se usiamo le connessioni on-board, ovvero abilitiamo il BUS agendo sui dip switch S26 e nel caso di un PIC16F877, si ha la corrispondenza:

A -> RB7

B -> RB6

C -> RB5

D -> RB4

Come si nota dallo schema questi segnali non risultano mai flottanti anche nel caso di apertura del dip 26 sono infatti portati a zero tramite le resistenze di pulldown.

I punti decimali possono essere controllati o isolati separatamente tramite il dip 25. Nel caso volessimo, per esempio, realizzare un orologio digitale dovremmo abilitare al dip 25 solo la linea numero 2.

Un ottimo esercizio di programmazione potrebbe essere quello di modificare il software presentato in questo sito relativo all'orologio 24 ore allo scopo di farlo girare sul Micro-GT PIC.

i controlli sono: SV19 -> inserimento diretto del dato BCD, SV20 -> controllo in multiplexer dei display,(abilita i catodi comuni pilotando i transistor),  SV21-> controllo dei punti decimali sui 4 display (isolabile tramite il DIP a 4 linee S25.

Modulo controllo motore passo passo.

Il modulo permette il controllo di un motore passo passo o in alternativa di due motori D.C. con corrente massima di indotto parti a 2 Ampère continui. E' prevista una protezione contro le sovracorrenti che deve essere gestita via software acquisendo il segnale analogico presente alle due resistente di schunt. I segnali analogici in questione sono prelevabili al jumper 10 e dovranno essere riportati con un cavetto flat. il DIP S9 disabilita la lettura.

Il circuito integrato utilizzato è il noto L298 che sarà alimentato a 5volt dal lato processore e alla tensione idonea al motore nel lato potenza. I diodi di ricircolo proteggono le linee dalle extra correnti impendendo la rottura dei mosfet interni. 

Il progetto finito

Nell'immagine seguente vediamo il PCB completo di serigrafie e di piste di potenza rinforzate. Sono state ingrossate le piste di massa e tutte le piste interessate dal passaggio della corrente di alimentazione dei motori. Sono molto utile le serigrafie che identificano i pulsanti e i LED di uscita abbinate ei rispettivi pin del PORT B,C,D.

Molti dei jumper sono stati abbinati ad una serigrafia che ne mostra la funzionalità ma comunque sarà sempre utile avere sottomano la leggenda compresa nel manuale di istruzione al fine del corretto settaggio. Riporto nelle righe successive un estratto dal manuale.

Lista dei componenti

R13-R14-R15-R16= 10k
R21-R22-R23-R24= 10k
R25-R26-R27-R28= 10K
R29-R30-R31-R32= 10K

AN0-AN1-AN2-AN3-AN4-AN5-AN6-AN7=5K MULTIGIRO PIN ALLINEATI

C3-C4= 18pF
C13-14= 22pF

Q5= 20Mhz
Q= 4Mhz

R12= 10k

IC3= 7805 - 1A
IC5= 7812 - 1A
D2-D3= 1N4148
C10-C11-C1= 100nF
1 ponte da 1A
R51-R52-R53-R54= 10K
R1-R2-R3-R4-R5-R6-R7= 220
R17-R18-R19-R20= 220
R8-R9-R10-R11= 1K5
IC7= TL082
R76-75= 10K
AL POSTO DI R78 E R77 ZENER 2.6V CON KATODO AL MORSETTO INVERTENTE DELL'OPERAZIONALE
R73-R74= 4K7
R69-R70-R71-R72= 1K8
Q9-Q10-Q11-Q12= TIP122 DARLINGTON
D12-D13-D14-D15= GI852 DIODI SCHOTTKY
D8-D9-D10-D11-D4-D5-D6-D7= GI852 DIODI SCHOTTKY
IC6= L298
R59-R60-R61-R62= 1 OHM 1W
R63-R64-R65-R66-R67-R68= 10K
IC4= CD4049N
IC1= CD4511
R57=10K LINEARE (TRIMMER)
R37= 3K3
R40-R41= 3K3
R55= 10K LINEARE
C6-C7-C8-C5= 1micro F elettrolitici
IC2= MAX232
D1=1N4148
RN1-RN2-RN3= RETI RESISTIVE 8 RESISTENZE + COMUNE 1 KOHM
UN TOT DI STRIP LINE MASCHIO
FB47-R42= RESISTENZA FILM METALLICO 47 OHM
R39=FB220= RESISTENZA FILM METALLICO 220 OHM
JUMPER ALMENO UNA VENTINA A 2 POSIZIONI
N°17 PULSANTI DA TELECOMANDO
N°26 LED ROSSI 3mm
N°4 LED VERDI 3mm
Q6= BC547 NPN
Q7= BC557 PNP
4 RESISTENZE 100 KOHM
R35-34=100 KOHM
R36= 3K3
R33=10K
R38=100K
S12-S26-S11= DIP SWITCH 8 CANALI
S25-S14= DIP SWITCH 4 CANALI
S13= DIP SWITCH 3 CANALI
S24-S10-S9= 2 CANALI
4 DISPLAY 7 SEGMENTI KATODO COMUNE
3 ZOCCOLI DIL 16 PIN
1 ZOCCOLO 8 PIN
1 PORTA CANNON DB9 FEMMINA
6 MORSETTI A VITE A 2 VIE
 

downoload file excel con partsearch della lista componenti (consigliato)

download il file txt della lista componenti

Controller supportati.

I seguenti controller sono stati testati e risultano pienamente supportati:

 

Configurazione per il corretto funzionamento dei moduli.

switch configuration del Micro_GT_PIC ultimate

Schema elettrico alla mano identifichiamo di volta in volta la posizione dei DIP e dei connettori streep citati per abilitare le varie funzioni o deviare il bus da una posizione all'altra della scheda.

Ad esempio, Il circuito integrato L298 che pilota 1 motore stepper bipolare oppure 2 motori D.C. (massimo 2 A per bobina) viene abilitato chiudendo il  DIP A.

Il DIP C abilita la lettura della retroazione analogica tramite shunt.

il DIP D consente ai segnali di passo di pilotare i ponti.

 

Vediamo la funzionalità dei vari connettori streep: 

SV1 pull up down pulsanti S1-S4

SV2 pull up down pulsanti S5-S8

SV3 bus 4 linee commando L298

SV4 è il connettore ICSP1 per la programmazione seriale in circuit (sdoppiato con SV9 ovveroICS2 in parallelo)

SV5 e SV6 Passano il clock al PIC 16F876

SV7 pull up down pulsanti S15-S18

SV8 pull up down pulsanti S19-S22

SV9 è il connettore ICSP2 per la programmazione seriale in circuit (sdoppiato con SV4 ovveroICS1 in parallelo)

SV11/SV12 serial supervisor connection RS232 direct pc control  28 pin serial programming

SV13 e SV14 Passano il clock al PIC 16F877, deviazione segnale clock/recupero I/O

SV15  Direct onboard analog

SV16 Direct analog o PORT A (commuta segnali da digitali a analogici)

SV17 Direct port B

SV18 Direct port D

SV19 BCD direct control B0÷B3 display led

SV20 Direct access multiplexer display led

SV21 Stepper signal control

SV22 Direct control RC 0-3

SV23 Direct control RC 4-7

SV24 RS/RW/EN per Display LCD oppure linee RE0,RE1,RE2 del 16F877

SV25 Regolazione contrasto LCD

SV27 Controlli port B di controllo al display grafico

SV28 Dati D0÷D7 al display grafico GLCD

SV29 Direct I/O input connect S15-S22

SV30 Direct I/O input connect S1-S8

 

Vediamo la funzionalità dei connettori a vite: 

X1= Alimentazione del dispositivo, va bene sia alternata che continua purchè compresa tra 7 Volt e 24 Volt) polarità indifferente.

X2= non presente in scheda.

X3= Motore stepper alimentazione di potenza delle fasi(es X3-1 ->+12 Volt, mentre X3-2 ->gnd)

X4= Motore stepper fasi A e B in sequenza

X5= Motore stepper fasi C e D in sequenza

X6= Motore D.C. (X6-1 morsetto positivo indotto, X6-2 morsetto negativo indotto)

X7= Motore D.C. powersupply (X7-Vcc motore DC, X7-2 massa motore DC)

 

Vediamo la funzionalità dei DIP switch: 

S9 enable analog feedback from L298

S10 enable L298 (separatamente per i due ponti ad H interni)

S11 isola in PORT A digitale e permette l'ingresso dell'analogico

S13 onboard output enable (1-port D,2-port C,3-port B)

S12 isola o allaccia il PORT B del 16F877, quando aperto in SV29 abbiamo disponibili i segnali  da S15 a S22

S14 enable 4 line L298 command signal

S24 Enable bridge (se aperto i pulldown forzano i comandi di stop in entrambe le direzioni)

S25 enable single decimal point on 7 segment display

S26 single line BCD – 7 seg display controller enable

 

Vediamo la funzionalità dei vari jumper: 

JP1 isola o devia il clock OSC1 per 16F877

JP2 isola o devia il clock OSC2 per 16F877

JP3 , se chiuso si porta l'alimentazione Vss al pin 5 per 16F84A (deve essere chiuso anche 4 e 5 di SV2).

JP4 , se chiuso si porta l'alimentazione Vdd al pin 14 per 16F84A (in caso di errore non è distruttivo).

JP5 multifunzione, collegare con cavetto flat bipolare alimentazione 16F877 11-Vdd e 12-Vss oppure direct RC0,RC1 per 16F876

JP6 cavetto flat bipolare alimentazione led retroilluminazione display LCD (1-Vdd, 2-Vss)

JP7 retroilluminazione display grafico GLCD

JP8 deviazione segnale di clock (se chiuso porta segnale al PIN 13 - OSC1 per 16F877) se open è RC2-16F876

JP9 deviazione segnale di clock (se chiuso porta segnale al PIN 14 - OSC2 per 16F877) se open è RC3-16F876

JP10 Analog sense, è la retroazione analogica dei due ponti integrati sull'L298

 

NOTA: se usiamo 16F84A I PIN sono:

4    MCLR        6÷13     RB0÷RB7

5    VSS           16-15    OSC1-OSC2

14  VDD     (chiudere JP4 per alimentare il PIC16F84 e tutti quelli pin to pin compatibili)

impostare SV2 in modalità pull-up (jumper allineati a destra) così il pulsante P6 diventa MCLR per 16F84A

 

Programmi applicativi/dimostrativi

Verranno ora presentati una serie ben nutrita di programmi programmi scritti in C16 aventi il duplice scopo di corso di programmazione e di utilizzo delle potenzialità del Micro-GT versatile I.D.E.  Ad ogni modulo presente nella scheda saranno abbinate più esperienze in ordine di difficoltà.

Uso del modulo display a sette segmenti.

Esercizio 1

Visualizzare un count-up / count-down controllato da due pulsanti, sul digit meno significativo del display a sette segmenti del Micro-GT versatile I.D.E.

Soluzione:

Schema alla mano si può vedere che il digit meno significativo del display è abilitato dalla saturazione del transistor Q4 comandato dalla linea meno significativa del PORT B, ovvero il pin RB0 (n° 33 del PIC a 40 pin). questo programma potrà funzionare sia per PIC16F877 che per PIC16F876 purchè si effettui l'opportuno settaggio dei jumper relativamente all'aggancio del clock ai rispettivi piedini osc1/osc2.

Il numero da visualizzare sul display sarà codificato in BCD sulle linee RB4, RB5,RB6,RB7.

Per consentire la trasmissione di questi segnali alla periferica (display) dovremmo agire sul DIP S26 abilitando il canale 8 per il transistor posto ai catodi comuni del digit, e le linee 1,2,3,4 che rappresentano il nibble BCD.

Per sicurezza disabilitiamo tutti i canali del DIP S12 che impedisce l’arrivo erroneo di segnali dal gruppo pulsanti da S15 a S22.

Se non vogliamo avere un eco luminoso dei comandi dati disabilitiamo il canale 3 del DIP S13.

Impostiamo i pulsanti di comando secondo la logica pressato=1, agli ingressi RA0 e R01. Per fare questo dobbiamo alienare a sinistra i due jumper allo streep SV2 che controlla i pulsanti da S5 a S8.

I comandi interessati saranno S8 -> RA0, e S7 -> RA1.

E’ possibile eseguire lo stesso esercizio utilizzando un PIC a 18 pin come ad esempio il 16F84.

In ogni caso sarà utile produrre una matrice di abilitazione da presentare al PORT B come sotto riportato.

 

Matrice di generazione del nibble PORT B

RB0

RB1

RB2

RB3

RB4

RB5

RB6

RB7

1

0

0

0

0

0

0

0

1

0

0

0

0

0

0

1

1

0

0

0

0

0

1

0

1

0

0

0

0

0

1

1

1

0

0

0

0

1

0

0

1

0

0

0

0

1

0

1

1

0

0

0

0

1

1

0

1

0

0

0

0

1

1

1

1

0

0

0

1

0

0

0

1

0

0

0

1

0

0

1

 

Per poter generare direttamente il comando  PORT che ha il bit meno significativo a destra bisogna rovesciare simmetricamente la matrice.

 

Matrice di generazione del nibble PORT B diretta

RB0

RB1

RB2

RB3

RB4

RB5

RB6

RB7

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

1

0

1

0

0

0

0

0

1

1

1

0

0

0

0

0

1

0

0

1

0

0

0

0

1

1

0

1

0

0

0

0

1

0

1

1

0

0

0

0

1

1

1

1

0

0

0

0

1

0

0

0

1

0

0

0

1

1

0

0

1

0

0

0

1

 

Sviluppiamo il software su due moduli così da mantenere uno stile più professionale di programmazione.

In un modulo chiamato setting.h presettiamo i registri interni del microprocessore, mentre in un modulo chiamato numeratore_up_Down.c inseriremo la funzione principale “main”, conviene addirittura predisporre due moduli di settaggio diversi che verranno inclusi a seconda della necessità in funzione del controllore che andremo a scegliere.

 

//----------modulo setting16F84.h---------------

 

#define UP   RA0       //pulsante 1 che lancia il conteggio in avanti

#define DOWN RA1  //pulsante 2 che lancia il conteggio indietro

 

void settings(void){

            TRISA=0b00011;

            TRISB=0b00000000;

            PORTB=0;

}

 

 

//--------- modulo setting16F877-876.h

#define UP   RA0       //pulsante 1 che lancia il conteggio in avanti

#define DOWN RA1  //pulsante 2 che lancia il conteggio indietro

 

void settings(void){

            TRISA=0b00011;

            TRISB=0b00000000;

            TRISC=0;

            TRISD=0;

            TRISE=0;

}

  

//---------------modulo numeratore_up_Down.c------------------

#define XTAL_FREQ 4MHZ //si usa negli header delay, porre a commento questa riga se si usa PIC16F876 o 877

#define XTAL_FREQ 20MHZ//porre a commento questa riga se usiamo PIC16F84

#include <pic.h>          //Rende noto al compilatore i nomi dei registri interni del PIC

#include <delay.h>       //prototipi della funzione ritardo

#include <delay.c>

 

/*__CONFIG (HS & WDTDIS & PWRTEN & UNPROTECT); */

//impostazione dei fuse per 16F84

 

__CONFIG (HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT);

//impostazione dei fuse se 16F876 o 16F877

 

#include "setting.h"  //Modulo di impostazione esterno dei registri

 

void main(void){

            settings();

            while(1){

                        if (UP==1){

                        DelayMs(100);

                                               if (UP==1){

                                               PORTB=0b00000001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b10000001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b01000001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b11000001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b00100001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b10100001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b01100001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b10000111;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b00010001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b10010001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               }

                                               if ((UP==0)&&(DOWN==0)){

                                                            PORTB=0b00000000; //azzera tutte le uscite compresa RB7 -> Q4 che spegne il display

                                                }

                        }

                       

                    if (DOWN ==1){

                                DelayMs(100);

                                               if (DOWN ==1){

                                               PORTB=0b10010001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b00010001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b10000111;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b01100001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b10100001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b00100001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b11000001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b01000001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b10000001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               PORTB=0b00000001;

                                               DelayMs(255);

                                               DelayMs(255);

                                               DelayMs(255);

                                               }

                                               if ((UP==0)&&(DOWN==0)){PORTB=0b00000000;} //spegne il display

            } // fine del ciclo continuo

}// fine del programma main

 

 

Uso del modulo L298 per motore passo/passo.

Il modulo L298 è per default sconnesso dal resto del circuito in modo da non influenzarne il funzionamento durante  l'uso di altri moduli. Sempre per default ogni ingresso del ponte del circuito integrato è portato a zero logico grazie alla presenza on baord delle rispettive resistenze di pulldown.

per il corretto funzionamento del modulo eseguire i seguenti settaggi.

Esercizio

Agendo su un pulsante (inizialmente bistabile) il motore passo/passo si mette in rotazione oraria (clockwise ovvero CW). Agendo su un secondo pulsante il motore si mette in rotazione antioraria (anti clock wise  ACW). Si presti attenzione ai comandi antagonisti, ovvero il motore non accetta il comando se è ancora presente il comando opposto. Si utilizzi il Micro-GT versatile I.D.E. dopo aver eseguito gli opportuni settaggi e collegamenti hardware.

Soluzione:

I settaggi hardware vanno eseguiti, schemi alla mano, seguendo l'elenco puntato sovrastante. Così facendo potremo inviare i 4 segnali della matrice di passo intero (full step) ai bit meno significativi del PORT B.

//inizio modulo principale da salvare con nome  Micro-GT stepper1.c  

/****************************************
*         Micro-GT Versatile IDE         *
*                   modulo L298                 *
*   pilotaggio motore passo/passo  *
*            prof. Gottardo Marco           *
*                    aprile 2010                   *
****************************************/

/********lista delle attribuzioni*********


CW         RA0
ACW      RA1

mot_A    RB0
mot_B    RB1
mot_C    RB2
mot_D    RB3

***************************************/
#include <pic.h>
#include <delay.h>
#include "setting16F877.h"

void Full_CW(){
while(ruotaCW==1) //doppio uguale per confrontare

    { //implementa la matrice di passo intero 10,6,5,9

    PORTB=10;

    DelayMs(200);

    PORTB=6;

    DelayMs(200);

    PORTB=5;

    DelayMs(200);

    PORTB=9;

    DelayMs(200);

    }

}

void Full_ACW(){

    while(ruotaACW==1) //doppio uguale per confrontare

        { //implementa la matrice di passo intero 9,5,6,10 inversa

        PORTB=9;

        DelayMs(200);

        PORTB=5;

        DelayMs(200);

        PORTB=6;

        DelayMs(200);

        PORTB=10;

        DelayMs(200);

        }

}





void main(void){
    settings();
        while(1){

            if (CW==1){

                DelayMs(100); //antirimbalzo

                    if (CW==1){
                        Full_CW();
                    }
            }

            if (ACW==1){

                DelayMs(100); //antirimbalzo

                    if (CW==1){
                        Full_ACW();
                    }
            }
    }

}

//fine del modulo principale che contiene la funzione main

 

Le impostazioni dei registri tristato e l'inizializzazione delle variabili di I/O, come anche le definizioni dei nuovi nomi per le medesime sono implementate in un modulo esterno di programma. il file sarà di tipo header e sarà salvato con il nome setting16F877.h

All'interno di questo file di intestazione implementiamo la funzione settings() che fissa la direzione dei buffer nei pin di I/O per l'intera esecuzione del programma.

 

// ***************inizio del modulo setting16F877.h***************

#define CW RA0 //pulsante 1 che fa ruotare li motore in avanti
#define ACW RA1 //pulsante 2 che fa ruotare li motore all'indietro

//predispongo le definizioni delle singole fasi
//posso anche non usarle ma sono compatibile per modifiche future

#define mot_A RB0 //fase A del motore passo passo
#define mot_B RB0 //fase B del motore passo passo
#define mot_C RB0 //fase C del motore passo passo
#define mot_D RB0 //fase D del motore passo passo
 
void settings(void){
TRISA=0b00011;
TRISB=0b00000000;
TRISC=0;
TRISD=0;
TRISE=0;
}

 

  // fine del modulo setting16F877.h

nell'immagine seguente vediamo l'ambiente di sviluppo MpLab di casa Microchip in cui è eseguita la compilazione in ANSI C del programma.

Come possiamo vedere la compilazione va a buon fine. Nel caso questo non avvenga il problema si risolve sistemando i percorsi in cui trovare le librerie delay.h e delay.c che vanno spostate nella directory include del compilatore. Procediamo elinando i file da progetto e reinserendoli dopo averli riposizionati nella directory appena indicata. Il modulo esterno invece si deve trovare nella stessa cartella del modulo contenente la funzone main(void).

Riassumendo:  

puoi scaricare da questo link tutto il progetto impaccato con l'apposito tasto dell'MpLab, ma alcuni path potrebbero necessitare di essere ritoccati in funzione degli avanzamenti di versione o aggiornamenti del compilatore o del software di sviluppo.

scarica il progetto completo per MpLab

 

NOTA:  Quest'opera (schemi e layout della scheda Micro-GT) è rilasciata ai termini della licenza Creative Commons Attribuzione-Condividi allo stesso modo 3.0 Italia