Teletronix Edu 67J50

Page 1

Š Teletronix, Mar del Plata, Argentina

i


67J50

Manual de Uso


Edición para CCS

Teletronix Edu 67J50

Carta de bienvenida

Quiero agradecerle por habernos hecho partícipes de su emprendimiento, ya sea en la labor educativa, en el aprendizaje de nuevas tecnologías, o en la exploración del vasto universo de los sistemas electrónicos embebidos. Quiero contarle además que estamos orgullosos del producto logrado, y que su gran aceptación por el público nos impulsa a seguir mejorándolo, como lo venimos haciendo desde el inicio. Para continuar de esta manera su aporte es fundamental, y es por eso que lo invito a que nos comente sus inquietudes, dudas y sugerencias, y lo invito también a participar del foro sobre el tema que se encuentra en www.teletronix.com.ar/edu/foro/, donde podrá encontrar respuestas a muchas preguntas y, por qué no, enriquecer con sus experiencias a los demás foristas. La serie de placas de desarrollo Teletronix Edu fueron diseñadas para ser utilizadas como herramientas didácticas, están dirigidas a estudiantes, docentes y a la gran cantidad de entusiastas que día a día se suman a la comunidad de desarrolladores de sistemas embebidos. Pensando en ello, las placas y sus accesorios cuentan con elementos y características especiales, como por ejemplo la documentación, dentro de la que se incluyen los circuitos esquemáticos completos, con listas de componentes ii

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

y las hojas de datos de todos los componentes electrónicos, ejemplos de aplicación para varios lenguajes de programación, además de información útil para su uso y mejor aprovechamiento, y una colección de software de aplicación que incluye compiladores y otras herramientas útiles durante el desarrollo de proyectos. Sobre la placa va a encontrar una clara identificación de los componentes, subsistemas y puntos de prueba, en los que podrá conectar instrumentos y medir con facilidad las señales que resulten de interés en cada práctica, como las líneas de datos y reloj en buses de comunicación, salidas de sensores analógicos, la señal de reloj del sistema, etc. Con el fin de mejorar la experiencia en el uso de nuestras herramientas es que cada placa de desarrollo viene equipada con una serie de componentes anexos al dispositivo principal (microcontrolador, FPGA, CPLD, DSP, etc.), haciéndola muy completa sin necesidad de agregarle componentes externos para desarrollar una buena cantidad de proyectos más que interesantes. Además de los componentes clásicos que se encuentran en la mayoría de las herramientas de desarrollo, como LEDs, interruptores, potenciómetros, nuestras placas cuentan con componentes y subsistemas de última tecnología, que la colocan en la cima del estado del arte en el campo de los sistemas embebidos. Para proyectos más ambiciosos, será necesario ampliar la herramienta con dispositivos externos, sensores, actuadores, motores, teclados, que pueden ser montados en un protoboard, sin embargo también pensamos en eso, y diseñamos una línea de módulos de expansión separados por tipos de aplicación, así, encontrará placas para aplicaciones de interfaz de usuario, otras para el control motores, manejo de potencia y mecatrónica, también placas para la construcción de instrumentos de medida, para grabación y © Teletronix, Mar del Plata, Argentina

iii


Edición para CCS

Teletronix Edu 67J50

reproducción de audio, comunicaciones, control industrial y domótico, entre otras disciplinas. Los módulos de expansión pueden usarse con todas las placas programables que tenemos diseñadas hasta el momento, lo que permite cambiar de tecnología de dispositivo sin desperdiciar los componentes que ya tiene en las placas complementarias. En Teletronix creemos firmemente en que nuestros productos brindan un aporte muy importante al desarrollo del aprendizaje, tanto en el nivel de enseñanza media como en nivel superior, y nos gustaría escuchar su opinión, sus dudas, y sus necesidades sobre el tema, para seguir mejorando nuestro producto y brindar un mejor servicio.

Gustavo Murias Teletronix

iv

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Tabla de contenidos

Antes de comenzar… .......................................................................................... 1 Importante: Descargo legal ............................................................................. 1 ¿Qué es Teletronix Edu? ................................................................................. 3 ¿Qué es un microcontrolador? ........................................................................ 5 ¿Qué es un sistema embebido? ...................................................................... 6 Sobre este manual .......................................................................................... 7 Para guiarnos rápidamente ......................................................................... 8 Convención de escritura............................................................................ 10

Mi nueva placa de desarrollo ........................................................................... 11 Precauciones y Cuidados............................................................................... 13 Garantía ....................................................................................................... 14 Notas de la versión ....................................................................................... 15 Abriendo la caja… ......................................................................................... 17 Reconociendo las partes de la placa .............................................................. 18 ¿qué puedo hacer con mi nueva placa? ........................................................ 22

© Teletronix, Mar del Plata, Argentina

v


Edición para CCS

Teletronix Edu 67J50

Lenguajes de programación ............................................................................. 25 Los lenguajes de alto nivel ............................................................................ 28 Lenguajes de alto nivel para PIC18 ................................................................ 29

Trabajando con el compilador CCS ................................................................... 35 Instalación .................................................................................................... 36 Entrono de Desarrollo Integrado (IDE) de CCS ............................................... 37 Archivos de encabezado (.h) ......................................................................... 38 Grabación del programa ............................................................................... 41

El hardware disponible .................................................................................... 43 Microcontrolador PIC18F67J50 ..................................................................... 44 Comparemos con el conocido 4550 .............................................................. 46 Terminales de expansión laterales ................................................................ 49 Fuente de alimentación integrada................................................................. 51 LEDs y Pulsadores programables ................................................................... 52 Entradas Analógicas ...................................................................................... 57 En conversor Analógico a Digital (ADC) ......................................................... 59 Potenciómetro multifunción ......................................................................... 61 Tensión de referencia ................................................................................... 63 Comparadores Analógicos ............................................................................ 66 Sensor de aceleración MMA7331LC .............................................................. 68

vi

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Sensor de temperatura TMP20 ..................................................................... 72 Puerto serie RS-232 ...................................................................................... 74 Memoria EEPROM I2C ................................................................................... 81 Oscilador secundario de 32768Hz ................................................................. 82 Pero… ¿Por qué 32768? ............................................................................ 82 Tarjeta micro SD ........................................................................................... 84 Tarjeta Secure Digital ................................................................................ 86 Conexión con el puerto SPI ....................................................................... 87 Protocolo de comunicación por bus SPI ..................................................... 88 Lectura de datos ....................................................................................... 88 Escritura de datos ..................................................................................... 89 Códigos de reconocimiento....................................................................... 90 Tramas de datos (Data Tokens) ................................................................. 91 Estado de inicialización de la tarjeta .......................................................... 93

Puerto USB 2.0 ............................................................................................. 95

Referencias ...................................................................................................... 98

© Teletronix, Mar del Plata, Argentina

vii



Teletronix Edu 67J50

Manual del usuario

Antes de comenzar… Importante: Descargo legal

Este manual fue escrito con la intención de proveer la información básica necesaria para la correcta utilización del producto Teletronix Edu 67J50. La información relativa a las aplicaciones del dispositivo PIC18F67J50 o de cualquiera de los dispositivos instalados en la placa de desarrollo debe entenderse solo como una sugerencia, y puede ser modificada en versiones posteriores de este manual. No se da ninguna garantía de ningún tipo y no se asume ningún tipo de responsabilidad por parte de Teletronix, ni de su/s titular/es, así como tampoco Microchip Technology Inc., CCS, Freescale Semiconductors, Texas Instruments, ni ninguno de los fabricantes de los componentes utilizados en la placa, de los accesorios provistos o de cualquier tipode software, ya sea que funcione en el microcontrolador o en otro dispositivo, respecto a la exactitud o al uso de tal información, o la infracción de patentes debido a tal uso, y de las normas de compatibilidad electromagnética u otras. El uso de los productos de Teletronix, Microchip Technology Inc., Freescale Semiconductors, Texas Instruments, o CCS como componentes críticos en sistemas de soporte de la vida humana, o en sistemas donde el mal funcionamiento pueda poner en riesgo la seguridad de las personas, no está autorizado excepto por la correspondiente aprobación por escrito del fabricante que corresponda. Los clientes de Teletronix que vendan o utilicen nuestros productos para ése tipo de aplicaciones lo harán bajo su propio riesgo, y serán responsables por los daños que puedan causarse debido al uso inapropiado de © Teletronix, Mar del Plata, Argentina

1


Edición para CCS

Teletronix Edu 67J50

nuestros productos. Esto se hace extensivo a productos o partes de productos diseñados en base a los circuitos o al software que componen los productos de Teletronix. Cada nueva versión o actualización de éste manual reemplaza automáticamente a todas las versiones anteriores. Teletronix se reserva el derecho a hacer cambios en el contenido de éste manual, en todo o en parte, sin que deba mediar previo aviso a los usuarios de éstas modificaciones.

2

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

¿Qué es Teletronix Edu?

Teletronix Edu es una herramienta de desarrollo electrónico para microcontroladores, procesadores de señal digital y FPGAs, que integra una gama de placas con dispositivos programables de diversas plataformas y tecnologías, con una variedad de placas de aplicación, que en conjunto componen un ecosistema modular, dinámico y expandible, con la capacidad de migrar de plataforma, manteniendo el hardware periférico definido, o reemplazar periféricos, incluso utilizando las placas experimentales perforadas. El componente básico es la tarjeta que contiene al dispositivo programable, que puede ser un microcontrolador del tipo PIC18, PIC32, HC08, ARM, un DSP, o un dispositivo lógico programable, como una FPGA o un CPLD. Cada una de éstas placas, además del dispositivo principal y los componentes necesarios para su funcionamiento, está equipada con elementos básicos de entrada/salida como LEDs y pulsadores, memoria, sensores, puertos de comunicación, etc. Existen también otras placas, a las que llamamos tarjetas de expansión o de aplicación que, a diferencia de la anterior, no cuentan con un dispositivo programable, y su finalidad es brindar soporte o ampliar las prestaciones de la placa programable. ATENCIÓN: Las placas de aplicación, a diferencia de las programables, no pueden usarse individualmente, ya que no cuentan con un dispositivo que controle los componentes instalados. Algunos fabricantes ofrecen en sus dispositivos algunos periféricos particulares, como por ejemplo Ethernet, CAN, OTG-USB, Touch, etc. que no forman parte de la oferta masiva, por lo tanto, la implementación de éstas características, cuando

© Teletronix, Mar del Plata, Argentina

3


Edición para CCS

Teletronix Edu 67J50

el dispositivo las soporta, se incluye en la tarjeta que contiene al propio dispositivo. El suministro de energía para el dispositivo programable y para los componentes periféricos instalados, proviene de la fuente de alimentación regulada integrada en cada placa de desarrollo. En su construcción se utilizan reguladores de tensión lineales de baja caída, condensadores electrolíticos de baja resistencia serie, condensadores cerámicos de baja deriva térmica, y en su diseño se reserva un excedente de capacidad para poder alimentar con ésta a la mayoría de los módulos externos. A lo largo de los bordes laterales se extienden sendas filas de terminales, por arriba y por debajo de la placa, a través de los cuales se accede a la mayoría de los pines del dispositivo, y están organizados de tal manera que brindan compatibilidad con todo el conjunto de placas. Como regla general, el nivel de tensión existente en estos terminales es de 5Volts, debido a que la mayoría de los subsistemas digitales, como displays, módulos sensores, etc. siguen teniendo ésta tensión como valor estándar, en cambio, los dispositivos programables con que vienen equipadas las placas de desarrollo Teletronix Edu son de última tecnología, y están generalmente limitados a tensiones de alimentación de 3.3V o menos. Algunos tienen terminales de entrada/salida tolerantes a tensiones de hasta 5.5V, y están conectados directamente a los terminales, otros, que tienen esta característica, se conectan a través de circuitos traductores de nivel, que adaptan la tensión de trabajo del dispositivo programable a la tensión del puerto de expansión lateral. El valor de referencia para la tensión del puerto se toma a través del terminal 30 del conector de la derecha (DER30) que se identifica como VPORT.

4

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

¿Qué es un microcontrolador?

Un microcontrolador es un circuito integrado digital, compuesto por varios bloques funcionales, de los cuales el más importante es un microprocesador. El microprocesador también es un circuito integrado digital capaz de ejecutar secuencialmente una serie de operaciones, que son descriptas en un orden definido por quien las programó, y se encuentran físicamente ubicadas en algún medio de almacenamiento. Originalmente, previo a la aparición de los microcontroladores, los microprocesadores no eran capaces de desarrollar ninguna tarea por si solos. Desarrollar un sistema digital capaz de correr un programa implicaba diseñar una placa de circuito impreso que contuviera al menos al microprocesador, la memoria que contendría el programa, que podía ser una ROM o una EPROM, una memoria RAM para almacenar los datos, algunos flip-flops o latches para mantener los datos a la salida del sistema una vez entregado por el microprocesador, buffers de entrada para hacer la operación inversa, un oscilador para generar la señal de reloj, un controlador de interrupciones si era necesario atender a más de una, y algún circuito mas si la aplicación lo requería. Un microcontrolador contiene dentro de un solo chip a todos estos subsistemas, y por lo general a muchos más, siendo muy común encontrar temporizadores, conversores analógico a digital, controladores de puertos de comunicación serie, entre otros, por lo tanto no es incorrecto decir que un microcontrolador es una pequeña computadora totalmente funcional.

© Teletronix, Mar del Plata, Argentina

5


Edición para CCS

Teletronix Edu 67J50

¿Qué es un sistema embebido?

Un sistema embebido (el término en inglés es embedded y también se traduce como incrustado, empotrado o integrado), es un sistema dentro de otro, y en la jerga de computación, o en la de electrónica, se lo utiliza para referirse a un sistema que funciona dentro otro sistema mayor. Éste último es el que cumple la función final, el que realiza la tarea que le interesa al usuario, en cambio, el sistema embebido es solo una parte funcional, y su objetivo es brindar apoyo de alguna manera al sistema general. Un ejemplo va a ayudar a aclarar éste tema: Un sistema que puede resolver un problema para el usuario puede ser un ascensor. Evidentemente su función es la de trasladar pasajeros entre pisos de un edificio. Para que el ascensor funcione se necesita de un motor, los cables de acero que sostienen la cabina, las guías por las que corre, y un tablero que controla el arranque y parada del motor, etc. Dentro de ése tablero suele haber un equipo electrónico que recibe las órdenes de las botoneras, los estados de los diferentes sensores de puerta, la ubicación de la cabina, etc. y con ésa información indica al control de potencia que el motor funcione en uno u otro sentido. Éste equipo electrónico, diseñado para realizar varias (y a veces muchas) tareas es un sistema que está embebido dentro del ascensor, y es claro que al usuario poco le debe interesar la manera en que funciona, siempre que el ascensor lo lleve hasta el piso que pidió a través de la botonera. Éstas pequeñas computadoras están diseñadas generalmente para llevar a cabo solo las tareas para las que fue concebida, muchas veces funcionan en lo que llamamos tiempo real, y rara vez se utilizan computadoras de propósito general para éstas aplicaciones.

6

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Sobre este manual

El manual está dedicado a todo aquel que esté interesado en desarrollar habilidades en el diseño de sistemas embebidos, ya sea por estudio, por hobby, por trabajo, o por cualquier otro motivo, es por eso que se intentará profundizar todo lo posible, sin dejar atrás a aquellos que, con menos conocimientos previos, estén dando sus primeros pasos. Éste manual está organizado con una estructura que permite una lectura que lo irá llevando desde los conceptos básicos, con algunos ejemplos sencillos, e se irá profundizando en aspectos más sofisticados con ejemplos más elaborados. Al final encontrará un apéndice con una guía de inicio rápido, circuitos esquemáticos, la lista de componentes, una guía de solución de problemas, enlaces a sitios web de interés, y un listado de accesorios disponibles para aumentar la productividad de la tarjeta. La primera parte es una presentación de los periféricos y de los componentes instalados en la placa, la segunda parte trata otros temas que no están relacionados con un determinado hardware: Medición de tiempo con Capture, RTOS, oscilador y técnicas, técnicas de conversión AD, grabación de la memoria flash, Interrupciones, El manual está basado en ejemplos, y hay uno por cada subsistema instalado en la placa, además hay otros que demuestran alguna característica del microcontrolador. Por lo general, se trabajará individualmente con cada periférico interno o externo con un ejemplo sencillo que sirva como punto de inicio para seguir experimentando.

© Teletronix, Mar del Plata, Argentina

7


Edición para CCS

Teletronix Edu 67J50

Además de éstos ejemplos se han escrito otros un poco más complejos, que utilizan y hacen interactuar varios módulos, con recursos compartidos. No se abordarán temas como el tratamiento de cada subsistema interno del microcontrolador, solo se trabajará con los que se apliquen a cada ejemplo, y con una intensidad suficiente para lograr su comprensión, sin ir más allá de lo que el ejemplo requiera. Para obtener más información o más detallada debe referirse a la hoja de datos del microcontrolador o a los libros propuestos en la bibliografía. Para guiarnos rápidamente A lo largo de los capítulos encontrará indicadores para aquellos comentarios que deban ser destacados. A continuación describiremos el significado de los diferentes símbolos utilizados. Recomendación: O consejo que puede ayudar a mejorar la experiencia, algún truco o secretito de la profesión, de esos que se aprenden luego de tropezar varias veces con obstáculos, y sortearlos. Nota: Indica alguna aclaración o algún comentario que puede ser de utilidad. Caja de herramientas: La vamos a utilizar al describir alguna característica de utilidad de la herramienta de desarrollo, posibles modos de configuración, componentes instalados, terminales, y todo con lo que podemos contar para realizar proyectos con Teletronix Edu. Manos a la obra: Éste símbolo aparecerá muy frecuentemente, indica que vamos a comenzar un proyecto. Por lo general habrá una guía para la configuración de la herramienta de desarrollo, conexión de los dispositivos, y escritura, compilación y grabación del código.

8

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario Historia: A veces una introducción histórica ayuda a comprender mejor el porqué de algunas cosas, en otras ocasionas solo aporta un poco de cultura general. En éste manual se hará presente por cualquiera de las dos razones. Info sobre el micro: Alguna descripción del funcionamiento del microcontrolador o de alguno de sus periféricos, capacidades, limitaciones, modos de operación, etc. generalmente tomada de la hoja de datos del micro, provista por Microchip. Introducción teórica: Para abordar algunos temas es necesario tener una idea previa de los fundamentos teóricos subyacentes del problema en particular. En éstos casos se incluirán algunos contenidos para el lector que lo necesite o quiera repasar. Nivel principiante: No se requiere de ningún conocimiento previo de electrónica ni de programación para poder avanzar, sí será necesario un manejo básico o intermedio de la PC, software y dispositivos. Nivel medio: Es conveniente algún conocimiento de electrónica básica y/o del lenguaje de programación. Se intentará ser lo más claro posible, pero una idea previa ayudará. Nivel avanzado: No habrá mucho contenido en éste manual que requiera de conocimientos avanzados tanto en el manejo del hardware como del software, sin embargo algunos ejemplos pueden tener una dificultad un poco mayor que requieran algo más que conocimientos medios. PRECAUCIÓN: Es un aviso para prevenir al usuario de la herramienta de que existe algún riesgo para las personas, para el producto, o para los dispositivos asociados. SE DEBE LEER CON ATENCIÓN EL AVISO Y AVANZAR SÓLO CUANDO SE HAYA VERIFICADO UN PROCEDIMIENTO SEGURO.

© Teletronix, Mar del Plata, Argentina

9


Edición para CCS

Teletronix Edu 67J50 ATENCIÓN: Este aviso indica que hay detalles que deben tenerse en cuenta para que el proyecto de ejemplo funcione correctamente. De no realizar las acciones necesarias el programa no funcionará o tendrá un comportamiento diferente al esperado. Investigación propuesta: Para no complicar las cosas, algunos ejemplos terminarán prematuramente, dejando un espacio abierto para la investigación personal de los más inquietos, intentando que se puedan encontrar soluciones más completas o más eficientes a un problema.

Convención de escritura  

 

10

Los nombres de archivo se escriben en tipografía similar a la usada en consolas de sistemas operativos. Los términos particularmente importantes para el tema tratado, así como los términos que por ser de uso común son dejados en su idioma original, se escriben en letra cursiva. Los vínculos hacia sitios web, direcciones de correo electrónico, o partes del manual se escriben en letra azul subrayada. Los ejemplos de código se escriben como en los editores más comunes con los que se trabajan los ejemplos, o en courier.

Versión del manual: 1.0 – Agosto de 2013


Edición para CCS

Teletronix Edu 67J50

Mi nueva placa de desarrollo

¡Felicitaciones! Ya tiene su herramienta de desarrollo embebido Teletronix Edu 67J50, es hora de comenzar a disfrutar de las ventajas del producto, sacándole el máximo provecho. Ésta tarjeta forma parte de una serie de herramientas didácticas, destinadas a estudiantes de electrónica y de computación, tanto en nivel medio como superior, a técnicos, ingenieros, desarrolladores de productos electrónicos, y por supuesto a entusiastas que deseen adentrarse en el maravilloso mundo de la programación de microcontroladores y de los sistemas embebidos. Con ésta placa podrá realizar experimentos desde los más básicos, como encender un LED y leer el estado de un pulsador, hasta implementar una interfaz USB, leer y escribir una tarjeta SD, convertir tensiones analógicas en valores digitales, y un sin fin de aplicaciones más, tanto con los periféricos instalados sobre la placa, como con los que quiera agregar, ya sea usando nuestras las placas de aplicación Teletronix Edu, una placa diseñada por el usuario, o una protoboard, y los terminales de expansión laterales. Con la intención de que su experiencia en el uso de la herramienta sea totalmente satisfactoria y pueda cubrir un gran número de expectativas, se eligió cuidadosamente un conjunto de componentes que, montados en la misma placa y asociados de manera conveniente, amplían las posibilidades que ofrece el microcontrolador PIC18F67J50.


Edición para CCS

Teletronix Edu 67J50

Su nueva tarjeta cuenta con: -

zócalo para memoria micro SD. sensor acelerómetro de 3 ejes (X, Y, Z). sensor de temperatura. potenciómetro multifunción. puerto USB 2.0 de alta velocidad. puerto serie RS-232 tipo DCE (conector D9 hembra). memoria EEPROM I2C 512Kb. oscilador principal de 4MHz (multiplicable hasta 48MHz). oscilador secundario de 32768Hz. 4 LEDs multifunción programables. 4 pulsadores programables.

Todos los periféricos se conectan y desconectan con interruptores, en lugar de jumpers, evitando que haya partes que puedan extraviarse. La programación del microcontrolador se puede hacer a través del puerto serie o del puerto USB con un programa cargador que viene grabado de fábrica, o con un programador de dispositivos adecuado como el ICD2/3, PICkit2/3, con el programador CLkit II, u otro programador in-circuit compatible con el microcontrolador. Junto con el producto se entrega un DVD que contiene el circuito esquemático completo de la placa, hojas de datos de todos los componentes, en manual de uso, programas de ejemplo, software para compilar los programas en Windows y en Linux, software para verificar el funcionamiento de la tarjeta, etc. Toda ésta información también está disponible en el sitio web dedicado a la placa de desarrollo. El link para verla es www.teletronix.com.ar/edu/Edu_67J50, y es conveniente revisarla periódicamente, ya que en ése sitio se pondrán a disposición las actualizaciones de éste manual, nuevos ejemplos y más información de interés. 12

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Precauciones y Cuidados

La placa que acaba de adquirir utiliza componentes electrónicos que son sensibles a las descargas electrostáticas (ESD por su sigla en inglés). Las descargas electrostáticas pueden dañar los componentes electrónicos dentro de su placa de desarrollo. Bajo algunas condiciones, las ESD pueden provenir de cargas eléctricas acumuladas en el cuerpo o en algún objeto, como puede ser una herramienta, y luego descargarse en otro objeto, como la placa de desarrollo. Para prevenir el daño que pueden producir estas descargas, debe descargar toda electricidad estática de su cuerpo antes de empezar a manipular los componentes electrónicos o de tocar los terminales de expansión y puntos de prueba de su tarjeta. Una manera sencilla de proteger los equipos contra ESD es descargar su cuerpo tocando un objeto metálico que tenga una conexión a tierra, como la parte trasera del gabinete de su computadora, antes de tocar los componentes sensibles. Cuando conecte la placa a una PC, cuando le vaya a instalar un módulo de expansión, o antes de conectar un cable en alguno de sus terminales, siempre debe, hacer el procedimiento de descarga electrostática.

© Teletronix, Mar del Plata, Argentina

13


Edición para CCS

Teletronix Edu 67J50

Garantía

El producto que acaba de adquirir está garantizado por un período de 6 meses a partir de su fecha de compra, ante defectos de fabricación, defectos de sus componentes, o fallas que se puedan presentar bajo condiciones de uso normal. Para validar la garantía se debe registrar el producto dentro de los 15 días de su compra accediendo desde internet al sitio www.teletronix.com.ar/gtia, y deberá completar el formulario con sus datos y los datos del producto. Será necesario tener a mano el nombre del comercio donde adquirió el producto, su número de serie, y el número del certificado. El número de serie de la tarjeta Teletronix Edu 67J50 se compone de 18 caracteres (letras y números), y está ubicado en la cara inferior de la placa, a la izquierda, junto al conector derecho. La garantía incluye la reparación, reposición, o cambio de los componentes defectuosos sin cargo alguno para el cliente, dentro de un plazo de 30 días, contados a partir de la fecha de su recepción en fábrica o en laboratorios autorizados, sin asumir responsabilidad alguna en casos de demora por fuerza mayor. Para mayores detalles lea con atención la póliza de garantía que viene junto con su placa de desarrollo.

14

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Notas de la versión

Esta es la primera versión oficial de la herramienta de desarrollo luego de pasar por dos versiones de prototipo, a través de las que fue alcanzando la madurez con la que hoy se encuentra. Ésta versión trae novedades que la hacen más potente, aún cuando se la utiliza en forma aislada, es decir, sin insertarle tarjetas complementarias instaladas. Entre estas novedades, va a encontrar dos nuevas funcionalidades: un sensor inercial (acelerómetro) de tres ejes y un sensor de temperatura, ambos integrados a la placa de desarrollo. Éstos se encuentran agrupados, junto con sus componentes auxiliares y los interruptores dipswitch para habilitarlos, dentro de burbujas con una identificación clara de su funcionalidad, y una descripción de cada interruptor. Además notará una mejor distribución de los componentes, y una mejor identificación de los terminales de expansión laterales, que permiten una interconexión más rápida con circuitos externos, como por ejemplo una protoboard (breadboard) sin necesidad de recurrir a este manual o a los esquemáticos y hojas de datos para las conexiones más simples. También incorpora un potenciómetro multifunción, que puede ser usado tanto para hacer prácticas sencillas con el conversor ADC, como para fijar la tensión de referencia del conversor o de los comparadores analógicos con que está equipado el PIC18F67J50 que viene montado. Apuntando a una mejor utilización de los recursos, principalmente cuando se hace un montaje apilado de placas de desarrollo, se ubicaron los pulsadores y los LED en una zona más accesible, evitando que los pulsadores y el potenciómetro queden ocultos bajo otras. El puerto de programación y debug ICSP ahora cuenta con seis terminales, en lugar de los cinco necesarios para programar el microcontrolador, facilitando la identificación de la posición del terminal del © Teletronix, Mar del Plata, Argentina

15


Edición para CCS

Teletronix Edu 67J50

programador, además se lo reubicó en la parte posterior, junto a los terminales de alimentación, RS-232, y el conector USB. Éste último fue reemplazado por uno del tipo mini USB, para aumentar el espacio en a placa y evitar la interferencia con placas insertadas sobre ésta.

16

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Abriendo la caja…

Para comenzar, vamos a verificar el contenido del embalaje. Verifique que todos los elementos descriptos estén en su embalaje, y si encuentra algún faltante, por favor póngase en contacto inmediatamente con su proveedor.

Figura 1: Elementos contenidos en el kit.

Ítem 1 2 3 4 5 6 7 8 9 10

Descripción Placa Teletronix Edu 67J50 v1.0 rev. A Cable de datos USB a mini USB de 60cm Cables para interconexión Pines de conversión para cables Protoboard SYB-170 Destornillador para ajuste del preset y las llaves Estuche de protección y transporte del kit Estuche contenedor para DVD y guía de uso DVD con software, documentos y otros recursos Certificado y póliza de garantía

© Teletronix, Mar del Plata, Argentina

Cantidad 1 1 20 20 1 1 1 1 1 1 17


Edición para CCS

Teletronix Edu 67J50

Reconociendo las partes de la placa

PRECAUCIÓN: muchos de los componentes que integran la placa de desarrollo son sensibles a las descargas electrostáticas. Se debe tener cuidado al manipularla, hacerlo en lugar adecuado, y de ser posible utilizar guantes y pulsera antiestática. Vamos a reconocer los componentes más importantes de la placa. En la figura que sigue están marcados los diferentes elementos de la cara superior, identificados con un número, y a continuación hay una lista con una breve descripción de cada uno.

Figura 2: Ubicación de componentes en la cara superior.

18

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Manual del usuario

Microcontrolador PIC18F67J50-I/PT. Oscilador principal 4MHz. Memoria EEPROM I2C 24LC512. Selector de tensión de referencia. Conector de programación ICSPTM. Terminal de alimentación externa. Puerto USB 2.0. Puerto RS-232 DTE (DB9 hembra). Selector de origen de alimentación. LED de estado de fuente de alimentación. Terminales de expansión derechos. Terminales de expansión izquierdos. Potenciómetro multifunción y selector de función. Zócalo para tarjeta micro SD (no incluida) y selector de habilitación. LEDs programables y selector de modo de operación. Sensor de aceleración y llaves de conexión. Sensor de temperatura y llave de conexión. Oscilador secundario y selector de conexión. Puntos de prueba y medición.

La cara inferior también está equipada con componentes, en su mayoría son condensadores de desacople de la fuente de alimentación, pero algunos cumplen funciones más específicas, y son los que se detallan…

Figura 3: Componentes en la cara inferior. © Teletronix, Mar del Plata, Argentina

19


Edición para CCS

1 2 3 4 5 6 7 8 9 10 11

Teletronix Edu 67J50

Driver RS-232. Reguladores de tensión. Protección contra inversión de polaridad y cortocircuito. LED indicador de fusible abierto. Pulsador de reset del sistema (MCLR). Terminales de expansión derechos. Terminales de expansión izquierdos. Regulador de tensión de referencia de 2.048V. Protección de sobretensión en entradas analógicas. Pulsadores programables y selector de modo de operación. Código de enlace a información en el sitio web.

Casi todos los componentes o subsistemas (grupos de componentes) tienen algún mecanismo para poder conectarlos o desconectarlos al microcontrolador. La razón para hacerlo es que la mayoría comparten pines con otros dispositivos o con los terminales de expansión laterales, y como, salvo algunas excepciones, no es posible la conexión entre sí de terminales de salida, se debe elegir cuál usar en determinado momento. Las excepciones son los dispositivos que se comunican a través de los puertos I2C o SPI, como es el caso de la memoria EEPROM o de la tarjeta micro SD. En cada caso habrá un texto junto al interruptor indicando a qué subsistema pertenece, la función que controla y a qué terminal del PIC se conecta. La manera en que se identifica el pin del microcontrolador se adopta de acuerdo a su relevancia para la placa, es decir, si la función se relaciona con algún periférico específico del micro, entonces el interruptor se identificará con ése nombre, p.e.: S5, el interruptor que controla la función del potenciómetro R31, indica que se puede asignar al terminal ADC3, o al subsistema de selección de tensión de referencia analógica del micro, identificada como REF.

20

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

ADC3 es la identificación a nivel de sistema de la tercera entrada de señal analógica, ubicada en la posición IZQ24 de los terminales de expansión laterales de la placa, que, en ésta implementación corresponde al pin RA1/AN1 del PIC, pero esto podría variar de placa a placa, en cambio la asignación ADC3 es válida para cualquier tarjeta Teletronix Edu que tenga al menos tres entradas analógicas. El caso contrario aparece cuando la función que controla el interruptor no pertenece a un periférico del PIC, un ejemplo de ésta situación se ve en el dip switch DS2, que controla el pin CS (Chip Select) de la tarjeta micro SD. Con ésta línea se habilita el bus de comunicación SPI de la memoria, pero ésta señal no es parte del módulo SPI del PIC, y se lo debe implementar, para los casos en que el bus vaya a estar compartido, con cualquier terminal de entrada/salida. En la placa 67J50 hay dos posibilidades que pueden seleccionarse con DS2: RB5 y RF7, y están identificadas así, ya que no existe una salida CS desde el micro. Nota: el módulo SPI sí cuenta con una entrada SS (Slave Select), que cumple la función de habilitación del bus, pero funciona cuando el PIC es en dispositivo esclavo, y el bus está controlado por otro dispositivo que funciona como amo (master). Cada uno de los módulos, con sus opciones de configuración y notas de aplicación se encuentran en las secciones dedicadas a cada uno de ellos.

