CURSO DE PROGRAMACIÓN DE MICROCONTROLADORES PIC
PARTE A: Programación de Microcontroladores PIC de MICROCHIP.
LECTURA DE ENTRADAS ANALÓGICAS - MÓDULO ADC
CAPACIDAD TERMINAL
- Utilizar al microcontrolador en aplicaciones de control electrónico.
- Desarrollar y ejecutar programas en un microcontrolador PIC.
- Programar y configurar interfaces básicas del microcontrolador.
COMPETENCIA ESPECIFICA DE LA SESION
- Conocer el Display LCD y su funcionamiento
- Programar eficientemente el LCD
CONTENIDOS A TRATAR
- Lecturas analógicas de un canal del PIC
- Configuración de un Sensor de Temperatura
- Lectura analógica en una pantalla LCD
RESULTADOS
- Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
MATERIALES Y EQUIPO
- CCS Compiler instalado.
- Entrenador de PICS
- PIC16F877A
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
DIAGRAMA ESQUEMÁTICO:

CÓDIGO 01 DE PROGRAMACIÓN EN PIC C COMPILER
// NOMBRE: JHOJAN ANDRES LERMA ACHOMA
#INCLUDE <16F877A.H>
#device adc=8
#USE DELAY(CLOCK=4000000) // Cristal externo 4MHz
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#INCLUDE <lcd.c>
int lectura=0;
void MAIN()
{
LCD_INIT(); // Inicializa el LCD
printf (lcd_putc, "\fLECTURA ANALOGICA") ; //Mandamos mensaje por única vez
// Configuración del puerto analógico
setup_adc_ports (AN0_AN1_AN3);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel (3); // lectura del canal analogico 3
delay_us (20);
WHILE(TRUE)
{
lectura = read_adc (); // Leemos Canal A3
delay_ms (20) ; // esperamos para una correcta lectura
lcd_gotoxy(1,2); // ubicamos cursos en LCD
printf (lcd_putc, "Puerto A3: %4u", lectura); // imprimimos valor
delay_ms(100); // esperamos
} // Cierra WHILE true
}

CÓDIGO 02 DE PROGRAMACIÓN EN PIC C COMPILER
// NOMBRE: JHOJAN ANDRES LERMA ACHOMA
#INCLUDE <16F877A.H>
#device adc=10
#USE DELAY(CLOCK=4000000) // Cristal externo 4MHz
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#INCLUDE <lcd.c>
int16 temperatura=0;
int setpoint=25;
void MAIN()
{
LCD_INIT (); // Inicializa el LCD
// Configuración del puerto analógico
setup_adc_ports (AN0_AN1_AN3);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel (3); // lectura del canal analogico 3
delay_us (20);
WHILE (TRUE)
{
temperatura = read_adc (); // Leemos Canal A3
temperatura = temperatura / 2.046;
delay_ms (20); // esperamos para una correcta lectura
lcd_gotoxy (1, 1); // ubicamos cursos en LCD
printf (lcd_putc, "TEMPERATURA: %3u", setpoint); // imprimimos valor
lcd_gotoxy (1, 2); // ubicamos cursos en LCD
printf (lcd_putc, "Valor: %3lu grados", temperatura); // imprimimos valor
delay_ms (100); // esperamos
IF (!input (PIN_A4))
{
setpoint++;
WHILE (!input (PIN_A4)) {}
}
IF (!input (PIN_A5))
{
setpoint--;
WHILE (!input (PIN_A5)) {}
}
} // Cierra WHILE true
}

IMÁGENES DE FUNCIONAMIENTO
 |
Aplicando el Código 01
|
 |
Aplicando el Código 02
|
 |
Aplicando el Código 02
|
VÍDEO EXPLICATIVO
RETO DE LA SEMANA:
Convierta el sistema de Termómetro a TERMOSTATO
// NOMBRE: JHOJAN ANDRES LERMA ACHOMA
#INCLUDE <16F877A.H>
#device adc=10
#USE DELAY(CLOCK=4000000) // Cristal externo 4MHz
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#INCLUDE <lcd.c>
int16 temperatura=0;
int setpoint=25;
void MAIN()
{
LCD_INIT (); // Inicializa el LCD
// Configuración del puerto analógico
setup_adc_ports (AN0_AN1_AN3);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel (3); // lectura del canal analógico 3
delay_us (20);
WHILE (TRUE)
{
temperatura = read_adc (); // Leemos Canal A3
temperatura = temperatura / 2.046;
delay_ms (20); // esperamos para una correcta lectura
lcd_gotoxy (1, 1); // ubicamos cursos en LCD
printf (lcd_putc, "TEMPERATURA: %3u", setpoint); // imprimimos valor
lcd_gotoxy (1, 2); // ubicamos cursos en LCD
printf (lcd_putc, "Valor: %3lu grados", temperatura); // imprimimos valor
delay_ms (20); // esperamos
IF (!input (PIN_A4)) // SUBIR
{
setpoint++;
WHILE (!input (PIN_A4)) {}
}
IF (!input (PIN_A5)) // BAJAR
{
setpoint--;
WHILE (!input (PIN_A5)) {}
}
IF (temperatura > setpoint) // SALIDA
{
output_low (PIN_B0) ;
}
ELSE
{
output_high (PIN_B0) ;
}
} // Cierra WHILE true
}
IMÁGENES DE FUNCIONAMIENTO DEL RETO
 |
Aplicando el Código del Reto
|
 |
Aplicando el Código del Reto
|
OBSERVACIONES
CONCLUSIONES
Comentarios
Publicar un comentario