Hola buenas tardes a todos, mi problema es que no puedo leer dos entradas analogicas y poder compararlas de alguna manera para realizar una tarea como por ejemplo la variacion del ancho de pulso de un pwm para mantener un cierto nivel de iluminancia, para medir el nivel de iluminancia utilizo un LDR y para elegir o modificar el nivel de iluminancia que quiero tener utilizo un potenciometro (que actua como seteo), luego segun corresponda actuo sobre un pwm por software, este pwm esta conectado mediante potencia a la entrada de una lampara led de 14 W de alterna, modificada para poder controlar el nivel de iluminancia con la salida pwm del pic. A cotinuacion envio un sketch para ver si podia hacer la comparacion entre la entrada del potenciometro y la entrada del LDR, pero solo me muestra un estado alto a la salida que deberia ser del pwm. El programita es el siguiente (utilizo MPLAB X xc8 como entorno de desarrollo):
#include <xc.h>
#include <PIC12F675.h>
#define _XTAL_FREQ 4000000
// CONFIG
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
int potenciometro = 0;
int LDR = 0;
int conversion = 0;
char canal;
short LED;
int getCAD(canal){
ADFM = 1;
VCFG = 0;
switch(canal){
case 0:
ADCON0 = 0b00000000;
ANSELbits.ADCS =0b001;
ADCON0bits.ADON = 1;
ADCON0bits.GO = 1;
while(ADCON0bits.GO == 1){
;
}
potenciometro = ADRESH << 8; //Leemos los dos bits altos del conversor
potenciometro = potenciometro + ADRESL; //concatenamos los bits bajos
break;
case 1:
ADCON0 = 0b00000100;
ANSELbits.ADCS =0b001;
ADCON0bits.ADON = 1;
ADCON0bits.GO = 1;
while(ADCON0bits.GO == 1){
;
}
LDR = ADRESH << 8; //Leemos los dos bits altos del conversor
LDR = LDR + ADRESL; //concatenamos los bits bajos
break;
}
/*ANSELbits.ADCS =0b001;
ADCON0bits.ADON = 1;
ADCON0bits.GO = 1;
while(ADCON0bits.GO == 1){
;
}
switch(canal){
case 0:
potenciometro = ADRESH << 8; //Leemos los dos bits altos del conversor
potenciometro = potenciometro + ADRESL; //concatenamos los bits bajos
break;
case 1:
LDR = ADRESH << 8; //Leemos los dos bits altos del conversor
LDR = LDR + ADRESL; //concatenamos los bits bajos
break;
}*/
}
void main(void) {
TRISIO = 0b00000011;
while(1){
potenciometro = getCAD(0);
__delay_ms(10);
LDR = getCAD(1);
__delay_ms(10);
if(potenciometro > 600){
LED = 1;
}
else{
LED = 0;
}
}
return;
}