- Messaggi: 40
- Ringraziamenti ricevuti 0
Trucchi e soluzioni non sempre logiche..per non impazzire!
8 Anni 5 Mesi fa #11
da MauroFx
Risposta da MauroFx al topic Trucchi e soluzioni non sempre logiche..per non impazzire!
Manca un ingresso sul PIC
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
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
Riduci
Di più
8 Anni 5 Mesi fa #12
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Trucchi e soluzioni non sempre logiche..per non impazzire!
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
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.
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.