Il listato, non funzionante, è il seguente:
Code:
/*********************** *******************************
* Fotocellula v3.0 IR
*
* data: 13 dicembre 2019
* descrizione: Lettura della uscita del sensore IS471F e attivazione
* di un rele'¨per 10 secondi se IR rileva oggetto
* librerie: Microchip
* compilatore: MPLABX IDE v4.01 e XC8 v1.45
* picmicro: PIC12F683
* configurazione:
* IRsensor = GP4
* Rele = GP0
* LED = GP2
*
/********************************************************************/
// CONFIG
#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
#include <xc.h>
#define _XTAL_FREQ 8000000
#define IRsensor GPIObits.GP5 // pin2
#define Rele GPIObits.GP0 // pin7
#define Led GPIObits.GP2 // pin5
// funzioni
void blink();
int main(void)
{
ADCON0 = 0b00000000; // convertitore A/D OFF
CMCON0 = 0b00000111; // comparatore OFF
VRCON = 0b00000000; // voltaggio reference OFF
GPIO = 0b00000000; // tutte le uscite a ZERO
TRISIO = 0b00100000; // GP5 IN, gli altri OUT
ANSEL =0b00000000; // porte digitali
while(1)
{
if (IRsensor == 0){ // IR attivo basso
Led = 0; // led spento
Rele = 0; // attivo a 0 se relè a stato solido, altrimenti a 1
for(int i = 0; i <= 10; i++) {
__delay_ms(1000);
}
}
else {
Rele = 1; // relè caduto
blink();
}
} // end while
} // end main
void blink() {
Led = Led^1; // pin5
__delay_ms(500);
}
Lo schema è il seguente:
Come sensore IR uso un IS471F, che provato singolarmente quando metto davanti un ostacolo a 2cm, passa da livello alto(5volt) a livello basso(0).
Mi sono comunque accorto che l'ingresso GPIO5 è sempre fisso alto, quindi se inserisco il sensore IR non succede niente.
Ho il dubio che le configurazioni dei registri non siano impostate correttamente.
Le ho scritte leggendo il datasheet del pic 12F683.
Anche questa volta ho bisogno di un aiuto.
Saluti
Lello