Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

LABORATORIO DI SISTEMI - ALGORITMO

finanze



LABORATORIO DI SISTEMI




OGGETTO: REALIZZAZIONE DELL'HARDWARE E DEL SOFTWARE DI UN SISTEMA CHE METTE IN ROTAZIONE OTTO LED, ATTRAVERSO L'UTILIZZO DI UN PIC





SCHEMA





FIGURA 1
















DATI:

R= 10kΩ

Rd

C = 22pf



STRUMENTI UTILIZZATI COMPONENTI UTILIZZATI


Alimentatore; 1) PIC 16f876;

Programmatore per PIC;

PC;




Una resistenza da 10kΩ;

Otto resistenze da 330Ω;

Due condensatori da 22pF;

Un oscillatore al quarzo a 4MHz;

PIC16f876;

Buffer SN74HC244N;


ALGORITMO


SORGENTE PROGRAMMA


#include <p16f876.inc>


; Parola di configurazione:

__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_ON & _CPD_OFF & _WRT_ENABLE_OFF & _DEBUG_OFF & _CP_OFF


; Inizio area dichiarazione variabili

comodo RES 1 ; riserva un byte

CounterC RES 1 ; riserva un byte

CounterA RES 1 ; riserva un byte

CounterB RES 1 ; riserva un byte


; Fine area dichiarazione variabili


; Inizio subroutine: ciclo di ritardo creato automaticamente con PiKloops

Ritardo = 0.99999800s with Oscillatore a 4MHz


delay_1_sec

MOVLW D'6'

MOVWF CounterC

MOVLW D'24'

MOVWF CounterB

MOVLW D'168'

MOVWF CounterA

delay_1_sec_loop

DECFSZ CounterA,1

GOTO delay_1_sec_loop

DECFSZ CounterB,1

GOTO delay_1_sec_loop

DECFSZ CounterC,1

GOTO delay_1_sec_loop

RETURN


; Fine subroutine: ciclo di ritardo creato automaticamente con PiKloops


; Inizio programma


Start ; etichetta di riferimento: inizio del programma


; imposto PORTB in output accedendo al banco 1 e azzerando il registro TRIS B


BCF STATUS,RP1 ; poni a 0 il bit RP1, contenuto nel registro di stato

BSF STATUS, RP0 ; poni a 1 il bit RP0, contenuto nel registro di stato

MOVLW 0X00 ; carica nel registro W il valore esadecimale 00

MOVWF PORTB ; copia il valore contenuto in W nella locazione di memoria ; di indirizzo corrispondente all'etichetta "PORTB", cio nel

; registro TRIS B


; PORT B impostata in output


; inizializzo a zero PORT B: ritorno al banco 0 e carico il valore esadecimale 00

: nel registro PORTB


BCF STATUS, RP0 ; poni a 0 il bit RP0, contenuto nel registro di stato

MOVWF PORTB ; copia il valore contenuto in W nella locazione di memoria ; di indirizzo corrispondente all'etichetta "PORTB"


; PORT B inizializzata a zero


; imposto le condizioni iniziali: variabile di comodo azzerata e bit del carry ad 1


MOVWF comodo ; copia il valore contenuto in W nella locazione di memoria

; di indirizzo corrispondente all'etichetta "comodo", riservata

; in precedenza

BSF STATUS,C ; poni a 1 il bit C, contenuto nel registro di stato

RLF comodo, f ; ruota, con l'ausilio del carry,verso sinistra il contenuto

; della locazione di memoria di indirizzo corrispondente

; all'etichetta "comodo"


; condizioni iniziali impostate


ciclo ; etichetta di riferimento per il ciclo da ripetere


MOVF comodo, W ; copia il contenuto della locazione di memoria di indirizzo



; corrispondente all'etichetta "comodo" nel registro W

MOVWF PORTB ; copia il contenuto del registro accumulatore nella locazione

; di memoria di indirizzo corrispondente all'etichetta "PORTB":

; il dato viene presentato in uscita sulla PORT B

RLF comodo, f ; ruota, con l'ausilio del carry,verso sinistra il contenuto

; della locazione di memoria di indirizzo corrispondente

; all'etichetta "comodo"


CALL delay_1_sec ; richiamo della subroutine che crea un ritardo di 1msec


