PIC12F675 & XC8: Uso del ADC - Encendido de LEDs con un potenciometro

Hace tiempo que no realizaba algo de XC8, la verdad esta propuesta fue realizado por el administrador y colega Julio Aguilar hace tiempo, como parte de una dinámica que se estaba realizando en el grupo de Electónica & Robótica, la dinámica era para ver los estilos de programación y sintaxis de diferentes lenguajes (ya que era al gusto el lenguaje y compilador) y aprender de ellodesafortunadamente la dinámica se suspendió por falta de interés de los usuarios, muy pocos participaron, pero bueno eso es otro tema.

Retomando la información publicada en el ejemplo XC8_002 y realizando sus debidas modificaciones, vamos a ver un ejemplo básico del uso del ADC con el PIC12F675, vamos a variar la velocidad con la que cambia el encendido de los LEDs con el potenciometro.

Circuito:
Bueno con los datos dados el circuito propuesto para esta variante es el siguiente:


Código:
El firmware propuesto es el siguiente, no veo necesario dar muchas explicaciones, ya que esta comentado en las lineas mas importantes:
/*******************************************************************************
*
* Uso del ADC: LEDs + pontenciometro
*
*******************************************************************************
* FileName: main.c
* Processor: PIC12F675
* Complier: XC8 v1.30
* Author: Pedro Sánchez (MrChunckuee)
* Blog: http://mrchunckuee.blogspot.com/
* Email: mrchunckuee.psr@gmail.com
* Description: Lueces con efecto del auto fantatico usando el resgistro
* de desplazamiento 74HC595, la velocidad del efecto varia
* con el potenciometro de 10K conectado en AN0.
* MCLR On, INT OSC = 4MHz
*******************************************************************************
* Rev. Date Comment
* v1.00 07/11/2015 Creación del firmware
******************************************************************************/
#include <xc.h>
#include <pic12f675.h>
//Configuracion de FUSES del PIC12F675
#pragma config FOSC=INTRCIO //Int OSC = 4MHz
#pragma config WDTE=OFF //Disables Watchdog Timer
#pragma config PWRTE=OFF //Disable Power-Up Timer
#pragma config MCLRE=ON //Enable Master Clear
#pragma config BOREN=OFF //Disable Blown-ou Detect
#pragma config CP=OFF //Disable Code Protection
#pragma config CPD=OFF //Disable Data Code Protection
#define _XTAL_FREQ 4000000
#define pinADC_POT GPIObits.GP0
#define pinSH_CLK GPIObits.GP1
#define pinDATA GPIObits.GP2
#define pinST_CLK GPIObits.GP4
//Tabla de datos para encender y apagar los LEDs
unsigned char LEDs_DATA[7]={0b10000001,
0b01000010,
0b00100100,
0b00011000,
0b00100100,
0b01000010,
0b10000001};
//Declaracion de funciones utilizadas
void MCU_Init(void);
void Send_Data(unsigned char DATA);
void ADC_Init(void);
unsigned int ADC_Read(void);
void Delay_ms(unsigned int t);
void main (void){
unsigned char i;
MCU_Init();
while(1){
for(i=0; i<6; i++){
Send_Data(LEDs_DATA[i]);//Envio de datos
Delay_ms(ADC_Read());//Retardo en cambio de LEDs
}
}
}
void MCU_Init(void){
ADC_Init(); //Configura e inicializa el ADC
TRISIO = 0b000001; //Solo AN0 como entrada lo demas es salida
//Limpiamos los pines antes de usarlos
pinADC_POT = 0;
pinSH_CLK = 0;
pinDATA = 0;
pinST_CLK = 0;
}
//Funcion para envio de datos al 74595
void Send_Data(unsigned char DATA){
unsigned char LOOP, FLAG;
for (LOOP=0; LOOP<8; LOOP++){
FLAG = DATA & 0x01;
if(FLAG==0) pinDATA=0;
else pinDATA=1;
pinSH_CLK = 1;
pinSH_CLK = 0;
DATA >>= 1;
}
pinST_CLK = 1;
pinST_CLK = 0;
}
void ADC_Init(void){
//Configuracion del ADC
ADCON0bits.ADFM = 1;
ADCON0bits.VCFG = 0;//Voltage Reference VDD
ADCON0bits.CHS = 0b00; //Select chanel AN0
ANSELbits.ADCS = 0b100;
ANSELbits.ANS = 0b0001;
ADCON0bits.ADON = 1;//Turn ADC on
}
unsigned int ADC_Read(void){
int RESULT_ADC = 0;
ADCON0bits.GO = 1;//Start ADC
while(ADCON0bits.GO);
RESULT_ADC = ADRESH << 8;
RESULT_ADC = RESULT_ADC + ADRESL;
return (RESULT_ADC);//Return ADC value
}
void Delay_ms(unsigned int t){
//Delay t times in ms
unsigned int j;
for(j=0;j<t;j++){
__delay_ms(1);
}
}
Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.


Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

Publicar un comentario

0 Comentarios