Problema con el PIC12F1822

Hola, tengo un problema con este program. El programa debe de leer dos canales analogos (AN0, AN3) el canal AN0 me maneja el led1 y el AN3 me maneja el led2. El programa funciona al reves el AN0 me maneja el led2 y el AN3 me maneja el led1. el programa esta hecho en hi-tech (programación C).

Código:
#include <htc.h>
#include <stdio.h>


#define _XTAL_FREQ 4000000
#define bitset(var, bitno) ((var) |= 1UL << (bitno))    //Macro para set bit individual        
#define bitclr(var, bitno) ((var) &= ~(1UL << (bitno)))    //Macro para set bit individual    
unsigned int value_adc;        //Guarda el resultado del conversor en 10 bits
unsigned int t_scr;

void conversor_adc(void){
    __delay_us(10);            
    ADGO=1;                    //Empieza la conversión
    if (ADGO==1){
        }
    value_adc=0;
    value_adc=(ADRESH << 8)+ADRESL;    
    ADCON0=0;
    }        
void main(){

OSCCON=0X6A;            //Configuro oscilador interno 4MHz
TRISA=0X19;             //0B011001
PR2=79;                 //Frecuencia del PWM (781.25 Hz)TMR2=16
CCP1CON=0X3C;             //Bits LSB del Dc y modo de trabajo PWM; 0B00111100;
CCPR1L=0X0F;             //Duty Cycle MSB; 0B01000000 
PIR1=0;                  //limpiar bandera de interrupción
PIR2=0;                  //limpiar bandera de interrupción
T2CON=0X06;             //Config. Prees del TMR2 en 16 OB00000110
ANSELA=0X11;            //Entradas analogas AN0, AN3; 0B00010001 
ADCON1=0XF0;            //Configuro: resultado, clock, Vref
ADIE=0;                    //limpiar bandera de int del ADC
PORTA=0;
 
while (1){
    ADCON0=0X0D;
    conversor_adc ();
    if (value_adc<=370){
        RA5=0;
        }                        
        else {
            RA5=1;                    
            }
    ADCON0=0X01;        
    conversor_adc ();
    if (value_adc<=370){
        RA1=0;
        }                        
        else {
            RA1=1;                    
            }
        }
    }
 
Última edición por un moderador:
Saludos.
Prueba ahora con este código...
Código:
#include <htc.h>
#include <stdio.h>

// Primer palabra de configuración
//_FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
// Segunda palabra de configuración
// _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF

__CONFIG (0x984);        // No.1
__CONFIG (0x1CFC);        // No.2

#define _XTAL_FREQ 4000000


unsigned int conversor_adc(){
     __delay_us(50);
    ADGO = 1;                    // Inicia la conversión del canal seleccionado
    while(ADGO)continue;
    return(ADRESH<<8)+ADRESL;    // Retorna los 10 bits como resultado
}
       
void main(){

OSCCON    = 0x6A;                    // Configuro oscilador interno 4MHz
TRISA    = 0x19;                 // 0b011001
ANSELA    = 0x11;                    // Entradas analogas AN0, AN3; 0B00010001 
ADCON1    = 0xF0;                    // Resultado con justificación a la derecha
PORTA    = 0;                    // Pines de salida en 0

unsigned int value_adc;            // Guarda el resultado del conversor en 10 bits
 
while (1){
    ADCON0 = 0x01;
   __delay_us(50);
    value_adc = conversor_adc();
    if (value_adc<=370){
        RA1 = 0;
        }                        
        else {
            RA1 = 1;                    
            }

    ADCON0 = 0x0D;
   __delay_us(50);       
    value_adc = conversor_adc ();
    if (value_adc<=370){
        RA5 = 0;
        }                        
        else {
            RA5 = 1;                    
            }
        }
    }
Adjunto el proyecto con simulación por si acaso.

Suerte.
 

Adjuntos

  • 12F1822 ADC Hi-Tech.rar
    8 KB · Visitas: 3
Atrás
Arriba