GOTO ciclo ; ripeti le istruzioni presenti dopo l'etichetta di riferimento

; "ciclo"



END ; fine del programma
RELAZIONE


L'esperienza effettuata in laboratorio si articolata in tre fasi:

la prima fase consisteva nel realizzare l'algoritmo ed il relativo codice, scritto nel linguaggio compreso dai PIC, di un software che mettesse in rotazione otto led;

la seconda fase consisteva nel programmare il PIC utilizzato attraverso il programmatore e nel progettare la parte hardware in modo tale da funzionare al meglio (scegliere componenti da utilizzare, ecc.), e realizzarlo in pratica;

la terza fase consisteva nel testare il circuito realizzato in precedenza e verificarne il corretto funzionamento.



CENNI TEORICI SUI PIC

La sigla PIC sta per "Programmable Interface Controller". In altre parole un PIC un sistema a microprocessore integrato contenuto in un unico chip che comprende, oltre alla CPU, anche una memoria per i programmi (generalmente una memoria EPROM), una memoria per i dati (generalmente una memoria RAM) ed un blocco di I/O. Essendo la memoria dati distinta da quella programmi ciascun PIC caratterizzato da un'architettura Harvad. Il PIC comunemente conosciuto con l'appellativo di microcontrollore.

I PIC pi moderni sono inoltre caratterizzati da pi timer, da alcuni comparatori (che sono in grado di confrontare livelli di tensione), dai convertitori analogici - digitali e da alcune interfacce seriali utili per il collegamento del PIC stesso con dei dispositivi esterni.

Caratteristica fondamentale dei microcontrollori il loro ridottissimo set di istruzioni; sono caratterizzati, a differenza dei microprocessori, da una filosofia di progettazione RISC (Reduced Instruction Set Computer).

Generalmente per programmare un microcontrollore si utilizza una connessione di tipo seriale.

I microcontrollori pi diffusi sono: il PIC16F84 e il pi moderno PIC16F876.





IL PIC16F876


Il PIC16F876 un dispositivo dotato di 28 pin che lavora con una frequenza massima di clock pari a 20 MHz e dispone un set di 35 istruzioni. Esso caratterizzato da:

a)      8 kword, ciascuna delle quali composta da 14 bit, che compongono la memoria flash dei programmi;

b)     256 byte di memoria EPROM per i dati;

c)      368 byte di memoria RAM anche questa per i dati;

d)     3 porte di I/O:

la PORT A caratterizzata da 6 linee;

la PORT B caratterizzata da 8 linee;

la PORT C caratterizzata da 8 linee.

Ciascuna linea pu essere programmata in modo indipendente dalle altre come linea di input o come linea di output.


PIEDINATURA DEL PIC




















ARCHITETTURA INTERNA





































La CPU

Il dispositivo pi importante presente all'interno di un PIC la CPU che riesce a comunicare con tutte le altre periferiche interne attraverso una serie di canali di comunicazione chiamati "bus".

Il compito della CPU quello di eseguire il programma caricato sul PIC elaborandone i dati e le informazioni;



La ALU

La ALU (Arithmetic Logic Unit) la componente pi complessa di un microcontrollore poich contiene tutta la circuiteria che si occupa di tutte le funzione di calcolo e di manipolazione dei dati durante l'esecuzione di un programma.

La memoria

Come gi detto sopra, la memoria di ciascun microcontrollore, essendo quest'ultimo caratterizzato da un'architettura Harvad, si divide in due tipi:

la memoria programmi: di tipo EEPROM cio una memoria cancellabile elettricamente che pu essere quindi riscritta. composta da 1024 locazioni a 14 bit, alle quali si aggiungono 8 locazioni riservate allo stack nelle quali vengono memorizzati gli indirizzi di ritorno delle subroutine. Quando il dispositivo viene avviato, il PC (Program Counter) punta alla prima locazione di questa memoria in cui contenuto il primo codice del programma da eseguire;

La memoria dati: di tipo RAM che comunemente chiamata FILE REGISTER. Esso composto da un'insieme di locazioni di memoria RAM, chiamate registri, che sono direttamente visibili dal programma stesso. possibile quindi leggere, scrivere e modificare ogni locazione del FILE REGISTER. Alcune di queste locazioni, quelle che sono poste negli indirizzi pi bassi, svolgono una funzione speciale per il PIC e non possono essere utilizzate per scopi diversi da quelli per cui sono state riservate. Le restanti possono essere utilizzate per registri di uso generale dal programmatore.

Il FILE REGISTER suddiviso in quattro banchi di memoria composti ognuno da 127 locazioni di memoria. Per accedere ad un singolo banco bisogna ricorrere a due bit di indirizzamento, RP0 e RP1, contenuti nel registro di stato.


SCHEMA DEL FILE REGISTER


SCHEMA DI INDIRIZZAMENTO



RP1

RP0

BANCO 0





BANCO 1



BANCO 2



BANCO 3




Lo stack: quella parte di memoria in cui possibile memorizzare temporaneamente pi indirizzi per poi recuperarli quando servono. La memorizzazione nello stack avviene secondo la struttura LIFO (Last In - First Out) ci significa che l'ultimo indirizzo memorizzato sar il primo ad essere recuperato;

Il registro w: l'unico registro connesso direttamente con la ALU; comunemente chiamato registro accumulatore. una singola locazione di memoria che pu quindi contenere soltanto un valore ad 8 bit. Caratteristica fondamentale del registro accumulatore, che lo differenzia da tutti gli altri, il fatto che la ALU per far riferimento allo stesso non deve fornire nessun indirizzo di memoria ma vi pu accedere in maniera diretta;

Il Program Counter: un particolare registro che ha la funzione di memorizzare l'indirizzo della locazione di memoria che contiene la prossima istruzione da eseguire. un registro che si incrementa automaticamente.



Il Watch Dog Timer (WDT)

Il Watch Dog Timer in pratica un oscillatore interno al PIC, ma completamente indipendente dal resto della circuiteria, il cui scopo di rilevare eventuali blocchi della CPU del microcontrollore, resettando eventualmente il PIC per riprendere la normale esecuzione del programma. Per rilevare un eventuale blocco della CPU durante l'esecuzione del programma principale, inserita all'interno di questo, un'istruzione speciale, la:

CLRWDT (CLeaR Watch Dog Timer)

la quale azzera ad intervalli regolari il Watch Dog Timer non consentendogli di terminare il suo conteggio. Se la CPU non effettua questa istruzione prima del termine del conteggio allora si assume che il programma si bloccato per qualche motivo e si effettua il Reset della CPU.


Il Registro di Stato (STATUS REGISTER)

Il registro di stato composto da alcuni bit impostati alla sola lettura ed altri che possono essere sia letti che modificati. Questi bit, chiamati anche flag che vengono identificati con una propria sigla, indicano lo stato aritmetico della ALU, lo stato dell'hardware del PIC e consentono l'indirizzamento per l'accesso ai vari banchi del FILE REGISTER.

Esso memorizzato alla locazione di indirizzo 03 ed composto da 8 bit.



SCHEMA DEL REGISTRO DI STATO


Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

IRP

RP1

RP0

TO

PD

Z

DC

C



FUNZIONE DI OGNI SINGOLO BIT


IRP

utilizzato per l'indirizzamento indiretto ai banchi del FILE REGISTER;

RP1

utilizzato, insieme al bit RP0, per l'indirizzamento diretto ai banchi del FILE REGISTER (vedi "schema di indirizzamento" foglio7);

RP0

utilizzato, insieme al bit RP1, per l'indirizzamento diretto ai banchi del FILE REGISTER (vedi "schema di indirizzamento" foglio7);

TO

Viene posto a zero quando il WDT va un time - out;

PD

Viene posto a zero quando viene eseguita un'istruzione di SLEEP (il PIC viene messo in STAND - BY);

Z

il flag dello Zero: viene posto ad 1 se il risultato di un'operazione logica o aritmetica 0; ad uno se il risultato diverso da 0;

DC



il flag del Digit Carry: viene posto ad 1 se presente un riporto da un'operazione effettuata nel semi - byte meno significativo;

C

il flag del Carry: viene posto ad 1 se presente un riporto nel risultato di un'operazione




  • Le porte di I/O

