Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Entorno de Desarrollo para PIC
Entorno de Desarrollo para PIC
Sistemas Digitales
Sistemas Digitales
Consigna.
Utilidad.
6) Comunicación microcontrolador-conversor
Investigación sobre el esquema I²C
Implementación de la comunicación microcontrolador-conversor
7) Actuación PWM
Investigación sobre aplicación PWM del microcontrolador
Implementación del PWM
8) Comunicación microcontrolador-PC
Investigación para la elección del esquema de comunicación más adecuado.
Existe una gran diversidad de microcontroladores. Quizá la clasificación más importante sea entre
microcontroladores de 4, 8, 16 ó 32 bits. Aunque las prestaciones de los microcontroladores de 16 y 32
bits son superiores a los de 4 y 8 bits, la realidad es que los microcontroladores de 8 bits dominan el
mercado y los de 4 bits se resisten a desaparecer. La razón de esta tendencia es que los
microcontroladores de 4 y 8 bits son apropiados para la gran mayoría de las aplicaciones, lo que hace
absurdo emplear micros más potentes y consecuentemente más caros.
También los modernos microcontroladores de 32 bits van afianzando sus posiciones en el mercado,
siendo las áreas de más interés el procesamiento de imágenes, las comunicaciones, las aplicaciones
militares, los procesos industriales y el control de los dispositivos de almacenamiento masivo de datos.
A la hora de escoger el microcontrolador a emplear en un diseño concreto hay que tener en cuenta
multitud de factores, como la documentación y herramientas de desarrollo disponibles y su precio, la
cantidad de fabricantes que lo producen y por supuesto las características del microcontrolador (tipo de
memoria de programa, número de temporizadores, interrupciones, etc.):
Antes de seleccionar un microcontrolador es imprescindible analizar los requisitos de la aplicación:
• Procesamiento de datos: puede ser necesario que el microcontrolador realice cálculos críticos en
un tiempo limitado. En ese caso debemos asegurarnos de seleccionar un dispositivo
suficientemente rápido para ello. Por otro lado, habrá que tener en cuenta la precisión de los
datos a manejar: si no es suficiente con un microcontrolador de 8 bits, puede ser necesario acudir
a microcontroladores de 16 ó 32 bits, o incluso a hardware de coma flotante. Una alternativa más
barata y quizá suficiente es usar librerías para manejar los datos de alta precisión. -
• Entrada Salida: para determinar las necesidades de Entrada/Salida del sistema es conveniente
dibujar un diagrama de bloques del mismo, de tal forma que sea sencillo identificar la cantidad y
tipo de señales a controlar. Una vez realizado este análisis puede ser necesario añadir periféricos
hardware externos o cambiar a otro microcontrolador más adecuado a ese sistema.
• Memoria: para detectar las necesidades de memoria de nuestra aplicación debemos separarla en
memoria volátil (RAM), memoria no volátil (ROM, EPROM, etc.) y memoria no volátil
modificable (EEPROM).
• Ancho de palabra: el criterio de diseño debe ser seleccionar el microcontrolador de menor ancho
de palabra que satisfaga los requerimientos de la aplicación. Usar un microcontrolador de 4 bits
supondrá una reducción en los costes importante, mientras que uno de 8 bits puede ser el más
adecuado si el ancho de los datos es de un byte. Los microcontroladores de 16 y 32 bits, debido a
su elevado coste, deben reservarse para aplicaciones que requieran sus altas prestaciones
(Entrada/Salida potente o espacio de direccionamiento muy elevado).
8051 (Intel y otros). Es sin duda el microcontrolador más popular. Fácil de programar, pero potente.
Está bien documentado y posee cientos de variantes e incontables herramientas de desarrollo.
68HC11 (Motorola y Toshiba). Es un microcontrolador de 8 bits potente y popular con gran cantidad
de variantes.
683xx (Motorola). Surgido a partir de la popular familia 68k, a la que se incorporan algunos
periféricos. Son microcontroladores de altísimas prestaciones.
PIC (MicroChip). Familia de microcontroladores que gana popularidad día a día. Fueron los primeros
microcontroladores RISC.
Es preciso resaltar en este punto que existen innumerables familias de microcontroladores, cada una de
las cuales posee un gran número de variantes.
En el caso particular de este proyecto la elección del microcontrolador se encontró influenciada por el
uso en el entorno laboral de quién suscribe, de la familia de microcontroladores PIC. Por lo tanto casi a
modo de necesidad se optó por utilizar un microcontrolador PIC, para adquirir experiencia con este
tipo de microprocesadore. Por lo cual el proceso de elección tuvo su curso en sentido opuesto, es decir
en lugar de enumerar las prestaciones que debía cumplir el microprocesador y en base a ello
seleccionar el más adecuado, se tomó el PIC16F873A, que es el que utilizado en dicho entorno laboral,
y se verificó si el mismo cumplía los requisitos necesarios. Ampliando el estadio actual de la industria
nacional, puede verificarse que los microcontroladores PIC son los mas utilizados.
Los detalles más importantes que hacen que la familia de microcontroladores PIC sea la más utilizada
hoy en día son los siguientes:
- Sencillez de manejo: Tienen un juego de reducido de instrucciones (35).
- Buena información, fácil de conseguir y económica.
- Precio: Su coste es comparativamente inferior al de sus competidores.
- Poseen una elevada velocidad de funcionamiento. Buen promedio de parámetros: velocidad,
consumo, tamaño, alimentación, código compacto, etc.
- Herramientas de desarrollo sencillas y de bajo costo. Muchas herramientas software se pueden
obtener libremente a través de Internet desde Microchip (http://www.microchip.com).
- Existe una gran variedad de herramientas hardware que permiten grabar, depurar, borrar y comprobar
el comportamiento de los PIC.
En la hoja de datos anexa como 16F873.pdf del CD adjunto al informe, puede encontrarse el manual
de uso de la familia de microcontroladores 16F8XX, en el cual se encontrará completa información
sobre el funcionamiento y utilizacion del mismo.
Algunas de las características más relevantes son las que se detallan a continuación:
Como condición inicial para le elección del software de programación se tuvo en cuenta la necesidad
de programar en un lenguaje de alto nivel y en particular en lenguaje C que es el más difundido para
este tipo de aplicaciones. La necesidad de utilizar un lenguaje de alto nivel radica en las
complicaciones que pueden surgir sobre todo en la implementación de las rutinas de comunicación con
distintos periféricos. Dada la complejidad de dichas rutinas, se consideró que el uso del lenguaje
ensamblador podría acarrear muchas complicaciones.
Siguiendo los lineamientos de la elección del microcontrolador, se intentó implementar el uso del
entorno de programación utilizado en el entorno laboral de quien suscribe, de ese modo se comenzó a
investigar y utilizar el software PicAntIDE.
El software PicAntIDE en su versión 5.1 incluye un compilador en C (BoostC compiler), con lo cual
no se necesita más que la instalación del mismo para poder programar y compilar en lenguaje C. Tal es
así que se comenzaron a programar e implementar pequeñas rutinas de manejo de puertos. Pero el
problema que se presentó con dicho software, es que el mismo no posee un emulador integrado para
poder simular el funcionamiento del PIC y así poder verificar el programa realizado.
Luego de varios intentos fallidos de agregar al paquete un emulador y no obtener los resultados
esperados, se opto por utilizar otro entorno de programación.
El siguiente entorno investigado fue el Mplab. El atractivo de utilizar dicho entorno se basa en que es
el software desarrollado por Microchip, empresa que desarrolla la familia de microcontroladores PIC,
y además por ser el más difundido dentro de los entornos de programación de microcontroladores.
En el caso del entorno MPLAB, la principal dificultad radica en que solo la última versión del paquete,
posee integrado un compilador en C. Cabe aclarar que la última versión del software no tiene
distribución gratuita, por lo cual es muy complicado poder utilizar el mismo si no se cuanta con la
licencia correspondiente.
Teniendo en cuenta lo anterior se optó por utilizar una versión anterior, de distribución gratuita, a la
cual se le puede agregar un compilador en C. La versión anterior que se puede obtener en la página
oficial de Microchip es la versión 7.10. Dicha versión de MPLAB se encuentra adjunta al informe en
el CD correspondiente bajo el nombre MPLAB710. En el CD también se encuentra una guía de
introducción al entorno (MPLAB tutorial.pdf) donde se detalla el proceso de instalación del mismo y
los pasos a seguir para realizar los primeros proyectos, además de un patch de actualización del
programa (ver “guía para uso de entorno microcontroladores”).
El siguiente paso fue la elección del compilador de lenguaje C a utilizar, para ello se buscó en Internet
cuales eran los compiladores más difundidos que soporta el MPLAB 7.10, llegando a la determinación
de elegir entre dos compiladores a saber:
Si bien ambos compiladores pueden utilizarse en el entorno MPLAB, se optó por utilizar el CCSC que
se diferencia del CC5X al poseer mayor cantidad de funciones propias y librarías a incluir.
Por ejemplo, para el caso de las comunicaciones vía I²C y SPI, el compilador CCSC incluye funciones
propias de lectura, escritura y configuración de los periféricos.
El compilador CCSC no es de distribución gratuita, de todos modos se adjunta al informe en el CD
correspondiente.
La instalación del mismo no es sencilla y debido a la difusión de algunos “parches” se deben seguir los
pasos indicados en la guía para uso de entorno microcontroladores anexa a este informe.
El compilador CCSC posee una completa bibliografía sobre el uso de sus funciones internas, en el CD
adjunto se brinda el manual del compilador bajo el nombre CCSC manual.pdf donde se puede
encontrar una guía completa sobre el uso del compilador, el uso de sus funciones específicas así como
también ejemplos de aplicación.
La gran cantidad de información que se obtiene en internet evidencia la gran cantidad de placas que
existen para el grabado de los PIC. En su mayoría se trata de empresas que venden el kit de desarrollo
la placa de grabación y el software (programmer) que generalmente es compatible con Mplab. De ese
modo puede utilizarse el entorno Mplab para todas las tareas necesarias de desarrollo que son
programación, compilado, simulación y grabación.
Lamentablemente, por lo investigado, es dificultoso conseguir un programmer de distribución gratuita
que además brinde la posibilidad de acceder al diseño de la placa de grabación (sin tener que
comprarla). Planteado el problema, se optó por utilizar un programmer en forma individual al entorno
Mplab, con lo que se concluyó en la utilización del software Icprog y una placa de grabación que cuyo
funcionamiento se detalla a continuación:
(Extracto de http://www.pablin.com.ar/electron/circuito/mc/ppp/index.htm)
El funcionamiento del circuito es muy simple: los pines del puerto paralelo 2, 3, 5 y 10 (Ver figura 1)
permiten interconectar el circuito con la PC. El pin 2 es el encargado de traer los datos (desde la PC
hacia el integrado). El pin 3 es el envío de los pulsos de reloj (desde la PC hacia el integrado). En tanto
el pin 10 permite a la PC leer los datos desde el programador. El pin 5, por último, es el encargado de
controlar la tensión de programación (Vpp) necesaria para leer o escribir en un PIC.
La tensión de programación VPP es necesaria para indicarle al PIC que deseamos leerlo o programarlo.
Si en este pin (que es compartido con la entrada de RESET del micro) ponemos masa, el PIC sufre un
reset, si ponemos el pin en alto (5v) el PIC trabaja normalmente mientras que si ponemos el pin a 12v
el PIC se inicializa en modo programación, quedando dos de los pines de E/S destinados a datos
(SDA) y reloj (SCL).
El integrado 74LS04 está formado internamente por seis buffers inversores. Estos permiten por un lado
obtener niveles TTL a su salida y por el otro no cargar de forma excesiva al puerto. Se colocan las
compuertas en serie para obtener a la salida el mismo nivel de entrada, sin invertir. Las resistencias de
1K dan seguridad al sistema para evitar que circule corriente excesiva.
El control de la tensión de programación lo efectúa el transistor NPN. Estando el pin 5 del puerto
paralelo a masa (en 0) tendremos al transistor abierto por lo que la corriente proveniente de +V (12v)
pasará por el diodo LED el cual no encenderá y se portará como un diodo común polarizado en directa,
pasará por la resistencia limitadora de corriente del LED la cual no ofrecerá mucha resistencia y será
inyectada al PIC en su terminal MCLR/VPP. Poniendo en 1 el bit que controla el pin 5 del puerto
paralelo, en cambio, el transistor se cierra y hace circular masa hacia el PIC haciendo, además,
encender el LED al quedar a masa el otro extremo de la resistencia limitadora de corriente.
La placa a disposición de la universidad se diferencia de la representada en la figura 1 ya que en la
misma se le agregó un transformador 220/12V y un circuito rectificador para poder conectar la misma
a la red de alimentación de 220V 50Hz.
Una vez definido el paquete de desarrollo se realizaron pequeños programas utilizando las funciones
internas del compilador C para verificar el funcionamiento del entorno, de ese modo con rutinas cortas
de manejo de puertos I/O, Timmers, interrupciones, etc. Se puede lograr un fluido manejo del entorno
de programación y simulación.
Las rutinas aplicadas no están incluidas en este informe dada la sencillez de las mismas, pero cada una
de las aplicaciones puede apreciarse en el código del proyecto final, donde se utilizan funciones de
comunicación con los periféricos, manejo de los puertos, timmers e interrupciones.
Al realizar dichas implementaciones, se pude verificar el correcto funcionamiento del entorno
desarrollado. Un resumen del manejo del entorno puede encontrarse en la “ guía de uso de entorno de
desarrollo de microcontroladores” anexa.
Por otro lado en el manual del compilador C, puede encontrarse una detallada explicación de las
funciones internas del compilador, acompañado por buena cantidad de ejemplos que ayudan a reforzar
los conceptos.
Como objetivo del proyecto se había planteado el uso de un conversor externo para aumentar la
presición de las lecturas. Se partió de la base que el conversor interno del PIC es de 10 bits, con lo que
una condición fundamental era que el conversor tenga una resolución mayor a 10 bits, por ejemplo 12,
14 o 16. Por otro lado la idea inicial fue realizar una comunicación con el conversor vía I²C, si bien ese
protocolo de comunicación no es el más indicado para un dispositivo maestro con un solo esclavo, se
optó por esa comunicación por la enseñanza didáctica que se podría haber obtenido de la aplicación.
Otra de las condiciones que se impuso fue que el conversor fuera de la línea Microchip, simplemente
por el hecho de utilizar un esquema Microprocesador-perisférico de una misma marca para llevar
cierta correlación entre la bibliografía y la información que se pudiera conseguir de cada componente.
Siguiendo las imposiciones anteriores se seleccionó el conversor MCP3221, el cual cumple con todas
las condiciones, además de poseer varios canales eliminando así la necesidad de utilizar el conversor
A/D interno del micro.
El problema surgió al intentar adquirir dicho conversor, ya que el representante en argentina de
Microchip (Cika) no lo poseía en stock y el representante para Latinoamérica (Ibars) aplica costos de
envío sustancialmente elevados.
En siguiente correo resume lo anterior
Señores Ibars
Me comunico en representación de la Universidad Nacional de Quilmes - Ingeniería en Automatización y
Control Industrial por el siguiente motivo: Estamos desarrollando un proyecto en el cual realizaremos una
comunicación mediante un microcontrolador PIC y un conversor A/D vía I²C. En nuestro afán de utilizar
productos de la línea Microchip, se nos presenta el problema de no poder conseguir en la Argentina el
conversor MCP3221. De aquí se desprende nuestra necesidad de comunicarnos con Uds. ya que el
representante de Microchip en Argentina, Cika Electrónica, no posee el mismo y nos encomendó a ustedes.
Por tal motivo nuestro interés radica en poder adquirir 3 (tres) unidades del mencionado conversor. El personal
de Cika nos indicó que deberíamos tratar el tema como "solicitud de muestras" ya que no se pueden solicitar
envíos por tan pequeñas cantidades, no obstante queremos que tengan en cuenta que estamos dispuestos a
abonar el precio del producto y los gastos de envío de ser necesario.
Apreciaría que me indiquen que pasos debemos seguir para poder obtener los mismos.
A espera de vuestra respuesta saludo a Uds. atentamente y les adjunto los datos de nuestra Universidad.
Guillermo H. Carrera.
Estudiante. Legajo 4213.
Docentes a cargo del proyecto: Sebastián Mallo - Roberto Saco
Universidad Nacional de Quilmes - Area Automatización y Control Industrial.
Av. Calchaquí 5800 km 23.5 - Florencio Varela (CP 1888)
Buenos Aires - Argentina.
Tel: (5411) 4275-7714 Fax: (5411) 4275-7716.
http://iaci.unq.edu.ar/
Dado el elevado costo de adquisición del conversor MCP3221, se optó por seleccionar otro conversor
de la línea Microchip. Fue así que se optó por utilizar el conversor MCP3208 de Microchip, el cual
cumple las condiciones preestablecidas con la diferencia que para su comunicación utiliza el protocolo
SPI en lugar del protocolo I²C.
Dado que el microcontrolador posee un módulo de comunicación SPI, y que este tipo de comunicación
es más acorde al esquema a implementar (1 maestro – 1 esclavo), se optó por el uso de dicho conversor
En el CD adjunto, se incluye la hoja de datos con las características del conversor, las que en forma
resumida se detallan a continuación:
• 12-bit de resolución
• ± 1 LSB max DNL
• ± 2 LSB max INL (MCP3204/3208-C)
• 8 canales de entrada
• On-chip sample and hold
• interface serial SPI
• 100 ksps max. sampling
6) Comunicación microcontrolador-conversor
Interfaz SPI
La interfaz SPI consta de cuatro señales básicas que cada una de ellas corresponde a una interconexión
de pines entre al microcontrolador y el conversor, las señales son:
1° bit - Modo de conversión. Puede seleccionarse entre modo simple y modo diferencial.
2° a 4° bit - Selección del canal. Puede seleccionarse cualquiera de los 8 canales del conversor.
La función de cada uno de los 4 bits de configuración pueden apreciarse en resumen en la siguiente
tabla:
El conversor muestrea la entrada analogica del canal seleccionado a partir del cuarto pulso de reloj a
partir del bit de start (ver figura 2). Una vez ingresado el bit de configuración D0, es necesario un
pulso más de reloj para completar el período de muestreo y retención. En el siguiente pulso de reloj el
conversor pone en el canal de salida MISO un bit null (0). En los proximos 12 pulsos de reloj establece
el resultado de la conversión colocando al inicio el bit más significativo en el canal MISO.
value = read_analog(1);
printf(" Ch1: ");
display_data( value );
} while (TRUE);
}
Las funciones a utilizar pueden agregarse en el mismo algorítmo o mediante un include y son las
siguientes:
#define MCP3208_CLK PIN_B0
#define MCP3208_DOUT PIN_B1
#define MCP3208_DIN PIN_B2
#define MCP3208_CS PIN_B3
void adc_init()
{
output_high(MCP3208_CS);
}
delay_us(50);
}
return(data);
}
delay_us(200);
if(mode!=0)
mode=1;
output_low(MCP3208_CLK);
output_high(MCP3208_DIN);
output_low(MCP3208_CS);
if(channel==1)
ctrl_bits=4;
else if(channel==3)
ctrl_bits=6;
else if(channel==4)
ctrl_bits=1;
else if(channel==6)
ctrl_bits=3;
else
ctrl_bits=channel;
ctrl_bits=ctrl_bits<<1;
if(mode==1)
ctrl_bits |= 1;
else
ctrl_bits &= 0xfe;
ctrl_bits=ctrl_bits<<1;
ctrl_bits |= 1;
write_adc_byte( ctrl_bits, 7);
h=read_adc_byte(8);
l=read_adc_byte(4)<<4;
output_high(MCP3208_CS);
return((h<<8)|l);
}
7) Actuación PWM
El PIC 16F873 posee dos módulos de captura, comparación o PWM, dichos módulos trabajan
analizando alguno de los dos timers del dispositivo y pueden configurarse para realizar una
comparación, conteo o PWM en base al timmer seleccionado.
Para este caso se utilizó el módulo 1 (CCP1) para implementar un PWM, dicho módulo trabaja con el
timmer2 del PIC. Para la implementación se utilizaron las siguientes funciones internas del compilador
CCSC
a) setup_ccp1 (mode)
Esta función setea el modo de trabajo del CCP1. En modo conteo, cuenta los pulsos del timme1, en
modo comparación genera un evento en el pin de salida cuando el valor de timmer1 se iguala con el
valor inicializado en el cmódulo, y en modo PWM genera una onda cuadrada en el pin de salida.
- mode es una constante válida definida en el archivo .h correspondiente al dispositivo y puede tomar:
c) set_pwm1_duty (value)
Esta función determina la el período que se mantiene la señal activa PWM, es decir determina el ciclo
de trabajo.
- value escribe el registro de 0 bits que determina el ciclo de trabajo del PWM. Debe tenerse en cuenta
que según la velocidad a la que trabaja el oscilador, el registro de 10 bits, puede reducirse a 8. Para
más información, referirse al página 61 de la hoja de datos del PIC16f873.
8) Comunicación microcontrolador-PC
El primer paso a realizar en una comunicación PIC-PC es la adaptación de la etapa física del canal de
comunicación.
Dado que el microcontrolador opera con niveles de tensión TTL (0-5V) y el protocolo RS-232 con niveles de ±3-
12V, se hace necesaria la inclusión de una adaptación de los niveles de tensión utilizados por el PIC.
Uno de los dispositivos más utilizados para realizar dicha adaptación de señal es el chip MAX-232. A
continuación se exponen sus principales características
El compilador CCSC brinda una gran cantidad de funciones de librerías C para el manejo de la
comunicación vía RS232. En el siguiente cuadro se listan las funciones disponibles:
Algorítmo desarrollado.
void main()
{
//-------------- Definición de variables
long int value_0=0,value_1=0 ; //lectura del conversor A/D
char puerto; //Entrada desde RS232
long ct_pwm; //ciclo de trabajo PWM
char escribir; //bandera para empezar a escribir
int transmitir; //variable para seguir escribiendo
char trama[4] ;
int cont=0; //cantidad de conversiones transmitidas
//-------------- Inicialización de variables
ct_pwm=0; //Rango 0 a 512
//-------------- Seteos
set_tris_a(0xb100110); // Setea modo port A
setup_ccp1(CCP_PWM); // Configura CCP1 como PWM
setup_timer_2(T2_DIV_BY_4, 127, 1); // período=(1/clock)*4*t2div*(period+1)=512micS=>1,95Kh
set_pwm1_duty(ct_pwm); // Setea ciclo de trabajo
setup_timer_0(RTCC_DIV_16); // período=clock/16/256/4 256=8 bit timer0
//-------------- Inicializaciones
adc_init(); //inicializa el conversor
enable_interrupts(INT_TIMER0); //habilita interrupción del timmer0
enable_interrupts(GLOBAL);
do
{
//------------- Lectura RS232
if(kbhit()) //Si debe leer el puerto
{
gets(trama);
escribir=trama[0];
}
printf("p");
printf("%04lu",value_0); // Primer Canal
printf("s");
printf("%04lu",value_1); // Segundo Canal
printf("t"); // Ciclo de trabajo
printf("%03lu",ct_pwm);
else
{
ct_pwm=0;
set_pwm1_duty(ct_pwm); // Setea ciclo de trabajo
}
//---------- Lectura del portA
if(input(PIN_A1)==1 || input(PIN_A2)==1)
{
ct_pwm=0;
set_pwm1_duty(ct_pwm);
}
} while (TRUE);
}
ARCHIVO mcp3208m1.c
#ifndef MCP3208_CS
#define MCP3208_CLK PIN_B0
#define MCP3208_DOUT PIN_B1
#define MCP3208_DIN PIN_B2
#define MCP3208_CS PIN_B4
#endif
void write_adc_byte(BYTE data_byte, BYTE number_of_bits) //Escribe los bits de configuración en el conversor
{
BYTE i;
delay_us(1);
for(i=0; i<number_of_bits; ++i) {
output_low(MCP3208_CLK);
if((data_byte & 1)==0)
output_low(MCP3208_DIN);
else
output_high(MCP3208_DIN);
data_byte=data_byte>>1;
delay_us(1);
output_high(MCP3208_CLK);
delay_us(1);
}
}
long int read_analog(BYTE channel) //Arma una trama con los bits de configuración y los 12 bits leídos del conversor
{
int l;
long int h;
BYTE ctrl_bits;
delay_us(100);
output_low(MCP3208_CS);
output_low(MCP3208_CLK);
output_high(MCP3208_DIN);
if(channel==1)
ctrl_bits=4;
else
ctrl_bits=channel;
ctrl_bits=ctrl_bits<<1;
ctrl_bits |= 1;
ctrl_bits=ctrl_bits<<1;
ctrl_bits |= 1;
write_adc_byte( ctrl_bits, 7);
h=read_adc_byte(8);
l=read_adc_byte(4);
output_high(MCP3208_CS);
return((h<<4)|l);
}
El funcionamiento del programa puede verificarse mediante conexión del Pic con una PC mediante
una herramienta de comunicación como por ejemplo el Hiperterminal de Windows.
Al escribir la letra “i” desde el Hiperterminal, se inicializa el proceso de conversión y se setea el PWM
al 100% del ciclo de trabajo. La trama recibida tendrá el siguiente formato:
p D1 D2 D3 D4 s D1 D2 D3 D4 t D1 D2 D3
Donde los 4 datos luego de la letra “p” representan el valor convertido del canal 0 de 0 a 4096 (12
bits), los datos seguidos por “s” los del canal 1 y los datos seguidos por “t” el valor seteado del ciclo de
trabajo de 0 a 512 (9 bits). Para verificar el funcionamiento del portA, si se pone un bajo ”0” en el pin
A1 o A2, el ciclo de trabajo pasa a 0%. También puede verificarse el funcionamiento de las
interrupciones midiendo con un osciloscopio el pin A5, donde puede observarse el toggle del mismo.
El circuito utilizado es el siguiente: