Tips ‘n Trick Microchip

Forse non tutti sanno che la Microchip mette a disposizione degli utenti, un’interessante guida che al suo interno contiene una raccolta di Tips ‘n Trick utili su tutti i fronti, ma in particolar modo utili per tutti quei programmatori che si accingono a sviluppare progetti in assembler.

Quando si scrivono software per microcontrollori ad 8 bit e con scarse capacità sia di memoria RAM sia di memoria per il salvataggio del codice, ci si trova a dover fare i conti con la famosa “coperta corta” per cui bisogna fare la scelta se utilizzare per esempio la RAM per risparmiare program memory o viceversa.

Questa serie di Tips ‘n Trick della Microchip (questo è il link: http://ww1.microchip.com/downloads/en/DeviceDoc/01146B.pdf) aiuta il programmatore quando si trova di fronte a queste scelte, facendogli risparmiare tempo e fatica.

 

Di seguito ne elencherò solamente 5 che a mio parere sono le più interessanti e che rappresentano per me delle vere “chicche”:

 

  • sapete come potete pilotare 6 led, senza multiplexer e usando solamente 3 pin del microcontrollore?! Microchip ci suggerisce un interessante metodo che sfrutta la caratteristica ad alta impedenza dei pin configurati come ingressi. Lo schema elettrico è molto semplice:

come possiamo vedere dallo schema elettrico, se vogliamo accendere per esempio, solo il led 3, sarà sufficiente settare GP0 come ingresso, GP1 e GP2 come uscita e quindi la GP1 a livello logico basso e la GP2 a livello logico alto; analogamente se vogliamo far accendere il led 2 e il led 3 sarà sufficiente settare tutti i pin come uscita e quindi GP0 e GP2 a livello logico alto e GP1 a livello logico basso. Stesso ragionamento può essere fatto con altre combinazioni di led tenendo presente però, che tutte le combinazioni non possono essere realizzate come per esempio l’accensione contemporanea del led 3 e del led 4. Di seguito è mostrata la tabella che riassume tutte le combinazioni e i valori da far assumere ad ogni pin:
la lettera “Z” indica che il pin è ad alta impedenza e quindi deve essere settato come ingresso.
Chiaramente questa tecnica può essere applicata per pilotare più di 6 led e la formula che ci permette di sapere il numero di led pilotabili dato il numero di pin a disposizione è la seguente:
D = GP x (GP - 1)
dove “D” corrisponde al numero di led e GP al numero di porte disponibili.
  • solitamente l’alimentazione dei dispositivi digitali (e quindi i segnali di uscita) è dell’ordine dei 5 volt o addirittura dei 3,3 volt, ma alle volte può capitare che abbiamo la necessità di pilotare dispositivi che necessitano di una tensione di pilotaggio maggiore. Per far fronte a questa necessità solitamente vengono progettate delle interfacce generalmente composte da un transistor e da una manciata di resistenze; questa soluzione però necessità di avere un’alimentazione duale che alle volte però può non essere presente. Anche in questo caso la Microchip ci suggerisce uno schema elettrico per ottenere in uscita dal pin una tensione superiore di quella di alimentazione del micro:

fornendo in uscita sul pin un’onda quadra con frequenza opportuna, sarà possibile ottenere una tensione pari a quella indicata in figura.
  • Forse non tutti sanno che anche con un semplice PIC12 è possibile realizzare una modulazione di tipo sigma-delta utilizzando la seguente configurazione:

allo scadere di un timer opportunamente programmato, il software dovrà controllare il valore di GP1 attraverso l’utilizzo del comparatore: se la tensione è superiore alla tensione di riferimento Vref, la GP2 deve andare al livello logico basso; se la tensione è inferiore alla tensione di riferimento Vref, la GP2 deve essere settata al livello logico alto. Contando il numero di volte che la GP2 viene settata al livello logico basso, si ottiene il valore corrispondente alla modulazione sigma-delta e quindi il numero di campionature per secondo determina la risoluzione.

  • Quando capita di dover programmare in assembler dispositivi con risorse limitate, può capitare di trovarci di fronte ad un “trade-off” tra utilizzo della RAM e utilizzo della PROGRAM MEMORY. Un caso di questi è quando dobbiamo scambiare il contenuto del registro “accumulatore” (nei prodotti Microchip viene indicato con la lettera “w”) e il contenuto di una locazione di memoria tra di loro; in questo caso normalmente viene utilizzata un’altra variabile d’appoggio che però ci obbliga a dover allocare altro spazio in memoria. Utilizzando le operazioni di XOR e tre istruzioni assembler, possiamo eseguire questo scambio senza l’ausilio di una locazione di memoria ad uso temporaneo:

e un tipico esempio può essere il seguente:

  • Lavorando con dispositivi digitali, molte volte ci si può trovare di  fronte all’esigenza di avere una tensione analogica la quale ampiezza possa essere determinata dal software. In molti microprocessori abbiamo una periferica dedicata che fornisce una tensione analogica, ma in molti casi, soprattutto nei microprocessori di fascia bassa, non abbiamo a disposizione questa periferica.
    Una soluzione che ci viene incontro richiede l’utilizzo di una manciata di componenti connessi come mostrata dalla seguente figura:
il software dovrà fornire semplicemente un onda quadra con la frequenza opportuna nel pin dedicato (possono essere utilizzate periferiche PWM che si occupano di fornire il segnale ad onda quadra impostando semplicemente qualche registro).
Questo circuito altro non è che un filtro passa basso ed un inseguitore di tensione e la scelta dei componenti dovrà essere fatta sulla base della seguente formula:
Att(db) = -10 * log [1+(2*pi*Fpwm*R*C)*2]
dove Fpwm è la frequenza dell’onda quadra in uscita dal pin.
Si parla di attenuazione in quanto la tensione fornita da questo schema andrà da un massimo di Vdd (alimentazione del micro) ad un minino di “0” volt (valori di tensioni chiaramente ideali).
Questi elencati sono solo alcuni dei tanti “Tips ‘n Trick” che la Microchip propone nel PDF presente nel link lasciato all’inizio di questo articolo; lo scopo di questa presentazione non è quello di approfondire o selezionare gli argomenti trattati ma piuttosto quello di divulgare la presenza di questa guida che alle volte può tornare veramente utile, sia agli sviluppatori software sia agli sviluppatori hardware.

 

 

 

STAMPA    

6 Commenti

  1. Vittorio Crapella 2 ottobre 2011
  2. Luca Giuliodori lucagiuliodori 3 ottobre 2011
  3. telegiangi61 telegiangi61 3 ottobre 2011
  4. Vittorio Crapella 3 ottobre 2011
  5. divivoma 3 ottobre 2011
  6. Luca Giuliodori lucagiuliodori 10 ottobre 2011

Scrivi un commento