Come gi detto in precedenza, il PIC16F876 dispone di tre porte di I/O: la PORT A (6 linee); la PORT B (8 linee); la PORT C (8 linee). Ciascuna linea pu essere impostata o in input o in output. Per la gestione delle linee, quindi per la loro impostazione, il PIC dispone di tre registri contenuti nel banco due del FILE REGISTER: TRIS A, per la PORT A; TRIS B, per la PORT B; TRIS C, per la PORT C. Tutti questi registri sono locazioni di memoria ad otto bit; ciascun bit rappresenta una singola linea della porta a cui fa riferimento. Se il bit viene impostato a 0, la linea a cui si riferisce sar impostata in output; se il bit viene impostato a 1, la linea a cui si riferisce sar impostata in input.


FASE 1:

Per realizzare il codice sorgente di un programma che mettesse in rotazione otto led da caricare su un PIC16F876, si prima passati alla progettazione su carta di un algoritmo (vedi 'ALGORITMO' foglio2). Dall'analisi del problema risultato utile utilizzare una variabile di comodo per effettuare le operazioni di rotazione (shift a sinistra) e non effettuare la rotazione stessa direttamente sulla locazione di memoria della PORT B, impostata in output.

Una volta progettato l'algoritmo si passati alla stesura del codice scritto utilizzando il set di istruzioni messe a disposizione dal PIC.


ANALISI DELLE ISTRUZIONI UTILIZZATE

Come gi detto in precedenza il PIC16F876 dotato di un set di 35 istruzioni di base che si dividono in tre gruppi:

a)            Byte - oriented: cio quelle istruzioni che agiscono su un registro di 8 bit e tutte le operazioni effettuate vanno a modificare il contenuto del registro stesso;

b)            Bit - oriented: cio quelle istruzioni che agiscono su un singolo bit di un registro;

c)            Literal and control: cio quel gruppo di istruzioni che agiscono su una costante ad 8 bit la quale va a modificare un registro in base all'operazione che si effettua.

Questi gruppi di istruzioni possono avere una serie di parametri che, nella loro sintassi, devono essere utilizzati; i parametri sono identificati da:

a)            f: sta a rappresentare una locazione di memoria;

b)            d: sta a rappresentare la destinazione dell'istruzione;

c)            b: sta a rappresentare il peso del bit su cui deve essere eseguita l'operazione;

d)            k: sta a rappresentare una costante ad 8 bit o un'etichetta; questo parametro pu essere utilizzato solo con istruzioni del gruppo Literal and control;


  • ISTRUZIONE "BCF" : "Bit Clear F"

Sintassi: BCF f, b

Descrizione Questa istruzione azzera il bit b del registro presente all'indirizzo f senza modificare nessun bit del registro di stato.


  • ISTRUZIONE "BSF" : "Bit Set F"

Sintassi: BSF f, b

Descrizione Questa istruzione pone a livello logico alto il bit b del registro presente all'indirizzo f senza modificare nessun bit del registro di stato.


  • ISTRUZIONE "MOVLW" : "MOVe Literal to W"

Sintassi: MOVLW k

Descrizione Questa istruzione carica nel registro accumulatore il valore costante k senza modificare nessun bit del registro di stato.


  • ISTRUZIONE "MOVF" : "MOVe F"

Sintassi: MOVF f, d

Descrizione Questa istruzione copia il contenuto della locazione di memoria corrispondente all'etichetta f nella locazione di memoria corrispondente all'etichetta d, che pu essere anche il registro w o la stessa locazione di memoria del dato da copiare. Questa istruzione va a modificare il bit dello Zero del registro di stato.


  • ISTRUZIONE "MOVWF" : "MOVe W to F"

Sintassi: MOVWF f

Descrizione Questa istruzione copia il contenuto del registro accumulatore nella locazione di memoria corrispondente all'etichetta f, senza modificare nessun bit del registro di stato.


  • ISTRUZIONE "RLF" : "Rotate Left F through carry"

Sintassi: RLF f, d

Descrizione Questa istruzione ruota i bit contenuti nella locazione di memoria corrispondente all'etichetta f verso sinistra (dal bit meno significativo a quello pi significativo) passando attraverso il bit del Carry contenuto nel registro di stato: il bit pi significativo viene memorizzato nel bit del carry il cui contenuto viene spostato nel bit meno significativo del registro f.

L'istruzione non modifica, oltre al bit del Carry, nessun altro bit del registro di stato.



  • ISTRUZIONE "CALL": "subroutine CALL"

