S. Fotoresistenze
Home Software Hardware Gallery Manuale d'uso

Argomenti

correlati

_______________________

Su

 

Stesura del programma

Il programma è stato organizzato prima di tutto sottoforma di schema a blocchi (come raffigurato al punto 2.2) per facilitare la risoluzione dei problemi e per avere una panoramica generale della situazione da affrontare. Questa fase è importante per poter conoscere anticipatamente le variabili da inserire e le varie configurazioni dei pin in ingresso e uscita.

All’uscita del condizionamento del segnale delle due fotoresistenze è presente una tensione variabile nel range che va da 0 a +5 V, e in uscita possiamo scegliere tra tre stati di funzionamento per i motori(avanti, indietro, fermo).

Di seguito è raffigurato il Flow Chart del programma.

 

 

Innanzi tutto devo configurare i TRIS (registri dedicati all’impostazione dei PORT come ingressi o uscite) e li imposto come è stato scelto e già descritto nella parte Hardware dedicata al PIC. Quindi per facilità si imposta tutto il PORTA come ingresso, il PORTB come uscita e PORTC : RC0 come ingresso, e l’RC1 eRC2 come uscite per i led. In questa fase impostiamo anche il registro dedicato al ADC (vedi appendice dedicata al PIC16F876).

La soluzione presa in considerazione è quella di acquisire i due segnali provenienti dalle fotoresistenze, per mezzo del convertitore analogico digitale a 10 bit, mascherare dei bit (quelli meno significativi) per evitare che non trovi mai un equilibrio, salvare i due dati uno di questi nel registro impostato nella dichiarazione delle variabili, l’altro direttamente in W (accumulatore che colloquia direttamente con la ALU) e confrontare i due dati attraverso una sottrazione per poter capire quale dei due dati è maggiore dell’altro.

A questo punto, dopo aver effettuato la sottrazione possiamo trovarci di fronte a tre situazioni:

1)il risultato della sottrazione uguale a zero, significa che i valori dei due segnali in ingresso sono uguali, e che quindi l’intensità di luce sulle due fotoresistenze è la stessa, il carrello quindi imposterà sul ponte ad H di tutti e due i motori in modalità avanti.

2)il risultato della sottrazione è inferiore a zero significa che la luce sui due trasduttori è differente, e il controllore imposterà una direzione in modo da seguire la luce. Ad esempio se il valore in tensione della fotoresistenze di sinistra è 1 V e quello della fotoresistenze di destra è di 3 V, facendo la sottrazione dei due valori otteniamo   è un valore negativo significa che la luce sarà più forte a destra e i motori saranno impostati come segue: il motore destro resterà in modalità fermo quello sinistro in modalità avanti e in questo modo il carrello girerà su se stesso.

3) il risultato della sottrazione è maggiore di zero quindi il carrello ruoterà nella direzione opposta a quella del 2° caso.

Per poter riconoscere se il risultato della sottrazione è maggiore, minore o uguale a 0, ci avvaliamo dei controlli carry e zero, andando a testare nel registro STATUS:

-         se il bit Z(zero) è attivo significa che il risultato della sottrazione è pari a 0;

-         se il bit C(carry) è attivo(in questo caso = “0”) significa che il risultato della sottrazione è minore di 0. Però il controllo carry ha una particolarità, infatti dopo essersi portato a zero non si “resetta” più per questo bisogna agire ricaricandolo.

Alla fine del dopo essersi mosso nella direzione calcolata, il programma torna alla lettura dei due valori provenienti dai fotoresistori e così via.