Chi Sono
Robotica
Statistiche
|
Microcontrollori PIC
Microcontrollori PIC: Copyright © 2008, Calogero Lombardo Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
1 Che cosa sono i microcontrollori?
I microcontrollori sono la forma più diffusa e più invisibile di computer. Sono contenuti nella quasi totalità delle apparecchiature elettroniche (es. telefoni cellulari, fotocamere) ed elettrodomestici. La loro capacità di calcolo è limitata perché di solito eseguono lo stesso programma (firmware) per tutta la durata del loro funzionamento, ma hanno la caratteristica di essere progettati per ottenere la massima autosufficienza funzionale ed ottimizzare il rapporto prezzo-prestazioni per una specifica applicazione, a differenza, ad esempio, dei microprocessori impiegati nei personal computer, adatti per un uso più generale Un microcontrollore è un sistema a microprocessore completo, integrato in un solo chip. Essi comprendono una CPU, un certo quantitativo di memoria RAM e memoria ROM (può essere PROM, EPROM, EEPROM o FlashROM) e una serie d’interfacce di I/O (input/output) standard. Le periferiche integrate sono la vera forza di questi dispositivi. Si possono avere: convertitori ADC, convertitori DAC multicanale, timer/counters, numerose porte esterne bidirezionali bufferizzate, I/O seriali (USART, I²C, SPI, CAN, USB) comparatori, PWM
2 Microcontrollori PIC
PIC è una famiglia di circuiti integrati a semiconduttore con funzioni di microcontrollore prodotta da Microchip Technology. Tralasciamo la sua storia (30 anni) e iniziamo a descriverne le caratteristiche. Le serie inferiori PIC10, PIC12, sono microcontrollori dalle funzionalità elementari, con 8 pin o meno. La serie PIC16 è sicuramente la più utilizzata in campo amatoriale e didattico, ed offre caratteristiche interessanti. Le serie superiori (PIC18, PIC24) risultano diffuse in ambito industriale ed offrono prestazioni decisamente superiori alle esigenze dell'elettronica amatoriale. Nella serie 18 esistono comunque alcuni device di possibile interesse hobbistico, perfettamente pin compatibili con le corrispondenti versioni PIC16 top di gamma. L'architettura è di tipo Harvard a bus separati; i bus dati e controllo sono a 8 bit. Esistono anche versioni a 16 bit, i dsPic, ma ci limiteremo a parlare dei PIC16 e PIC18 a 8bit ed in particolare concentrando la nostra attenzione sui modelli con memoria ROM di tipo flash, perché questi possono essere programmati tantissime volte in breve tempo. Queste versioni hanno una F nella sigla (es.PIC18F452). La memoria dati (RAM) e quella di programma (ROM) sono fisicamente e logicamente separate, secondo i dettami dell'architettura Harvard. La memoria programma ha la larghezza della parola che varia da 12 bit (ad esempio, nel PIC16C54) a 14 bit (ad esempio, nel PIC16F628) a 16 bit (ad esempio, nel PIC18F4520) Il set d’istruzioni del PIC ne comprende 33 nelle versioni di bassa potenza e fino a 77 in quelli con prestazioni più elevate. L'esecuzione delle istruzioni è scandita da un segnale di clock, vale a dire un'onda quadra a frequenza costante. La quasi totalità delle istruzioni impiega 4 cicli di clock per essere eseguita (tranne le GOTO, CALL, RETLW MOVFF che ne impiegano 8). Anche i PIC dispongono di numerose periferiche integrate. Per poterle utilizzare sono presenti dei registri che servono a configurarle. Si tratta di locazioni di memoria di 1byte in cui ad ogni bit è associato un significato specifico. Ogni registro ha un nome riservato e l'elenco dei registri con la loro funzione è presente dei datasheet.
Link 1) tutorial introduttivo in cui si descrive l’architettura dei PIC http://dev.emcelettronica.com/risorse/picmicro/picmicro-basic/it
3 Sviluppare applicazioni con in PIC
Adesso parliamo di tutto ciò che bisogna sapere per iniziare a sviluppare applicazioni con i PIC. Partiamo dai linguaggi di programmazione, descrivendoli per ordine di difficoltà (questa è da ritenersi una classificazione soggettiva)
3.1 Linguaggi di Programmazione Il migliore, a livello di ottimizzazione della memoria occupata e dell’efficienza della gestione delle periferiche è l’Assembly, ma questo e anche in assoluto il più difficile da apprendere, non foss’altro perché non si hanno a disposizione le strutture dati, di selezione e di controllo di flusso disponibili nei linguaggi di alto livello. Inoltre in assembly, per utilizzare le periferiche integrate, bisogna accedere ai registi che ne regolano il funzionamento, quindi è necessaria una conoscenza approfondita dell’architettura del PIC
Link 2) il corso più famoso (12 anni di vita) sul PIC 16F84 e la sua programmazione in Assembly http://www.tanzilli.com/?id=207 Link 3) la rivisitazione del precedente http://dev.emcelettronica.com/risorse/picmicro/picmicro-cult/it Link 4) altro tutorial sull’assembly con i PIC http://dev.emcelettronica.com/risorse/picmicro/picmicro-advanced/it
Ad un gradino sopra, troviamo il C che pur essendo notevolmente più semplice dell’assembly, mantiene gran parte della potenza di quest’ultimo. In C troviamo due tipi di cross-compilatori: quelli con librerie per l’utilizzo delle periferiche integrate e quelli senza. E’ doveroso far notare che utilizzare le librerie per le periferiche facilità di molto il lavoro del programmatore, ma è ovvio che i firmware più ottimizzati, dove si ha anche completa padronanza del microcontrollore sono quelli nei quali si manipolano direttamente i registri, scrivendo personalmente le routine per l’utilizzo delle periferiche. Fra i più noti compilatori in C senza librerie ci sono quelli della Hi-tech. Questo compilatore può essere usato all’interno dell’ambiente di sviluppo ufficiale di Microchip, MPLab.
Link 5) qui troviamo un ottimo tutorial sulla programmazione in C con il PicC-lite di Hi-tech Link 6) guida all’installazione di MPLab + PicC-lite http://www.robot-home.it/Software/tutorialPIC-C.php Link 7) altro minicorso sulla programmazione in dei PIC http://web.tiscali.it/robofun/
Adesso vediamo i cross-compilatori con le librerie per le periferiche. Il primo è il C18 sviluppato dalla stessa Microchip, dedicato ai PIC18, che per ovvi motivi risulta senza dubbi il migliore per questa serie.
Link 8) qui trovate un’ottima guida (forse l’unica in italiano) ricca d’esempi sul C18 http://www.laurtec.com/index.html
Una altro cross-compilatore C con una vasta libreria è il MikroC di Mikroelettronica. MikroC è una completa IDE ed esiste sia per il PIC16 che PIC18. E’ semplice ed ha una guida integrata ricca d’esempi. L’unica pecca è che non sono disponibili i sorgenti delle librerie.
Link 9) pagina web del MikroC dove trovare la versione demo e la documentazione http://www.mikroe.com/en/compilers/mikroc/pic/
Allo stesso livello di difficoltà del MikroC troviamo il CCS: molto ottimizzato, non ha molte librerie, ma sono opensouce, è più lontano dall’Ansi-C rispetto ai precedenti
Link 10) pagina web del CCS http://www.ccsinfo.com/content.php?page=compilers
Salendo ancora la scala, troviamo una scelta molto ampia di cross-compilatori in linguaggio Basic Notoriamente più semplici del C. Fra i più noti citiamo il MikroBasic, il PicBasicPro e il GCBasic. (quest’ultimo è free). Con questi compilatori, anche se con performance minori, spesso dovute alla stessa sintassi Basic, si riesce in ogni caso a sfruttare tutte le potenzialità dei PIC. E’ il linguaggio più consigliato a chi è agli inizi e non conosce il C o i linguaggi like C.
Link 11) Mikrobasic http://www.mikroe.com/en/compilers/mikrobasic/pic/index.htm http://www.pctuner.net/articoli/progetti_elettronici/542/Tutorial_Mikrobasic_parte_1/1.html http://www.pctuner.net/articoli//703/Tutorial_Mikrobasic_parte_2__controllo_di_LCD/ Link 12) PicBasicPro http://www.microengineeringlabs.com/products/pbp.htm http://backoffice.inware.it/files/prodotti/download/melabs/pbp-man-ita.pdf Link 13) GreatCowBasic (free software) http://www.minisumo.net/index2.php?option=com_content&task=view&id=59&pop=1&page=6&Itemid=1 http://gcbasic.sourceforge.net/
Per dovere di cronaca diciamo che esiste anche un cross-compilatore con sintassi Pascal, il MikroPascal che potrebbe collocarsi come livello di difficoltà tra il C e il Basic.
Link 14) MikroPascal http://www.mikroe.com/en/compilers/mikropascal/pic/
3.2 Il Programmatore Dopo avere creato il proprio programma (firmware), è necessario riversare questo dentro la memoria programma (ROM) del PIC. Abbiamo detto che i PIC la cui sigla reca la F, hanno una ROM di tipo flash, quindi scrivibile e cancellabile elettricamente. Questa operazione è fatta mediante un dispositivo chiamato programmatore. Questo dispositivo si connette al computer sul quale è installato un particolare software che, dialogando con il programmatore, permette di scaricare il firmware sul microcontrollore (file .hex generato dal compilatore). I programmatori hanno uno zoccolo su cui posizionare il PIC da programmare. C’è anche la possibilità di programmare il PIC lasciandolo a bordo della scheda sulla quale dovrà lavorare (programmazione ICSP). In questo caso tale scheda dovrà essere dotata di un connettore per il collegamento al programmatore. Esistono programmatori commerciali oppure, in rete, si trovano diversi progetti di programmatori autocostruiti, ma spesso molti non funzionano a dovere, quindi meglio affidarsi a progetti collaudati.
Link 15) il Fiser’s programmer, uno dei più famosi progetti di programmatore, compatibile con molti modelli di PIC. L’unico inconveniente è che sfrutta la porta parallela. Link 16) il PicKitII di Microchip (commerciale). Estremamente comodo perchè si collega all’USB http://www.robot-italy.com/product_info.php/cPath/1_26_57/products_id/710
3.3 Evaluetion Board Per cominciare a fare i primi esperimenti è opportuno dotarsi di un’evaluetion board. Questa è una scheda che monta l’elettronica indispensabile per far funzionare il PIC e per poterlo interfacciare con l’esterno. Le più sofisticate hanno il connettore per la porta seriale, monitor LCD e altro ancora (vedi le evaluetion board di Mikroelettronica, della CCS e della stessa Microchip). Anche in questo caso esistono board autocostruite o commerciali. In ogni caso conviene orientarsi verso dimensioni non elevate, sia perché solitamente le board piccole sono più semplici, quindi più economiche, sia perché possono essere sfruttare a bordo di un robot.
Link 17) progetti di board modulari per diverse applicazioni Link 18) la MarkIII: è una vera e propria motherboard (commerciale). Esiste anche un omonimo robot da minisumo. http://www.junun.org/MarkIII/Manual/index.jsp http://www.robot-italy.com/product_info.php/cPath/1_26_56/products_id/442 Link 19) la Roboboard: progetto di una board per PIC 18F. E’ possibile anche acquistarla. http://wiki.tuttoelettronica.org/index.php?title=RoboBoard_V3 http://www.katodo.com/ (sito dove acquistare la Roboboard)
3.4 Il Bootloader Esiste un modo per scrivere il firmware nella ROM del PIC senza l’utilizzo del programmatore, o meglio questo serve, ma solo la prima volta. Questa tecnica fa uso di un bootloader che non è altro che un programma, anch’esso da scrivere sulla ROM; ecco perché serve almeno una volta il programmatore. E’ ovvio che il bootloader occuperà a sua volta memoria. Il bootloader entra in funzione non appena alimentiamo il PIC, mettendosi in ascolto (solitamente per 5 secondi) su uno degli I/O seriali in attesa di un flusso di dati che nel nostro caso sarà il file .hex del nostro firmware. Esistono bootloader per l’UART, il CAN e l’USB; ovviamente il PIC deve possedere tale I/O. In commercio esistono evaluetion board con PIC già programmati con bootloader. Solitamente è necessario munirsi di bootloader compatibile con il compilatore impiegato. Per scaricare il firmware da un PC, basta collegarsi alla board del PIC, mediante cavo seriale (se si tratta ad esempio di un bootloader su UART) e mediante un software detto loader uplodare il file .hex.
Bibliografia
Wikipedia, l’enciclopedia libera in rete
GNU Free Documentation License
La licenza GNU FDL, disponibile sul sito http://www.gnu.org/ anche in versione italiana, è parte integrante di questo documento e ne contiene i termini d’utilizzo.
Tutti i nomi di ditte e prodotti citati sono proprietà dei legittimi proprietari. |