Tutorials - PIC 

 

PIC16F526 


I default

Cosa sono, dunque, questi "default" ?
  
Per capirlo, dobbiamo fare alcune considerazioni:

  • il mezzo per accedere alle funzioni interne del microcontroller è costituito dai registri speciali (SFR - Special Function Register), come il TRIS visto ora: modificando i loro bit, il programmatore può gestire I/O, timer, convertitori, moduli di comunicazione, ecc.
  • questi registri SFR sono, quindi, di importanza capitale. 
  • dovendo essere modificabili dall' utente, si trovano in RAM, ovvero il loro contenuto va perso al momento della mancanza di alimentazione.
  • il costruttore, allora, fa in modo che all' accensione (reset all' arrivo della tensione di alimentazione o POR - Power On Reset, ma anche di altri reset generati da cause diverse) i bit di questi registri assumano dei valori specifici, detti default .

La scelta del valore di default deriva dalla linea guida del costruttore di mantenere il chip nelle condizioni di minore consumo energetico; sarà compito, poi, dell' utente di indirizzare diversamente le risorse.
Questo privilegia ingressi analogici rispetto a digitali, ingressi rispetto ad uscite, ecc.

Nel registro TRIS, ad esempio, abbiamo visto che il default porta tutti i bit utili a 1, ovvero pre-configura la direzione degli I/O digitali come ingressi

La conoscenza della situazione di default permette di capire alcuni meccanismi tipici dei PIC e può essere utile per risparmiare istruzioni; ad esempio, volendo usare i pin come ingressi digitali, non occorre agire sul registro di tris, dato che il default impone già questa scelta.
Per contro, non avendo la certezza della situazione in cui si trovi il chip, può essere una scelta di sicurezza inizializzare comunque tutti i bit che corrispondono a pin o funzioni che si dovranno impiegare durante l' esecuzione del programma.


PORTx

Una volta definito come intendiamo usare i pin, se in uscita o in ingresso, possiamo leggere lo stato degli ingressi o comandare quello delle uscite agendo su un altro registro, che ha questa struttura:

PORTx

bit

7 6 5 4 3 2 1 0

nome

-

-

Rx5

Rx4

Rx3

Rx2

Rx1

RxO

funzione

R/W R/W R/W R/W R/W R/W R/W R/W

default

- - x x x x x x
  • bit 7:6   non utilizzati 
                 in lettura  : 0
                 in scrittura: nessun effetto

  • bit 5  Rx5  in lettura  : livello logico applicato al pin
                in scrittura: (solo se la direzione in TRIS è 0)
                1 = pin a livello alto
                0 = pin a livello basso

  • bit 4  Rx4  in lettura  : livello logico applicato al pin
                in scrittura: (solo se la direzione in TRIS è 0)
                1 = pin a livello alto
                0 = pin a livello basso

  • bit 3  Rx3  in lettura  : livello logico applicato al pin
                RB3 - in scrittura: nessun effetto perchè il pin solo ingresso
                RC3 -
    1 = pin a livello alto  
                      0 = pin a livello basso

  • bit 2  Rx2  in lettura  : livello logico applicato al pin
                in scrittura: (solo se la direzione in TRIS è 0)
                1 = pin a livello alto
                0 = pin a livello basso

  • bit 1  Rx1  in lettura  : livello logico applicato al pin
                in scrittura:( solo se la direzione in TRIS è 0)
                1 = pin a livello alto
                0 = pin a livello basso

  • bit 0  Rx0  in lettura : livello logico applicato al pin
                in scrittura: (solo se la direzione in TRISG è 0)
                1 = pin a livello alto
                0 = pin a livello basso

Ad esempio, una volta definito RB0 come uscita (bit 0 di TRIS PORTB = 0), potrò portarlo a livello 1 scrivendo 1 nel bit 0 di PORTB e mandarlo a livello 0 scrivendo 0 nello stesso bit.
Se al pin è collegato un LED, esso si accenderà e spegnerà a seconda del livello imposto al pin.

Se il bit 2 di TRIS PORTC = 1, RC2 è configurato come ingresso. Leggendo PORTC mi ritroverò nel suo bit 2 il valore del livello logico applicato al pin. 

La lettura dello stato dei pin è possibile sia che questi siano configurati come ingressi che come uscite.

Pin come

Azione
ingressi la lettura rende lo stato elettrico reale del pin in quel momento
una eventuale scrittura del bit configurato come ingresso non ha effetto.
 uscite la lettura rende lo stato elettrico reale del pin in quel momento
la scrittura agisce sul latch di uscita del pin

Per comprendere a pieno il funzionamento del circuito che sta a monte del pin utilizzato come I/O digitale, qui trovate alcune pagine informative.

Questa situazione fa si che in particolari circostanze si determini l' effetto chiamato R-M-W e che blocca lo stato di un pin nel caso in cui si acceda con istruzioni che operano una lettura prima della scrittura (read-modify-write), ad esempio BCF o  BSF. Nel caso in cui il carico applicato al pin fosse elevato, principalmente dal punto di vista dell' impedenza (che si oppone alla variazione), occorre mettere in atto qualche sistema per evitare il problema R-M-W, ad esempio usando dei semplici buffer. Maggiori informazioni su R-M-W qui.

Come TRIS, anche PORTx è in RAM e le impostazioni definite dall' utente durante lo svolgimento del programma vanno perse alla mancanza di tensione di alimentazione. Per quanto riguarda i già citati default, nel caso di questo registro, essendo configurati come ingressi digitali al POR, ovviamente non può venire imposto alcun valore di default (x indica indeterminato).


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 18/10/13.