Sobre mi.

Mi foto
Santander, CANTABRIA, Spain
Bienvenido a mi Blog, soy César Zazo Serrano y os mostraré las actividades realizadas durante el curso 2012/2013 en la asignatura de desarrollo y construcción de prototipos electrónicos que imparte nuestro profesor Don José Luis Del Val en el Centro Integrado De Formación Profesional Nº1 situado en Peñacastillo.

martes, 11 de diciembre de 2012

Conversor analógico digital


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.

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