Corso introduttivo sui microcontrollori A. S. 2007 – 2008 Microprocessori - Microcontrollori Nicola Amoroso [email protected] NA – L1 http://www.mrscuole.net/anxapic/ 1 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Cosa e’ un microcontrollore ? > Un piccolo computer, contenente al suo interno tutti i circuiti necessari al suo funzionamento, senza necessita` di circuiti integrati esterni. > Il microprocessore vero e proprio (core) e` il cuore del sistema e si occupa di eseguire le operazioni matematiche (ALU) , di spostare i dati fra le varie parti della memoria, di incrementare i numerosi contatori necessari al funzionamento. > Tutti i dispositivi, interni, controllati dal microprocessore prendono il nome di periferiche NA – L1 http://www.mrscuole.net/anxapic/ 2 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Cosa e’ un microcontrollore ? • Un microcontrollore (µC ) è un dispositivo di elaborazione dati simile al microprocessore (µP ) Sul µP sono basati tutti i calcolatori dai personal computer ai mainframe • Sul µC sono basati dispositivi per scopi industriali o per applicazioni particolari (autronica, domotica, telefoni cellulari, lettori DVD, video-camere, etc… ) NA – L1 http://www.mrscuole.net/anxapic/ 3 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Cosa e’ un microcontrollore ? Il microcontrollore contiene gli stessi elementi principali di un sistema programmabile: ° Processore ° Memoria ° Elementi di Input/output In un PC, questi sottosistemi, sono elementi (chips) separati collegati tra loro mediante una “connessione a bus”[1], su un unico circuito stampato; il sistema completo è comunque gestito da una unità centrale che prende il nome di CPU [microprocessore (µP)]. Ogni sistema può essere configurato per applicazioni “particolari” con CPU, memorie e gestione di I/O opportune. [1] “Connessione a bus” => Opportune linee in parallelo che collegano tra loro sistemi, device, etc… . Il numero delle linee dipende dai collegamenti da effettuare, comunque in genere si utilizzano bus a 4, 8, 16, 32, 64, … linee. NA – L1 http://www.mrscuole.net/anxapic/ 4 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Cosa e’ un microcontrollore ? In un microcontrollore (µC), tutti gli elementi indicati, sono presenti su un unico chip! Il µC gestisce tutte le condizioni di I/O, i calcoli ed eventuali controlli Sia i µC che i µP sono sistemi programmabili cioè non possono operare senza opportuno codice (programma) che è una lista di istruzioni, mantenute in memoria opportuna che viene eseguita in modo sequenziale in modo tale da soddisfare al processo richiesto. Per questi sistemi programmabili bisogna considerare oltre allo sviluppo hardware (Interfacciamento), anche un opportuno sviluppo software in funzione del processo da eseguire. NA – L1 http://www.mrscuole.net/anxapic/ 5 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Memorie Fondamentalmente vi sono due tipi di memoria: ° Volatili ° Non volatili Le memorie “volatili” [RAM Random Access Memory] perdono i dati immagazzinati quando non sono più alimentate. Le memorie “non volatili” [ROM Read Only Memory] mantengono i dati immagazzinati anche in assenza di alimentazione. In un PC una piccola ROM (2-4 Mb) è usata per memorizzare le condizioni Hw e Sw per lo start del sistema; esso contiene il programma BIOS (Basic Input Output System); il sitema operativo della macchine (es. MS WindowsTM) e le applicazioni del sistema (es. MS Word) vengono invece caricate in RAM prima di essere eseguite e questo richiede abbastanza tempo. NA – L1 http://www.mrscuole.net/anxapic/ 6 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Memorie E’ facile chiedersi: “perché il SO non viene memorizzato in una ROM”? Diventa così facilmente e velocemente accessibile! La RAM è veloce, sicura, compatta e semplice da gestire; il SO può essere cambiato o aggiornato senza toccare l’hw del sistema, inoltre gli attuali SO sono molto grandi e composti da più sw collegati tra loro, ogni sw viene caricato in RAM nel momento in cui serve mentre le altre applicazioni sono caricati su memorie statiche molto capienti (es. HD, etc…) e caricati in RAM solo quando servono. Memorie ROM di tipo FLASH (Elettricamente riscrivibili) sono usate invece in sistemi mobili di capacità limitata (es MP3 players, memory card, USB pen, etc…) questo perché questi sistemi utilizzano sw di gestione facilmente aggiornabili, infatti essi contengono microcontrollori la cui program-memory può essere “riprogrammata”. NA – L1 http://www.mrscuole.net/anxapic/ 7 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Input e Output Un sistema digitale programmabile non è molto utile senza la possibilità di poter scambiare (Leggere/Scrivere – Read/Write) dati (Segnali elettrici) con l’esterno! Le porte sono insiemi di Pin (Collegamenti mediante piedini), basati su registri e insiemi di control-registers (registri di controllo) che permettono lo scambio In/Out di “dati” in modo “controllato” mediante un opportuno “protocollo di comunicazione”. Vi sono due tipi fondamentali di porte (e quindi modalità di comunicazione): ° Parallela NA – L1 ° Seriale http://www.mrscuole.net/anxapic/ 8 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Input e Output In una porta parallela i dati (digitali) vengono trasferiti contemporaneamente su più collegamenti paralleli tra loro (es. 8 bits, 16 bits, 32 bits, 64 bits, etc…) In una porta seriale i dati (digitali) vengono trasferiti 1 bit per volta su una singola linea. Potenzialmente la porta parallela è più veloce ma necessita di un numero maggiore di linee di collegamento e quindi vi sono maggiori possibilità di errore nel processo di scambio; l’hw e il sw di gestione è invece più semplice rispetto alla trasmissione seriale dove, il pacchetto dati deve essere organizzato in gruppi prima di procedere allo scambio (possibilità di gestione a pacchetti e in rete [Network data]). NA – L1 http://www.mrscuole.net/anxapic/ 9 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Input e Output Ad esempio le stampanti di vecchia generazione colloquiavano con l’unità centrale del PC mediante la porta parallela (centronics), che inviava alla stampante 1 byte (8 bit) per volta mediante un connettore multipin (25-36 pin. Le nuove stampanti colloquiano con la unità centrale mediante un collegamento seriale il quale permette lo scambio di 1 bit per volta. Il nuovo standard USB (Universal Serial Bus) può operare ad una velocità massima di 480 megabits/sec e seppur più lenta del collegamento parallelo è, sicuramente, molto più veloce rispetto ai tempi operativi di una stampante. Il collegamento USB avviene con un semplice e robusto connettore a 4 capi che fornisce anche, se richiesto dalla periferica, la tensione di alimentazione necessaria al suo funzionamento (N.B. => Solo per periferiche che non assorbono molto). Lo stadard USB è comunque complesso per la gestione sw e richiede molta accuratezza nella creazione di driver opportuni. NA – L1 http://www.mrscuole.net/anxapic/ 10 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Input e Output Una delle funzioni principali delle PORTE (registri) è quella di separare il data-bus della CPU con il bus esterno dell’hw considerato; queste porte hanno anche la funzione di immagazzinare temporaneamente i dati da scambiare (Buffer di memoria) che successivamente possono essere trasferiti e processati nel modo opportuno. I registri (porte) di tipo “seriale” caricano i dati in parallelo dal bus interno della CPU e poi inviano 1 bit per volta all’esterno operando come uno shift-register. Se viene adoperato un protocollo di trasmissione asincrono, come ad esempio un RS232 (COM PORT nei vecchi PC), oltre ai bit da scambiare, il protocollo può contenere anche bit di START, STOP e ERROR CHECK. In definitiva le vecchie trasmissioni seriali di tipo asincrono, potevano avere pacchetti di 11 bit. Il protocollo USART (Universal Syncronus/Asyncronus Receive/Transmit) sarà sicuramente approfondito in corsi opportuni in seguito. NA – L1 http://www.mrscuole.net/anxapic/ 11 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il µP contiene : > Una ALU (Arithmetic Logic Unit ) dove avvengono i calcoli > diversi registri per la memorizzazione temporanea dei dati e la gestione delle istruzioni > Un bus interno ad alta velocità > circuiti di controllo e di temporizzazione per coordinare tutte le attività > tre bus ( Data Bus , Address Bus , Control Bus ) per comunicare col mondo esterno ( dispositivi di memoria , dispositivi di ingresso-uscita) NA – L1 http://www.mrscuole.net/anxapic/ 12 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il µP ha bisogno per funzionare: • Di un’ampia area di memoria esterna sia di lavoro (RAM) che di massa (hard disk ecc ) , dato che tratta grandi quantità di dati • Di interfacce verso dispositivi esterni di Input (tastiera, mouse,scanner, hard disk, floppy , microfoni ….) • Di interfacce verso dispositivi esterni di Output ( monitor, stampante, altoparlanti, hard disk, floppy,modem ……) • Di potenza di alimentazione anche di decine di watt • ……….. NA – L1 http://www.mrscuole.net/anxapic/ 13 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il µC invece possiede su un unico chip: • Una CPU RISC • Una piccola memoria di programma (EPROM-EEPROM) • Una piccola memoria di lavoro RAM ( alcuni KB) • Porte di ingresso/uscita • Contatori, timer, convertitore A/D • Uart, Pwm, interfacce di comunicazione di vari tipi Contiene cioè, sia quello che possiede un µP (anche se in quantità molto ridotta), sia parti che il µP non possiede. Ha ingombro minimo e richiede poca potenza di alimentazione NA – L1 http://www.mrscuole.net/anxapic/ 14 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ RISC significa : Reduced Instruction Set Computing Elaborazione con insieme di istruzioni ridotto Le istruzioni perciò : • Sono poche decine • Sono eseguite molto velocemente • non serve un clock molto elevato per un efficiente funzionamento ( dai 4-8 MHz per i tipi più semplici, fino a 33 - 50 MHz per i tipi più evoluti) NA – L1 http://www.mrscuole.net/anxapic/ 15 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Corso introduttivo sui microcontrollori A. S. 2007 – 2008 Microcontrollori Microchip PIC 8 bit Nicola Amoroso [email protected] NA – L2 http://www.mrscuole.net/anxapic/ 1 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Microcontrollori Microchip PIC 8 bit PIC: Peripheral Interface Control (~1975) Famiglia 12 (12bit) PIC12CXXX — 400ns Instruction Execution, 33/35 Instructions, 8Pin Package, 4MHz Internal Oscillator Famiglia 16 (14bit) PIC16C5X — 200ns Instruction Execution, 33 Instructions PIC16CXXX — 4-12 Interrupts, 200ns Instruction Execution, 35 Instructions Famiglia 17 (16bit) PIC17CXXX — 120ns Instruction Execution Including Multiply, 58 Instructions Famiglia 18 (16bit) PIC18CXXX — 10 MIPS, 77 Instructions, C-compiler Efficient Instruction Set, Software Stack Capability, Table Operation, 4X PLL Clock, Switchable Oscillator Sources, 25mA Source/Sink per I/O NA – L2 http://www.mrscuole.net/anxapic/ 2 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il microcontrollore che utilizzeremo è il PIC16F877 della Microchip Technology PIC = Peripheral Interface Controller (Controllore di periferiche programmabile) La sua caratteristica più importante sta nella sigla F : Il programma risiede in una EEPROM FLASH (Electrically Erasable Programmable Read only Memory) è modificabile immediatamente anche senza togliere l’integrato dal circuito (modalità : in-circuit programming) NA – L2 http://www.mrscuole.net/anxapic/ 3 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il nostro µC • implementa su un unico chip tutte le risorse necessarie per il calcolo, per l’acquisizione e memorizzazione dei dati e per l’interfacciamento e la comunicazione con il mondo esterno. NA – L2 http://www.mrscuole.net/anxapic/ 4 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Le periferiche dei microcontrollori • • • • • La ROM (Read Only Memory) è solitamente utilizzata per la memorizzazione delle istruzioni del programma (può essere permanente o non permanente). Nella RAM (Random Access Memory) vengono custoditi i dati prodotti e impiegati durante l’esecuzione del programma. La EEPROM (Electrical Erasable Programmable Read Only Memory) serve per memorizzare i dati che devono essere conservati anche al termine del programma. La CPU (Central Processing Unit) è l’unità che, comunicando con le varie periferiche interne attraverso i BUS, si fa carico di eseguire il programma ed elaborare i dati. Per esempio, l’esecuzione di un programma consiste nella lettura sequenziale da parte della CPU delle istruzioni memorizzate nella memoria di programma. I TIMER consentono al sistema di misurare e sincronizzare sia eventi interni che esterni. Sono impiegati anche per la generazione di segnali esterni di controllo. NA – L2 http://www.mrscuole.net/anxapic/ 5 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Le periferiche dei microcontrollori • Le I/O PORTS sono le porte di ingresso ed uscita solitamente utilizzate per acquisire dati o per pilotare componenti. Usualmente, una porta I/O è costituita da 8 pin (anche meno qualche volta), programmabili sia come ingressi che uscite. • Le INTERFACCE SERIALI sono utilizzate per scambiare dati con il mondo esterno. Sono frequenti periferiche di comunicazione sia sincrone (SPI, I2C) che asincrone (USART). Le prime sono utilizzate solitamente per la comunicazione con dispositivi esterni (memorie, sensori), le seconde per comunicare con PC o altri µC (comunicazione seriale RS232 o RS422/485). NA – L2 http://www.mrscuole.net/anxapic/ 6 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Le periferiche dei microcontrollori • L’ADC (convertitore Analogico/digitale) converte un segnale esterno analogico (prelevato tipicamente in tensione) in una sua rappresentazione digitale. I microcontrollori che implementano tali dispositivi sono particolarmente adatti per essere impiegati in applicazioni di controllo. • Il WATCHDOG TIMER, se attivato, genera un reset ad un intervallo prestabilito in fase di programmazione. Questo riavvio ciclico è utile per far uscire il microcontrollore da eventuali situazioni di stallo. NA – L2 http://www.mrscuole.net/anxapic/ 7 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Le periferiche dei microcontrollori • Il PULSE WIDTH MODULATION SIGNAL GENERATOR è un dispositivo utilizzato per la generazione di segnali modulati in ampiezza d’impulso. È anche impiegato nella conversione DA per la generazione di segnali analogici facendo transitare il segnale in un filtro passa basso. Se la costante di tempo del filtro è scelta opportunamente, è possibile generare un segnale proporzionale in tensione al duty-cycle. NA – L2 http://www.mrscuole.net/anxapic/ 8 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Le periferiche dei microcontrollori Funzioni della CPU Funzioni principali di una CPU sono: • • • Trasferimento Dati Controllo di Flusso (operazioni di salto, jump) Elaborazioni Aritmetiche e Logiche (addizioni e sottrazioni,operazioni logiche, incrementi, decrementi, shift, rotazioni, ecc…) Ogni CPU ha usualmente un array register con: • • • • un Registro Accumulatore (W ) il Program Counter (PCL) l’Instruction Register (IR) lo Stack Pointer (SP) NA – L2 http://www.mrscuole.net/anxapic/ 9 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ NA – L2 http://www.mrscuole.net/anxapic/ 10 Il µC che utilizzeremo: Pic16F877 <> Clock 4 – 20 MHz E’ commercializzato in differenti Packages, come il convenzionale 40-pin DIP (Dual In Line Package); questo formato è molto usato nelle fasi di sviluppo e prototipi. Viene riportata di seguito la disposizione dei singoli pin NA – L2 http://www.mrscuole.net/anxapic/ 11 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Microchip Pic16F877 Molti dei pin sono di I/O, raggruppati in 5 PORT: A[6 pin – RA0..RA5], B[8 pin – RB0..RB7], C[8 pin – RC0..RC7], D[8 pin – RD0..RD7], E[3 pin – RE0..RE2] per complessivi 33 pin di I/O. Molti di questi pin possono operare come I/O funzionante in più modalità, il modo di funzionamento dei singoli pin viene impostata “settando” opportunamente dei registri di controllo del sistema. Nella piedinatura riportata si nota come diversi pin presentano più funzioni di I/O (Es. RA0 – PORTA bit0 può funzionare come I/O digitale oppure come ingresso analogico AN0). In particolare notiamo che sia i pin di PORTA che quelli di PORTE possono funzionare come ingressi digitali I/O oppure come ingressi analogici, per default in fase di start-up o reset questi pin sono impostati come ingressi analogici, se richiesto come I/O digitale bisogna agire sui rispettivi registri di controllo; vedremo in seguito come operare. NA – L2 http://www.mrscuole.net/anxapic/ 12 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Microchip Pic16F877 PORTB viene anche impiegata per programmare il controllore, cioè caricare il codice di programma nella FLASH ROM (RB6-RB7 in-circuit programming), inoltre RB0, RB4..RB7 possono generare interrupt. PORTC in genere permette l’uso di Timers e possibilità di comunicazione seriale (serial ports), PORTD in genere si utilizza come normale porta di comunicazione. Il chip viene alimentato mediante una doppia coppia di pin (Vdd=+5V nominali, Vss=0V). Spesso i chip funzionano, nei casi previsti, anche con alimentazione compresa tra 2,2V e 3.1V in casi particolari in cui si sfrutta la alimentazione di pile. Per il funzionamento occorre un circuito oscillante esterno collegato tra i piedini CLKIN e CLKOUT; la frequenza di oscillazione può essere compresa tra qualche decina di KHz (oscillatore R-C) fino a frequenze di 20 MHz (oscillatore al quarzo). MCLR è il Master-Clear Reset, quando viene portato a livello logico basso permette il reset della MCU, in condizioni normali deve stare a livello alto (+5V). NA – L2 http://www.mrscuole.net/anxapic/ 13 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Pic16F877 Block Diagram Un semplice Diagramma a Blocchi che descrive il funzionamento del controllore nei suoi blocchi principali; si evidenziano: 1. Flash ROM per il program memory: 8192 locazioni a 14 bit 2. RAM file registers 512 locazioni a 8 bit che comprende anche alcuni speciali registri tipo PORTA, PORTB, etc... . Questa zona di RAM e suddivisa in 4 banchi di 128 byte ognuna (N.B. Alcuni registri sono ripetuti tra i vari banchi; in totale avremo solo 368 locazioni utili) 3. Un registro particolare (W) che prende il nome di accumulatore usato sempre con la ALU per il processo dei dati 4. Varie periferiche per il controllo I/O dei dati NA – L2 http://www.mrscuole.net/anxapic/ 14 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Architettura PIC 16F877 NA – L2 http://www.mrscuole.net/anxapic/ 15 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Memorie interne al 16F877 • • • FLASH Memory programmi: contiene il “ programma’’ da eseguire, ha la caratteristica di mantenere la programmazione anche quando l’alimentazione al micro viene spenta, e di poter essere cancellata e riscritta con uno speciale apparecchio chiamato programmatore. e` Questa memoria profonda 8Kbytes (8192 parole x 14 bit) => il programma da eseguire al piu` puo` essere composto da una sequenza di 8192 operazioni. Altri tipi di microprocessore hanno invece una memoria programma di tipo PROM: questa puo` essere scritta soltanto una volta. RAM dati: il programma, in esecuzione, non puo` scrivere sulla FLASH programmi ( ~ vero …) => l’area di memoria RAM dati e` scrivibile in esecuzione e contiene le variabili. Il contenuto di questa memoria viene perso quando si spegne il circuito. Esiste un’altra memoria FLASH per i dati (EEPROM). NA – L2 http://www.mrscuole.net/anxapic/ 16 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Memorie interne al 16F877 Ricapitolando: 1) FLASH programmi: 8192 parole 2) RAM per le variabili: 368 bytes 3) FLASH dati: 256 bytes (e` in pratica un piccolo hard disk, noi non la useremo per ora) Le singole locazioni della RAM vengono chiamate registri. I registri della RAM possono essere di due tipi : 1) General Purpose: uso generale, tipo per contenere le variabili del nostro programma. 2) Special Function: scrivendo in queste locazioni si istruisce il micro ad eseguire determinate operazioni. Per esempio se scrivo il dato 0x4 nel registro 0x1F (mnemonica ADCON0) => l’ADC interno al microprocessore comincia la conversione NA – L2 http://www.mrscuole.net/anxapic/ 17 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ NA – L2 http://www.mrscuole.net/anxapic/ 18 I registri mappati in memoria I registri sono celle, locazioni, di memoria dove il µC legge e scrive valori fondamentali per il funzionamento. Sono celle che hanno un indirizzo esadecimale ( h ) ; si dice che sono mappati in memoria. Ad esempio scrivendo/leggendo nelle locazioni 05h e 06h si scrive/legge nelle porte A e B. NA – L2 http://www.mrscuole.net/anxapic/ 19 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ I registri mappati in memoria Se si programma il PIC in linguaggio macchina (Assembler) occorre precisare molti dettagli per i registri, con istruzioni da mettere all’inizio del programma. Se si usa un linguaggio ad alto livello (Basic, C, …), le istruzioni da aggiungere sono minori. Tuttavia la mappa di memoria ( cioè l’allocazione dei registri) deve sempre essere conosciuta. NA – L2 http://www.mrscuole.net/anxapic/ 20 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La gestione delle porte di IN/OUT E’ fondamentale saper programmare le porte di ingresso/uscita. Es. => Ognuno dei pin della porta A (05h) può essere impostato in modo indipendente come ingresso o come uscita in base al contenuto del registro di controllo TRISA (85h): impostando a 1 il bit di TRISA, il corrispondente pin di PORTA è un ingresso ( se è 0 diventa uscita). Lo stesso vale per la porta B (06h) gestita da TRISB (86h). Esempio : con TRISB = 00111111 , RB6 e RB7 sono linee di uscita ( possono comandare un carico), e le altre linee sono ingressi ( possono accettare [Read/Leggere] un segnale esterno). NA – L2 http://www.mrscuole.net/anxapic/ 21 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Corso introduttivo sui microcontrollori A. S. 2007 – 2008 La programmazione dei PIC Nicola Amoroso [email protected] NA – L3 http://www.mrscuole.net/anxapic/ 1 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il softw are per il PIC • Come per qualsiasi sistema a microprocessore, anche per il PIC è necessario preparare un programma per farlo funzionare. • Un programma è costituito da una sequenza di instruzioni, ognuna delle quali identifica univocamente una funzione che il PIC deve svolgere. Ogni istruzione è rappresentata da un codice operativo (in inglese operation code o più brevemente opcode) composto da 14 bit ed è memorizzata in una locazione di memoria dell'area programma. Tale memoria nel PIC16F877 è di tipo EEPROM e dispone di 8192 locazioni ognuna delle quali è in grado di contenere una sola istruzione oppure una coppia istruzione/dato. • Questi codici, completamente privi di senso per un essere umano, sono gli unici che il PIC è in grado di capire. Per fortuna esistono alcuni strumenti che consentono di facilitare il compito al programmatore rendendo le istruzioni più comprensibili. NA – L3 http://www.mrscuole.net/anxapic/ 2 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il software per il PIC – 1° modo Il programma per il PIC si può scrivere in linguaggio assembly o assembler , usando direttamente le 35 istruzioni riconosciute dal microcontrollore. Il “codice” si scrive come un file di testo . Esso viene convertito in codice binario da un programma chiamato Assemblatore. Il file creato contiene codici esadecimali e ha estensione . HEX Per trasferire poi il file HEX nella memoria di programma del PIC occorre un dispositivo chiamato Programmatore Si usa un Personal Computer : • per scrivere il testo del programma, con un editor di testi ( non usando Word ! ) • per convertirlo in codice eseguibile, usando l’Assemblatore • per scriverlo nel PIC, usando un Programmatore. NA – L3 http://www.mrscuole.net/anxapic/ 3 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il software per il PIC – 1° modo La casa costruttrice Microchip fornisce un pacchetto integrato chiamato MPLAB [Download gratuito => http://www.microchip.com]. Esso comprende : MPLAB Editor : editor di testo per scrivere il testo del programma MPASM : il compilatore che traduce il testo in codice eseguibile (usando il codice esadecimale) Il compilatore MPASM è liberamente usabile. Si scarica dal sito della Microchip e si può usare indipendentemente dall’editor. Lavorando in Assembler, la parte più difficile è il debug , cioè l’eliminazione degli errori di programmazione. Esistono software di simulazione, a pagamento in genere, che consentono di controllare il funzionamento del programma NA – L3 http://www.mrscuole.net/anxapic/ 4 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ .asm Contiene il codice sorgente in formato assembler. .inc File header, intestazioni e defiizioni hardware per il micro .lst Contiene l’intero codice assembler e varie informazioni di compilazione .tre Albero di allocazione della memoria. .err File con errori di compilazione e numeri di linea. .hex File con il codice macchina, per la programmazione del microcontrollore NA – L3 http://www.mrscuole.net/anxapic/ 5 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il software per il PIC – 1° modo Esempio di file ASM … RestoreLoader lfsr 0, buff movlw UPPER Main movwf t1+3 bcf STATUS, C rrcf t1+3, F movlw B'11110000' iorwf t1+3, F movlw HIGH Main movwf t1+2 rrcf t1+2, F movlw LOW Main movwf t1 rrcf t1, F MOVLF 0xEF, t1+1 lfsr 1, t1 MOVLF 0x04, count rest_rep movff POSTINC1, POSTINC0 decf count, F bnz rest_rep movlw 0xFF movwf POSTINC0 movwf POSTINC0 movwf POSTINC0 NA – L3 ; Construct instructions in buff ; Upper byte of address to main ; Clear carry bit ; Rotate through carry ; Second word in goto must start with F. ; High byte of address to main. ; Low byte of address to main ; High byte in first word is EF ; two last nop ; ; ; buff should now contain 8 bytes : http://www.mrscuole.net/anxapic/ 6 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Set istruzioni PIC16F84 - 877 Sintassi Descrizione Microchip Operazione equivalente ADDLW k Add Literal and W ADDWF f,d Add W and f ANDLW k AND Literal with W ANDWF f,d AND W with f BCF f,b Bit Clear f BFS f,b Bit Set f BTFSC f,b Bit Test f, Skip if Clear BTFSS f,b Bit Test f, skip if Set CALL k Subroutine Call CLRF f Clear f CLRW Clear W Register CLRWDT Clear Watchdog Timer W=W+ k d = W + f (dove d può essere W o f) W = W AND k d = W AND f (dove d può essere W o f) f(b) = 0 f(b) = 1 f(b) = 0 ? Si, salta una istruzione f(b) = 1 ? Si, salta una istruzione Chiama la subroutine all'indirizzo k f=0 W= 0 Watchdog timer = 0 NA – L3 http://www.mrscuole.net/anxapic/ 7 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ DECF f,d Decrement f d = f -1 (dove d può essere W o f) DECFSZ f,d Decrement f, Skip if 0 d = f -1 (dove d può essere W o f) se d = 0 salta GOTO k Go to address Salta all'indirizzo k INCF f,d Increment f d = f +1 (dove d può essere W o f) INCFSZ f,d Increment f, Skip if 0 d = f +1 (dove d può essere W o f) se d = 0 salta IORLW k Inclusive OR Literal with W W = W OR k IORWF f,d Inclusive OR W with f d = f OR W (dove d può essere W o f) MOVLW k Move literal to W W=k MOVF f,d Move f d = f (dove d può essere W o f) MOVWF f Move W to f f=W NOP No Operation Nessuna operazione OPTION Load Option Register OPTION = W RETIE Return from Interrupt Ritorna da un interrupt handler RETLW k Return Literal to W Ritorna da una subroutine con W = k RETURN Return from Subroutine Ritorna da una subroutine RLF f,d Rotale Left f through Carry d = f << 1 (dove d può essere W o f) NA – L3 http://www.mrscuole.net/anxapic/ 8 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Set istruzioni PIC16F84 - 877 RLF f,d Rotale Left f through Carry RRF f,d Rotale Right f through Carry SLEEP Go into Standby Mode SUBLW k Subtract W from Literal SUBWF f,d Subtract W from f SWAPF f Swap f TRIS f Load TRIS Register XORLW k Exclusive OR Literal with W XORWF f,d Exclusive OR W with f NA – L3 d = f << 1 (dove d può essere W o f) d = f >> 1 (dove d può essere W o f) Mette in standby il PIC W= k - W d = f - W (dove d può essere W o f) f = Swap dei bit 0123 con 4567 di f TRIS di f = W W = W XOR k d = f XOR W (dove d può essere http://www.mrscuole.net/anxapic/ 9 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il software per il PIC – 2° modo Il programma per il PIC si può scrivere usando un Compilatore ad alto livello , ossia un software che usa istruzioni a livello più elevato , per velocizzare e facilitare la stesura del programma . Il Compilatore può essere • in linguaggio BASIC ( ad esempio il PicBasic) • in linguaggio C • di tipo grafico, ossia che usa simboli grafici al posto delle istruzioni. Ad esempio usa il simbolo di una porta AND al posto dell’istruzione assembler equivalente . Due esempi di compilatori grafici sono il Visual Parsic e il Proton+. I compilatori devono essere acquistati ; i più semplici in Basic o C sono a basso costo o anche freeware. Alcuni compilatori, come il Proton+, offrono delle versioni di prova dette Lite , cioè con funzioni limitate . NA – L3 http://www.mrscuole.net/anxapic/ 10 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il software per il PIC – 2° modo NA – L3 http://www.mrscuole.net/anxapic/ 11 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il sistema di sviluppo CCS PCWH NA – L3 http://www.mrscuole.net/anxapic/ 12 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Programmazione dei PIC Esempio di file HEX :1000000008308A00C92D0000FF00030E8301A10003 :100010000A08A0008A010408A2007708A300780853 :10002000A4007908A5007A08A6007B08A70083131E :1000300083128B1E1D280B1936288C308400801EDD :1000400023288C1A3928220884002308F700240862 :10005000F8002508F9002608FA002708FB00200808 :100060008A00210E8300FF0E7F0E09008A110A12FA :10007000E4288A110A1287280A108A100A118207B6 :1000800020344D34413441345234533420345334C9 :1000900054344134523454345534503420344D3473 .................... :103F10008A1525308316B0000A128A1183120426EE :103F20000A168A1501308316B0000A128A1183120C :103F300004260A168A1583162B08B0000A128A1165 :103F4000831204260A168A1523308316B0000A123B :103F50008A11831204260A168A15AE2F8A150A12B0 :103F6000B12E0A148A140A158207FE2CFE2CFE2C90 :023F7000FE2C25 :02400E00323F3F :00000001FF ;PIC16F876 NA – L3 http://www.mrscuole.net/anxapic/ 13 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Programmazione del PIC La famiglia PIC16F8X , che comprende il 16F84, il 16F877 ecc. , può essere programmata : • separatamente, con un Programmatore • direttamente, mentre si trova già montato nel circuito finale , aggiungendo nello schema del progetto un adatto connettore in più ( programmazione in-circuit) Dato che il PIC ha una memoria Flash di programma, sono possibili veloci variazioni o aggiornamenti del codice programma. NA – L3 http://www.mrscuole.net/anxapic/ 14 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Programmazione del PIC Dopo aver scritto il programma , cioè il codice sorgente, lo si compila: viene creato un file oggetto con estensione .HEX, il quale deve essere caricato nella memoria di programma del PIC. Per caricare il file .HEX nella memoria programma del PIC occorre: • Un personal computer • Un programmatore • Il software di gestione del programmatore NA – L3 http://www.mrscuole.net/anxapic/ 15 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il primo esercizio => Blinking Led Led lampeggiante che si accende e si spegne ogni mezzo secondo Punti fongamentali per: Analisi, progettazione e stesura del software •Analisi e stesura per punti cronologici del problema •Flow – Charts •Scrittura del codice NA – L3 http://www.mrscuole.net/anxapic/ 16 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi della soubroutine di ritardo di 500 ms Il concetto è molto semplice: il microcontrollore deve aspettare 500 ms “senza compiere alcuna operazione attiva”. Ad esempio se il controllore 1. Decrementa il contenuto di un registro (1 µs) 2. Torna a 1. se il contenuto del registro è <> 0 [Confronto] (2 µs) In totale avremo un tempo di esecuzione pari a 3 µs. Se ripetiamo questa operazione per 167.000 volte avremo un tempo di esecuzione pari a 501.000 µs cioè circa 500 ms Il nostro controllore possiede registri ad 8 bit allora possiamo sfruttare la seguente logica sfruttando 2 registri ad 8 bit e ricordando che i registri sono ciclici cioè 00 - 1= FF 1. Riserviamo due registri (delayL e delayH); set delayL 0 e delayH 0 2. Decrement delayL 3. se delayL ≠ 0 jump 2. else 4. 4. questa operazione viene ripetuta per FF 5. (256) volte cioè per 6. 4. Decrement delayH 7. se delayH ≠ 0 jump 2. else 6. 8. questa operazione viene ripetuta per FF 9. (256) volte cioè per 1 µs 2 µs 256 x 3 = 768 µs 1 µs 2 µs 256 x 3 = 768 µs Considerando che i due cicli sono “annidati” avremo che i due registri tornano ambedue a zero dopo un tempo pari a 768 x 768 = 589. 824 µs cioè quasi 500 ms. Fine Routine Return NA – L3 http://www.mrscuole.net/anxapic/ 17 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi della soubroutine di ritardo di 500 ms -> Flow Chart Il concetto è molto semplice: il microcontrollore deve aspettare 500 ms “senza compiere alcuna operazione attiva”. Ad esempio se il controllore • Decrementa il contenuto di un registro (1 µs) • Torna a 1. se il contenuto del registro è <> 0 [Confronto] (2 µs) In totale avremo un tempo di esecuzione pari a 3 µs. Se ripetiamo questa operazione per 167.000 volte avremo un tempo di esecuzione pari a 501.000 µs cioè circa 500 ms Il nostro controllore possiede registri ad 8 bit allora possiamo sfruttare la seguente logica sfruttando 2 registri ad 8 bit e ricordando che i registri sono ciclici cioè 00 - 1= FF 1. Riserviamo due registri (delayL e delayH); set delayL 0 e delayH 0 2. Decrement delayL 3. se delayL ≠ 0 jump 2. else 4. 2 µs 4. questa operazione viene ripetuta per FF 5. (256) volte cioè per 6. Decrement delayH 7. se delayH ≠ 0 jump 2. else 6. 8. questa operazione viene ripetuta per FF 9. (256) volte cioè per 1 µs 256 x 3 = 768 µs 1 µs 2 µs 256 x 3 = 768 µs Considerando che i due cicli sono “annidati” avremo che i due registri tornano ambedue a zero dopo un tempo pari a 768 x 768 = 589. 824 µs cioè quasi 500 ms. Fine Routine Return NA – L3 http://www.mrscuole.net/anxapic/ 18 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Il Listato completo ;*********************************************************** ;Led blinking -> ON/OFF ogni 500 ms ;Led collegato su RB0 ;N.A. October 2004 ;******************************************** PROCESSOR 16F877A ;Direttive preprocessore RADIX DEC INCLUDE "P16F877A.INC" ERRORLEVEL -302 __CONFIG 3FF1H LED EQU 0 ;Bit 1 della porta relativa Spegni ORG 20h ;Registro general purpose bcf PORTB,LED ;Spengo il led ram RES 2 ;Riservo due registri a 8 bit ORG 00H ;Start reset vector goto loop ;Jump a Loop bcf STATUS,RP1 ;Scelgo il Bank 1 bsf STATUS,RP0 ;RP1=0 RP0=1 Delay500 ;Sobroutine di ritardo movlw 00111111B ;Bit PORTA come input movwf TRISA movlw 11111110B ;Bit1 PORTB in Out movwf TRISB ;gli altri bit in input bcf STATUS,RP0 ;Torno al Bank0 bsf PORTB,LED ;Accendo il Led Loop ; Label call Delay500 ;Delay 500 ms btfsc PORTB,LED ;Spengo il led goto Spegni ;se è acceso bsf PORTB,LED ;Accendo il led goto loop ;Jump a Loop NA – L3 Clrf ram Clrf ram+1 ;Azzero i due registri ;riservati Ciclo_di_ritardo decfsz ram,1 ;Decremento il registro ram goto Ciclo_di_ritardo ;per 256 volte decfsz ram+1,1 ;Decremento il registro ram +1 goto Ciclo_di_ritardo ;per 256 volte return ;Fine soubroutine END ;Indispensabile alla fine del listato http://www.mrscuole.net/anxapic/ 19 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato Direttive Le direttive non sono delle istruzioni mnemoniche che il compilatore traduce nel rispettivo opcode, ma delle semplici indicazioni rivolte al compilatore per determinarne il funzionamento durante la compilazione PROCESSOR 16F877 PROCESSOR è una direttiva del compilatore assembler che consente di definire per quale microprocessore è stato scritto il nostro source. In questo caso informiamo il compilatore che le istruzioni che abbiamo inserito nel nostro source sono relative ad un PIC16F877 RADIX DEC La direttiva RADIX serve ad informare il compilatore che i numeri riportati senza notazione, sono da intendersi come numeri decimali ORG 00H Questa seconda direttiva fa riferimento ad un indirizzo in area programma nella EEPROM. Da questo punto in poi andremo infatti ad inserire le istruzioni mnemoniche che il compilatore dovrà convertire negli opportuni opcode per il PIC. Il primo opcode eseguito dal PIC dopo il reset è quello memorizzato nella locazione 0, da qui il valore 00H inserito nella ORG. NA – L3 http://www.mrscuole.net/anxapic/ 20 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato Direttive La direttiva EQU (parola riservata)è molto importante in quanto ci consente di definire delle costanti simboliche all'interno del nostro codice sorgente. In particolare : LED EQU 3 la parola LED (nome scelto da noi) da questo punto in poi nel sorgente sarà equivalente al valore 3 Nel prossimo esempio incontriamo una (label)etichetta : RAM e una direttiva: RES. La direttiva RES indica al compilatore che intendiamo riservare un certo numero di byte o meglio di file register all'interno dell'area dati: ORG 20h ram RES 2 in questo caso verranno riservate la locazione 20H e 21H . La label RAM, dove RAM è un nome scelto da noi, è un marcatore che nel resto del codice sorgente assumerà il valore dell'indirizzo in cui è stato inserito. ORG 00H Questa seconda direttiva ORG fà riferimento ad un indirizzo in area programma (nella EEPROM) anzichè in area dati. Da questo punto in poi andremo infatti ad inserire le istruzioni mnemoniche che il compilatore dovrà convertire negli opportuni opcode per il PIC. NA – L3 http://www.mrscuole.net/anxapic/ 21 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato OpCode • Il primo opcode eseguito dal PIC dopo il reset è quello memorizzato nella locazione 0, da qui il valore 00H inserito nella ORG. bsf STATUS,RP0 Ecco finalmente la prima istruzione mnemonica completa di parametri. • I PIC hanno una CPU interna di tipo RISC per cui ogni istruzione occupa una sola locazione di memoria, opcode e parametri inclusi. In questo caso l'istruzione mnemonica bsf sta per BIT SET FILE REGISTER ovvero metti a uno (condizione logica alta) uno dei bit contenuti nella locazione di ram specificata. • Il parametro STATUS viene definito nel file P16F877A.INC tramite una direttiva EQU. Il valore assegnato in questo file è 03H e corrisponde ad un file register (ovvero una locazione ram nell'area dati) riservato. • Anche il parametro RP0 viene definito nel file P16F877A.INC con valore 05H e corrisponde al numero del bit che si vuole mettere a uno. Ogni file register è lungo 8 bit e la numerazione di ciascuno parte da 0 (bit meno significativo) fino ad arrivare a 7 (bit più significativo) • Questa istruzione in pratica mette a 1 il quinto bit del file register STATUS, è necessaria per accedere ai file register TRISA e TRISB come vedremo ora. movlw 00011111B • Questa istruzione sta a significare: MOVE LITERAL TO W REGISTER ovvero muovi un valore costante nell'accumulatore. L'accumulatore è un particolare registro utilizzato dalla CPU in tutte quelle situazioni in cui vengono effettuate operazioni tra due valori oppure in operazioni di spostamento tra locazioni di memoria. In pratica è un registro di appoggio utilizzato dalla CPU per memorizzare temporaneamente un byte ogni volta che se ne presenta la necessità. • Il valore costante da memorizzare nell'accumulatore è 00011111B ovvero un valore binario a 8 bit dove il bit più a destra rappresenta il bit 0 o bit meno significativo. NA – L3 http://www.mrscuole.net/anxapic/ 22 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato OpCode Nell'istruzione successiva: movwf TRISA • il valore 00011111 viene memorizzato nel registro TRISA (come per il registro STATUS anche TRISA è definito tramite una direttiva EQU) la cui funzione è quella di definire il funzionamento di ogni linea di I/O della porta A. In particolare ogni bit ad uno del registro TRISA determina un ingresso sulla rispettiva linea della porta A mentre ogni 0 determina un'uscita. Nella seguente tabella viene riportata la configurazione che assumeranno i pin del PIC dopo l'esecuzione di questa istruzione: Come è possibile vedere i bit 6 e 7 non corrispondono a nessuna linea di I/O e quindi il loro valore non ha alcuna influenza. NA – L3 http://www.mrscuole.net/anxapic/ 23 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato OpCode Le due istruzioni successive svolgono le stesse funzioni per la porta B del PIC: movlw 11111110B Movwf TRISB in questo caso la definizione delle linee sarà la seguente: L'istruzione movwf TRISB trasferisce il valore contenuto nell'accumulatore (inizializzato opportunamente con l'istruzione movlw 11111110 B) nel registro TRISB. Il significato di movwf è infatti MOVE W TO FILE REGISTER. Si noti come il valore 0 nel bit 0 del registro TRISB determini la configurazione in uscita della rispettiva linea del PIC. Nella nostra applicazione infatti questa linea viene utilizzata per pilotare il LED da far lampeggiare. NA – L3 http://www.mrscuole.net/anxapic/ 24 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato OpCode bcf STATUS,RP0 • Questa istruzione è simile alla bsf vista in precedenza, con la sola differenza che azzera il bit anzichè metterlo a uno. La sigla un questo caso è BIT CLEAR FILE REGISTER. • Dal punto di vista funzionale questa istruzione è stata inserita per consentire l'accesso ai registri interni del banco 0 anzichè ai registri interni del banco 1 di cui fanno parte TRISA e TRISB. N.B:=> La direttiva assembler “BankSel …..” Viene oggi suggerita dalla microchip per la selezione dei registri dei rispettivi banchi di memoria; in seguito vedremo un uso appropriato di questa direttiva. bsf PORTB,LED • Con questa istruzione viene effettuata la prima operazione che ha qualche riscontro all'esterno del PIC. In particolare viene acceso il led collegato alla linea RB0. PORTB è una costante definita in P16F877A.INC e consente di referenziare il file register corrispondente alle linee di I/O della porta B mentre LED è il numero della linea da mettere a 1. All'inizio del source la costante LED è stata definita pari a 0, quindi la linea interessata sarà RB0. NA – L3 http://www.mrscuole.net/anxapic/ 25 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato OpCode Loop • Questa linea contiene una label ovvero un riferimento simbolico ad un indirizzo di memoria. Il valore della label, come detto in precedenza, viene calcolato in fase di compilazione in base al numero di istruzioni, alle direttive ORG e alle altre istruzione che in qualche modo allocano spazio nella memoria del PIC. In questo caso, se contiamo le istruzioni inserite a partire dall'ultima direttiva ORG possiamo calcolare il valore che verrà assegnato a MainLoop ovvero 09H. • In realtà il valore che assumono le label non ha molta importanza in quanto il loro scopo è proprio quello di evitare di dover conoscere la posizione precisa degli opcode nella memoria del PIC permettendo comunque di referenziare una determinata locazione di memoria. • In questo caso la label Loop viene utilizzata come punto di ingresso di un ciclo (dall'inglese Loop) di accensione e spegnimento del led, ovvero una parte di codice che verrà ripetuta ciclicamente all'infinito. call Delay500 • • Questa istruzione dermina una chiamata (dall'inglese call) ad una subroutine che inizia in corrispondenza della label Delay. Le subroutine sono delle parti di programma specializzare ad effettuare una funzione specifica. Ogni qualvolta è necessaria quella funzione è sufficiente richiamarla con una sola istruzione, anzichè ripetere ogni volta tutte le istruzioni necessarie ad effettuarla. In questo caso la subroutine inserisce un ritardo pari al tempo di accensione e spegnimento del led. NA – L3 http://www.mrscuole.net/anxapic/ 26 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato OpCode btfsc PORTB,LED • Il significato di questa istruzione è BIT TEST FLAG, SKIP IF CLEAR ovvero controlla lo stato di un bit all'interno di un registro e salta l'istruzione successiva se il valore di tale bit è zero. Il bit da controllare corrisponde alla linea di uscita cui è collegato il diodo led, tramite questo test potremo determinare quindi se il led è acceso o spento e quindi agire di conseguenza, ovvero se il led è gia acceso lo spegneremo, se il led è spento lo accenderemo. goto Spegni • Questa istruzione è un salto incondizionato (dall'inglese GO TO, vai a)alla label SetToZero dove troveremo le istruzioni per spegnere il led. Questa istruzione verrà saltata dall'istruzione successiva se il led è gia spento. bsf PORTB,LED goto Loop • Queste due istruzioni semplicemente accendono il led e rimandano il programma all'ingresso del ciclo di lampeggiamento. Spegni bcf PORTB,LED goto Loop • Queste istruzioni semplicemente spengono il led e rimandano il programma all'ingresso del ciclo di lampeggiamento. NA – L3 http://www.mrscuole.net/anxapic/ 27 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato La soubroutine Delay • Come descritto in precedenza questa subroutine inserisce un ritardo di circa un secondo e può essere chiamata più volte nel source tramite l'istruzione call Delay. La soubroutine di ritardo Delay500 clrf ram clrf ram+1 Ciclo_di_ritardo decfsz ram,1 goto Ciclo_di_ritardo decfsz ram+1,1 goto Ciclo_di_ritardo return END Delay e Ciclo_di_ritardo sono due label. Delay identifica l'indirizzo di inizio della subroutine e viene utilizzato per le chiamate dal corpo principale del programma. Ciclo_di_ritardo viene chiamato internamente dalla subrountine e serve come punto di ingresso per il ciclo (dall'inglese loop) di ritardo. In pratica il ritardo viene ottenuto eseguendo migliaia di istruzioni che non fanno nulla ! Questo tipo di ritardo si chiama ritardo software o ritardo a programma. E' il tipo di ritardo più semplice da implementare e può essere utilizzato quando non è richiesto che il PIC esegua altri compiti mentre esegue il ritardo. NA – L3 http://www.mrscuole.net/anxapic/ 28 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato La soubroutine Delay La soubroutine di ritardo • Delay500 clrf ram clrf ram+1 Ciclo_di_ritardo decfsz ram,1 goto Ciclo_di_ritardo decfsz ram+1,1 goto Ciclo_di_ritardo return END • Clrf ram clrf ram +1 CLEAR FILE REGISTER azzerano le due locazioni di ram riservate precedentemente con l'istruzione: ram RES 2 Queste due locazioni sono adiacenti a partire dall'indirizzo referenziato dalla label ram (in pratica 20H e 21H decfsz ram,1 • L'istruzione significa DECREMENT FILE REGISTER, SKIP IF ZERO ovvero decrementa il contenuto di un registro (in questo caso Count e salta l'istruzione successiva se il valore raggiunto è zero). Se il valore raggiunto non è zero viene eseguita l'istruzione successiva: goto Ciclo_di_ritardo • NA – L3 Che rimanda rimanda l'esecuzione all'inizio del ciclo di ritardo. http://www.mrscuole.net/anxapic/ 29 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Analisi del listato La soubroutine Delay La soubroutine di ritardo Delay500 clrf ram clrf ram+1 Ciclo_di_ritardo decfsz ram,1 goto Ciclo_di_ritardo decfsz ram+1,1 goto Ciclo_di_ritardo return END • • Una volta raggiunto lo zero con il contatore ram vengono eseguite le istruzioni: decfsz ram+1,1 goto Ciclo_di_ritardo Che decremetano il registro seguente fino a che anche questo raggiunge lo zero. Il registro ram+1 in particolare verrà decrementato di uno ogni 256 decrementi di ram. Quando anche ram +1 avrà raggiunto lo zero l'istruzione: return • il cui significato è RETURN FROM SUBROUTINE determinerà l'uscita dalla routine di ritardo ed il proseguimento dell'esecuzione dall'istruzione successiva la call Delay. Per finire END è una direttiva (indispensabile) che indica al compilatore la fine del source assembler. NA – L3 http://www.mrscuole.net/anxapic/ 30 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ Corso introduttivo sui microcontrollori A. S. 2007 – 2008 La programmazione dei PIC Assembler: esempi - applicazioni Nicola Amoroso [email protected] NA – L4 http://www.mrscuole.net/anxapic/ 1 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Un programma in assembler è scritto come codice sorgente (un semplice file di testo) su un normale PC, qualsiasi text-editor (es. notepad, blocco note di MS Windows, etc…) può essere usato. Il PIC development system software MPLAB (dowload gratuito su http://www.microchip.com) contiene un editor di testo per la scrittura di codice. Le istruzioni sono semplici e facilmente consultabili sul Data-Sheet del microcontrollore PIC16F877 (Table 13-2); il codice scritto viene salvato con estensione “*.ASM “ (Es. Led_Blinking.asm). Il codice sorgente, in assembler, viene quindi “compilato” (convertito in linguaggio macchina) mediante il compilatore MPASM (Gratuito e compreso in MPLAB) che converte in binario il codice sorgente (visibile con un editor esadecimale – Hex editor, come sequenza di numeri esadecimali). L’estensione di questo file è “*.HEX” (Es. Led_Blanking.hex). Mediante un opportuno programmatore (opportunamente interfacciato al PC), questo “codice binario” viene memorizzato nella FLASH PROGRAM MEMORY del controllore. NA – L4 http://www.mrscuole.net/anxapic/ 2 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC :1000000008308A00C92D0000FF00030E8301A10003 :100010000A08A0008A010408A2007708A300780853 :10002000A4007908A5007A08A6007B08A70083131E :1000300083128B1E1D280B1936288C308400801EDD :1000400023288C1A3928220884002308F700240862 :10005000F8002508F9002608FA002708FB00200808 :100060008A00210E8300FF0E7F0E09008A110A12FA :10007000E4288A110A1287280A108A100A118207B6 :1000800020344D34413441345234533420345334C9 :1000900054344134523454345534503420344D3473 .................... :103F10008A1525308316B0000A128A1183120426EE :103F20000A168A1501308316B0000A128A1183120C ..................... :103F6000B12E0A148A140A158207FE2CFE2CFE2C90 :023F7000FE2C25 :02400E00323F3F :00000001FF ;PIC16F876 NA – L4 Esempio file assembler ************* ;Led blinking -> ON/OFF ogni 500 ms ;Led collegato su RB0 ;N.A. October 2004 ;******************************************** ;************** Esempio di file HEX PROCESSOR 16F877A ;Direttive preprocessore RADIX DEC INCLUDE "P16F877A.INC" ERRORLEVEL -302 __CONFIG 3FF1H LED EQU 0 ;Bit 1 della porta relativa ORG 20h ;Registro general purpose ram RES 2 ;Riservo due registri a 8 bit ORG 00H ;Start reset vector bcf STATUS,RP1 ;Scelgo il Bank 1 bsf STATUS,RP0 ;RP1=0 RP0=1 movlw 00111111B ;Bit PORTA come input movwf TRISA movlw 11111110B ;Bit1 PORTB in Out movwf TRISB ;gli altri bit in input bcf STATUS,RP0 ;Torno al Bank0 bsf PORTB,LED ;Accendo il Led Loop ; Label call Delay ;Delay 500 ms btfsc PORTB,LED ;Spengo il led goto Spegni ;se è acceso bsf PORTB,LED ;Accendo il led goto loop ;Jump a Loop http://www.mrscuole.net/anxapic/ 3 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Dopo aver scritto il programma , cioè il codice sorgente, lo si compila: viene creato un file oggetto con estensione .HEX, il quale deve essere caricato nella memoria di programma del PIC. Per caricare il file .HEX nella memoria programma del PIC occorre: • Un personal computer • Un programmatore • Il software di gestione del programmatore NA – L4 http://www.mrscuole.net/anxapic/ 4 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La Demo-Board “AnxaPic3” Pull-Up [A4-B5-B4-B2-B1-B0] 10 1 2 21 20 3 23 4 5 19 18 6 23 17 7 16 8 15 6 14 13 10 21 NA – L4 20 9 12 11 22 22 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. LCD Display LCD Contrasto – Luminosità Cicalino Alimentazione 9-12 Vcc Power ON-OFF ICD2 - PicKit2 Programmer RS232 Com EEPROM Cicalino Pin select Pull-Up [A4-B5-B4-B2-B1-B0] I2C Conn 1-Wire Conn Tastierino 4x4 Conn Expansion-Replicate PORT Expansion BUS Conn RTC Conn ADC Pot RB0 Interrupt Sw Reset Sw Display Pin Select I2C Pull-Up RS232 Rx-Tx En/Dis [RA0 ADC – LD1] ON/OFF http://www.mrscuole.net/anxapic/ 5 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La Demo-Board AnxaPic3 NA – L4 [Schema elettrico] http://www.mrscuole.net/anxapic/ 6 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC PIC Software Il sistema integrato “MPLAB IDE” è il mezzo più efficace per lavorare con i microcontrollori PIC. MPLAB viene eseguito su un PC, quando il codice è scritto e compilato, il funzionamento dello stesso può essere “simulato” e “verificato” all’interno di MPLAB stesso, successivamente il programma può essere memorizzato nella Flash Memory Program del controllore mediante opportuno programmatore collegato (USB/RS232C/PARALLEL) con un PC. Uno degli strumenti più utili e versatili, per programmare il PIC, è l’ICD (In Circuit Debugger) Programmer che permette di programmare oppure effettuare il Debug (verifica codice step by step) in modo diretto mediante l’ausilio del collegamento “USB/RS232C” con un PC e i PIN RB6 e RB7 del controllore. NA – L4 http://www.mrscuole.net/anxapic/ 7 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Il sistema integrato MPLAB IDE ha un text-editor incluso per la scrittura del codice; può essere scaricato gratuitamente dal sito della Microchip [http://www.mcrochip.com] NA – L4 http://www.mrscuole.net/anxapic/ 8 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE MPLAB è un “sistema integrato” che permette di creare e sviluppare un programma con estrema facilità. Lo si può descrivere come uno ambiente di sviluppo (IDE) per un determinato linguaggio standard necessario per programmare un Microcontrollore Microchip. Non occore eseguire funzioni mediante riga di comando ma tale ambiente di sviluppo è in grado di supportare l’operatore in tutte le fasi, dalla scrittura del codice fino alla simulazione e anche fino alla fase di emulazione con opportuno hw. Creazione di un progetto La preparazione del programma da caricare nel microcontrollore richiede i seguenti passi: 1. Creare un progetto 2. Scrivere il programma 3. Convertirlo in binario (compilare) La prima schermata dopo l’apertura di MPLAB NA – L4 http://www.mrscuole.net/anxapic/ 9 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Creazione di un progetto: Creare un nuovo progetto Cliccare su PROJECT e successivamente su PROJECT WIZARD NA – L4 sarà aperta la seguente finestra. Cliccare su NEXT per continuare http://www.mrscuole.net/anxapic/ 10 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Creare un nuovo progetto Occorre adesso scegliere l’appropriato microcontrollore della famiglia PIC. Nella seguente videata viene scelto il PIC16F84A. N.B: => Noi lavoreremo sempre con i PIC 16F877/16F877A Scegliere il microcontrollore appropriato. Cliccare su NEXT per continuare NA – L4 http://www.mrscuole.net/anxapic/ 11 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Creare un nuovo progetto Il passo successivo consiste nel definire il linguaggio che si intende utilizzare per la programmazione. Se useremo il linguaggio assembler, occorre selezionare l’opzione “Microchip MPASM Toolsuite” Selezionare il corretto “language toolsuite” Cliccare su NEXT per continuare NA – L4 Indichiamo il nome del progetto e il percorso. Il nome dovrebbe riflettere lo scopo e il contenuto del programma Nome del progetto. Cliccare su NEXT per continuare http://www.mrscuole.net/anxapic/ 12 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Creare un nuovo progetto si aprirà la finestra “summary” contenente i parametri precedentemente definiti Cliccare FINISH per creare il progetto NA – L4 http://www.mrscuole.net/anxapic/ 13 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Scrivere il programma: Creare un nuovo file in assembler Dopo aver creato il progetto mediante il wizard apparirà la seguente schermata. Adesso dobbiamo scrivere il programma, questa operazione richiede ulteriori file da dover creare/aprire e aggiungere al progetto. Cliccare su FILE > NEW, si aprirà una nuova finestra all’interno della working area di MPLAB (La nuova finestra conterrà il programma che si dovrà scrivere). Dopo aver aperto il nuovo file dobbiamo salvarlo (è buona regola), useremo il solito percorso in cui è salvato l’intero progetto, ed il nome del file sarà “Blink.asm", questo è un nome che ci permetterà di ricordare la natura del programma (ad esempio lampeggio di un diodo led collegato sul pin RD3 della porta D del microcontrollore della DemoBoard AnxaPIC). NA – L4 http://www.mrscuole.net/anxapic/ 14 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Creare un nuovo file in assembler Per includere un nuovo file al progetto. Premere il tasto destro del mouse sul “source file” nella finestra di progetto. Si apre una nuova ‘browse window’ cerchiamo la nostra cartella di progetto e selezioniamo il file ".asm", da aggiungere al progetto.. Questo aprirà una piccola finestra con due opzioni. Scegliamo: "Add Files" Inserimento di un nuovo file Assembler nel progetto. I nomi di file e progetto sono puramente indicativi. NA – L4 Inserimento di un nuovo file Assembler nel progetto. N.B. => Nomi puramente indicativi! http://www.mrscuole.net/anxapic/ 15 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Creare un nuovo file in assembler Scriviamo nella finestra di editor il codice “assembler” per il nostro programma. La fnestra di progetto dopo aver aggiunto il file assembler. NA – L4 ; Anxa3 Led Blinking ; BLINK.ASM ; ------------------------------------------------; LED ON-OFF con ritardo di circa 500 ms ; Il led è collegato su RD3 ; ------------------------------------------------; Hardware => AnxaPic3 v3.0 rA ; Processor => Pic16F877 ; Clock => 10 MHz ; ------------------------------------------------; (C)N.A. August 2007 ;************************************************** PROCESSOR 16F877 RADIX DEC ; INCLUDE "P16F877.INC" ; --- Setup of PIC config fuses …………………………………………………….. http://www.mrscuole.net/anxapic/ 16 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Creare un nuovo file in assembler La fnestra di editor può essere personalizzata con numeri di riga e altro => [Edit > Properties …] NA – L4 http://www.mrscuole.net/anxapic/ 17 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Compilare il progetto: Creare un file .hex Al termine della scrittura del programma nella finestra di editor, dopo aver verificato la correttezza del codice scritto e aver salvato il file con estensione “.asm”, siamo pronti a compilare il progetto, per farlo andiamo su PROJECT -> BUILD ALL; questo comando traduce il file assembler in un file eseguibile in formato HEX (esadecimale). Apparirà una finestra di log nella quale verrà indicato se la compilazione è andata a buon fine. "BUILD SUCCEEDED" è un messaggio che indica la corretta compilazione (nessun errore). In caso di errori è possibile fare doppio click sul messaggio d’errore nella finestra di “Output” ed automaticamente verrà mostrato il codice assembler esattamente alla linea dove si è incontrato l’errore. NA – L4 http://www.mrscuole.net/anxapic/ 18 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Il simulatore software MPSIM l simulatore è una parte dell’ambiente MPLAB il quale permette di avere una visione globale sul comportamento del nostro programma per un determinato microcontrollore permettendoci di verificare che il comportamento dello stesso sia corretto. Mediante il simulatore possiamo monitorare il valore corrente delle variabili utilizzate, dei registri e lo stato delle porte a livello di pin. Il valore aggiunto dato dal simulatore non è sempre costante infatti dipende dal programma che stiamo simulando. Se abbiamo un programma semplice (come questo da noi creato come esempio), la simulazione non è così importante poichè portare il valore sul pin della porta D non è poi così difficile da realizzare; diversamente si rivela uno strumento indispensabile nel caso di programmi più complessi che magari contengano timers, oppure operazioni matematiche. La simulazione, così come indicato dal nome, “simula l’operare di un microcontrollore”. Il simulatore esegue il programma linea per linea ed evidenzia i valori dei registri e variabili del microcontrollore. Dopo aver scritto il programma è buona norma simularlo per controllare di non aver commesso errori o che quanto realizzato soddisfi i nostri obbiettivi, successivamente si può far girare l’applicazione in un sistema reale. La simulazione è un passo importante nella realizzione di un progetto con microcontrollori. NA – L4 http://www.mrscuole.net/anxapic/ 19 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Il simulatore software MPSIM Per aprire il simulatore cliccare su: DEBUGGER > SELECT TOOL > MPLAB SIM Appariranno quattro nuove icone sulla destra. Sono relative alla simulazione con il seguente significato Una delle principali caratteristiche del simulatore è l’abilità di visualizzare lo stato dei registri all’interno del microcontrollore. Questi vengono anche chiamati “special function registers”, ovvero SFR. Possiamo visualizzarli cliccando su VIEW > SPECIAL FUNCTION REGISTERS. Oltre agli SFR, è utile dare uno sguardo nei file registers. La rispettiva finestr può essere aperta cliccando su VIEW > FILE REGISTERS. Inoltre se il programma contiene delle variabili può essere interessante monitorarle. Ciascuna variabile viene visualizzata in una finestra (Watch Windows) cliccando su VIEW > WATCH. NA – L4 http://www.mrscuole.net/anxapic/ 20 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Il simulatore software MPSIM NA – L4 http://www.mrscuole.net/anxapic/ 21 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Il simulatore software MPSIM Quando tutte le variabili e registri di nostro interesse sono visibili nella workarea, possiamo iniziare la simulazione. La prima cosa da fare è il reset del microcontrollore mediante il comando DEBUGGER > RESET oppure cliccando sulla icona di reset. Verrà evidenziata una freccia in verde a sinistra della prima linea del grogramma, e il program counter PCL verrà resettato a zero, questo può essere visto nella finestra dei registri (Special Functions Registers window). Possiamo impartire il comando Step Into oppure Step Over, a seconda se si vogliano eseguire o meno step by step le subroutine. I medesimi comandi possono essere impartiti da tastiera mediante i tasti F7 o F8. Nella finestra SFR, Si può osservare come i vari registri cambiano i rispettivi valori al variare delle righe di codice e di come il registro W immagazzini e trasferisca i rispettivi valori alla porta D (in questo esempio di Led ON-OFF su RD3). Durante la simulazione evitare di entrare nelle routine di “delay” in quanto in queste routine i registri interessati cambiano stato migliaia di volte e solo dopo lungo tempo si riesce ad eseguire l’intera soubroutine, è sempre utile utilizzare step over (F8) nella fase di simulazione (Spesso le routine di ritardo vengono disabilitate nella simulazione). NA – L4 http://www.mrscuole.net/anxapic/ 22 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE MPLAB e Proteus VSM Proteus VSM (Virtual System Modelling – Labcenter Electronics UK) è uno dei sistemi più avanzati per la simulazione di circuiti digitali-analogici comprendenti microcontrollori; è l’unico, sino ad oggi, ad avere un larghissimo range di modelli software per microcontrollori. E’ possibile integrare Proteus VSM all’interno di MPLAB IDE è procedere con la simulazione in modo più avanzato rispetto a quanto visto con il modulo MPSIM di Microchip. Per lavorare con MPLAB IDE e Proteus VSM bisogna avere disponibile il software proteusmplabPlugin e installare lo stesso dopo aver installato MPLAB IDE. Lo schema del circuito da simulare deve essere realizzato al di fuori di MPLAB con il modulo “Isis” di proteus, non modificare il circuito originale all’interno di MPLAB è sempre buona norma utilizzare “Isis” per realizzare e modificare gli schemi. Caricare lo schema nel modulo Proteus in MPLAB mediante gli opportuni menu di Proteus. Per il software del micro si procede come visto in precedenza: => Progetto -> Compilazione -> file compilato; siamo a questo punto pronti per la simulazione, bisogna solo associare il file compilato (.Hex) al microcontrollore dello schema (Vedasi mauale proteus VSM). NA – L4 http://www.mrscuole.net/anxapic/ 23 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE MPLAB e Proteus VSM Per caricare e aprire il modulo PROTEUS VSM in MPLAB IDE selezionare il menu: Debugger > Select Tool > Proteus VSM NA – L4 http://www.mrscuole.net/anxapic/ 24 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE MPLAB e Proteus VSM Il modulo Proteus VSM in MPLAB IDE – Simulazione Visual con microcontrollori PIC NA – L4 http://www.mrscuole.net/anxapic/ 25 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE MPLAB e Proteus VSM Il modulo Proteus VSM in MPLAB IDE – Simulazione Visual con microcontrollori PIC NA – L4 http://www.mrscuole.net/anxapic/ 26 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Programmare il PIC Una volta che il programma è stato scritto, compilato e simulato possiamo passare alla programmazione del PIC. Innanzitutto bisogna selezionare il tipo di programmatore di cui disponiamo tra quelli elencati nel menu Programmer > Select Una volta selezionato il programmatore comparirà una nuova barra degli strumenti, la barra degli strumenti del programmatore: Programmer N.B. => L’Hardware necessario viene installato con l’installazione di MPLAB nel PC; in questo caso si sceglie il programmatore PicStart Plus della Microchip NA – L4 Prima di eseguire la programmazione è necessario configurare i bit riguardanti il tipo di oscillatore e tutte le altre opzioni attivabili del microcontrollore (Watchdog timer ecc…) http://www.mrscuole.net/anxapic/ 27 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ La programmazione dei PIC Il sistema di sviluppo MPLAB IDE Programmare il PIC Per fare questo basta sceglire nel menu corrispondente, la voce: Configure > Configuration Bits N.B. => Spesso la configurazione del controllore viene “settato” nel programma che stiamo compilando, ad es. in assembler vi è la direttiva “__Configure xxxxH. “ che assolve a questo compito. Il valore esadecimale “xxxx” è un numero corrispondente ai fuses attivati Comparirà quindi una finestra nella quale potremo editare le varie voci N.B. => In questo esempio il valore esadecimale 3F52 è il numero corrispondente alla configurazione scelta. La direttiva assembler __Configure sarà in questo caso: __Configure 0x3F52 N.B. => Sul microcontrollore non finisce la versione salvata del programma compilato ma l’ultima versione di cui è stato fatto il BUILD, MPLAB IDE darà comunque un messaggio di avvertimento a riguardo nel caso in cui il programma sia stato modificato e non sia stato fatto il BUILD. NA – L4 http://www.mrscuole.net/anxapic/ 28 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/