Banner publicitario de PCBWay

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