Trucchi e soluzioni non sempre logiche..per non impazzire!

8 Anni 5 Mesi fa #11 da MauroFx
Manca un ingresso sul PIC :sick:
Credo capiti spesso che a fine progetto manchi un piedino I/O al PIC utilizzato.
A me è mancato un ingresso per configurare in modo hardware la logica di una uscita (attiva-bassa, attiva-alta, tempo di attivazione).
Quando l'uscita già esistente è disaccoppiata col carico a valle (ad esempio con un transistore, si può utilizzare questo stratagemma.
- aggiungere resistore collegato al +5 dal DIP switch di configurazione della (e sulla) uscita "Allarme";o
- modificare momemtaneamente l'uscita RA6 in ingresso;
- leggere il valore di ingresso in RA6;
- riportare RA6 come uscita;
- configurare uscita RA6 secondo la posizione del configuratore DIP switch

Questo è il frammento di codice:
=====================================================================
unsigned char Allarme_Inverso = 0; //se DIPswitch=ON assume valore 1

void ConfiguraAllarme(void){
TRISAbits.TRISA6 = 1; //per il momento, "ingresso" anche Allarme RA6
//lettura se DIPswitch=ON logica invertita su allarme
//uscita Allarme momentaneamente "ingresso"
if (PORTAbits.RA6 == 1){ //il DIPswitch=ON collega RA6 al +5 con R=3k3 Partitore RA6 a circa 9/10 la tensione +5V
LATAbits.LATA6 = 0; //uscita Allarme con logica inversa, normalmente a 0
Allarme_Inverso = 1;
} else { //DIPswitch=OFF, Allarme a massa con r 22k+10k=32K
LATAbits.LATA6 = 1; //uscita Allarme con logica normalmente a 1
Allarme_Inverso = 0;
}
TRISAbits.TRISA6 = 0; //rimette Allarme RA6 come uscita
}
void main(void) {

LATA = 0b01000000; //uscite a "0" salvo Allarme su RA6 con logica invertita
LATB = 0b00000000;
TRISB = 0b11111111; //tutti ingressi interrupt on change
TRISA = 0b01111000; //per il momento, "ingresso" anche Allarme RA6
ConfiguraAllarme();

//continua codice <<omissis>>

while (1){}
=================================================================

Lo schema elettrico è allegato

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • MauroFx
  • Senior Member
  • Senior Member
Di più
8 Anni 5 Mesi fa #12 da Mauro Laurenti
effettivamente lo stratagemma di cambiare la direzione del pin può essere utile.
Poi c'e' quella di usare una MCU più grande (certo che non è proprio un grande trucco)
O usare IO extender.

In alcuni casi quando possibile, si sfrutta anche il fatto che alcune periferiche sono attive alte e altre attive basse.
Se le due periferiche sono attive in maniera mutuamente esclusive, si potrebbe usare una sola linea per attivarle.

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login