© Teletronix, Mar del Plata, Argentina

21


Edición para CCS

Teletronix Edu 67J50

¿qué puedo hacer con mi nueva placa?

Bueno, es una pregunta muy amplia, que puede tener una respuesta también amplia. El microcontrolador tiene una capacidad de 128KB de memoria, que permite almacenar 65536 instrucciones de programa, ya que todas las instrucciones ocupan 2 bytes. Esta capacidad es enorme, suficiente para contener cualquier programa que realice operaciones de entrada y salida, tanto analógica como digital, procesar información, presentarla en algún display, transmitirla a través de algún puerto, etc. incluso cuando las operaciones tengan un buen grado de complejidad. Sin más equipos que la placa de desarrollo y una computadora se pueden diseñar aplicaciones de control, medición, y almacenamiento de información a una velocidad de 12 millones de instrucciones por segundo. Por ejemplo, se puede medir la temperatura del ambiente, sensar la aceleración a la que está sometida la placa (la aceleración de la gravedad es una medida posible, que permite conocer la posición en que esta la placa de desarrollo cuando está quieta), guardar periódicamente los valores en la memoria EEPROM no volátil, para luego leerla a través del puerto USB desde una computadora y enviar los valores a una planilla de cálculo, graficar los datos, calcular valores estadísticos, y todo lo que el programador experto o principiante pueda imaginar. Todo lo anterior requiere solo de un cable USB que viene provisto con el kit de desarrollo, y una PC, notebook, o netbook. Hay muchas más posibilidades si utilizamos algunas de las 48 estradas/salidas ubicadas en los terminales de expansión laterales, a las que se le pueden conectar sensores con salida analógica o digital, cualquier dispositivo que entregue una tensión de hasta 5Volts en alguno de sus estados, o incluso controlar el estado de 22

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

conexión/desconexión de un relay, que a su vez conecte algún otro equipo, que funcionará de acuerdo parámetros controlados por el programa que corre en el microcontrolador, o como órdenes enviadas desde la PC a través del puerto USB. El ejemplo es muy poco concreto, es cierto, sin embargo, da una idea de lo inmensamente general que puede ser el especro de utilización del producto. A lo largo de éste manual se verán ejemplos más específicos, escritos para demostrar el funcionamiento de cada una de las partes que componen la placa de desarrollo, y al final algunos ejemplos con la utilización de componentes externos de uso común. Esperamos que éste manual sirva de orientación para dar los primeros pasos con su nueva placa de desarrollo, intentamos que los ejemplos sean lo más claro posible, y para una mejor comprensión, los códigos completos de los ejemplos están en el DVD que acompaña a la placa.

© Teletronix, Mar del Plata, Argentina

23



Edición para CCS

Teletronix Edu 67J50

Lenguajes de programación

Los lenguajes de programación son el conjunto de instrucciones y la sintaxis con que deben ser descriptas las operaciones que debe llevar a cabo una máquina programable. Las máquinas programables modernas son electrónicas, y se las conoce como microprocesadores. Cada diseño de microprocesador utiliza su propio repertorio de instrucciones y su sintaxis. Las instrucciones son números binarios que el microprocesador identifica y asocia con una determinada función. En algunos diseños la longitud de cada instrucción es constante y en otros varía de una instrucción a otra, y pueden contener o no algún argumento. Generalmente, al conjunto de éstas funciones se lo conoce como código máquina, debido a que son “palabras” que la máquina puede interpretar directamente. Para los programadores es muy tedioso operar con éste tipo de instrucciones, ya que su definición no tiene ningún significado para las personas. La primera solución que se encontró fue la implementación de un código nemotécnico que relaciona a cada instrucción de código máquina con una palabra más o menos significativa para el humano, a éste nuevo código se lo conoce como lenguaje ensamblador, assembler, o assemby. Un ejemplo de programa en código máquina para PIC18 que coloca en el port B del micro el valor contenido en la posición de memoria 0x19 sería algo como: 01010000 00011001 01101111 10000001

; pasar el contenido del registro 0x19 al registro W. ; pasar de W a portb, que está en otro banco.

Evidentemente sería imposible, o al menos muy difícil trabajar con instrucciones de éste tipo. Pensemos que los microcontroladores PIC18 tienen un repertorio


Edición para CCS

Teletronix Edu 67J50

de 76 instrucciones, y un programa pequeño puede contener unas dos mil líneas. El mismo programa en lenguaje assembler puede verse un poco más amigable, algo como: MOVF MOVWF

0x19, W, A portb, A

; mover registro 0x19 a W con acceso a banco. ; mover de W al registro portb con acceso a banco.

Y se puede leer tal como está en los comentarios hechos en la misma línea de las instrucciones, o en inglés, donde cobra aún más sentido: MOVe File MOVe Work to File

0x19 to Work using Access portb using Access

portb es la dirección del mapa de memoria asignada al puerto B físico, que no es otra cosa que una dirección, un número. Otra ventaja del lenguaje es ésta posibilidad de asignar etiquetas para definir números, y así no tener que hacer referencia al valor de la posición de memoria en la que se encuentra el puerto, sino solo a su etiqueta. Definiciones como ésta y muchas más vienen en archivos provistos por los distribuidores de las herramientas de compilación, se los llama archivos de encabezado y suelen tener extensiones .inc o .h según para que lenguaje sean provistas. Siendo que, al parecer, el leguaje assembler solo reemplaza los códigos del lenguaje máquina por otros más legibles, pero manteniendo una relación unívoca, éste sigue siendo el lenguaje de más bajo nivel, que quiere decir bajo nivel de abstracción del hardware, o que estamos manipulando directamente al hardware con cada una de sus instrucciones. Con el crecimiento de los microprocesadores también creció la necesidad de escribir programas más complejos y sofisticados. Luego aparecieron los microcontroladores, y con ellos la utilización masiva de controladores 26

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

programados funcionando en una diversidad de aparatos. Varias fábricas de microprocesadores desarrollaron modelos de éstos dispositivos, cada uno basado en su modelo de microprocesador, y diseñado para funcionar con las instrucciones de su propio lenguaje assembler. La necesidad de tener un mayor control de los programas, hacerlos más fáciles de mantener y de actualizar, y de tener la posibilidad de utilizarlos con dispositivos de marcas diferentes (y por supuesto con juegos de instrucciones totalmente diferentes) dio lugar a la creación de los lenguajes de alto nivel.

© Teletronix, Mar del Plata, Argentina

27


Edición para CCS

Teletronix Edu 67J50

Los lenguajes de alto nivel

Los lenguajes de programación de alto nivel utilizan un lenguaje y estructuras que son fáciles de entender para los humanos. Al mismo tiempo tienen reglas claramente definidas, tales que un programa se puede escribir con la precisión necesaria para convertirse en código máquina. Cualquiera sea el lenguaje de alto nivel usado, se requiere de un software capaz de convertir un programa tal como está escrito, en código máquina para un determinado tipo de computadora. Si el código se convierte antes de su ejecución, al programa que hace éste trabajo se lo llama compilador. Si el código de alto nivel se convierte a código máquina al mismo tiempo que es ejecutado, al programa traductor se lo llama intérprete. Los lenguajes C y Pascal son ejemplos de lenguajes compilados, en cambio BASIC (salvo las versiones actuales para microcontroladores), HTML, y los scripts en todas sus formas son interpretados, es decir convertidos a un código ejecutable por la computadora, línea por línea a medida que se los ejecuta. Una gran ventaja de los lenguajes de alto nivel es que permiten portabilidad. El código que el programador escribe no depende de la computadora que lo va a ejecutar. Solo depende de la computadora el compilador o el intérprete, que crea el verdadero código máquina. Así, el mismo código fuente puede, en teoría, utilizarse para computadoras completamente diferentes. Por el contrario, los lenguajes de bajo nivel como el assembler son totalmente dependientes de la computadora donde correrá el programa y por lo tanto no son portables. Hasta no hace muchos años, la forma de trabajar con sistemas embebidos implicaba elegir un dispositivo que sea capaz de resolver las necesidades de la aplicación y luego desarrollar el sorfware en código assembler para ése dispositivo. Las cosas cambiaron, y ahora la gran mayoría de las aplicaciones se desarrollan con lenguajes de alto nivel. 28

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Lenguajes de alto nivel para PIC18

Al adoptar un lenguaje de alto nivel para aplicaciones embebidas, pretendemos obtener los beneficios de simpleza y mayor legibilidad del código. Al mismo tiempo, sin embargo, queremos conservar lo más posible los beneficios de trabajar cerca del nivel de hardware, como cuando se trabaja en assembler. Existen en el mercado muchos compiladores de lenguajes de alto nivel para microcontroladores PIC. La mayoría de sus características son similares, y de ellos una gran cantidad sirven para desarrollar programas de alto nivel para microcontroladores de la serie PIC18. Algunos de los compiladores más conocidos y utilizados en el desarrollo de aplicaciones comerciales, industriales, y para educación con microcontroladores PIC18 son los siguientes:          

MPLAB C18 CCS mikroC PICC18 (hi-Tech) PIC Micro Pascal mikroPascal mikroBASIC PIC BASIC Pro GCBASIC Swordfish Compiler

Los cuatro primeros compiladores utilizan el lenguaje de programación C, luego, dos compiladores de lenguaje Pascal, y los cuatro últimos compilan código escrito en lenguaje BASIC.

© Teletronix, Mar del Plata, Argentina

29


Edición para CCS

Teletronix Edu 67J50

El lenguaje C es sin duda el más difundido entre los programadores de aplicaciones en el ámbito de la electrónica, tanto en el desarrollo de aplicaciones que se ejecutarán en una PC, como para aplicaciones embebidas, que correrán en otro tipo de dispositivo, pero existen también otros lenguajes que fueron muy utilizados en computadoras de escritorio como el BASIC o el Pascal, tan difundidas que no podían quedar fuera del nuevo mundo de las computadoras embebidas. El lenguaje C fue desarrollado hace ya muchos años, y a pesar de que fue ampliamente superado por otros lenguajes para aplicaciones en computadoras de escritorio, se mantiene como un potente lenguaje para trabajar a niveles más bajos, como lo hacemos cuando trabajamos con sistemas embebidos. C nos brinda las características de un lenguaje de alto nivel, pero permitiéndonos acceder a los elementos del hardware como los lenguajes de bajo nivel como el assembler. Dependiendo principalmente del creador del compilador, es que puede disponerse de una herramienta libre, gratuita, de licencia paga, o alguna otra modalidad. Al haber varios compiladores para un mismo lenguaje sucede que no todos son ciento por ciento compatibles, es decir, si tenemos un código escrito en C, el que compilamos con la herramienta C18 de Microchip y funciona perfectamente, seguramente deberemos realizar algunos ajustes si queremos compilarlo ahora con el compilador C de CCS, aunque la plataforma en la que correrá sea el mismo microcontrolador. Lo mismo sucedería si quisiéramos cambiar de marca de dispositivo, por ejemplo si queremos probar como funciona un programa que originalmente funcionaba en un PIC, en un microcontrolador de Freescale. En este caso seguramente se deban hacer más cambios, pero si el código fue escrito en su mayoría en ANSI C, dejando en archivos separados las funciones y directivas específicas de cada compilador, será muy fácil traducir el programa para el nuevo microcontrolador, más aún si comparamos esta tarea

30

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

con las que sería necesario hacer si hubiéramos escrito el programa en assembler. Veamos brevemente las principales características de cada uno de los compiladores nombrados: MPLAB C18 es uno de los compiladores que ofrece la firma Microchip, el fabricante de los microcontroladores PIC. Es un compilador ANSI C para la línea de microcontroladores PIC18 que permite generar código reubicable y optimizado. Incorpora bibliotecas de funciones para todos los periféricos incluidos en los dispositivos, se integra perfectamente con el entorno integrado de desarrollo MPLAB IDE y soporta otras herramientas de desarrollo, tanto en software como en hardware, como el emulador in-circuit ICE2000, los depuradores in-circuit ICD2 e ICD3, y los más económicos Pickit2 y Pickit3. Su licencia es paga, pero ofrecen una versión estándar de evaluación gratuita que durante 60 dias permite compilar código con todas las características de la licencia paga, y luego de ése periodo se podrá seguir compilando, pero el código será menos optimizado y ocupará más espacio en el microcontrolador. La pagina web es http://www.microchip.com/mplabc18. CCS, de Custom Computer Systems Inc. provee un completo paquete de herramientas para el desarrollo y la depuración de aplicaciones para toda la línea de dispositivos de Microchip. El corazón de la herramienta su compilador de código C optimizado y cuenta con una gran biblioteca de funciones tanto para los periféricos incluidos en los microcontroladores como para un gran número de dispositivos externos. Viene con un entorno de desarrollo propio con todas las herramientas necesarias para editar, compilar y depurar programas, además soporta depuración in-circuit a través del debugger ICD-U40 y también se lo puede utilizar desde en MPLAB-IDE como herramienta de compilación y con el famoso simulador Proteus. El uno de los compiladores C más sencillos para aprender, sin dejar de ser lo suficientemente potente. CCS también es un

© Teletronix, Mar del Plata, Argentina

31


Edición para CCS

Teletronix Edu 67J50

software pago, y ofrece una versión de prueba por tiempo limitado en: http://www.ccsinfo.com. mikroC, desarrollado por MikroElektronika, es otro compilador de fácil aprendizaje, de licencia paga, también rico en bibliotecas de funciones y un entorno de desarrollo integrado que trae incorporado un simulador y un depurador in-circuit, el mikroICD. Se puede obtener una versión de demostración del compilador, limitada a 2KB de programa, en el sitio web de MikroElektronika http://www.mikroe.com/pic. PICC18 es otro popular y muy potente compilador C desarrollado Hi-Tech Software. En 2009 fue adquirida por Microchip, y actualmente es parte de la oferta del fabricante. Igual que C18, existe además de la licencia paga, una opción Lite para PIC18 completamente funcional por tiempo ilimitado, pero sin algunas funciones de optimización que puede descargarse gratuitamente ingresando al sitio http://www.htsoft.com. PIC Micro Pascal es un compilador LIBRE de lenguaje Pascal para PIC distribuido en forma gratuita por su autor bajo licencia BSD. No tiene la potencia de un compilador comercial, sino que fue pensado para el desarrollo de pequeñas aplicaciones con microcontroladores PIC. Viene con un editor de código que puede ser personalizado para que luzca como un compilador Turbo Pascal o con un aspecto similar a Delphi. Para que funcione es necesario tener instalado MPLAB, ya que utiliza las herramientas MPASM/MPLINK. Mas información y descarga en: http://www.pmpcomp.fr. mikroPascal y mikroBasic son otras dos opciones que propone MikroElektronika, pero esta vez con los lenguajes Pascal y BASIC respectivamente. Tienen las mismas características que su otro producto mikroC, y las mismas opciones de licencia. Ver más detalles en su sitio web http://www.mikroe.com/pic.

32

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

PIC BASIC Pro, de microEngineering Labs, es un compilador de lenguaje BASIC para microcontroladores PIC. Con una trayectoria de más de 15 años en el mercado es el lenguaje BASIC estándar en la industria. Según su desarrollador es “suficientemente fácil para hobbistas, suficientemente potente para profesionales “. Se puede adquirir en una de sus varias opciones de licencia, a diferentes precios, incluyendo una versión para estudiantes limitada en su lista de dispositivos soportados, y también de una versión de prueba. El sitio para descargerlo es http://pbp3.com. GCBASIC, siguiendo con los compiladores BASIC es otra opción LIBRE y de código abierto para microcontroladores PIC. Great Cow BASIC fue escrito con el objetivo de poder escribir código en lenguaje BASIC de alta eficiencia, que sea fácilmente portable, y es un lenguaje adecuado para principiantes. En su sitio web también se ofrece un interesante compilador de lenguaje gráfico, con el que se pueden desarrollar aplicaciones sin escribir código. La descarga se puede hacer desde su sitio en Source Forge http://gcbasic.sourceforge.net. Swordfish Compiler es un compilador BASIC altamente estructurado para PIC18. Genera código optimizado para la familia de microcontroladores. Cuenta con una extensa biblioteca de código para una variada gama de aplicaciones incluyendo punto flotante. Tienen un entorno de desarrollo con un editor de código avanzado y permite depuración in-circuit. Su versión gratuita, Special Edition, solo está limitada en la cantidad de memoria RAM que permite utilizar, debido a que no admite el acceso por banco. Su sitio web es http://www.sfcompiler.co.uk/swordfish. Evidentemente el abanico de posibilidades es lo suficientemente amplio, con opciones para todos los gustos. En el DVD provisto con la placa de desarrollo hay una copia de cada compilador nombrado, con versiones de prueba de los que son de licencia paga y códigos de ejemplo para varios de ellos. La intención es ofrecer todos los ejemplos para todos los compiladores, pero es una tarea que

© Teletronix, Mar del Plata, Argentina

33


Edición para CCS

Teletronix Edu 67J50

lleva tiempo, y se irá completando paulatinamente. Todos los ejemplos y documentos actualizados estarán disponibles en el sitio dedicado a cada herramienta de desarrollo Teletronix Edu. El sitio para la placa correspondiente a éste manual es http://www.teletronix.com.ar/edu/edu_67J50.html.

34

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Trabajando con el compilador CCS

El paquete de software CCS de Custom Computer Systems incluye un entorno integrado de desarrollo (IDE) y tres compiladores, uno para cada línea de microcntroladores PIC. PCB es el compilador para la línea básica de micros PIC10 y PIC12, con instrucciones de 12 bits. PCM corresponde a los PIC16 de línea media, y para los micros PIC18, que constituyen la gama más alta de microcontroladores de 8 bits de Microchip, con longitud de instrucciones de 16 bits, el compilador es el denominado PCH. Para nuestro propósito, como el objetivo es escribir programas para el microcontrolador instalado en la placa, solo vamos a hablar del compilador PCH, aunque por generalidad la mayoría de las veces lo llamaremos simplemente CCS. Si se compara con compiladores tradicionales, CCS tiene algunas limitaciones. Como ejemplos de estas limitaciones, no está permitido el uso de funciones recursivas. Esto se debe a al hecho de que los PIC no cuentan con stack de memoria donde enviar las variables (la memoria stack que tienen los PIC solo puede almacenar direcciones de memoria para retorno) y también por la manera de optimizar el código que tiene el compilador. El compilador puede implementar eficientemente construcciones de C normales, como operaciones de entrada/salida y manipulación de bits. Todos los tipos de datos normales de C son soportados desde punteros hasta arrays de constantes, números decimales de punto fijo, y arrays de bits. © Teletronix, Mar del Plata, Argentina

35


Edición para CCS

Teletronix Edu 67J50

Instalación

Dentro de la carpeta compiladores del DVD que acompaña a la placa de desarrollo se incluye una versión de demostración del software CCS 5. La versión de demostración permite utilizar la herramienta con todas sus características y el máximo nivel de optimización por un periodo de 45 días. La instalación del software es sumamente sencilla, solo es necesario ejecutar el archivo demoupd.exe y seguir los pasos de la instalación. Si se desea utilizar MPLAB-IDE o MPLABX-IDE como editor de código y gestor de proyectos, pero con el compilador CCS, será necesario instalar también un plugin para asociarlos. Los instaladores para el plugin correspondiente a cada IDE están en la misma carpeta del DVD que el instalador de CCS. El compilador CCS, tanto la interfaz de consola como el IDE requieren GDI+ para funcionar. La mayoría de las computadoras ya tienen GDI+ instalado, pero si la suya no lo tiene necesitará instalarlo. En la misma carpeta hay una copia del programa. Una vez terminada esta operación el programa estará instalado y listo para usarse de cualquiera de las dos formas. La ruta de instalación por defectos es C:\Archivos de Programa\PICC\, o se encontrará en la ruta que haya indicado al instalarlo. Para buscar una versión más reciente del compilador visite el sitio web de CCS http://www.ccsinfo.com/downloads.php Para adquirir la versión completa visite http://www.ccsinfo.com/ccs-product-catalog.php 36

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Entrono de Desarrollo Integrado (IDE) de CCS

La interfaz de usuario PCW para Windows® que ofrece CCS tiene un aspecto cómodo y moderno, con una barra de menú que despliega su contenido en forma de cinta con botones y una descripción gráfica de cada elemento. Incluye un editor de código sensitivo para lenguaje C, que resalta las palabras clave con diferentes colores, controla las tabulaciones, marcas, brinda ayuda sensible al contexto, y busca los complementos de los delimitadores } y ). Su entorno de desarrollo (IDE) permite un fácil acceso al árbol de llamadas, mapa de símbolos, y otras pantallas que sirven de ayuda, e incluye una interfaz directa para los programadores de dispositivos y debuggers. El “Project Wizard” genera los archivos .h y .c iniciales para el proyecto basado en la información que le fue suministrando a través las diferentes páginas del wizard. Algunas de las pestañas incluyen información de utilidad, como: cálculo interactivo y ajuste de las opciones de los timers, definición de pines para controlar dispositivos, y asignación de nombres a los pines y hay más herramientas y características que hacen de CCS una herramienta ideal para comenzar a trabajar con PIC y lenguaje C. Para conocer éstas características le recomiendo visitar la página http://www.ccsinfo.com/content.php?page=ideoverview

© Teletronix, Mar del Plata, Argentina

37


Edición para CCS

Teletronix Edu 67J50

Archivos de encabezado (.h)

Con la placa se entregan varios archivos, con la intención de facilitarle al usuario la tarea de la puesta en marcha de sus proyectos. En el archivo de encabezados Edu_67J50_1.0_A_CCS.h se definen de manera conveniente todos los terminales de expansión lateral, todas las conexiones con los diferentes dispositivos instalados en la placa, y algunas macros que pueden facilitar la tarea de portar, si llega a ser necesario, el código escrito hacia otro microcontrolador, otro hardware, u otro compilador.

IZQ01 - IZQ30 DER01 - DER30 ADC1_MUX - ADC8_MUX MMA7331_X_MUX MMA7331_X TMP20_MUX TMP20 RX1_PIN RX2_PIN MMCSD_PIN_SCL MMCSD_PIN_SDI MMCSD_PIN_SDO MMCSD_PIN_SELECT(**) MMCSD_PIN_CARD_SW

PB1 - PB4 LED1 - LED4 PLLEN MMA7331_Y_MUX MMA7331_Y POTE_MUX POTE TX1_PIN TX2_PIN IIC_SDA_PIN SPI_SDI_PIN SPI_SDO_PIN ADC_MUX_SETUP_TIME

PBS_ENABLE LEDS_ENABLE USB_SENSE MMA7331_Z_MUX MMA7331_Z BOARD _XTAL TIMER1_XTAL CTS_PIN(*) RTS_PIN(*) IIC_SCL_PIN SPI_SCK_PIN SPI_/SS_PIN MMCSD_PIN_SELECT(**)

Tabla 1: Etiquetas para partes definidas en el archivo Edu_67J50_1.0_A_CCS.h (*)

Estos pines no implementan físicamente las señales CTS y RTS. Para utilizarlas se las debe controlar desde el software.

(**)

Ésta conexión puede hacerse a diferentes pines del microcontrolador, dependiendo de la disponibilidad. Modificar las líneas comentadas para acceder a la configuración más conveniente.

Las definiciones listadas en la Tabla 1 corresponden a las conexiones asignadas para cada elemento de placa de desarrollo. Utilizar éstas etiquetas facilita la


Teletronix Edu 67J50

Manual del usuario

portabilidad del código hacia otras plataformas, incluso si desarrolla una aplicación completa, que incluye un hardware específico, es conveniente conservar éstas definiciones, que pueden ser muy útiles durante la etapa de transferencia entre la herramienta de desarrollo y el hardware definitivo. De acuerdo con los diagramas de conexión elegidos, las funciones reconocidas por el compilador, u otras características del sistema, es posible que para realizar una operación de entrada/salida determinada, sea necesario utilizar diferentes métodos de control. Una manera de resolver éste problema es el uso de macros. Las macros son similares a las definiciones de etiquetas, pero son dinámicas. Por ejemplo, la macro LedOn(x) de la Tabla 2 es reemplazada por la función de CCS output_low(x), tomando como argumento el valor de “x” al momento de compilar el código. Este valor debe ser un identificador de PIN válido, por ejemplo PIN_B1, y en los ejemplos puede aparecer como LedOn(LED1). output_DER(x) output_IZQ(x) EnableLEDs EnablePBs

input_DER(x) input_IZQ(x) DisableLEDs DisablePBs

tris_DER(x) tris_IZQ(x) ButtonPressed(x) SDCardIsIn

LedOn(x) LedOff(x)

Tabla 2: Macros definidas en el archivo Edu_67J50_1.0_A_CCS.h

Es importante saber que las etiquetas y las macros, a diferencia de las funciones, no ocupan lugar adicional en el programa, ya que solo representan un reemplazo de texto. La declaración de constantes es otra manera de generalizar partes del código. Las constantes sí ocupan lugar en la memoria RAM o en la FLASH, dependiendo la configuración del compilador. Lo más común es que se almacenen en la memoria de programa (FLASH).

© Teletronix, Mar del Plata, Argentina

39


Edición para CCS

Teletronix Edu 67J50

Se pueden definir constantes de cualquier tipo de los reconocidos por el compilador, incluso arreglos de valores, como es el caso de la constante ADC[i], donde están definidos los números de los puertos analógicos del microcontrolador, ordenados en función de su ubicación en el conector IZQuierdo de la placa de desarrollo. El índice “i” se debe completar con el número de entrada analógica de la placa.

40

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Grabación del programa

La programación del microcontrolador PIC18F67J50 puede hacerse de varias maneras. Para grabar los programas de ejemplo que ya están compilados y guardados en la carpeta \Ejemplos\Compilados (CCS Bootloader)\ del DVD que le fue entregado con su placa de desarrollo no necesita más que conectar la placa a un puerto USB de su computadora, y con la ayuda del software SIOW.EXE, distribuido por Custom Computer Services Inc, cargar en el microcontrolador el programa elegido. El programa SIOW.EXE se instala junto con el compilador y entorno de desarrollo CCS PICC. En el mismo DVD hay disponible una versión demo, o puede descargarla del sitio web del su desarrollador http://www.ccsinfo.com/downloads.php Para poder cargar el programa con éste método se necesita de un programa residente en el microcontrolador que reciba las instrucciones del software y las grabe en la memoria FLASH. Éste programa se llama cargador (o bootloader) y viene instalado de fábrica en la placa de desarrollo. El procedimiento es muy simple, solo se debe conectar la placa Teletronix Edu 67J50 a un puerto USB de su computadora manteniendo el pulsador PB4 presionado mientras se la conecta, o si ya está conectada, se puede pulsar MCLR (reset del sistema) manteniendo presionado PB4. Notará que al soltar el pulsador queda encendido el LED4 indicando que el bootloader está listo para recibir el nuevo programa (la llave S2 debe estar en posición PERMANENTES para que el LED encienda). Ahora se debe ejecutar el programa SIOW.EXE que está en la carpeta C:\Program Files\PICC, o en la que haya instalado el compilador CCS, y desde el menú configuration y el botón Set Port Options seleccionar el ComPort © Teletronix, Mar del Plata, Argentina

41


Edición para CCS

Teletronix Edu 67J50

que se generó(*) al conectar la placa, con BaudRate 9600, y los demás parámetros como están por defecto. Al cerrar la ventana, el software se conectará con la placa y para cargar el programa solo hace falta abrir el menú file y con el botón Download Software elegirlo desde la carpeta donde se encuentra. Si todo salió bien, inmediatamente comienza la transferencia, y al finalizar, el sistema se desconecta, se resetea el microcontrolador, y comienza a correr el nuevo programa. (*)

ATENCIÓN: La primera vez que se conecta la placa a un puerto USB es posible que pida la ubicación del archivo .inf con los datos de instalación del puerto serie virtual, hay una copia en la carpeta \Drivers\ del DVD. Para la mayoría de las aplicaciones se puede utilizar éste método, sin embargo, si fuera necesario, se puede eliminar el programa cargador y grabar nuestro programa con la ayuda de un programador de dispositivos compatible, como puede ser PICkit2, PICkit3, o con los programadores y debuggers ICD2, ICD3 con un cable adaptador de RJ11 a postes, o con nuestro programador CLkit II. Cualquiera de ellos se conecta a través del terminal especial H1 ICSP. Con estos programadores, la carga se puede hacer directamente desde el entorno de desarrollo integrado MPLABTM IDE sin necesidad de otros programas o pasos especiales. Los mismos ejemplos están disponibles en el DVD, las versiones compiladas están en la carpeta \Ejemplos\Compilados (ICSP)\ y los códigos fuente, que podrán ser modificados y compilados a gusto están en el directorio \Ejemplos\Codigos fuente CCS\ Para la depuración in-circuit con PICkit2 se necesita, además del debugger, el header AC162087 de Microchip. 42

Versión del manual: 1.0 – Agosto de 2013


Edición para CCS

Teletronix Edu 67J50

El hardware disponible Veamos de qué disponemos en nuestra placa de desarrollo. En ésta sección vamos a describir las partes que componen la placa Teletronix Edu 67J50, los terminales y conectores, los componentes que trae incorporados, y algunas características del microcontrolador PIC18F67J50. Habrá ejemplos sencillos para poder probar separadamente cada uno de los subsistemas, con una explicación del código y de los ajustes que es necesario hacer en la placa. En ésta etapa solo vamos a trabajar con los componentes de la tarjeta, dejando para la siguiente sección el uso de componentes externos y placas complementarias.


Edición para CCS

Teletronix Edu 67J50

Microcontrolador PIC18F67J50

Éste microcontrolador pertenece a una familia de dispositivos de baja tensión con conectividad USB, que comparte las principales características de la línea PIC18 de Microchip, ya conocida por su alto rendimiento de cálculo y su riqueza de periféricos. Cuenta con tecnología nanoWatt, que permite reducir el consumo de energía hasta en un 90% si se utilizan los diferentes modos de funcionamiento y de ahorro de energía. El puerto USB está completamente integrado dentro del microcontrolador, cumple con la especificación USB 2.0 y soporta los modos de comunicación lowspeed y full-speed. El oscilador puede ser configurado de muchas maneras, utilizando cristales, resonadores cerámicos, fuentes de reloj externas, circuito RC externo, o incluso interno, y dispone de un multiplicador de frecuencia compuesto por un lazo enganchado en fase (PLL) que permite operar a una frecuencia de hasta 48MHz. Otra característica notable es su gran capacidad de memoria: 128kB de memoria FLASH para programa, que puede ser leída y grabada durante la ejecución normal del programa. Y 3.9kB de memoria RAM, de la que 1kB está implementada como memoria de doble puerto, compartida entre el módulo USB y bus de datos interno del microcontrolador, lo que permite transferencia de datos en forma continua por el puerto USB. El núcleo del microprocesador está optimizado para ejecutar código reentrante, con el agregado de nuevas instrucciones y un modo de direccionamiento de

44

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

memoria indexado. Éstas características lo hacen especialmente potente cuando se programa en lenguajes de alto nivel como “C”. La tensión de alimentación del microcontrolador es de 3.3V, pero la mayoría de sus puertos, salvo aquellos que comparten una función analógica, toleran tensiones de 5.5V, facilitando la interconexión con dispositivos TTL de 5Volts.

© Teletronix, Mar del Plata, Argentina

45


Edición para CCS

Teletronix Edu 67J50

Comparemos con el conocido 4550 Los que ya conocen la línea de microcontroladores PIC18 seguramente conocen a los bondadosos PIC18F2550 y PIC18F4550, y muy probablemente ya cuentan con algunos desarrollados realizados para funcionar con estos micros. Pues bien, esto no presenta un verdadero problema, ya que por su similitud, los programas escritos para 2550/4550 pueden ser migrados al PIC18F67J50 con muy pocos ajustes. La siguiente tabla ofrece una comparativa de las principales características de ambos microcontroladores.

Memoria

Alimentación

Comunicación

FLASH RAM EEPROM Velocidad Tensión Consumo Entradas/Salidas Ent. analógicas PWM E-UART SPI / I2C USB Stack

