Sto provando il sensore Sharp GP2Y0A21YK0F con un semplice schema che ho allegato in formato Eagle.
Il listato sorgente è il seguente:
Code:
/*********************** ******************
* GP2Y0A21YK0F.c
* data: 3 gennaio 2020
* descrizione: Lettura del valore di GP2Y0A21YK0F, attivazione
* di un rele'¨per 5 secondi se supera la soglia
* librerie: Microchip
* compilatore: MPLABX IDE v4.01 e XC8 v1.45
* picmicro: PIC12F683
* configurazione:
* IR = GP4
* Rele = GP0
* LED = GP2
*
/******************************************************************/
#include <xc.h>
#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
#define _XTAL_FREQ 8000000
#define LDR GPIObits.GP4 // pin3 AN3
#define Rele GPIObits.GP0 // pin7
#define Led GPIObits.GP2 // pin5
// variabili
unsigned int lettura;
unsigned int volt;
// funzioni
void blink();
int main(void)
{
OPTION_REG = 0b00000000; // bit 8 (GPPU) disabilitato)
GPIO = 0b00000000; // tutte le uscite a zero
WPU = 0b00000000; // Pull-up disabilitati
TRISIO = 0b00010000; // GP4/AN3 IN, gli altri OUT
ANSEL = 0b00101000; // AN3 ingresso analogico x ADC, Fosc/32
ADCON0 = 0b10001101; // giustificato a Dx, Vref=Vdd, AN3(GP4), ADC ON
CMCON0 = 0b00000111; // comparatore OFF
while(1)
{
__delay_us(20); // delay to GO=1;
GO_DONE = 1; // abilito conversione
while(GO_DONE); // attesa fine conversione
lettura = (unsigned int) ADRESL + ((unsigned int) ADRESH ) <<8;
volt = lettura / 204; // 1 volt = 204 quanti, 2 volt = 408 quanti. ecc.
if (volt >= 2){
Led = 0; // led spento
Rele = 0; // relè a stato solido
//Rele = 1; // relè TF2-5v
__delay_ms(5000);
}
Rele = 1; // relè caduto
//Rele = 0; // relè caduto
blink();
} // end while
} // end main
void blink() {
Led = Led^1; // pin5
__delay_ms(500);
}
Quando inserisco il sensore nel circuito, l'ingresso sul pinGP4/An3 mi rimane fisso a 5volt, anche se il sensore non ha niente nel campo di funzionamento.
Se invece alimento il sensore separatamente funziona regolarmente, con un oscilloscopio vedo l'uscita che va a oltre 1volt ogni volta che gli avvicino la mano.
Se allontano la mano l'uscita torna a zero.
Ho bisogno di un aiuto.
Saluti
Lello
Allegati:
Ultima Modifica 5 Anni 4 Mesi fa da Lello Guidi. Motivo: inserito schema