Programación en C para PIC.
Por Daniel Schmidt
()
Información de este libro electrónico
El presente libro pretende ser una introducción a la programación de microcontroladores PIC con el lenguaje C usando el compilador oficial de Microchip XC8.
Ha sido redactado en un lenguaje simple con muchos ejemplos comentados para hacer mas fácil su entendimiento y con un mínimo de dedicación alcanzar los objetivos propuestos. También se ha visto en la práctica que aplicaciones que incluyen trabajos que mueven datos por TCP-IP, en aplicaciones reales en terreno, los micros de ocho bits a los que también cargamos con la propia aplicación de trabajo, sus recursos no alcanzan para un nivel de respuesta adecuado. Para resolver esto las posibles soluciones son, cambiar a un microcontrolador mas potente, lo que obliga a portar el código ya escrito a un nuevo microcontrolador.
Esto puede ser un poco engorroso sobre todo si tenemos una aplicación ya funcionando y ampliamente probada corriendo en un viejo PIC12xx o 16xx, portar todo el código puede llevar tiempo.
La otra posible solución es separar la gestión y manejo de los procesos de red sumando al proyecto una electrónica dedicada a este trabajo.
Actualmente tenemos varias posibles soluciones algunas muy económicas como Pico W sin embargo tendríamos que trabajar con MicroPython y la idea es seguir con la línea de C. Entonces tenemos ESP32 que si bien es un poco mas costoso que Pico W, organiza y maneja todos los procesos que tienen relación con el manejo de datos por TCP-IP.
Fácilmente podemos implementar servidores web, manejo de socket, manejo de datos relacionados con el Internet de las Cosas, protocolo MQTT y muchas cosas mas. Como la programación del ESP32 es también C, se puede programar en un entorno muy popular como el de Arduino y así tener acceso a todas las biblioteca de Arduino para el manejo de Internet.
Porque mezclar Arduino y Microchip, se preguntará el lector. Y... porqué no. Entendiendo que no existe el microcontrolador perfecto, solo hay problemas y soluciones y si la solución mas práctica, efectiva, y funcional viene con esta unión de dos arquitecturas, perfecto!!.
Daniel Schmidt
Daniel Schmidt trabaja con microcontroladores PIC desde que estos hicieron su aparición. Su trabajo con microcontroladores tuvo su origen en la plataforma de microcontroladores Motorola, y cuando Microchip puso en el mercado los populares PIC's estos fueron inmediatamente agregados a su escenario de trabajo, sobre todo porque en el tiempo en que aparecieron, pocos eran los microcontroladores con tecnología EEPROM lo que facilitaba y aceleraba mucho el trabajo en la depuración de códigos. Ha desarrollado gran cantidad de sistemas de control y seguridad tanto para entornos industriales como domésticos. En el ámbito universitario ha sido a lo largo de los años, un gran difusor de tecnología que promueve el uso de microcontroladores.
Lee más de Daniel Schmidt
Ejemplos para Arduino. Calificación: 0 de 5 estrellas0 calificacionesATMEGA328p Calificación: 0 de 5 estrellas0 calificacionesElectrónica con MicroPython Calificación: 0 de 5 estrellas0 calificaciones
Relacionado con Programación en C para PIC.
Libros electrónicos relacionados
Programación de microcontroladores paso a paso: Ejemplos prácticos desarrollados en la nube Calificación: 0 de 5 estrellas0 calificacionesHágalo Usted Mismo Calificación: 0 de 5 estrellas0 calificacionesComputación Física: Explorando la visión por computadora en la computación física Calificación: 0 de 5 estrellas0 calificacionesCompilador C CCS y Simulador Proteus para Microcontroladores PIC Calificación: 3 de 5 estrellas3/5Internet de las cosas con ESP8266 Calificación: 3 de 5 estrellas3/5Laboratorio de redes y comunicaciones Calificación: 0 de 5 estrellas0 calificacionesProcessing: Desarrollo de interfaces de usuario, aplicaciones de visión artificial e IoT para Arduino y ESP8266 Calificación: 5 de 5 estrellas5/5Programación con Qt y Arduino. Calificación: 0 de 5 estrellas0 calificacionesIntroducción Al Psoc5Lp: Teoría y aplicaciones práctica Calificación: 0 de 5 estrellas0 calificacionesTaller de Arduino. Experimentando con Arduino MKR 1010 Calificación: 0 de 5 estrellas0 calificacionesMicrocontrolador STM32 Programación y desarrollo Calificación: 0 de 5 estrellas0 calificacionesMicrocontrolador STM32 Programación y desarrollo: INGENIERÍA ELECTRÓNICA Y DE LAS COMUNICACIONES Calificación: 3 de 5 estrellas3/5Arduino: aplicaciones en robótica, mecatrónica e ingenierías Calificación: 0 de 5 estrellas0 calificacionesArduino. Trucos y secretos.: 120 ideas para resolver cualquier problema Calificación: 5 de 5 estrellas5/5Competencias digitales básicas Calificación: 0 de 5 estrellas0 calificacionesEquipos de interconexión y servicios de red. IFCT0410 Calificación: 0 de 5 estrellas0 calificacionesAprender Arduino, prototipado y programación avanzada con 100 ejercicios Calificación: 5 de 5 estrellas5/5C++ Para Ingenieria Y Ciencias Calificación: 0 de 5 estrellas0 calificacionesComputadores para bases de datos. IFCT0310 Calificación: 0 de 5 estrellas0 calificacionesRedes locales: Nivel básico - 3ra edición Calificación: 0 de 5 estrellas0 calificacionesArduino para principiantes Calificación: 3 de 5 estrellas3/5Cámara inteligente: Revolucionando la percepción visual con la visión por computadora Calificación: 0 de 5 estrellas0 calificacionesFundamentals of industrial communications in automation Calificación: 0 de 5 estrellas0 calificacionesTratamiento de textos para la maquetación. ARGP0110 Calificación: 0 de 5 estrellas0 calificacionesTodo sobre sistemas embebidos: Arquitectura, programación y diseño de aplicaciones prácticas con el PIC18F Calificación: 4 de 5 estrellas4/5Desarrollo de Videojuegos 2D con Python Calificación: 0 de 5 estrellas0 calificacionesKotlin y Jetpack Compose. Desarrollo de aplicaciones Android Calificación: 0 de 5 estrellas0 calificacionesFundamentos de programación competitiva Calificación: 0 de 5 estrellas0 calificacionesPrácticas de redes de datos e industriales Calificación: 4 de 5 estrellas4/5Proyectos Arduino con Tinkercad | Parte 2: Diseño de proyectos electrónicos avanzados basados en Arduino con Tinkercad Calificación: 0 de 5 estrellas0 calificaciones
Tecnología e ingeniería para usted
Manual Técnico del Automóvil - Diccionario Ilustrado de las Nuevas Tecnologías Calificación: 5 de 5 estrellas5/5Mecatrónica - Control y automatización Calificación: 5 de 5 estrellas5/5PANADERÍA Y PASTELERÍA COMERCIAL Calificación: 5 de 5 estrellas5/5Inteligencia Artificial Calificación: 3 de 5 estrellas3/5Curso de dibujo para niños de 5 a 10 años Calificación: 4 de 5 estrellas4/5Guía práctica en gestión de proyectos + plantillas editables Calificación: 4 de 5 estrellas4/5Recablea tu cerebro Calificación: 5 de 5 estrellas5/580 Siglos de Invenciones - Diccionario de los Inventos Calificación: 4 de 5 estrellas4/5Scrum Las Estrategias del Juego: Es Póker, No Ajedrez Calificación: 5 de 5 estrellas5/5Las Edades del Automóvil (historia del automóvil) Calificación: 4 de 5 estrellas4/5Juegos para viajes Calificación: 0 de 5 estrellas0 calificacionesPostproducción de Audio Digital: Edición, Mezcla y Masterización Calificación: 4 de 5 estrellas4/5Ingeniería de Sonido. Conceptos, fundamentos y casos prácticos: CINE, TELEVISIÓN Y RADIO Calificación: 4 de 5 estrellas4/5100 circuitos de shields para arduino (español) Calificación: 4 de 5 estrellas4/5Gestión de proyectos aplicada al PMBOK 6ED Calificación: 5 de 5 estrellas5/5Mecatrónica - sistemas de control electrónico en la ingeniería mecánica y eléctrica Calificación: 5 de 5 estrellas5/5Procesos y técnicas de construcción: Septima edición Calificación: 3 de 5 estrellas3/5Design Thinking para principiantes: La innovación como factor para el éxito empresarial Calificación: 4 de 5 estrellas4/5Mecánica de fluidos Calificación: 0 de 5 estrellas0 calificacionesLa humanización de la era digital: Cómo enfrentarnos a un mundo de algoritmos Calificación: 0 de 5 estrellas0 calificacionesGuía de aplicacion de la ISO 9001:2015 Calificación: 5 de 5 estrellas5/5INGENIERÍA INDUSTRIAL - Métodos y tiempos con manufactura ágil Calificación: 3 de 5 estrellas3/5MANIAC Calificación: 5 de 5 estrellas5/5Café: Un recorrido de la semilla a la taza Calificación: 3 de 5 estrellas3/5Confección de cojines y ropa de hogar. TCPF0309 Calificación: 0 de 5 estrellas0 calificacionesCálculo para ingenierías Calificación: 3 de 5 estrellas3/5Instalaciones de puesta a tierra y protección de sistemas eléctricos Calificación: 5 de 5 estrellas5/5LEAN SIX SIGMA YELLOW BELT: Manual de certificación Calificación: 5 de 5 estrellas5/5Manual práctico de investigación de operaciones I. 4ed Calificación: 2 de 5 estrellas2/5Un verdor terrible Calificación: 5 de 5 estrellas5/5
Comentarios para Programación en C para PIC.
0 clasificaciones0 comentarios
Vista previa del libro
Programación en C para PIC. - Daniel Schmidt
Sumario
Capítulo I......................................................6
Los PIC's y un poco de su historia...................................6
Como funciona un Microcontrolador PIC.............................7
Arquitectura de los PIC's.........................................10
Arquitectura Hardvard:..........................................10
Entorno de programación.........................................11
Hardware Programador..........................................12
Programar PIC con GNU/Linux....................................12
El lenguaje C..................................................14
El lenguaje C para Microcontroladores PIC...........................15
Estructura de proyecto en XC8 con MPLAB..........................16
Variables en XC8...............................................23
Operadores....................................................25
Estructuras de Control...........................................26
Directivas del Pre-Procesador.....................................29
Control del LCD (HD44780)......................................30
Manejo de un LCD con XC8......................................32
Interrupciones en XC8...........................................41
Declaración de los registros internos................................49
Punteros......................................................49
Funciones.....................................................53
Punteros a Funciones............................................56
Estructuras....................................................59
Uso del conversor A/D...........................................64
Capítulo II....................................................70
Memoria EEPROM interna del PIC.................................70
El protocolo I2C................................................75
RTC DS1307 (Real Time Clock)...................................82
La dirección del dispositivo.......................................86
PCF8574......................................................93
Protocolo 1-wire................................................97
Sensor de temperatura 1-wire DS18B20.............................98
Capítulo III..................................................111
El Puerto USB................................................111
Token y Packets...............................................120
Clase USB CDC con PIC16F1455.................................124
Algunos ejemplos de programas para otros PIC......................130
Encendiendo un LED con PIC12F683..............................130
Encendiendo un LED con PIC16F84...............................131
Manejando botones y LED´s con PIC12F629........................131
Capítulo IV..................................................134
ESP32.......................................................134
Porque mezclar ESP32 con PIC's?................................136
Alimentación para el ESP32 Thing................................137
Algunos pines especiales........................................138
El Internet de las Cosas.........................................139
Que es HTML?...............................................139
Ejemplos de algunas etiquetas HTML..............................140
Servidores web con electrónica...................................142
Que es Ajax?.................................................143
ESP32 con Arduino............................................146
Como programar la placa ESP32 Thing.............................148
Hola Mundo con ESP32.........................................149
Voltímetro web con Ajax........................................149
Como funcionan las cosas dentro del PIC...........................151
Como funcionan las cosas en la página web.........................153
Como funcionan las cosas en el servidor web........................157
Electrónica y conexionado del proyecto.............................164
Lectura de un sensor DS18B20 desde una WEB......................167
Página web para ver los datos del sensor............................170
Control de pines con botones web.................................172
Que es un Socket de Red?.......................................178
Enviando un contador por un Socket con un PIC......................179
Socket y datos de un sensor DS18B20..............................185
Que es el protocolo MQTT.......................................186
Por qué MQTT................................................187
Como funciona MQTT?........................................187
MQTT con PIC's..............................................188
Pasos para subscribir a un tópico..................................189
Otros ejemplos con ESP32 y Arduino IDE..........................197
El Internet de las Cosas.........................................197
Como funciona................................................197
Riesgos de IOT................................................197
Web Server con ESP32.........................................198
Control HTML de un LED con ESP32 .............................201
Implementado AJAX con ESP32..................................204
Bibliografía...................................................208
Sobre del autor.
Daniel Schmidt trabaja con microcontroladores PIC desde que estos hicieron su aparición. Su trabajo con microcontroladores tuvo su origen en la plataforma de microcontroladores Motorola, y cuando Microchip puso en el mercado los populares PIC's estos fueron inmediatamente agregados a su escenario de trabajo, sobre todo porque en el tiempo en que aparecieron, pocos eran los microcontroladores con tecnología EEPROM lo que facilitaba y aceleraba mucho el trabajo en la depuración de códigos.
Ha desarrollado gran cantidad de sistemas de control y seguridad tanto para entornos industriales como domésticos.
En el ámbito universitario ha sido a lo largo de los años, un gran difusor de tecnología que promueve el uso de microcontroladores.
Acerca de este libro.
El presente libro pretende ser una introducción a la programación de microcontroladores PIC con el lenguaje C usando el compilador oficial de Microchip XC8.
Ha sido redactado en un lenguaje simple con muchos ejemplos comentados para hacer mas fácil su entendimiento y con un mínimo de dedicación alcanzar los objetivos propuestos.
También se ha visto en la práctica que aplicaciones que incluyen trabajos que mueven datos por TCP-IP, en aplicaciones reales en terreno, los micros de ocho bits a los que también cargamos con la propia aplicación de trabajo, sus recursos no alcanzan para un nivel de respuesta adecuado. Para resolver esto las posibles soluciones son, cambiar a un microcontrolador mas potente, lo que obliga a portar el código ya escrito a un nuevo microcontrolador.
Esto puede ser un poco engorroso sobre todo si tenemos una aplicación ya funcionando y ampliamente probada corriendo en un viejo PIC12xx o 16xx, portar todo el código puede llevar tiempo.
La otra posible solución es separar la gestión y manejo de los procesos de red sumando al proyecto una electrónica dedicada a este trabajo.
Actualmente tenemos varias posibles soluciones algunas muy económicas como Pico W sin embargo tendríamos que trabajar con MicroPython y la idea es seguir con la línea de C.
Entonces tenemos ESP32 que si bien es un poco mas costoso que Pico W, organiza y maneja todos los procesos que tienen relación con el manejo de datos por TCP-IP.
Fácilmente podemos implementar servidores web, manejo de socket, manejo de datos relacionados con el Internet de las Cosas, protocolo MQTT y muchas cosas mas.
Como la programación del ESP32 es también C, se puede programar en un entorno muy popular como el de Arduino y así tener acceso a todas las biblioteca de Arduino para el manejo de Internet.
Porque mezclar Arduino y Microchip, se preguntará el lector. Y... porqué no. Entendiendo que no existe el microcontrolador perfecto, solo hay problemas y soluciones y si la solución mas práctica, efectiva, y funcional viene con esta unión de dos arquitecturas, perfecto!!.
Capítulo I
Los PIC's y un poco de su historia.
Los PIC son una familia de microcontroladores tipo RISC fabricados por Microchip Technology Inc. y derivados del PIC1650, originalmente desarrollado por la división de microelectrónica de General Instrument.
El nombre actual no es un acrónimo, en realidad el nombre completo es PICmicro, aunque generalmente se utiliza como Peripheral Interface Controller (Controlador de Interfaz Periférico).
El PIC original se diseñó para ser usado con la CPU CP16000. CPU que en general tenía prestaciones pobres de entradas y salidas, el PIC de 8 bits se desarrolló en 1975 para mejorar el rendimiento de la CP16000 mejorando las prestaciones de entradas y salidas.
El PIC utilizaba microcódigo simple almacenado en ROM para realizar estas tareas.
Aunque el término no se usaba esos años, se trata de un diseño RISC que ejecuta una instrucción cada 4 ciclos del oscilador.
En 1985 la división de microelectrónica de General Instrument se separa como compañía independiente y cambia el nombre a Microchip Technology.
El PIC, sin embargo, se mejoró con EPROM para conseguir un controlador de canal programable. Hoy en día multitud de PIC´s vienen con varios periféricos incluidos (módulos de comunicación serie, UART, núcleos de control de motores, etc.) y con memoria de programa desde 512 a 32000 palabras (una palabra corresponde a una instrucción en lenguaje ensamblador, y puede ser de 12, 14, 16 o 32 bits, dependiendo de la familia específica de PIC).
El PIC usa un juego de instrucciones, cuyo número puede variar desde 35 para PIC de gama baja a 70 para los de gama alta. Las instrucciones se clasifican entre las que realizan operaciones entre el acumulador y una constante, entre el acumulador y una posición de memoria, instrucciones de condicionamiento y de salto/retorno, implementación de interrupciones y una para pasar a modo de bajo consumo llamada sleep.
Microchip proporciona un entorno de desarrollo libre llamado MPLAB que incluye un simulador software y un ensamblador. Otras empresas desarrollan compiladores C y BASIC. Microchip también vende compiladores C para los PIC como el XC8 para todos los micros de 8 bits, XC16 para micros de 16 bits, y XC32 para 32 bits.
Para transferir el código desde una PC al PIC normalmente se usa un dispositivo llamado programador. La mayoría de los PIC´s que Microchip distribuye incorporan ICSP (In Circuit Serial Programming, programación serie incorporada) o LVP (Low Voltage Programming, programación a bajo voltaje), lo que permite programar el PIC directamente en el circuito destino.
Para la ICSP se usan los pines RB6 y RB7 (En algunos modelos pueden usarse otros pines como el GP0 y GP1 o el RA0 y RA1) como reloj y datos y el MCLR para activar el modo programación aplicando un voltaje de 13 voltios.
Existen muchos programadores de PIC, desde los más simples que dejan al software los detalles de comunicaciones, a los más complejos, que pueden verificar el dispositivo a diversas tensiones de alimentación e implementan en hardware casi todas las funcionalidades. Muchos de estos programadores complejos incluyen ellos mismos PIC pre-programados como interfaz para enviar las órdenes al PIC que se desea programar.
La arquitectura se dirigen a la maximización de la velocidad, PIC fue uno de los primeros escalares diseños de CPU, y sigue siendo uno de los más simples y más baratos. La arquitectura de Harvard en el que las instrucciones y los datos provienen de diferentes fuentes-simplifica la sincronización y diseño de microcircuitos.
El conjunto de instrucciones es adecuado para la aplicación de tablas de búsqueda rápida en el espacio de programa. Estas búsquedas tienen una instrucción y dos ciclos de instrucción. Muchas de las funciones se pueden modelar de esta manera.
Como funciona un Microcontrolador PIC.
Para entender un poco como funcionan las cosas dentro de un microcontrolador podríamos comenzar definiendo sus partes.
CPU
Dentro de la CPU está la Unidad de Control (UC) quien se encarga de que todo suceda de acuerdo a lo previsto, la UC es pues quien decide cuando y como las acciones se llevan a cabo.
Se lee una instrucción desde la memoria de programa se la pasa al decodificador de instrucciones y el contador de programa (PC) se incrementa en uno para leer en la siguiente dirección en la memoria de programa.
La Unidad de Aritmética y Lógica (ALU).
También dentro de la CPU, es la encargada de resolver los problemas matemáticos y lógicos, cuando por ejemplo hay que resolver una operación de suma, la UC le pasa a la ALU las variables esta lo resuelve y le entrega los resultados a la UC para que esta disponga de ellos, entonces la UC consulta el programa para saber que debe hacer con el resultado.
I/O Ports.
Controlan los pines que son el vínculo con el exterior, estos pines se pueden configurar como entradas o salidas dependiendo de la necesidad.
––––––––
Memoria de Programa.
Es la memoria donde reside el código de la aplicación. Si por ejemplo hemos programado una alarma, es en esta memoria donde el código de la alarma reside.
La memoria de programa es la que programamos con nuestro programador, esta memoria es del tipo FLASH.
Memoria Ram.
La memoria RAM es una memoria de lectura y escritura pero temporal es decir los datos en ella se mantienen el tiempo que se haya energía en el sistema, si la memoria se queda sin energía la información se pierde. En un microcontrolador es la memoria destinada a guardar las variables temporales de proceso, variables de programa que solo son importantes en ese momento. Todos los microcontroladores tienen memoria RAM, algunos más otros menos pero todos disponen de esta memoria, no solo es usada por el programa para guardar los datos generados en tiempo de ejecución sino que también los registros propios del microcontrolador radican en RAM, registros de configuración, registros de estado, se puede decir que la CPU se comunica con nosotros a través de estos registros son los llamados SFR (Registro de Funciones Especiales).
Stack de Memoria o Pila.
El stack es memoria RAM donde el controlador guarda datos temporales de uso propio de la CPU, no depende del programador y es manejado por el controlador, tiene en la serie 18 de pic´s 31 niveles de profundidad lo que mejora notablemente el anidamiento de interrupciones que se verá mas adelante.
Tradicionalmente la pila o stack, sólo se ha utilizado como un espacio de almacenamiento para las direcciones de retorno de subrutinas o rutinas de interrupción, en donde las operaciones para meter y sacar datos de la pila estan escondidos.
En su mayor parte, los usuarios no tienen acceso directo a la información en la pila.
El microcontrolador PIC18 se aparta un poco de esta tradición. Con el núcleo PIC18 nuevo, los usuarios tienen ahora acceso a la pila y se puede modificar el puntero de pila y pila de datos directamente. Habiendo tales niveles de acceso a la pila permite algunas posibilidades de programación única e interesante.
La memoria EEPROM.
Es una memoria permanente como la ROM pero a diferencia de esta, se puede escribir en ella, se la puede borrar y desde luego leer, no todos los microcontroladores tienen EEPROM para guardar variables de programa, un ejemplo de uso podría ser un sistema de alarma donde el usuario guarda su clave de acceso y no queremos que la clave se pierda si se desconecta la fuente de poder además el usurario puede cambiar la clave cuando quiera ya que puede escribir en ella a voluntad.
El PIC18F4550 dispone de 256 bytes en EEPROM.
La memoria ROM.
Se encuentran grabadas entre otras varias cosas las instrucciones del microcontrolador, fueron puestas ahí por Microchip fabricante del pic, (Son 77 en el PIC18F4620) y básicamente son la esencia de lo que el micro puede hacer, la ROM es una memoria permanente, no se puede escribir en ella ni borrar, solo se la puede leer y es el propio microcontrolador en funcionamiento quien lee las instrucciones ahí escritas esta memoria es transparente al usuario y el programador solo accesible por la CPU.
La memoria Flash.
Es una memoria también permanente como la EEPROM, es en realidad una evolución de esta, la FLASH es mas rápida que la EEPROM y si bien es de borrado y escritura eléctrica como la EEPROM en la FLASH las cosas son diferentes, una memoria EEPROM puede ser borrada por palabras, es decir por Bytes, se puede acceder a una EEPROM y alterar solo un Byte dentro de la memoria o Bytes en distintas regiones de la memoria.
La FLASH solo se escribe o borra por paginas, es decir la FLASH está paginada y