En la presente entrada, vamos a realizar mediante el Pic 18F4550 una lectura de la tensión analógica para poder visualizarla en el PC con Hyperterminal vía RS232.
Primero realizaremos una simulación en Proteus, y una vez comprobado lo cargaremos en una Pic control.
Primero realizaremos una simulación en Proteus, y una vez comprobado lo cargaremos en una Pic control.
Diseño en proteus archivos *.cof y *.c: Descarga
Tenemos que localizar según el datasheet de Pic 18F4550 los pines que podemos configurar como analógicos. que son el RA0, RA1,RA2,RA3.
Realizaremos el esquemático en Proteus basándonos en el esquema del microcontrolador realizado anteriormente, incluyendo un potenciómetro para poder variar la señal analógica que entra y permanecerá todo el sistema de comunicación RS232. Finalmente insertaremos en el pic el archivo generado en *.C y se pueda realizar una simulación que nos permita verificar que el funcionamiento de lo programado es correcto
Este es el esquemático diseñado en Proteus.
La lectura analógica la realizamos por el puerto RA0. Conectamos el Lcd en el puerto D tanto los pines de control como los de datos y mediante el Pin RC6 transferimos los datos a Virtual terminal.
Para la simulación en Proteus, no es necesario el Max232 para adaptar niveles de TTL a RS232, pero físicamente lo necesitaremos.
Ahora vamos a proceder a mostrar el código realizado para el correcto funcionamiento de la siguiente práctica:
////////////////////////////////////////////////////////////////////////////////////
// AUTOR: CESAR ZAZO SERRANO (22/11/2012)//
////////////////////////////////////////////////////////////////////////////////////
// PROGRAMA: Conversor A\D VERSIÓN: 1.0
// DISPOSITIVO: PIC 16F4550 COMPILADOR: PCW vs4.104
// Entorno IDE: MPLAB IDE v8.20 SIMULADOR: Proteus 7.8
// TARJETA DE APLICACIÓN: PICDEM2-PLUS DEBUGGER: ICD2
////////////////////////////////////////////////////////////////////////////////////
// NOTAS: Leer voltaje de un potenciometro con un conversor AD y comunicarlo
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
#include <18f4550.h>
#device adc=10
#FUSES INTHS,MCLR,PUT,BROWNOUT
#use delay(INTERNAL=1MHZ)
#use rs232 (BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7) //pines que utiliza la conexión Rs232 "Tx y Rx"
////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES //////////////////
////////////////////////////////////////////////////////////////
float voltaje;
long int valor;
const long int escala=1023; // la escala es 2 elevado a 10 (bits) 0-1023
const float v_max=5.2; // voltaje máximo hallado
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES ////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//void (calcula_voltaje )
//{(voltaje=(v_max * valor/escala);//5 vol. max por el valor leído entre 1024 porque 2 ala 10 son 1024 bits)
//}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL ////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
do{
// Estos tres pasos son imprescindibles para el uso del CAD
//==========================================================
setup_adc(ADC_CLOCK_INTERNAL); //Seleccionamos el reloj de conversión/ INTERNAL es por el reloj interno del PIC
setup_adc_ports(AN0); //Selecciona terminales
set_adc_channel(0); // Selecciona canal
////////////////////////////////////////////////////////////////////////////////////////
delay_us(100);//un retardo de 100 us para establecer los puertos
valor=read_adc();//el valor es el que lee el conversor analogico digital
voltaje=(v_max * valor/escala);
printf("Voltaje:%f\r",voltaje);//lo que deseamos obtener en la muestra
printf("Valor:%ld\r",valor); //
}
while(1);
}
No hay comentarios:
Publicar un comentario