ELEMANIA
PIC16F690 - Porte in input
Interruttori e circuito di weak pull-up

L'esempio più semplice di utilizzo di un pin come input digitale è il collegamento con un interruttore che fornisca, a seconda dei casi, il valore 0 o il valore 1 all'ingresso. Lo schema seguente, che utilizza come esempio il pin RA0 di PORTB, è molto semplice ma potrebbe non funzionare:

Quando l'interruttore è chiuso, RA0 viene collegato a massa e dunque viene fornito in ingresso un livello basso (L). Tuttavia quando si apre l'interruttore, RA0 rimane floating (non connesso) e dunque in generale il livello logico presente sul piedino è indeterminato.

In effetti le porte PORTA e PORTB hanno un circuito interno di pull up (weak pull up) che consente di portare automaticamente a livello alto i pin della porta quando questi sono utilizzati come input e non vengono collegati a un circuito esterno (ingresso floating). La porta PORTC invece non è fornita di questa caratteristica.

Il funzionamento del circuito di weak pulk up di ogni pin di PORTA e PORTB può essere attivato (1) o disattivato (0) programmando i corrispondenti bit dei registri WPUA e WPUB. La figura seguente mostra la corrispondenza fra i diversi bit di WPUA e WPUB e i relativi pin di PORTA e PORTB. Per esempio il bit 5 (WPUA5) di WPUA serve per programmare il weak pull up del pin A5 di PORTA (la dicitura R/W-1 indica il fatto che il valore del bit può essere scritto oppure letto nel registro WPUA). Come si può notare non tutti i bit dei registri WPUA e WPUB sono utilizzati:

Si noti che il bit corrispondente al pin RA3 non è attivo. Quando RA3 è configurato come ingresso di master clear, un resistore di weak pull-up viene automaticamente attivato. Viceversa, se usato come input, il weak pull-up è sempre disabilitato.

Se il weak pull-up è disattivato (oppure si usa PORTC per cui questa funzione non è prevista) il circuito corretto per collegare un interruttore a un pin di input è il seguente:

In tale modo, quando l'interruttore è aperto, la resistenza di pull up da 10K porta automaticamente a Vcc (cioè a un valore alto) il livello logico presente su RC2.

ATTENZIONE: al power up (accensione del PIC) o dopo un RESET, i bit dei registri WPUA e WPUB sono automaticamente settati a '1', perciò non è necessario settarli per attivare il weak pull-up dopo il power up. In caso si desideri disabilitare il weak pull-up (per usare una resistenza di pull-up esterna) occorre resettare i bit corrispondenti dei registri WPUA e WPUB.

Il problema dei rimbalzi

I rimbalzi (bounce) sono rapidissime sequenze indesiderate di apertura/chiusura di un interruttore dovute alle vibrazioni della lamina metallica dell'interruttore stesso al momento della chiusura:

Debounce Effect

A causa dei rimbalzi se si usa un pulsante per comandare un conteggio da parte del PIC, il risultato sarà errato poiché verranno conteggiati i rimbalzi a ogni pressione del pulsante.

Il problema può essere affrontato col software (per mezzo di opportuni cicli di ritardo che non acquisiscano i valori dei rimbalzi) oppure con soluzioni hardware. La più semplice fra queste ultime è l'uso di un circuito RC con lo scopo di filtrare le componenti ad alta frequenza (dovute ai rimbalzi) del segnale:

RC circuit

Una soluzione più raffinata consiste nell'usare un latch set-reset con funzione antirimbalzo:

RS flip-flop

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it