Software
Home Software Hardware Gallery Manuale d'uso

Argomenti

correlati

_______________________

Su
S. Fotoresistenze
S. totale
Approfondimento

S. Fotoresistenze
S. totale
Approfondimento

Premesso che il nostro gruppo di studio si è dedicato alla stesura del programma riguardante la gestione dell’inseguitore di una fonte di luce e solo successivamente il programma finale è stato unificato con la collaborazione di entrambi gruppi, in questa sezione “software” è spiegato e elencato solo il programma progettato dal nostro gruppo, cui fa seguito il programma complessivo.

La redazione del programma vero e proprio, viene fatta su computer, facendo uso del software messo a disposizione dalla Microchip (MPLAB IDE).

Il programma utilizza un linguaggio assembly, ogni codice del linguaggio macchina viene sostituito in assembly, si tratta di un linguaggio leggermente superiore al linguaggio macchina che permette di non conoscere il formato binario direttamente utilizzato dalla macchina, che però implica la scrittura di ogni singolo passaggio. Nulla è sottointeso.

Il linguaggio assembly va a costituire l’ISA (Instruction Set Architecture) di un processore. E in questo caso è utilizzata l’architettura RISC (Reduced Instruction Set Computer) che uniforma i tempi di esecuzione perchè tutte le istruzioni hanno lo stesso formato e la stessa lunghezza e fa largo uso di registri.

Come abbiamo visto il microcontrollore per funzionare necessita di un clock, la cui componentistica viene installata all’esterno (oscillatore al quarzo).

Il microcontrollore a ogni fronte di clock esegue un operazione, ma per poter completare un ciclo macchina occorrono quattro impulsi di clock.

Per ciclo macchina è intesa l’operazione più piccola ma completa che la macchina va a eseguire, anche se esistono istruzioni particolari che impiegano due cicli macchina. Tra queste istruzioni è presente quella “di salto”. E’ un’istruzione che va a modificare il Program Counter (cioè il dispositivo di puntamento della riga di istruzione nel programma) e quindi impiega due cicli macchina.

Tutte le varie istruzioni sono incolonnate una dopo l’altra (come è possibile vedere nella foto in basso) e, per poter aumentare al massimo l’efficienza del microcontrollore mentre la CPU (Central Processing Unit) sta eseguendo un istruzione, il Program Counter punta all’istruzione successiva e così via.

 

 

Qui sotto è riportato un esempio di un’esecuzione di un’istruzione (5 cicli di clock).

 

 

 

 Legenda immagine :

IF:        Lettura dell'istruzione da memoria

ID:       Decodifica istruzione e lettura operandi da registri

EX:      Esecuzione dell'istruzione

MEM: Attivazione della memoria (solo per certe istruzioni)

WB:     Scrittura del risultato nel registro opportuno

 

Il programma in ASSEMBLY è composto principalmente da tre parti:

1)   Label o etichetta per poter identificare e puntare una linea(si trova nella parte più sinistra del programma)

2)   Istruzione si tratta dell’istruzione vera e propria e si trava tabulata rispetto al label

3)   Commento è una parte riservata a commenti vari, è delimitata da un “;commenti vari”

 

Direttive al compilatore (MP LAB)

 

Per poter adattare il contenuto del programma al microcontrollore, occorre inizialmente programmare una parte dedicata alle direttive dove vengono specificati i seguenti dati:

1) fase di scelta del modello di microcontrollore

2) fase di scelta della base numerica di utilizzo

3) Header file

4) configurazione di lavoro

  E’ una configurazione che si basa su tredici bit come in figura:

 

 

 

Per questo è stata scelta la seguente configurazione:

Quindi per poterlo testare e rendere riutilizzabile il microcontrollore la configurazione CP va off, e il bit 9 WRT va off, il Watchdog Timer viene disabilitato e viene selezionata la configurazione XT per l’oscillatore perché abbiamo utilizzato un oscillatore al quarzo da 4 MHz.

 

5)dichiarazione delle variabili

   E’ uno spazio destinato alla dichiarazione delle variabili nella riga 20H, viene specificati il nome  e lo spazio impiegato sulla memori espresso in Byte, nel nostro caso per le variabili è necessario un solo Byte per ciascuna: