entorno de desarrollo para pic

19
 Universidad Nacional de Quilmes Sistemas Digitales Sistemas Digitales Trabajo Práctico final Implementación de un entorno de desarrollo  para proyectos con microcontroladores Desarrollo: Guillermo Carrera Legajo 4213 Fecha: Julio de 2005. Guillermo H. Carrera 4213 Hoja 1 de 19

Upload: anomiatotal

Post on 08-Jul-2015

94 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 1/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Sistemas Digitales

Trabajo Práctico final

Implementación de un entorno de desarrollo

 para proyectos con microcontroladores

Desarrollo: Guillermo CarreraLegajo 4213

Fecha: Julio de 2005.

Guillermo H. Carrera – 4213 Hoja 1 de 19

Page 2: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 2/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Consigna.

Desarrollar e implementar un entorno de programación y grabado de un microcontrolador.

Particularmente se aplicara lo desarrollado para implementar el uso de un conversor A/D externo y lacomunicación bi direccional entre un microcontrolador y una PC de escritorio.

Utilidad.

Tanto el software como el hardware desarrollado incrementarán las herramientas a disposición de la

Universidad Nacional de Quilmes, las cuales podrán brindarse como alternativas de los kits de

desarrollo ya utilizados en la universidad. Por lo tanto la finalidad del proyecto se basa en brindar a los

estudiantes un paquete de herramientas con su funcionamiento verificado, de modo tal que cada

alumno que pretenda utilizar un microcontrolador, pueda utilizar este informe a modo de “manual de

uso” para abordar cada proyecto en la instancia de programación y no tener que desarrollar desde el

inicio los entornos de grabación y programación, ni tampoco el hardware necesario.

Objetivos mínimos propuestos.

1) Elección del microcontrolador 

Investigación para la elección del microcontrolador apropiado.

Recopilación de información técnica y análisis de factibilidad de uso.

2) Elección del entorno de programación del microcontrolador.

Investigación sobre el entorno de programación más adecuado para el proyecto.

Obtención del software a utilizar.

Utilización del software para adquirir el manejo del mismo.

3) Elección del software y hardware para el grabado del microcontrolador.

Investigación sobre el esquema software-hardware más conveniente para el proyecto.

Obtención del software a utilizar.

Montaje del hardware para el grabado del microcontrolador.

4) Verificación del funcionamiento del paquete completo de programación del microcontrolador 

Realización de programas a modo de ejemplo para verificar y adoptar el modo de funcionamiento de los entornos de

 programación y grabado.

- Rutinas I/O, Timmers, Conversores, Comunicación RS232, etc

Comprobación del funcionamiento del hardware para grabación y aplicación del microcontrolador.

5) Elección del conversor analógico digital

Investigación para la elección del conversor apropiado.Determinación del uso de un único conversor de dos canales, dos conversores de un canal o un conversor y el conversor 

interno del microcontrolador.

Recopilación de información técnica y análisis de factibilidad de uso.

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-PCInvestigación para la elección del esquema de comunicación más adecuado.

Guillermo H. Carrera – 4213 Hoja 2 de 19

Page 3: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 3/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Implementación de la comunicación microcontrolador-PC.

1) Elección del microcontrolador

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 convenientedibujar 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ásadecuado 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).

• Diseño de la placa: la selección de un microcontrolador concreto condicionará el diseño de la

 placa de circuitos. Debe tenerse en cuenta que quizá usar un microcontrolador barato encarezca el

resto de componentes del diseño.

Guillermo H. Carrera – 4213 Hoja 3 de 19

Page 4: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 4/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Los microcontroladores más populares son:

8048 (Intel). Es el padre de los microcontroladores actuales, el primero de todos. Su precio,

disponibilidad y herramientas de desarrollo hacen que todavía sea muy popular.

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.

80186, 80188 y 80386 EX (Intel). Versiones en microcontrolador de los populares microprocesadores

8086 y 8088. Su principal ventaja es que permiten aprovechar las herramientas de desarrollo para PC.

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ónsobre el funcionamiento y utilizacion del mismo.

Guillermo H. Carrera – 4213 Hoja 4 de 19

Page 5: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 5/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Algunas de las características más relevantes son las que se detallan a continuación:

• Velocidad de operación 20 MHz

• 8K x 14 words de memoria programable FLASH368 x 8 bytes de RAM256 x 8 bytes de EEPROM Data Memory

• Pinout compatible con PIC16C73B/74B/76/77• 14 fuentes de interrupción• Modo de direccionamiento directo, indirecto y relativo• Watchdog Timer (WDT)• In-Circuit Serial Programming  (ICSP)• In-Circuit Debugging• Timer0: 8-bit timer/counter con prescaler • Timer1: 16-bit timer/counter con prescaler • Timer2: 8-bit timer/counter con prescaler y postscaler • Dos módulos Capture, Compare o PWM

• Conversor 10-bit A/D multi-channel• Synchronous Serial Port (SSP) con SPI(Master mode)y I2C(Master/Slave)• Universal Synchronous Asynchronous Receiver Transmitter (USART/SCI)• Parallel Slave Port (PSP)

2) Elección del entorno de programación del microcontrolador.

Como condición inicial para le elección del software de programación se tuvo en cuenta la necesidadde 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 esasí 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.

Guillermo H. Carrera – 4213 Hoja 5 de 19

Page 6: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 6/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

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 ylos 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:

- CC5X Versión 3.2

- CCSC Versión 3.216

Si bien ambos compiladores pueden utilizarse en el entorno MPLAB, se optó por utilizar el CCSC quese 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.

3) Elección del software y hardware para el grabado del microcontrolador.

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 quecomprarla). 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

Guillermo H. Carrera – 4213 Hoja 6 de 19

Page 7: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 7/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

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 lascompuertas 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 mismaa la red de alimentación de 220V 50Hz.

Figura 1 - Diagrama del circuito a utilizar para el grabado de PIC’s

4) Verificación del funcionamiento del paquete completo de programación delmicrocontrolador

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.

Guillermo H. Carrera – 4213 Hoja 7 de 19

Page 8: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 8/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

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.

5) Elección del conversor analógico digital

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 

----- Original Message -----From: Iris Feliciano To: [email protected] 

Cc: [email protected] Sent: Wednesday, April 06, 2005 11:11 AMSubject: FW: ask about MCP3221 / consulta sobre MCP3221

Estimado Sr. Carrera:Buenos dias, gracias por su comunicación con Ibars Electronics y por su interes en los productos de nuestrarepresentada Microchip Technology.Permitame informarle que el programa de muestras implementado por Microchip está enfocado exclusivamenteal sector comercial. Siendo así, con mucho gusto procederemos a cotizarle el convertidor solicitado.Actualmente no disponemos de este en stock pero podemos solicitarlo a la Division de Pequeñas Ordenes deMicrochip y se demora entre 5 a 7 días en que recibamos la mercancía:MCP3221A5T-I/OT 1 a 25 piezas @ $2.41 cada piezaSu mercancía puede ser despachada vía DHL hacia su destino por un costo de $25.00 dolares. Como forma depago aceptamos tarjeta de crédito Visa o Master Card.Nuevamente agradecemos su comunicación y estaremos en espera de su respuesta para procesar su ordensegún sus instrucciones.Respetuosamente,Iris FelicianoOperations AssistantIbars Electronics Corp.Phone: (954) 680-7989Fax: (954) 680-6589http://www.ibars.com

From: Guillermo Carrera [mailto:[email protected]]

Sent: Monday, April 04, 2005 12:02 PMTo: [email protected]

Guillermo H. Carrera – 4213 Hoja 8 de 19

Page 9: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 9/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Cc: [email protected]; [email protected] Subject: ask about MCP3221 / consulta sobre MCP3221

Dear Sirs IbarsI'm writing you from National University of Quilmes (Argentina), career of Industrial Automation and Control

Engineering.We are developing a new project where we use a micro procesor PIC and an A/D converter by I²C. We aretrying to use Microchip devices, but we can't get in Argentina your MCP3221 converter. We asked for it toMicrochip representative in Argentina (Cika Electrónica), and they adviced us to contact straight you.We want to purchase three units of that model. Cika said they can't ask Microchip for so low quantity, andadvice us to get them as "samples". Anyway, we are prepared to pay for them and for delivery costs.Please, we need you advice us about steps to get them.I would appreciate very much your cooperation, and I will be waiting for your answer.Thank you very much in advance!Best regards

Señores IbarsMe 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 unacomunicació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 elconversor MCP3221. De aquí se desprende nuestra necesidad de comunicarnos con Uds. ya que elrepresentante 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 personalde 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 aabonar 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 SacoUniversidad 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

Guillermo H. Carrera – 4213 Hoja 9 de 19

Page 10: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 10/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

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:

- MOSI (Master Output/Slave Input)

- MISO (Master Input/Slave Output)

- SCLK (Serial Clock),

- SS (Slave Selector).

La comunicación se inicia desde el dispositivo maestro (microcontrolador) al colocar en bajo la señal

en el canal SS del dispositivo esclavo. El primer pulso de reloj recibido con el SS en bajo y MOSI en

alto establece el bit de strart (ver Figura 2).

La comunicación continúa desde el dispositivo maestro escribiendo cuatro bits de configuración en el

dispositivo esclavo desde el canal MOSI. Los cuatro bits de configuración establecen el modo de

conversión del dispositivo esclavo, cada uno de ellos representa lo siguiente:

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:

Configuración del conversor Figura 2 – Comunicación SPI

 

Guillermo H. Carrera – 4213 Hoja 10 de 19

Page 11: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 11/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

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 estableceel resultado de la conversión colocando al inicio el bit más significativo en el canal MISO.

A continuación se detalla un algorítmo de lectura de dos canales analógicos de 0 a 5V que se imprimen

vía RS232.

void main(){

long int value;adc_init();printf("Sampling:\r\n");do

{delay_ms(1000);value = read_analog(0);printf("\n\rCh0: ");display_data( value );

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);

}

void write_adc_byte(BYTE data_byte, BYTE number_of_bits){

BYTE i;delay_us(2);for(i=0; i<number_of_bits; ++i) {

output_low(MCP3208_CLK);if((data_byte & 1)==0)

output_low(MCP3208_DIN);elseoutput_high(MCP3208_DIN);

data_byte=data_byte>>1;delay_us(50);output_high(MCP3208_CLK);delay_us(50);

}}

BYTE read_adc_byte(BYTE number_of_bits){BYTE i,data;data=0;for(i=0;i<number_of_bits;++i){

output_low(MCP3208_CLK);delay_us(50);shift_left(&data,1,input(MCP3208_DOUT));output_high(MCP3208_CLK);

Guillermo H. Carrera – 4213 Hoja 11 de 19

Page 12: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 12/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

delay_us(50);}return(data);

}

long int read_analog_mcp(BYTE channel, BYTE mode){int l;long int h;BYTE ctrl_bits;

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);}

long int read_analog( BYTE channel ) // Auto specifies single mode{

return read_analog_mcp( channel, 1);}

void convert_to_volts( long int data, char volts[6]){

BYTE i, d, div_h, div_l;long int temp,div;div=0x3330;for(i=0;i<=4;i++){

temp=data/div;volts[i]=(BYTE)temp+'0';if(i==0){volts[1]='.';i++;}

temp=div*(BYTE)temp;data=data-temp;div=div/10;

}volts[i]='\0';

}

Guillermo H. Carrera – 4213 Hoja 12 de 19

Page 13: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 13/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Precauciones referentes al uso del conversor 

1) Dada la precisión (12 bits) del conversor, debe eliminarse toda fuente de ruido que pueda afectar a

la medición. Son prácticas aconsejables la inclusión de un filtro pasa bajos en la entrada analógica

del conversor y una correcta separación de masas analógicas y digitales.2) Debe tenerse principal precaución de no aplicar tensión en el pin de referencia (Vref) si el chip no

está alimentado en Vdd, de ocurrir esa secuencia el conversor se “quema”. Para evitar ese

 problema puede colocarse una resistencia en serie en la entrada Vref, que es de alta impedancia, de

ese modo se limita la corriente aplicada.

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

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

A continuación se explica cada una:

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:

Anulación del mópdulo CCP: CCP_OFF

Seteo del modulo CCP como conteo: CCP_CAPTURE_FE Incrementa en pulso descendente

CCP_CAPTURE_RE Incrementa en pulso descendenteCCP_CAPTURE_DIV_4 Incrementa luego de 4 pulsos

CCP_CAPTURE_DIV_16 Incrementa luego de 16 pulsos

Seteo del módulo CCP como comparador: CCP_CMP

Seteo del módulo CCP como PWM: CCP_PWM

b) setup_timer_2 (mode,  period ,  postscale)

El timmer2 es un contador de 8 bits, y la función setup_timmer_2 se utiliza para inicializar el modo de

funcionamiento del mismo, se debe prestar principal atención al seteo del timmer ya que de ello

depende la frecuencia del PWM

Guillermo H. Carrera – 4213 Hoja 13 de 19

Page 14: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 14/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

- mode especifica la división del oscilador y puede tomar:

T2_DISABLED

T2_DIV_BY_1

T2_DIV_BY_4

T2_DIV_BY_16- period es un entero de 0 a 255 que determina en que valor se resetea el timmer. (recordar que cuenta

8 bits)

- postscale es un número que determina cuantos reseteos del timmer deben ocurrir para que se

 produzca la interrupción o evento.

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 cuentaque 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 decomunicació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. Acontinuación se exponen sus principales características

Guillermo H. Carrera – 4213 Hoja 14 de 19

Page 15: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 15/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

La conexión del mismo es la siguiente:

Funciones para la comunicación RS232.

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:

 

Guillermo H. Carrera – 4213 Hoja 15 de 19

En el lateral derecho de cada función se

indica la página del manual CCSC, en

donde se detalla el uso de cada una de lasfunciones.

Page 16: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 16/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Algorítmo desarrollado.

El código utilizado para verificar el funcionamiento de los items desarrollados anteriormente es el

siguiente:

#include <16F873A.h>#fuses HS,NOWDT,NOPROTECT#use delay(clock=20000000)#use rs232(baud=38400, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12#include <mcp3208m1.c>#include <stdlib.h>#include<ctype.h>

//---- Interrupción por overflow Timer0#INT_TIMER0void control(void){output_toggle(PIN_A5);}

void main(){

//-------------- Definición de variableslong int value_0=0,value_1=0 ; //lectura del conversor A/Dchar puerto; //Entrada desde RS232long ct_pwm; //ciclo de trabajo PWMchar escribir; //bandera para empezar a escribir int transmitir; //variable para seguir escribiendochar trama[4] ;int cont=0; //cantidad de conversiones transmitidas//-------------- Inicialización de variablesct_pwm=0; //Rango 0 a 512//-------------- Seteosset_tris_a(0xb100110); // Setea modo port Asetup_ccp1(CCP_PWM); // Configura CCP1 como PWMsetup_timer_2(T2_DIV_BY_4, 127, 1); // período=(1/clock)*4*t2div*(period+1)=512micS=>1,95Khset_pwm1_duty(ct_pwm); // Setea ciclo de trabajosetup_timer_0(RTCC_DIV_16); // período=clock/16/256/4 256=8 bit timer0//-------------- Inicializacionesadc_init(); //inicializa el conversor enable_interrupts(INT_TIMER0); //habilita interrupción del timmer0enable_interrupts(GLOBAL);

 do

{//------------- Lectura RS232if(kbhit()) //Si debe leer el puerto

{gets(trama);escribir=trama[0];}

 //---------- Lectura del Conversor value_0 = read_analog(0);value_1 = read_analog(1);

 //---------- Escritura RS232if(escribir==73) //Recibe una I parea empezar a transmititr 

{ct_pwm=512;set_pwm1_duty(ct_pwm); // Setea ciclo de trabajo

printf("p");printf("%04lu",value_0); // Primer Canalprintf("s");printf("%04lu",value_1); // Segundo Canalprintf("t"); // Ciclo de trabajo

printf("%03lu",ct_pwm); 

}

Guillermo H. Carrera – 4213 Hoja 16 de 19

Page 17: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 17/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

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 adc_init() //inicializa el conversor {

output_high(MCP3208_CS);}

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);}

}

BYTE read_adc_byte(BYTE number_of_bits) //Lee los bits de conversión{

BYTE i,data;data=0;for(i=0;i<number_of_bits;++i)

{output_low(MCP3208_CLK);delay_us(1);

shift_left(&data,1,input(MCP3208_DOUT));output_high(MCP3208_CLK);delay_us(1);}

return(data);}

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

Guillermo H. Carrera – 4213 Hoja 17 de 19

Page 18: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 18/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

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:

Guillermo H. Carrera – 4213 Hoja 18 de 19

Page 19: Entorno de Desarrollo Para PIC

5/9/2018 Entorno de Desarrollo Para PIC - slidepdf.com

http://slidepdf.com/reader/full/entorno-de-desarrollo-para-pic 19/19

 

Universidad Nacional de Quilmes

Sistemas Digitales

Guillermo H. Carrera – 4213 Hoja 19 de 19