PIC18F4550 32kB 2048B 256B 12MIPS @ 48MHz 4.2V – 5.5V

PIC18F67J50 128kB 3904B(1) 0 12MIPS @ 48MHz 2.0V – 3.6V(2)

35 13 3 1 1 2.0 full speed 31

49 8 5(3) 2 2 2.0 full speed 31

Tabla 3: Comparación de las características de dos microcontroladores. (1)

46

1024 de los 3904 byte de RAM están implementados como memoria de doble puerto, compartida entre el bus interno del microcontrolador y el módulo USB, permitiendo un rendimiento muy alto en la transferencia de datos.

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50 (2) (3)

Manual del usuario

Casi todos los pines, salvo los que comparten algún periférico analógico soportan tensiones de hasta 5.5V. Tiene módulos CCP avanzados que permiten la implementación de puentes H con control de ciclo por hardware.

Si se usa CCS como compilador se deben hacer unos ajustes para que el programa escrito para 2550/4550 compile sin errores para el nuevo microcontrolador. Algunos fuses se definen ligeramente diferente, otros ya no están, y los puertos analógicos deben llevar una ‘s’ antes de su nombre, donde antes llamábamos AN0 ahora debemos escribir sAN0, y debido a una dificultad con el diseño, para activar el PLL no será suficiente ajustar el fuse correcto, sino que además se debe asignar un valor 1 al bit PLLEN durante la ejecución del programa. Los fuses en los que difieren son los siguientes: PIC18F67J50 NOCPUDIV

PIC18F4550/2550 CPUDIV1 CPUDIV4

CPUDIV6 INTRC, INTRC_PLL, INTRC_PLL_IO CCP2E7 MSSPMSK5, MSSPMSK7

CCP2B3, (*) XT, XTPLL, EC_IO, ECPLL_IO, INTEC_IO, INTEC, INTXT, INTHS USBDIV, NOUSBDIV, PUT, NOPUT, BROWNOUT , NOBROWNOUT, BROWNOUT_SW, BROWNOUT_NOSL, BORV20, BORV27, BORV43, BORV45, VREGEN, NOVREGEN,

© Teletronix, Mar del Plata, Argentina

47


Edición para CCS PIC18F67J50

Teletronix Edu 67J50 PIC18F4550/2550 PBADEN, NOPBADEN, LPT1OSC, NOLPT1OSC, MCLR, NOMCLR, LVP, NOLVP, ICSP1, ICSP2, CPB, NOCPB, CPD, NOCPD, WRT, NOWRT, WRTC, NOWRTC, WRTB, NOWRTB, WRTD, NOWRTD, EBTR, NOEBTR, EBTRB, NOEBTRB

Los demás fuses que no están en la tabla pertenecen a ambos micros, y no hace falta modificarlos. (*) El selector de salida del CCP2 coincide en el pin RC1, pero la otra opción difiere, siendo RE7 y RB3 para cada micro.

48

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Terminales de expansión laterales

El ambiente de desarrollo Teletronix Edu es un sistema configurable, que permite combinar una variada gama de placas que incorporan diferentes dispositivos programables, con placas de aplicación o de expansión, apilándolas sobre o debajo de la placa programable. Los conectores de expansión laterales son el nexo para su conexión. Físicamente, son dos tiras de terminales de 30 contactos cada uno, con una separación de 2.54mm (0.1”) entre pines y 86.36mm (3.4”) entre ambos conectores. En la parte inferior de la placa los conectores son hembra, brindando un sustento firme y robusto, y en la parte superior son macho. Con éstos terminales, además de conectar las placas de expansión Teletronix Edu, se puede conectar a otros circuitos o a una placa de experimentación (protoboard o breadboard) utilizando los cables de extensión que viene provistos con el conjunto. La distribución de las señales, como se ve en la figura, agrupa las señales analógicas sobre el lado izquierdo, los puertos de comunicación y salidas PWM sobre el derecho, y en la parte más alta, debajo de los pines de alimentación, hay disponibles 2 puertos de 8bits completos. Ésta distribución es general para todas las placas Teletronix Edu, pero dependiendo del microcontrolador o dispositivo instalado puede variar un Figura 4: terminales de expansión laterales. © Teletronix, Mar del Plata, Argentina

49


Edición para CCS

Teletronix Edu 67J50

poco. Ésta asignación no implica que los terminales deban ser usados de esa manera, siendo todos ellos terminales de entrada/salida de uso general, y se puede acceder a cada uno de la manera que resulte más conveniente para cada aplicación.

Figura 5: montaje con una placa de expansión y una protoboard.

Por omisión, la tensión normalizada para los terminales de expansión es de 5V. Los dispositivos que funcionan con 3.3v, pero sus entradas toleran tensiones de 5v se conectan directamente. Los dispositivos que no toleran tensiones de 5V en sus terminales se conectan a través de circuitos traductores de nivel que convierten la tensión hacia adentro y hacia afuera de la placa. Se prevé que para algunos casos la tensión de los terminales de expansión deba ser distinta a 5V, para resolverlo, las placas que tienen traductores de nivel toman la tensión de bus requerida desde el terminal 30 del borde derecho, identificado como VPORT.

50

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Fuente de alimentación integrada La fuente de alimentación entrega energía para el funcionamiento del microcontrolador, para los componentes periféricos montados en la placa, y para los módulos de expansión que se monten en los puertos de expansión izquierdo y derecho. Debido a que la tensión de trabajo del microcontrolador es de 3.3V y que la tensión de interfaz de los terminales de expansión es de 5V, se diseñó un circuito con dos niveles de tensión. Los reguladores elegidos son el AMS1117-5.0 y el AMS1117-3.3. Éstos reguladores garantizan alta estabilidad de la salida frente a variaciones en la carga o en la línea. La máxima corriente que son capaces de entregar es de 1A, pero está limitada a un total de 800mA si la placa se alimenta con un transformador, o a 500mA si se la alimenta desde una computadora a través del puerto USB. Ésta última limitación la pone la computadora, siendo 500mA el valor máximo permitido por la norma USB. Para seleccionar la fuente de alimentación que se utilizará se debe colocar el interruptor S1 en la posición adecuada. Intuitivamente, estará seleccionado el puerto USB si el interruptor está posicionado hacia la derecha, o será seleccionado el transformador conectado a J1 en caso contrario. Para el último caso se debe utilizar un transformador de 9V / 1A, pero funcionará bien un transformador cuya tensión sea superior a 6.5V e inferior a 15V. Cuando los LED D3 y D4 están encendidos, indican que las fuentes de alimentación están activas y no hay cortocircuitos. En caso de invertirse la polaridad del transformador, el circuito de protección compuesto por el diodo D1 y el fusible reseteable interrumpirán el paso de corriente.

© Teletronix, Mar del Plata, Argentina

51


Edición para CCS

Teletronix Edu 67J50

LEDs y Pulsadores programables Lo primero que se intenta cuando se comienza a programar algún dispositivo es intentar ver su efecto, por esta y otras razones es que toda placa de desarrollo contiene un grupo de LEDs de propósito general que pueden controlarse desde el programa. Ésta placa no es la excepción, y cuenta con 4 LEDs, LED1 a LED4 conectados a los pines RD3 a RD0 del PIC respectivamente.

El primer esquema simboliza la conexión de los LED cuando la llave S2 está en la posición PERMANENTES

Figura 6: Esquema de conexión de LEDs simplificado.

Con ésta configuración, los LED encenderán cuando haya una tensión cercana a 0V aplicada a sus cátodos, lo que significa que cada LED encenderá cuando el pin al que está conectado se lleve al nivel bajo. El circuito real, ligeramente simplificado, se muestra en la Figura 7. Cuando la salida RG2 del microcontrolador impone un nivel bajo en la base transistor Q1, llevándolo a la condición de saturación, éste deja pasar la corriente hacia los ánodos de los LEDs sin limitaciones. Cuando la salida está en nivel alto el transistor se corta, y los LED se apagan sin importar el nivel de tensión aplicado a los cátodos. La llave S2, que se muestra en el esquema completo de la Figura 9, 52

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

cumple la misma función. Si se la deja en la posición PERMANENTES, el transistor estará saturado todo el tiepo, y los LEDs podrán controlarse con solo establecer una tensión cercana a 0V en el ánodo del que se quiera encender.

Figura 7: esquema de conexión de LEDs Con señal de habilitación.