Sintassi: CALL k

Descrizione Questa istruzione richiama la subroutine memorizzata all'indirizzo corrispondente al parametro k che pu essere o il valore numerico dell'indirizzo, o l'etichetta corrispondente all'indirizzo.

Quando la CPU del PIC incontra una istruzione CALL, memorizza nello STACK il valore del registro PC + 1 (PC sta per Program Conter) in modo da poter riprendere l'esecuzione dall'istruzione successiva alla CALL, quindi scrive nel PC l'indirizzo della subroutine saltando all'esecuzione di quest'ultima. Il valore originale del PC viene ripristinato all'uscita della subroutine con l'esecuzione dell'istruzione di ritorno RETURN.

L'istruzione non modifica nessun bit del registro di stato.



  • ISTRUZIONE "RETURN": "RETURN from subroutine"

Sintassi: RETURN

Descrizione Questa istruzione deve essere posta alla fine del codice di ogni subroutine in modo da determinarne la sua fine ed indicare alla CPU del PIC di riprendere l'esecuzione del programma principale; ci significa che la CPU va a riprendere il valore del PC memorizzato nello stack quando stata effettuata la chiamata alla subroutine.



  • ISTRUZIONE "GOTO": "GO TO address"

Sintassi: goto k

Descrizione: Questa un'istruzione di salto assoluto. Essa determina un salto del programma in esecuzione all'indirizzo k che pu essere specificato utilizzando direttamente il valore numerico dell'indirizzo oppure la relativa etichetta.

L'istruzione non modifica nessun bit del registro di stato.




Finita la fase di stesura del codice si passati alla sua compilazione per ottenere il file ".hex" da poter caricare, attraverso il programmatore, sul PIC. La compilazione avvenuta tramite il software linux Piklab, attraverso il quale, con un tool integrato, stato possibile creare la subroutine di ritardo in maniera automatica (il tool stato in grado di fornire il codice da anteporre all'etichetta di inizio del programma principale). Sempre con un tool del software stato possibile definire la "parola di configurazione" del PIC, impostando di fatto tutte le caratteristiche del dispositivo utilizzato: tipo di oscillatore, attivazione del WDT, ecc.;


FASE 2:

Una volta ottenuto il file ".hex", sempre con l'ausilio di Piklab, si stati in grado di programmare il PIC. Per fare ci si utilizzato il programmatore del PIC collegato al PC attraverso la porta seriale.

Ultimata la progettazione e la realizzazione del software si passati alla progettazione della parte hardware. Effettuando l'analisi del problema risultato necessario utilizzare:

un cristallo al quarzo che svolgesse nel migliore dei modi la funzione di clock per il PIC;

due condensatori da porre in parallelo al cristallo secondo lo schema elettrico fornito dai produttori del dispositivo stesso;

una resistenza da 10kΩ da inserire in serie tra la tensione di alimentazione ed il pin 1 del PIC;

otto resistenze da 330Ω da inserire prima di ciascun led in modo da limitare la corrente nei dispositivi stessi che altrimenti potrebbero bruciarsi e comportarsi come un corto circuito;

un buffer, di amplificazione pari ad uno, che, essendo caratterizzato da un'elevata impedenza di ingresso, fa si che la corrente presente ai pin di ingresso sia nell'ordine dei μA. Di conseguenza il PIC non fornisce la potenza necessaria per accendere i LED, potenza che invece fornita dall'alimentazione esterna del buffer.

Terminata la fase di analisi si quindi stati in grado di passare alla fase di realizzazione pratica del circuito di FIGURA1 (vedi foglio1) su una breadboard.


FASE 3:

Terminate le fasi di progettazione e realizzazione, sia software che hardware, si passati a verificare la corretta funzionalit del circuito e del software realizzati.

Per fare ci si alimentato sia il PIC che il buffer con una tensione pari a 5V.

Una volta alimentato entrambi i dispositivi il risultato ottenuto era quello che si era prefisso: i led si accendevano, uno per volta ed in maniera sequenziale, partendo da quello posto pi a destra, verso sinistra.

Quindi possibile affermare che il circuito montato ed il software realizzato funzionavano in maniera corretta.






Privacy




Articolo informazione


Hits: 2498
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI

E 'stato utile?



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2023