Veamos un ejemplo de código para hacer destellar el LED1: void main() { while (1) { output_low(PIN_D3);

// Encender el LED1. RD3 en // estado lógico bajo.

delay_ms(500); output_high(PIN_D3); // Apagar el LED1. RD3 en estado // lógico alto. delay_ms(500); } } Éste bloque de código representa un programa C casi completo, solo falta la parte del encabezado, donde se define el dispositivo, los valores de configuración, y la declaración de la biblioteca delay de CCS. El programa

© Teletronix, Mar del Plata, Argentina

53


Edición para CCS

Teletronix Edu 67J50

completo, con el encabezado, comentarios sobre la función de cada línea, y algunas cosas más está en el ejemplo Edu_67J50_Ej01_LED_CCS.c Observando el esquema de la Figura 9 se ve que cuando la llave S2 se pasa a la posición CONTROLADOS, Q1 ya no estará en condición de saturación, salvo que el pin RG4 tenga un nivel bajo, entonces éste pin actúa como habilitador para los LED, y sólo podrán encenderse cuando RG4 esté en nivel bajo. La finalidad de tener un control general para los cuatro LEDs se justifica cuando es necesario el uso compartido de terminales del microcontrolador. En la placa Edu 67J50 se implementa el uso compartido como se describe el párrafo siguiente. En los mismos pines, RD3 a RD0 están conectados los 4 pulsadores PB1 a PB4, que funcionan como interruptores de uso general. Éstos interruptores están conectados a 0V a través de Q2 de la misma manera que los LED lo están a DVDD. Con el interruptor S3 se los puede hacer PERMANENTES o CONTROLADOS a través del pin RA4 del PIC. El principio es equivalente al de los LED con Q1.

Figura 8: esquema de conexión de pulsadores.

Al compartir los terminales de esta manera se reduce la cantidad de pines necesaria, pero el control se hace un poco más elaborado, ya que se deben habilitar periódicamente los LED y los pulsadores, y sincronizar la entrada y salida de datos con la habilitación. 54

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Figura 9: Esquema real implementado en la placa para los LEDs y los pulsadores.

Observe que para los pulsadores no se utilizó ningún circuito para absorber los rebotes en los contactos, por lo que se debe hacer desde el programa. Una técnica de uso común es la siguiente: Para evitar falsas lecturas del estado de un interruptor, debido a los falsos contactos que se producen durante su conexión o desconexión, puede ser muy útil escribir un pequeño bloque de código como el siguiente, para asegurar una lectura efectiva. Observar el “;” en la línea de la instrucción while. void main() { while (TRUE) { if (input(PIN_D0) == 0) { while (input(PIN_D0) == 0); output_low(PIN_D3); } if (input(PIN_D1) == 0) { while (input(PIN_D1) == 0); output_ high (PIN_D3); } } } © Teletronix, Mar del Plata, Argentina

// Si PB4 está pulsado // Esperar hasta que se libere // y encender el LED1. // Si PB3 está pulsado // Esperar hasta que se libere // y apagar el LED1.

55


Edición para CCS

Teletronix Edu 67J50

En el ejemplo Edu_67J50_Ej03_Pulsadores_CCS.c se implementa un control de encendido y apagado del LED correspondiente al mismo pulsador que se opera. En el mismo ejemplo se ve el uso de otras funciones de CCS para el control de los pines de salida. En el ejemplo Edu_67J50_Ej04_Pulsadores_Multiplexados_CCS se aplica el concepto de multiplexado de los terminales para entrada y salida. Con éste método se pueden usas simultáneamente los cuatro LEDs y los cuatro pulsadores. Para más detalles en el uso de las funciones de CCS referirse al archivo de ayuda de CCS.

56

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Entradas Analógicas

En el conector de borde izquierdo hay un grupo especial de entradas que, además de funcionar como terminales de entrada/salida digitales de uso general, se los puede configurar como entradas analógicas, es decir, éstos terminales están conectados a los pines del microcontrolador que pueden configurarse para que lleguen al conversor analógico a digital (ADC) incorporado, y reciben el nombre de ADC1 a ADC8. El orden en que se distribuyen las entradas analógicas no necesariamente coincide con el orden de numeración de las entradas, sino con el orden más conveniente para que el recorrido de la señal sea el menor. Sólo existe una excepción a esta regla, y es que las entradas que pueden ser utilizadas como tensiones de referencia para el módulo ADC quedan ubicadas en las posiciones ADC1 para VREF+ y ADC2 para Vref-. La distribución discontinua de las entradas analógicas no implica un problema a la hora de programar el microcontrolador, ya que para acceder a una de ellas se debe asignar la dirección al multiplexor, y el tiempo que demanda el cambio es igual tanto para entradas adyacentes como para las que no lo son. Para una ubicación más fácil, junto al conector están impresos los nombres de los terminales y las entradas analógicas correspondientes.

PRECAUCIÓN: Las entradas analógicas no soportan tensiones superiores a los 3.3Volts. La placa 67J50 está protegida por diodos conectados a VDD y a VSS, pero es aconsejable no sobrepasar éste límite.

© Teletronix, Mar del Plata, Argentina

57


Edición para CCS

Teletronix Edu 67J50

Figura 10: protección de las entradas analógicas.

Con el objeto de proteger las entradas que no son tolerantes a tensiones mayores a la tensión de alimentación VDD, las ocho entradas del ADC, las entradas de los comparadores analógicos y la entrada del oscilador secundario (oscilador utilizado con señal para los módulos TIMER1 y TIMER3), están limitadas en el rango de excursión de la señal de entrada por circuitos como el que muestra en la Figura 10. Con éste circuito, la señal que llega a los terminales del microcontrolador podrá alcanzar un valor máximo de tensión igual la tensión VDD más la caída de tensión del diodo D1, VD, y el valor mínimo podrá ser menor que 0V, limitada por la VD del diodo D2. Los valores máximos permitidos en ambos sentidos se definen en la hoja de datos del microcontrolador, en la tabla de valores máximos absolutos (absolute máximum ratings). Los diodos D1 y D2 deben elegirse tomando en cuenta que su caída de tensión debe ser igual o menor que la diferencia entre el valor máximo permitido y V DD. Normalmente, para tensiones VDD de 3.3V, ésta diferencia suele ser de 0.3V. Los diodos BAT54 presentan una caída de tensión de 0.31V cuando la corriente que los atraviesa es de .01A. Con éstos datos, y suponiendo que toda la corriente pasará a través del diodo, se calcula el valor del resistor puesto en serie con la entrada, para una tensión máxima de 5V como:

En la placa está implementado con el valor estándar más cercano (por encima), que es . 58

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

En conversor Analógico a Digital (ADC)

El microcontrolador PIC18F67J50 trae integrado un conversor analógico a digital (ADC) de 10 bits, con un multiplexor analógico de 8 entradas. Todas las entradas están disponibles en los terminales IZQ21 a IZQ29. El orden en que están distribuidas no es ascendente, debido a que, para hacer los caminos de señal más cortos, fueron asignados de acuerdo al orden en que están en la cápsula del microcontrolador. Para facilitar la tarea de programación y para permitir que el código generado sea compatible con otras placas, en el archivo de encabezado Edu_67J50_1.0_A_CCS.h se definió un vector en el que se asigna el número de port analógico del micro, relativo a la posición en que se ubica en el conector derecho de la placa de desarrollo. const int ADC[9] = {255, 3, 2, 1, 0, 11, 10, 7, 4};

Éste arreglo definido como constante tiene 9 elementos, debido a que los índices de los vectores y matrices en C comienzan en 0, y en la placa se definieron las entradas analógicas a partir de ADC1, entonces el elementó con índice 0 no tiene ningún sentido y se le asignó un valor de 255, que no representa un puerto analógico. Al índice 1 le corresponde el port analógico 3, al índice 2 el port 2 y así hasta el índice 8. En CCS se necesitan dos tipos de definiciones, una para configurar los pines que funcionarán como entradas analógicas, que algunos micros se definen como AN0, AN1, etc. y otra para seleccionar una de las entradas antes de la conversión, que son solo los números de entrada analógica, 0, 1, etc. © Teletronix, Mar del Plata, Argentina

59


Edición para CCS

Teletronix Edu 67J50

Las primeras se utilizan con la función setup_adc_ports(), con la que se definen cuales entradas serán analógicas y el origen de las tensiones de referencia. En el siguiente fragmento se configura el micro para que solo la entrada que conecta al potenciómetro R31 sea analógica, y las tensiones de referencia serán las tenciones de fuente VSS (0V) para Vref- y VDD (3.3V) para Vref+. En el archivo Edu_67J50_1.0_A_CCS.h se define POTE_MUX como sAN1. setup_adc_ports(POTE_MUX | VSS_VDD); setup_adc(ADC_CLOCK_INTERNAL | ADC_CLOCK_DIV_16);

La segunda línea es necesaria para definir el funcionamiento del módulo ADC, indicándole el origen de la fuente de señal de reloj y su velocidad relativa. Para saber más acerca de la configuración del conversor A/D es conveniente leer la hoja de datos de microcontrolador PIC, en sección ADC, donde se detalla su funcionamiento y sus limitaciones. La barra vertical que separa los identificadores es el operador lógico OR, equivalente a una suma lógica, y en éste casi significa que cada uno de los identificadores serán añadidos a la configuración. Podría escribirse también: setup_adc_ports(sAN0 | sAN1 | sAN5 | VSS_VDD);

60

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Potenciómetro multifunción

Para comenzar con la adquisición de señales analógicas no hay nada mejor que un potenciómetro (pote para abreviar) lineal. Conectado como muestra la Figura 11, la tensión en el terminal móvil o cursor es proporcional al ángulo al que se hace girar su eje. La tarjeta Teletronix Edu 67J50 tiene incorporado un pote lineal de 5KΩ, que puede ser conectado a la entrada analógica ADC3 del conector de expansión izquierdo (IZQ24) colocando el interruptor S5 en la posición ADC3. En el microcontrolador, éste terminal se corresponde con la entrada AN0.

Figura 11: Conexión del potenciómetro multifunción.

Junto al pote hay un punto de prueba (TP20) conectado al cursor, y es muy útil para verificar la tensión de salida al girar el eje del potenciómetro. Si se pone en funcionamiento el conversor analógico a digital se obtendrá un número entre 0 y 255 o entre 0 y 1024 de acuerdo a la configuración del conversor, proporcional al ángulo de giro del potenciómetro. En el ejemplo Edu_67J50_Ejemplo_05_ADC_Pote_CCS.c se hace una pequeña demostración del uso del potenciómetro como señal para el conversor A/D. La configuración necesaria es la que se mostró en el apartado anterior, y el código

© Teletronix, Mar del Plata, Argentina

61


Edición para CCS

Teletronix Edu 67J50

necesario para la lectura del valor de tensión y representación en una barra de LEDs es como el siguiente: void main() { int Valor;

// Variable local a la función main.

while (TRUE) { // Elegir el canal del que se quiere convertir el valor set_adc_channel(ADC[3]); delay_us(ADC_MUX_SETUP_TIME); // Leer y almacenar el valor en la variable “Valor” Valor = read_adc(); // Hacer alguna acción con el valor medido y volver al // principio. } }

La otra función de del pote es fijar una tensión de referencia para el conversor A/D. Cuando se necesita una tensión de referencia menor que VDD se puede ajustar S5 en REF y asignarle al conversor una VREF+ de cualquier valor entre 0V y VDD. Los detalles de ésta función se pueden ver en el siguiente apartado Tensión de referencia.

62

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Tensión de referencia

El microcontrolador de la familia PIC18F que contiene la tarjeta Edu 67J50 cuenta con un módulo conversor analógico a digita de 10 bits y un multiplexor analógico de 8 entradas. El rango de tensiones que soporta es de 0V a 3.3V. Las entradas AN2 y AN3 pueden ser usadas como entradas de señal o como entradas de tensión de referencia, cuando se requiere una tensión diferente que la de alimentación. La placa de desarrollo cuenta con varias opciones para asignar la tensión de referencia al conversor. La mayoría están contenidas dentro de la burbuja TENSION DE REFERENCIA en la placa. Lo primero que se debe hacer es seleccionar la fuente de la que provendrá la tensión de referencia ajustando las llaves de DS4. Si se observa, se ven dos interruptores identificados como VREF+, uno que conecta con POTE y el otro con 2.048.

ATENCIÓN: No se deben conectar ambos al mismo tiempo. Solo uno de los dos, o ninguno. La posición de conexión es hacia la izquierda, identificada en el dipswitch como ON.

Si se elige conectar con POTE y en el programa se establece que la tensión de referencia positiva será tomada del exterior, ésta se podrá ajustar con el potenciómetro R31.

© Teletronix, Mar del Plata, Argentina

63


Edición para CCS

Teletronix Edu 67J50

ATENCIÓN: el interruptor S5 debe estar en la posición REF.

Así, el conversor A/D generará números para representar el valor de tensión en las otras entradas que será 0 para tensiones de 0V y el máximo número cuando la tensión alcance o supere a la tensión de referencia. PRECAUCIÓN: la tensión en las entradas analógicas puede superar a la tensión de referencia, pero no pueden superar nunca los 3.3Volts. La placa 67J50 está protegida por diodos conectados a VDD y a VSS, pero es aconsejable no sobrepasar éste límite. Para las aplicaciones en las que se necesite de una representación rápida y precisa de la magnitud medida, se dispone de una tensión de referencia de 2.048Volts, que la provee el regulador LM4040D20 de Texas Instruments, que tiene una exactitud del 1% y una deriva térmica de 150ppm/°C. Esta tensión tiene un valor que corresponde a una potencia de 2 (211) expresada en milivolts 211 = 2048 mV Si se la utiliza como tensión de referencia para el conversor ADC, éste producirá un valor de conversión proporcional a 2.048V, es decir, que si se conecta esta tensión a un ADC de 11 bits de resolución, cada valor que éste genere podrá ser leído directamente como la cantidad de milivolts presentes en la entrada del conversor. En nuestro caso, como solo contamos con 10bits de resolución, el número deberá ser multiplicado por 2mV para conocer la tensión de entrada. Algunas aplicaciones requieren más detalle en la medición y, por ejemplo, toda la variación se concentra en un rango pequeño de tensión, menor que el rango VSS-VDD. En esos casos se suele utilizar una técnica que habitualmente se la

64

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

llama de ventana, y consiste en utilizar tensiones de referencia cercanas a los extremos de variación de la señal que nos interesa medir. ATENCIÓN: Cuando el rango de conversión es muy pequeño la resolución de la conversión puede ser mucho menor que el nivel de ruido. En esa situación varios de los bits más bajos carecerán de sentido práctico, lo que es equivalente a tener menor resolución. La sección VREF- de DS4 permite conectar la entrada VREF- del conversor al pote R36 identificado como SUB (por sub-referencia), que permite ajustar ésta tensión entre 0V y VREF+. En el punto de prueba TP22 se puede medir la tensión que entrega el pote SUB, y se debe usar en conjunto con una de las fuentes anteriores. ATENCIÓN: para usar el pote SUB como VREF- debe estar conectada alguna de las llaves de VREF+, de lo contrario no funcionará correctamente.

© Teletronix, Mar del Plata, Argentina

65


Edición para CCS

Teletronix Edu 67J50

Comparadores Analógicos

Los comparadores analógicos son muy útiles cuando se necesita una respuesta rápida ante cambios de tensión de señales analógicas. El ambiente de desarrollo Teletronix Edu prevé la utilización de un máximo de 3 comparadores analógicos en algunas placas. Están definidas las ubicaciones de una de las entradas de cada comparador en forma individual, y de las salidas de todos ellos. Hay otro terminal de entrada hacia los comparadores, y está destinado a conectarse en forma común a todos, para utilizarse como tensión de referencia. En la placa Teletronix Edu 67J50 se la distingue como CVref. El microcontrolador PIC18F67J50 cuenta con dos comparadores analógicos independientes, que pueden configurarse de varias maneras. Se puede acceder a sus entradas a través de las entradas analógicas del microcontrolador, o pueden conectarse a referencias de tensión internamente. La salida de los comparadores es digital, y puede leerse desde el registro de control o se puede tener como señal eléctrica en los pines del dispositivo, pudiendo configurarse su polaridad y pudiendo también generar diferentes interrupciones independientemente para cada comparador, incluyendo interrupt-on-change. Para definir la tensión de referencia se puede programar que ambos comparadores conecten su entrada no inversora a la salida del módulo interno, que provee un divisor resistivo programable con resolución de 1/16, en dos rangos y con valores de tensión extremos que puede ser VDD - VSS o VRef+ Vref-. Ésta tensión puede estar disponible en el exterior del microcontrolador programando la salida del módulo CVref para que esté conectada al pin CVref. Otra manera de definir la tensión de referencia es asignar las dos entradas de 66

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

cada comparador a entradas analógicas del chip, y fijar la tensión con un circuito externo. La placa Teletronix Edu 67J50 permite todas las combinaciones posibles, seleccionando cada fuente de referencia desde el dipswitch DS4, donde hay dos grupos llamados C1INB y C2INB, correspondientes a las entradas B (entradas no inversoras) de ambos comparadores, y permite asignarlas la fuente te tensión fija de 2.048V o a una tensión variable ajustada por el potenciómetro R31, además de las posibles asignaciones internas del microcontrolador. Las salidas digitales de cada comparador están accesibles en los terminales C1OUT y C2OUT de la placa de desarrollo, y se deben configurar los comparadores para asignar su salida a los pines RF7 y RC5 para que estén disponibles. Éstas salidas pueden usarse como señales para otros circuitos, por ejemplo para inhabilitar circuitos de potencia, logrando una máxima velocidad de respuesta, ya que su estado no depende de la operación del microprocesador. PRECAUCIÓN: las entradas analógicas no soportan tensiones superiores a los 3.3Volts. La placa 67J50 está protegida por diodos conectados a VDD y a VSS, pero es aconsejable no sobrepasar éste límite.

© Teletronix, Mar del Plata, Argentina

67


Edición para CCS

Teletronix Edu 67J50

Sensor de aceleración MMA7331LC

Sin lugar a dudas, el componente más atractivo entre los periféricos montados en la placa es el acelerómetro de Freescale MMA7331. Éste pequeño circuito integrado no es solo una pastilla de silicio dentro de una pequeña cápsula de plástico, es mas bien un sofisticado sistema mecánico que integra, además de circuitos analógicos y digitales, tres juegos de condensadores de tres placas, de las cuales una es móvil, sí, se mueve libremente dentro de la cápsula. Se trata de un circuito integrado fabricado por Freescale (antes llamada Motorola) que consiste de una celda sensitiva capacitiva de superficie micromecanizada (g-cell) y un circuito de acondicionamiento de la señal, todo contenido en un solo integrado. La llamada celda g es una estructura mecánica formada por materiales semiconductores, que permiten moldear un conjunto de ligamentos unidos a una masa móvil central que se desplaza entre dos placas fijas. La placa central se puede sacar de su posición de reposo sometiendo al sistema a una aceleración.

Figura 12: esquema simplificado de la celda g del sensor.

Al desplazarse la masa central, ésta se acerca a una de las placas laterales y se aleja de la otra, modificando la capacidad de los dos condensadores que se

68

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

forman, y ésta diferencia es una medida de la aceleración a la que está sometido el sistema. El circuito de acondicionamiento mide la capacidad de ambos conjuntos y genera en su salida una tensión lo suficientemente alta y proporcional a la aceleración, que puede medirse directamente usando un conversor analógico a digital, como el que tiene incorporado el PIC18F67J50. El circuito de acondicionamiento tiene resuelto, además del sensado, la amplificación de la señal y su filtrado, por lo que casi no se necesitan componentes externos. Con un circuito como el de la Figura 13 se puede medir sin inconvenientes el valor de la aceleración en cada uno de los tres ejes del sensor.

Figura 13: esquema de conexión del MMA7331 y ubicación en la placa.

En la placa Teletronix Edu 67J50, junto con el sensor está el conjunto de interruptores DS3 que conectan al sensor a las entradas analógicas del microcontrolador. La llave 1, identificada como g, es el selector de sensibilidad del sensor. En la posición OFF la sensibilidad es de ±4g, y en la posición ON puede medir variaciones de ±12g. Las otras tres llaves conectan las salidas Z, Y y X del sensor a los terminales analógicos 4, 5 y 6 (terminales 25, 26 y 27 del conector lateral izquierdo)

© Teletronix, Mar del Plata, Argentina

69


Edición para CCS

Teletronix Edu 67J50

respectivamente. Se deben poner en la posición ON las correspondientes a las señales que se quieran medir. Los puntos de prueba TP6, 7 y 8 están conectados al sensor andes de pasar por las llaves, por lo tanto se puede medir con un instrumento la salida del sensor sin necesidad de que esté conectado al microcontrolador. Junto al sensor se ve impreso un sistema de ejes coordenados que indican el sentido que el sensor tomará como positivo para las aceleraciones en las tres dimensiones. El eje +Z se indica como una pinta de flecha, indicando que el sentido positivo es hacia arriba de la placa. Vamos a escribir un programa que, mediante el uso del acelerómetro, sirva para medir inclinación de una superficie. El instrumento más común que se utiliza para hacer ésta medición es el nivel de burbuja, que consiste en un tubo sellado casi lleno de un líquido, al que se le dejó una pequeña cámara de aire y se le hicieron unas marcas que coinciden con la ubicación de la burbuja cuando el tubo está horizontal. Cuando la posición del cilindro no es horizontal, la burbuja se desplaza hacia el lado más alto.

Figura 14: nivel de burbuja

Con la placa de desarrollo lo vamos a diseñar como un sistema electrónico. Vamos a sensar la intensidad de la aceleración de la gravedad sobre uno de los ejes del sensor y vamos a representar la burbuja de aire con los LEDs que tiene la

70

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

placa. Por conveniencia, para que el “movimiento” de la burbuja coincida con la variación de la inclinación de la placa, vamos a elegir el eje X del sensor. Los preparativos necesarios, antes de probar el programa son: ajustar la llave S2 en la posición PERMANENTES para que los LED enciendan con solo poner a nivel bajo los pines correspondientes; ajustar la llave g de DS3 en OFF para que el sensor sea más sensible; la llave X de DS3 en ON para conectar la salida X del sensor a la entrada analógica ADC6. Una vez hechos éstos ajustes empezamos con el programa. [el programa está escrito como ejemplo y se entrega en el DVD que acompaña el producto. Se recomienda revisar periódicamente el sitio web de la placa de desarrollo http://www.teletronix.com.ar/edu/edu_67J50.html para descargar versiones actualizadas de éste manual]

© Teletronix, Mar del Plata, Argentina

71


Edición para CCS

Teletronix Edu 67J50

Sensor de temperatura TMP20

Dentro de las mediciones analógicas típicas, una de las primeras experiencias que casi siempre se hace es la medición de temperatura mediante un sensor integrado, y ésta no será la excepción a la regla. La placa Teletronix Edu 67J50 trae un sensor de temperatura de precisión TMP20 de Texas Instruments, que a diferencia de otros, permite medir temperaturas inferiores 0°C sin necesidad de fuentes de alimentación de tensión negativa. Éste sensor cubre el rango de -55°C a +130°C con una sola tensión que puede estar en el rango de 2.7V a 5.5V, y puede operar con tensiones tan bajas como 1.8V si solo se requiere un rango de medición a partir los +15°C. La tensión de salida es analógica, y responde a la ecuación cuadrática:

Vout = 1.8639 – 0.0115 T – 0.00000388 T2 donde Vout es la tensión de salida del sensor y T es la temperatura. De la ecuación se puede despejar la temperatura en función de la tensión. La ecuación para la temperatura exacta a lo largo de todo del rango se encuentra en la hoja de datos del componente, y también se ofrece una versión lineal simplificada, válida para temperaturas cercanas a los 25°C:

Vout = 1.8663 – 0.01169 T y la teoría y ejemplo para linealizar alrededor de cualquier otra temperatura. En nuestra placa, el sensor está montado en la cara superior, con un texto que lo identifica, y el interruptor S4 que conecta su salida a la entrada analógica ADC7 (pin IZQ28 del conector lateral) cuando está en la posición SI. En la posición NO simplemente queda desconectado, y la entrada ADC7 queda libre para usarse con otra señal. El 72

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

punto de prueba queda conectado al sensor, y por lo tanto puede medirse la tensión de salida conectando un voltímetro o un osciloscopio independientemente de la posición de S4. En el ejemplo Edu_67J50_Ej09_TMP20_USB_CCS.h se utiliza éste sensor para medir la temperatura, y el valor se registra en la pantalla de la PC utilizando un software de terminal de puerto serie.

© Teletronix, Mar del Plata, Argentina

73


Edición para CCS

Teletronix Edu 67J50

Puerto serie RS-232

Durante muchos, años la necesidad de enviar la información de un punto a otro, cada vez en mayor volumen y cada vez más rápido, llevó a la evolución de los medios de comunicación digitales. Los medios de transmisión en serie fueron ganando terreno sobre los de formato paralelo, superando las velocidades máximas que éstos últimos podían manejar y disminuyendo la cantidad de conexiones eléctricas (conductores) necesarios para establecer una conexión. Uno de los estándares más difundidos durante muchos años fue el EIT/TIA RS232C, que fue diseñado para el intercambio de datos binarios en serie entre un equipo terminal de datos (DTE) y un equipo de comunicación de datos (DCE), que generalmente suelen ser respectivamente una computadora y un modem, aunque pueden ser otros equipos. En principio, hoy se lo puede considerar como un puerto de comunicaciones obsoleto, ya que las computadoras dejaron de traer el conector DB-9 que hasta no hace muchos años venía en todo equipo convencional, sin embargo, existe todavía un numero enorme de equipos, principalmente para aplicaciones industriales, que lo utilizan para conectarse a computadoras o entre equipos similares. La norma RS-232 define a la conexión física como un medio de comunicación de baja velocidad, hasta 20kbps, para una distancia de 15 metros o menos. La comunicación puede ser sincrónica o asincrónica y el canal puede ser simplex, dúplex o full dúplex, que se conecta a través de un cable que tiene en sus extremos conectores DB-9 macho y hembra, aunque el estándar originalmente establece terminales DB-25. 74

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Las líneas principales son TXD y RXD, que son transmisión y recepción de datos respectivamente, pero también se definen líneas de control o handshaking RTS, CTS, DTR, DCR, CD, y otras, destinadas a controlar el flujo de datos entre los dispositivos, debido a que generalmente suelen tener diferentes velocidades y por lo tanto sufrir desbordamientos en el equipo más lento. En un canal simplex los datos siempre viajarán en una dirección, por ejemplo desde DCE a DTE. En un canal half duplex, los datos pueden viajar en una u otra dirección, pero sólo durante un determinado periodo de tiempo; luego la línea debe ser conmutada antes que los datos puedan viajar en la otra dirección. En un canal full duplex, los datos pueden viajar en ambos sentidos simultáneamente. Eléctricamente se definen tensiones de +15V para señalizar un cero lógico y de 15V para señalizar un uno lógico referidas a tierra. Como los datos se deben transmitir en serie, se necesita de un circuito capaz de convertir las palabras de 8 bits de un microprocesador en una secuencia formada por éstos mismos bits. Éste circuito se denomina Transmisor y Receptor Asincrónico Universal y se lo conoce por su sigla en inglés UART. La UART, además de convertir las palabras paralelo en serie y viceversa, controlan el flujo de comunicación, generan las señales necesarias para comunicarse, y generan también la base de tiempos que domina al sistema. Como los niveles de señal necesarios para establecer la comunicación a través de RS-232 son diferentes a los que existen en los sistemas digitales, que normalmente son de 3.3V o de 5.0V, se necesita de otro circuito que traduzca éstos valores, y uno de los más conocidos el es MAX232 de Maxim. Éste circuito integrado genera las tensiones necesarias a partir de una alimentación de 5.0V (los más modernos funcionan con 3.3V) conmutando un conjunto de condensadores que se deben colocar en el circuito.

© Teletronix, Mar del Plata, Argentina

75


Edición para CCS

Teletronix Edu 67J50

El PIC18F67J50 tiene dos UARTS mejoradas (EUSART). La placa Teletronix Edu 67J50 tiene un puerto RS-232 completamente implementado on-board, que funciona con la UART2 y que utiliza el driver TRSF3232 de Texas Instruments para adaptar los niveles de tensión, y un conector DB-9 hembra con las conexiones de datos TX y RX implementadas como un DCE, es decir el pin 2 es TX y el pin 3 es la entrada RX. Con estas dos señales y la referencia de masa (pin 5) es suficiente para establecer una comunicación asincrónica con una PC o con otro dispositivo RS-232. En el conector están unidos los terminales 1, 7 y 8 debido a que algunos equipos lo requieren aún para comunicación asincrónica. En la parte superior de la placa hay 4 puntos de prueba: dos corresponden a las señales TX y RX a nivel TTL (3.3V en éste caso) y VP+ y VP-, que están conectados a los terminales VPUMP del driver TRSF3232, y son las conexiones de la alimentación de nivel RS-232 que genera el IC. La otra UART1, está conectada a los terminales 13 y 14 del conector de borde derecho y el nivel de tensión con que opera es TTL (0V para el cero lógico y 3.3V para el uno). Para conectar la placa con otro microcontrolador se puede hacer directamente desde éstos terminales, pero para utilizarla con algún dispositivo RS-232 se debe conectar antes un driver MAX232 o similar. Los terminales del conector lateral se pueden usar como entradas/salidas genéricas si no se habilita la UART1 del microcontrolador. Para utilizar la UART2 solo se necesita habilitarla en el microcontrolador, y estará lista para usar sin necesidad de otro ajuste. Vamos a ver en un ejemplo cómo es posible conectarnos con una PC a través del puerto serie RS-232. Para las computadoras más nuevas o portátiles que no lo tienen implementado vale lo mismo el uso de un conversor USB – RS-232. 76

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Vamos a ver una aplicación de la comunicación a través del puerto serie. Para comenzar desde lo más fácil lo haremos en una sola dirección, desde la placa de desarrollo hacia la PC. Utilizando un programa que funcione como terminal de puerto serie, que puede ser Hyperterminal, que venía con la instalación de Windows, Terminal, que está incluido en el DVD que le fue entregado con su placa de desarrollo, o cualquier otro software similar, tanto para Windows como para Linux. La idea es mostrar el estado de los cuatro pulsadores de la placa en la pantalla de la PC, y para ello solo escribiremos código para el PIC, quien hará todo el trabajo. CCS incorpora una biblioteca de funciones para la transmisión y recepción de datos en serie llamada rs232. Para poder invocar las funciones se debe colocar en el archivo, antes llamar a una de sus funciones y después de la línea #use delay, una línea como ésta: #use rs232(xmit=PIN_G1, rcv=PIN_G2, baud=9600) xmit y rcv son respectivamente los pines que se utilizarán para transmitir y para recibir los datos en serie respectivamente. En principio se puede elegir cualquier pin para cada función, pero en los micros que tienen una UART (actualmente casi todos tienen una), si se indican los pines correspondientes a los terminales TX y RX, las funciones utilizan el módulo para transmitir y recibir, pero si se indican otros pines, la comunicación se implementa con registros generales y a través de programa. Esto demanda un uso intensivo de recursos del microcontrolador, pero es una buena opción si se necesita más de un puerto, o si el micro no tiene uno. No se necesitan casi ajustes para comenzar a trabajar, el Puerto serie RS-232 está implementado completamente en la placa de desarrollo © Teletronix, Mar del Plata, Argentina

77


Edición para CCS

Teletronix Edu 67J50

serán, conectado a la UART 2 del PIC, y la conexión es exclusiva, los terminales TX y RX no están compartidos con otra función de la placa. En la placa hay que colocar las llaves S2 y S3 en la posición PERMANENTES, para que los pulsadores y los LEDs estén activos todo el tiempo. S3 se necesita además para que los LEDs funcionen como pull-ups para los pulsadores. Se debe conectar un cable DB-9 macho – hembra entre el conector del puerto serie de la placa, J2, y un puerto serie de la PC. Si la computadora no tiene un puerto serie, se conecta un adaptador USB – RS-232 directamente a la placa. ATENCIÓN: No todos los adaptadores funcionan correctamente con todo tipo de aplicaciones. Algunos no generan los niveles de tensión suficientes para lograr la comunicación con la interfaz de la placa. Además, al conectar el adaptador por primera vez puede ser necesario instalar algún driver.

Una vez conectado el puerto serie se abre el programa que vamos a utilizar para monitorear el puerto. Al abrir el programa Hyperterminal se verá un cuadro de diálogo donde se debe asignar el nombre para la Figura 15: asignar un nombre para la conexión.

78

conexión que va a establecer. Se puede usar cualquier nombre, y luego se puede guardar con ese nombre la conexión con todos sus parámetros.

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario Luego hay que buscar en la lista desplegable el nombre del puerto al que se conectó la placa, puede ser un puerto físico o un puerto virtual cleado por un adaptador USB – Serie, pero para el programa no hay diferencia.

Figura 16: elegir el puerto serie.

Para completar la configuración es necesario ajustar algunos valores para la comunicación, que deben coincidir en los extremos, en el PIC y en la PC. Como ya se fijaron en el programa que cargamos en el PIC, debemos utilizar esos parámetros en la nueva conexión: ésta es la lista de parámetros del puerto, que se abre una vez seleccionado uno, o con el botón de la barra de herramientas del programa. Seleccionar:

Figura 17: parámetros del puerto

Baud: Bits: Paridad: Bits parada: Control:

9600 8 ninguno 1 ninguno

Una vez ajustados estos valores, y al presionar el botón Acepar, se abre la conexión. La programa en la PC queda listo para presentar en la pantalla uno a uno los caracteres recibidos por el puerto serie abierto. Al encender nuestra placa, el programa ya cargado en la memoria del micro envía varias strings (cadenas de caracteres), y el resultado es algo como el que se ve en la Figura 18, en la que los guiones representan el estado de cada pulsador.

© Teletronix, Mar del Plata, Argentina

79


Edición para CCS

Teletronix Edu 67J50

Figura 18: pantalla que genera el programa del ejemplo.

El texto de las primeras líneas es fijo, y lo envía el microcontrolador una sola vez, al iniciarse el programa. Luego, mientras corre el firmware, se envían a la PC los giones medios y bajos en una sola línea y sin saltos. Cada línea nueva se superpone con la anterior, por eso la imagen parece estática. Cuando se detecta un pulsador presionado se cambia el contenido de la línea de texto por una que represente el nuevo estado, y así se puede ver como en la Figura 18, una representación de los pulsadores abiertos, menos el PB2 que se ve cerrado, o presionado. En el DVD está el ejemplo completo en la carpeta ..\Edu_67J50_Ej07_RS232_CCS, y hay otro igual, pero que utiliza el puerto USB emulando un puerto serie en la carpeta ..\Edu_67J50_Ej07_USB_CDC_CCS

80

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Memoria EEPROM I2C

Uno de los puertos más utilizados en el diseño de sistemas compuestos por varios subsistemas, interconectados en una misma placa o en placas contiguas, es el puerto I2C, y una enorme aplicación de sistemas embebidos requiere del almacenamiento permanente de información, aún cuando se haya retirado la alimentación por mucho tiempo. Una solución a ésta necesidad es el uso de memorias EEPROM. El bus I2C fue diseñado por Philips a principios de los ‘80 con el fin de establecer un medio de comunicación simple entre circuitos integrados montados sobre una misma placa, y de ahí su nombre I 2C o IIC, sigla de “Inter Integrated Circuits” o “Entre Circuitos Integrados”. Al principio el bus se definió para una velocidad máxima de 100kbps ya que las aplicaciones para las que fue pensado no requerían velocidades mayores, pero a medida que se fue difundiendo y se lo fue aplicando a dispositivos que requerían mayores tasas de transferencia, fueron apareciendo versiones mejoradas, alcanzando los 400kbps en modo fast, o la opción high speed que proporciona tasa de 3.4Mbps. Actualmente se sigue trabajando en la norma, y van apareciendo nuevas actualizaciones. ATENCIÓN: si se conecta un dispositivo I2C externo a los terminales DER18/DER19, éste deberá tener una dirección diferente de 0, y no se colocarán los resistores pull-up en las líneas SCL y SDA, dado que ya están colocadas en la placa Edu 67J50.

© Teletronix, Mar del Plata, Argentina

81


Edición para CCS

Teletronix Edu 67J50

Oscilador secundario de 32768Hz

En ocasiones, una aplicación embebida necesita llevar cuenta del tiempo. Algunas veces, con conocer la cantidad de unidades de tiempo que pasaron entre un determinado momento y otro es suficiente, donde tales unidades de tiempo pueden ser segundos, milisegundos, o bloques de, por ejemplo, 1,5 minutos. Otras veces se hace necesaria la implementación de calendarios en tiempo real, que contabilizan el tiempo en las unidades que estamos acostumbrados (día, hora, minuto, segundo). Ésta es la aplicación más importante para la que está diseñado el bloque oscilador de 32768Hz. Tratándose de un reloj de tiempo real, es necesario que éste subsistema funcione en todo momento, aún durante las interrupciones del microcontrolador, aún cuando éste se encuentre atendiendo otra tarea, aún cuando esté en algún modo de bajo consumo (sleep), aún cuando sea necesario variar durante la marcha la frecuencia de reloj del sistema, y la manera más independiente de conseguirlo parece ser la utilización de un módulo especial: un contador de tiempo. Pero… ¿Por qué 32768? Resulta que los contadores/timers tienen la capacidad de provocar interrupciones cuando la cuenta supera el módulo del contador (número más grande que es capaz de contar +1) y éste vuelve a 0. Tratándose de contadores binarios, tal situación se hará presente luego de 256, 2048, 65536 cuentas, para timers de 8, 11, o 16 bits respectivamente. Todos éstos números corresponden a potencias de 2, y 32768 también lo es. Específicamente 215 = 32768. La ventaja de éste valor de frecuencia por sobre otros que puedan ser potencias de 2, es que están muy difundidos y se los consigue en cualquier comercio a bajo 82

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

precio, debido en gran parte a que se lo utiliza como base de tiempo en relojes de pulsera, de pared, de mesa, etc. En la placa Teletronix Edu 67J50 el oscilador de 32768Hz se puede asociar al TIMER1 o al TIMER3, el último es un contador de 16bits, y el primero es de 8bits de longitud. Si la intención es lograr que el microcontrolador se despierte cada un segundo para contabilizar el tiempo, con el TIMER1 no se puede obtener una interrupción cada un segundo porque el módulo del contador es mayor que el número de ciclos por segundo que produce el oscilador. El TIMER2 es de 8bits, ahora el problema es que se produciría una interrupción del microcontrolador cada 1/128 segundos. La solución es habilitar un prescaler y/o un poscaler junto con el TIMER2 y dividir por 128 la cantidad de pulsos de interrupción y así tener exactamente una interrupción por segundo. Con ésta interrupción se puede despertar al microcontrolador, incrementar el contador de segundos y actualizar los que fuera necesario, y volver al modo sleep sin haber casi consumido energía.

© Teletronix, Mar del Plata, Argentina

83


Edición para CCS

Teletronix Edu 67J50

Tarjeta micro SD

Una tarjeta de memoria es un dispositivo electrónico de estado sólido para almacenamiento de datos. Inventada por Toshiba en los años ’80, las tarjetas de memoria mantienen la información almacenada aún luego de desconectarlas de la fuente de alimentación. Ésta habilidad para retener los datos es la clave de la aplicación de las tarjetas de memoria FLASH, por ejemplo en cámaras digitales, en donde las fotos no se pierden cuando la tarjeta se retira de la cámara. Las tarjetas de memoria están basadas en dos tecnologías: la tecnología NOR y la tecnología NAND. La tecnología NOR brinda la posibilidad de acceder aleatoriamente a una alta velocidad, donde se pueden direccionar datos tan pequeños como un byte. La tecnología NAND es posterior a la NOR, desarrollada también por Toshiba a fines de los ’80. En esta tecnología el acceso a los dos es secuencial, es decir, se puede leer y escribir la memoria en muchas posiciones contiguas, pero ya no es posible acceder a cada byte de memoria independientemente, sino a bloques mas grandes llamados páginas. Las tarjetas basadas en tecnología NAND se utilizan frecuentemente en cámaras digitales, teléfonos celulares, equipos de audio y video, y otros dispositivos donde los datos se graban y se leen en grandes bloques y en forma secuencial. Existen en el mercado varios tipos de tarjetas de memoria. Algunos son: Smart Media (SM) Multimedia Card (MMC) Compact Flash (CF) Memory Stick (MS) Microdrive Extreme Digital (xD) Secure Digital (SD) 84

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

En la placa Teletronix Edu 67J50 contamos con una ranura para una memoria micro SD, que es una variante de forma de la tarjeta Secure Digital tradicional, pero su funcionamiento y protocolos para el acceso son iguales. Nos vamos a concentrar entonces en este tipo de tarjetas de memorias. El zócalo utilizado en la placa de desarrollo es del tipo push-push, es decir que tanto para insertar la memoria como para retirarla, se debe presionar la tarjeta hacia dentro hasta oír el cklick de la traba. PRECAUCION: tirar de la tarjeta cuando ésta se encuentra en su posición de inserción puede dañar los contactos de la tarjeta de memoria, las partes del zócalo, o ambos. Asegurarse de que la tarjeta está en la posición de desconexión antes de intentar retirarla.

© Teletronix, Mar del Plata, Argentina

85


Edición para CCS

Teletronix Edu 67J50

Tarjeta Secure Digital Las tarjetas SD son una clase de tarjetas de memoria FLASH de tecnología NAND, y son probablemente las más usadas en la actualidad. Originalmente fueron desarrolladas en el año 2000 por la Asociación Secure Digital, conformada por Toshiba, Matsushita y SanDisk. Sus dimensiones originales son de 32mm x 24mm y un espesor de 2.1mm, muy pequeñas y prácticas comparadas con otros medios de almacenamiento existentes. Tres años más tarde evolucionaron en un formato más pequeño llamado mini SD, y luego en 2008 aparecieron las tarjetas micro SD, que miden solo 15mm x 11mm y 1mm de espesor, con un peso de medio gramo. La capacidad de las memorias micro SD abarca un rango desde los 64MB hasta los 4GB, aunque actualmente existen de capacidades mayores bajo el nombre SDHC, por High Capacity, y SDXC, por Extended Capacity, que pueden alcanzar los 32GB y hast 2TB respectivamente. La conexión eléctrica de estas memorias se hace a través de un terminal de 11 contactos en el formato estándar, 9 contactos en el formato mini y 8 contactos en el formato micro SD como el que tenemos en la placa. La tensión de funcionamiento para todas ellas está en el rango de 2.7V a 3.6V, y pueden conectarse al dispositivo controlador de dos maneras, a través de un puerto SD BUS, o a través de un puerto SPI. El primero permite mayores velocidades de transferencia, y el segundo se puede implementar con mayor facilidad, y es el que trataremos en éste manual.

86

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Conexión con el puerto SPI Como se dijo antes, cada uno de los formatos de tarjeta tiene una cantidad diferente de terminales de conexión, sin embargo, los tres admiten el modo de comunicación SPI. Los terminales necesarios, además de los de alimentación son:

Línea Clock Data IN Data OUT Chip Select

En microSD Pin 5 Pin 3 Pin 7 Pin 2

En el PIC RD6/SCK2 RD4/SDO2 RD5/SDI2 Cualquiera

Dirección PIC  microSD PIC  microSD PIC  microSD PIC  microSD

En la Figura 19 se muestra el esquema de conexión para la tarjeta micro SD. Todas las líneas tienen una resistencia en serie de bajo valor para limitar la corriente del terminal en caso de cortocircuito, y la llave DS2, del tipo dipswitch, sirve para seleccionar el pin del microcontrolador que funcionará como chip select de la tarjeta. Si no es posible usar ninguno de los dos Figura 19: Esquema de conexión del zócalo micro SD propuestos, se puede conectar con un cable, a través de H2, a cualquier terminal disponible en los conectores laterales de la placa de desarrollo.

© Teletronix, Mar del Plata, Argentina

87


Edición para CCS

Teletronix Edu 67J50

Protocolo de comunicación por bus SPI En la placa de desarrollo, la tarjeta micro SD está conectada al puerto SPI2. Veremos el principio de funcionamiento y el protocolo que se debe utilizar para establecer la comunicación con la tarjeta en este modo de operación. Por empezar, todas las comunicaciones entre el host, en nuestro caso el PIC, y la tarjeta, son controladas por el host. Los mensajes en el bus SPI se pueden clasificar en comandos, respuestas y reconocimientos. La tarjeta devuelve una respuesta para cada comando recibido, y un mensaje de reconocimiento para comando de escritura de datos. Al conectarse la alimentación la tarjeta se inicializa en modo SD, pero cambiará al modo SPI si la línea de control CS se mantiene a nivel bajo mientras se envía a la tarjeta un comando reset. La tarjeta podrá volver al modo SD solo si se desconecta y se vuelve a conectar la alimentación. Al entrar al modo SPI la tarjeta está en modo no protegido, y no se usa la verificación de CRC. Para activar y desactivar la verificación a través de CRC se debe enviar a la tarjeta el comando CRC_ON_OFF (CMD59).

Lectura de datos La lectura de los datos almacenados en la tarjeta puede hacerse en bloques simples o múltiples, y se define en el campo READ_BL_LEN del registro CSD de la tarjeta. Para los fines de éste manual solo estudiaremos la lectura de un bloque a la vez. La lectura se inicia enviando a la tarjeta el comando READ_SINGLE_BLOCK (CMD17) indicando cualquier dirección válida como dirección inicial.

88

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Escritura de datos La escritura de datos también puede hacerse en bloque múltiples o de a uno. Una vez que la tarjeta recibe un comando de escritura válido, ésta envía una señal de confirmación y queda a la espera del bloque de datos que le enviará el host para su escritura. La dirección inicial, en la que se guardará el primer dato, puede ser cualquier dirección válida. Después de recibir los datos provenientes del host, la tarjeta devuelve un mensaje y, si no se produjeron errores, los escribe en la dirección indicada. El protocolo de comunicación que utilizan las tarjetas SD en el modo SPI consta de una gran cantidad de comandos para la lectura y escritura de los registros internos, lectura y escritura de datos, borrado de bloques, etc. En la Tabla 4 se describen algunos de los comandos más importantes para la comunicación con tarjetas SD en modo SPI. En éste modo, todos los comandos tienen una longitud de 6 bytes (48bits). En la Tabla 5 se muestra en detalle el formato que deben tener los comandos para controlar una tarjeta SD. Comando

Nombre

Argumento/s

Resp.

Descripción

CMD0

GO_IDLE_STATE

-

R1

Resetea la tarjeta.

CMD1

SEND_OP_COND

-

R1

Inicializa la tarjeta.

CMD9

SEND_CSD

-

R1

Obtiene los datos del registro CSD de la tarjeta.

CMD10

SEND_CID

-

R1

Obtiene el contenido del registro CID de la tarjeta.

CMD17

READ_SINGLE_BLOCK

Dirección (0..31)

R1

Lee un bloque de datos.

CMD24

WRITE_BLOCK

Dirección (0..31)

R1

Escribe un bloque de datos.

Tabla 4: Algunos de los comandos SD más importantes.

© Teletronix, Mar del Plata, Argentina

89


Edición para CCS

Teletronix Edu 67J50

Byte 1

Bytes 2 a 5

Byte 5

7 6 5 4 3 2 1 0 0 1 Comando

31 …………………………….……………..0 Argumento del comando

7 6 5 4 3 2 1 CRC 1

Tabla 5: Estructura de los comandos SD en modo SPI

Como acabamos de ver en la Tabla 5, cada comando comienza con un valor lógico ‘0’ en la posición del bit más significativo, un bit de transmisión con valor ‘1’, luego 6 bits que definen el comando enviado (se lo llama índice de comando), 32 bits de argumentos (algunos comandos no los requieren, en esos casos se debe completar con ceros. Ver Tabla 4), 7 bits de código CRC para comprobación de errores, y un bit de finalización, siempre en valor ‘1’ lógico. El índice de comando es el verdadero número del comando, pero representado en 6 bits. Por ejemplo: el comando SEND_CSD, que es CMD9 se representa en binario como ‘010001’, y el byte 1 quedaría definido como ‘01010001’.

Códigos de reconocimiento Hay varios tipos de códigos de reconocimiento (response tokens) que puede enviar la tarjeta. Siempre se transmiten comenzando por el bis más significativo, y tienen un formato de acuerdo a la siguiente descripción: 

90

Formato R1: Consta de un solo byte, y lo envía la tarjeta después de cada comando recibido, excepto para SEND_STATUS. El primer bit tiene valor ‘0’, y los demás, cuando tienen valor ‘1’, indican que se produjo algún error. Por ejemplo, si el bit 0 tiene valor ‘1’, indica que la tarjeta está en estado de reposo, y corriendo la secuencia de inicialización. Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50 

Manual del usuario

Formato R1b: Éste formato es similar al formato R1, pero se le agrega una señal busy para indicar que la tarjeta está ocupada.

Error de

Error de Error de secuencia de parámetro dirección

0

borrado Tabla 6: definición de bits en el formato R1.

 

Error de CRC

Comando ilegal

Erase reset

In iddle state

Formato R2: ésta señal de respuesta tiene 2 bytes de longitud, y se envía como respuesta al comando SEND_STATUS. Formato R3: ésta señal de respuesta tiene 5 bytes de longitud, y se envía como respuesta al comando READ_OCR. El primer byte es idéntico al del formato R1, mientras que los demás bytes contienen los datos del registro OCR. Señal de respuesta a datos: Cuando se escribe un bloque de datos en la tarjeta, ésta asiente con una respuesta a los datos. La respuesta es de un byte, y su definición es: Bit 0 1–2 3 4

Valor 1 Status 0 Reservado

010 101 110

Dato Aceptado Error de CRC, dato rechazado Error de escritura, dato rechazado

Tramas de datos (Data Tokens)

Los datos se reciben y transmiten en tramas de datos (data tokens). El formato de transmisión requiere que los bytes de información se envíen comenzando por el bit más significativo. © Teletronix, Mar del Plata, Argentina

91


Edición para CCS

Teletronix Edu 67J50

Las tramas de datos pueden tener una longitud de entre 4 y 515 bytes, y para operaciones de un único bloque, tienen el siguiente formato: Byte 1

Bytes 2 a 513

Bytes 514 y 515

START BLOCK

DATOS DEL USUARIO Información transportada por el mensaje

CRC Código de detección de errores

11111110 (0xFE)

92

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Estado de inicialización de la tarjeta Luego de conectarse la alimentación, la tarjeta SD permanece en estado de reposo. Se deben enviar a la tarjeta al menos 74 ciclos de la señal de clock manteniendo las líneas Data Out y CS (chip select) en estado alto (en valor 1) antes de comenzar a comunicarse con la tarjeta. Inicialmente, la tarjeta funciona en modo de Bus SD. Para pasarla al modo SPI será necesario mantener el valor bajo la línea CS mientras se envía el comando CMD0. Cuando la tarjeta pasa al modo SPI, enviará al host una respuesta con el formato R1 del modo SPI. El control de errores por CRC por defecto está desactivado en el modo SPI, pero como la tarjeta se inicializa en modo SD, se debe enviar el comando CMD0 con un CRC válido antes de que pase al modo SPI. El CRC para éste comando es fijo, y vale 0x95 (95 hexadecimal), entonces la secuencia que se debe enviar a la tarjeta para pasar del modo SD al modo SPI deberá se como el siguiente: 40 00 00 00 00 95 Entonces, los pasos a seguir para pasar la tarjeta del modo SD al modo SPI son:      

Conectar la alimentación. Enviar al menos 74 ciclos de reloj con CS y Data Out estado alto. Pones la línea CS a valor bajo. Enviar los 6 bytes de comando 40 00 00 00 00 95. Verificar la recepción del comando R1 para asegurarse de que no hubo errores. Enviar el comando CMD1 repetidamente hasta que el bit “in iddle state” de la respuesta R1 esté en cero.

Ahora la tarjeta está en lista para leer y escribir en modo SPI.

© Teletronix, Mar del Plata, Argentina

93


Edición para CCS

Teletronix Edu 67J50

Durante el reset, la frecuencia de clock deberá estar entre 10 y 400 khz. Luego del reset, la frecuencia puede aumentarse hasta 25MHz

Para obtener más información se recomienda la lectura de la bibliografía recomendada al final del manual.

94

Versión del manual: 1.0 – Agosto de 2013


Teletronix Edu 67J50

Manual del usuario

Puerto USB 2.0

El puerto USB es uno de los más versátiles y sin duda el más difundido en la actualidad. Se lo encuentra en casi cualquier dispositivo que pueda conectarse a una computadora, como impresoras, cámaras fotográficas, escáneres, teclados, ratones, teléfonos celulares, reproductores de música mp3, y hasta parlantes y proyectores de video. Todas las computadoras actuales cuentan al menos con dos o tres de ellos si son portátiles, y las de escritorio llegan a tener más de diez puertos distribuidos en sus paneles frontal y posterior. La máxima cantidad de dispositivos que según la norma que lo define pueden funcionar simultáneamente es de 127. Entre las cualidades de ésta interfaz se destaca principalmente su carácter plug and play, que significa que cualquier dispositivo puede conectarse a un anfitrión (p.e. computadora) mientras ésta está en funcionamiento, e inmediatamente lo reconoce y si es necesario instala los controladores. Cuando esto sucede, sólo se requiere tener el software del controlador la primera vez que el dispositivo se conecta. Otra característica interesante es que el mismo puerto puede proveer la energía para el funcionamiento del dispositivo instalado, siempre que ésta no exceda los 100mA para dispositivos de bajo consumo o los 500mA para los de alto consumo. La última versión del estándar es 3.0, pero la mayoría de las aplicaciones actuales implementan la versión 2.0 y todavía existen algunas con la versión 1.1. Estas dos últimas son totalmente compatibles, ajustando la velocidad a la del menor cuando son diferentes. Los microcontroladores de la familia PIC18F87J10 como el instalado en la placa, contienen un módulo de interfaz serie USB 2.0 compatible con las velocidades full-speed y low-speed que permiten una comunicación rápida entre un host © Teletronix, Mar del Plata, Argentina

95


Edición para CCS

Teletronix Edu 67J50

USB, como una PC, y el PIC. El módulo puede conectarse directamente al puerto USB, ya que internamente contiene al transceptor adecuado. Con el fin de mejorar el rendimiento, Microchip incluye algunas características especiales en el hardware del microcontrolador, como es el caso de la memoria RAM de doble puerto que está compartida por el núcleo del microcontrolador y por el puerto USB, buffers de descriptores para programar libremente los diferentes endpoints a lo largo de la memoria RAM, etc. Los diferentes compiladores disponibles ofrecen compatibilidad con el puerto, implementando bibliotecas de funciones para el acceso en los diferentes tipos … CDC, bulk, HID Para utilizar el puerto solo se necesita cargar las funciones adecuadas, y cada compilador trae su biblioteca En la ayuda del compilador CCS hay más información sobre el uso de las funciones para la comunicación USB.

96

Versión del manual: 1.0 – Agosto de 2013



Edición para CCS

Teletronix Edu 67J50

Referencias

A lo largo del manual se desarrollaron conceptos teóricos, se describieron las características más importantes del microcontrolador PIC18F67J50, se trabajó con ejemplos en lenguaje C, que fueron compilados con la herramienta CCS, y se propusieron diferentes proyectos con el hardware disponible en la placa de desarrollo o agregándole hardware adicional. Hay disponible en internet muchísima información para cada uno de los temas tratados. Aquí se nombran algunos que fueron utilizados como referencia: PIC18F87J50 Family data Sheet 2009, Microchip Technology Inc. Toda la información relacionada con el hardware del microcontrolador se encuentra en la hoja de datos provista por el fabricante.

PIC MCU C Compiler 2013, CCS Custom Computer Services Inc. Es la referencia complete del compilador. Describe las características del lenguaje, tipos de datos, operadores, instrucciones y las funciones incluidas en la instalación.

Manual de Usuario del Compilador PCW de CCS Andrés Cánovas López, Víctor Dorado Es una traducción al español de la ayuda del compilador, correspondiente a una versión anterior, pero es de gran ayuda si se tiene dificultad para leer en inglés.

PIC C An introduction to programming Microchip PIC in C Nigel Gardner


Teletronix Edu 67J50

Manual del usuario

Designing Embedded Systems With PIC Microcontrollers 2007, Tim Wilmshurt

The Essential PIC18 Microcontroller 2010, Sid Katzen

SD Card Projects Using The PIC Microcontroller 2010, Dogan Ibrahim

Š Teletronix, Mar del Plata, Argentina

99


Edici贸n para CCS

Teletronix Edu 67J50

Av. Col贸n 3875 Mar del Plata Argentina www.teletronix.com.ar/edu


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.