Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccion A Microcontroladores Pic Con C
Introduccion A Microcontroladores Pic Con C
. DE MÉXICO
FACULTAD DE INGENIERÍA
INTRODUCCION A MICROCONTROLADORES
PIC CON C
Diseñadores
Gerardo Ramos Vásquez
Este curso tiene como propósito difundir el uso de las tecnologías asociadas a los micros
controladores para crear materiales de apoyo a los alumnos que les permita tener un mejor
desarrollo en sus clases y entender mejor el concepto desde un enfoque teórico práctico.
Con una herramienta “micro controladores” que es de uso cotidiano en dispositivos
electrónicos digitales actuales (hornos de microondas, relojes, alarmas de incendios, de
automóviles, cerraduras electrónicas, etc.).
Actividades.
El curso está formado en tres partes, la primera es una introducción en la que a los
asistentes se les motiva al estudio de la teoría básica necesaria para entender el
funcionamiento y programación de los micros controladores, así como las aplicaciones
actuales de estos dispositivos. La segunda parte consta de sesiones donde se exponen los
conceptos necesarios para poder emplear de manera correcta los micros controladores. En
la tercera y última parte se realizaran sesiones prácticas donde los asistentes ponen a
prueba los conocimientos adquiridos en el curso al programar micro controladores para
crear aplicaciones.
Evaluación.
Materiales
Para el instructor:
• Una PC, con sistema operativo Windows donde se pueda instalar el software para la
programación de los micro controladores.
• Software y manuales necesarios para el curso.
• PIC16F877A
• Cable de conexión para puerto serial.
• Display tipo LCD de 16x2 caracteres.
• Sensor de temperatura LM35.
• 8 Resistencias de 680Ω a ¼ de watt.
• 8 Leds de colores de 5mm.
• 4 Push botton de dos terminales
• 4 Resistencias de 10 kΩ a ¼ de watt.
• Eliminador de baterías de 9V.
• Circuito Integrado L293D driver de motores.
• Una tableta tipo Protoboard de las grandes para armar los circuitos.
• Pinzas de punta y de corte para electrónica.
TEMA 1 MICROCONTROLADOR PIC16F877A
1. El WinPIC800.
2. El bootloader.
3. Estructuras de control con el PIC.
4. Puerto serie para programar y comunicarse con el PIC.
5. Modulo LCD (cristal líquido).
6. Sensor de temperatura.
7. Construcción de un termómetro con el PIC.
8. Control de un motor de pasos con el PIC.
9. Control de un motor de DC (corriente continua con el PIC).
10. Utilización de un “encoder” (contador de pulsos) para mover un motor.
11. Simulación de un control remoto con un diodo infrarrojo a través del PIC.
TEMA 1 MICROCONTROLADOR PIC16F877
Microcontrolador
Dispositivo electrónico que posee todas las características de una PC, claro que en pequeña
escala. Pues cuenta con puertos de entrada y salida de información, puertos de comunicación,
Unidad aritmética Lógica, memoria interna (RAM y ROM), Y una Unidad Central de Procesos.
Microprocesador
Este elemento en cambio, solo es un Unidad Central de Procesos, que de manera externa
(desde un punto de vista de una PC) hay que conectarle la memoria, puertos y unidades de
almacenamiento (por eso se monta en una tarjeta madre para poder utilizarlo), tiene la ventaja
de ser mas escalable que un microcontrolador.
Código Fuente
EI código fuente, es almacenado en el archivo fuente, este archivo está escrito con el
American Standar Code for Information Interchange (ASCII) y contiene las sentencias
del programa y comentarios (utilizados para que los humanos puedan entender lo que
el programa está ejecutando). EI archivo fuente es creado en un editor estándar (como
NotePad 0 WordPad) 0 puede ser construido en un editor IDE (ambientes de desarrollo
integrado) que posee múltiples aplicaciones que apoyan en el desarrollo de la
aplicación. EI archivo fuente es usado como entrada para los ensambladores,
interpretes 0 compiladores que producen las instrucciones necesarias para controlar un
dispositivo. En el caso de un ensamblador 0 compilador, el código fuente es convertido
en un archivo objeto o archivo hex, que finalmente será grabado dentro del
microcontrolador que controla el dispositivo. El intérprete es construido dentro del
microcontrolador del dispositivo y ejecuta el archivo fuente que es una serie de
instrucciones y comandos que determinan inmediatamente salidas a procesos
intermedios.
El archivo fuente puede incluir otros archivos que proveen que adiciones al código
fuente o prototipos para las librerías de funciones o datos requeridos por la aplicación.
Los archivos “include” para ensamblar lenguajes de programación generalmente
terminan con *.inc que es la extensión con la que terminan los archivos de sistema. Los
archivos “include” para el lenguaje de programación C tienen como extensión una *.h
los ensambladores y compiladores proveen de estos archivos “include” para hacer las
tareas del desarrollo de aplicaciones más sencillas, basándose en los requerimientos
de tu aplicación. Al finalizar las operaciones de ensamblar o compilar se produce en un
archivo objeto (usualmente terminado en *.obj) o un archivo hex. El archivo hex es la
aplicación completa, lista para programarse dentro de un microcontrolador.
El archivo objeto está conectado a otros archivos objeto para producir el archivo hex. El
más popular de los formatos para archivos hex es el formato Intel 8 bit conocido como
INHXM8. Otros ejemplo de un formato diferente utilizado por los microcontroladores y
programadores de microcontroladores de Motorola es el llamado *.S9 o *.S19.
Ensambladores
Simulador:
Cuando tu ya estás viendo fluir tu código en algún simulador, estas en el comienzo de
convertirte en un experto desarrollador de lenguaje ensamblador. "Myke Predko"
Interpretes
Cuando las computadoras estuvieron disponibles, prácticamente en todos los
desarrollos en software se utilizo un intérprete (usualmente BASIC) que era
automáticamente cargado dentro de las computadoras cuando eran arrancadas par
primera vez. Si eres joven esta sentencia te sorprenderá, pues ya conoces la maravilla
del sistema operativo que controla tu computadora. Los intérpretes realizaban muchas
de las funciones básicas que se consideran normales para los sistemas operativos. La
IBM PC cambio esto con la introducción de un simple sistema operativo que podía
ejecutar aplicaciones binarias 0 ejecutar constructores con el interprete BASIC.
Compiladores
Los compiladores trabajan bajo una serie de reglas lógicas simples para convertir
sentencias de lenguajes de alto nivel al lenguaje ensamblador. Los modernos
compiladores permiten simplificar el código ensamblador, dando como resultado
aplicaciones más pequeñas y más eficientes. Si estas· interesado en aprender un
lenguaje ensamblador para un procesador especifico, no debes de sorprenderte al
descubrir que el código que producen los modernos compiladores son unos excelentes
ejemplos para aprenderlo. Par ejemplo los programas en C son convertidos sentencia
par sentencia en instrucciones de lenguaje ensamblador (compilado) a partir de este
código ensamblador se obtiene el código objeto que finalmente es programado dentro
del procesador.
En la corta vida de los PICs ya ocupan las posiciones de cabeza en el ranking mundial,
compartiendo codo a codo con gigantes como Intel y Motorola. En 1990 ocupaban el puesto
vigésimo y actualmente son más de 100 millones de PICs los que vende Microchip cada ario, 10
que ha alzado al segundo puesto del ranking mundial.
• Sencillez de Manejo
• Buena Información
• Precio
• Buen promedio de parámetros: velocidad, consumo, tamaño, alimentación, código
compacto, etc.
• Herramientas de desarrollo fáciles y baratas
• Diseño rápido
• Disponibilidad inmediata
• Compatibilidad del software en todos los modelos de la misma gama
• Su coste es comparativamente inferior al de los competidores
• Poseen una elevada velocidad de funcionamiento
• Tienen un juego de instrucciones reducido
• Bajo consumo unido a un amplio rango de voltajes de alimentación.
•Muchas herramientas se pueden recoger gratuitamente por Internet
(www.microchip.com).
• Existen una gran variedad de herramientas que permiten grabar, depurar, borrar y
comprobar el comportamiento de los PICs.
• La gran variedad de modelos de PIC permite elegir el que mejor responde a los
requerimientos de la aplicación.
Dentro de esta gama se halla el PIC16F877A que es el microcontrolador que vamos a utilizar en
el robot. El repertorio de Instrucciones es de 35 a 14 bits cada una y compatible con el de la
gama baja. Sus distintos modelos contienen todos los recursos que se precisan en las
aplicaciones de los microcontroladores de 8 bits. También dispone de interrupciones y unas Pila
(stack) de 8 niveles que permite el anidamiento de subrutinas.
1.3.2 Recursos
Tiene una estructura de 4 bancos, seleccionables a través de con los bits RPO y RP1 del registro
STATUS. El número de puertos en los PIC16F876 y 873 es de 3 (28 pines) y el número de puertos
en los PIC16F877 y 874 es de 5 (40 pines).
Características:
1.- Poseen dos módulos CCP (captura, comparación y pwm).
2.- Comunicación Serie (rs232, 12C y SPI)
3.- Comunicación Paralelo
4.- Convertidor AD.
Diagrama de pines
•
Descripción de sus pines y puertos
Los microcontroladores PIC16F87X encapsulados con 28 pines disponen de tres puertos de E/S
(A, S Y C), mientras que los que tienen 40 pines poseen cinco (A, S, e, D y E). Todas las líneas
de estas puertas son multifuncionales, es decir, realizan diversas funciones según estén
programadas. Sin embargo, todas tienen la capacidad de trabajar como líneas de E/S digitales.
Puerto A
Sólo dispone de 6 líneas, denominadas RAO-RA5. El registro que las configura como entras o
salidas se llama TRISA. Si el bit O del registro TRISA se pone a 1, la línea O (RAO) de la puerta
A funciona como entrada. Si se pone a O funciona como salida.
Los pines RAO/ANO, RA1/AN1, además de funcionar como E/S digitales también pueden
actuar como canales de entrada al convertidor analógico digital (CAD). Los pines RA2/AN2Nref-
y RA3/AN3Nref+, pueden funcionar como E/S digitales, como canales AN2 y AN3 del CAD y
como entradas de voltaje de referencia para el CAD. El pin RA4/TOCKI actúa como E/S digital y
como entrada de la señal de conteo para el Timer 0.
Por último, la patita RA5/AN4/ SS tiene tres funciones E/S digital, canal 4 del CAD y selección
del modo esclavo cuando se trabaja con la comunicación serie síncrona.
Puerto B
Dispone de 8 líneas bidireccionales digitales cuya función se elige mediante la programación del
registro TRISS. Todos los pines del Puerto S poseen de una resistencia interna de pull-up al
positivo de la alimentación, que queda conectada cuando el bit RSPU (7) del registro OPTION,
tiene valor O.
Las líneas RS<7-4> ~y RSO/ INT pueden programarse para generar una interrupción externa
cuando alguna de ellas cambia de estado.
Puerto C
Consta de 8 líneas bidireccionales cuyo sentido se configura mediante el registro TRISC. Todas
las patitas de esta puerta tienen multiplexadas diferentes funciones.
RCOIT10S01T1CKI: Esta línea puede actuar como E/S digital, como salida del Timer1 o como
entrada de impulsos para el Timer1.
RC11T10SIICCP2: E/S digital, entrada del oscilador del Timer1, entrada del módulo de
captura2, salida del comparador 2, salida del PWM2.
RC2/CCP1: E/S digital, entrada del modulo de de captura1, salida del comparador, 1 salida del
PWM1. .
RC3/SCK/SCL: E/S digital, señal de reloj en modo SPI, señal de reloj en modo 12C.
RC4/SDI/SDA: E/S digital, entrada de datos en modo SPI, línea de datos en modo 12C.
RC6ITX/CK: E/S digital, línea de Tx en el USART, señal de reloj síncrona en transmisión serie.
RC7IRX1DT: E/S digital, línea de Rx en el USART, línea de datos en transmisión serie síncrona.
Puerto D
Este puerto es de 8 bits, sólo lo poseen los encapsulados de 40 pines de la familia P16F877x,
su registro de configuración es el TRISD. Además de usarse como líneas de E/S digitales
normales, implementan una puerta paralela esclava de 8 líneas (PSP), que sirve para
permitir la comunicación en paralelo con otros elementos del sistema. .
Puerto E
Este puerto es de 3 bits, sólo lo poseen los encapsulados de 40 pines de la familia P16F877x,
su registro de configuración es el TRISE, las funciones de capa patita son las siguientes:
REOI RDIAN5: E/S digital, señal de lectura en el modo de PSP, canal 5 del
CAD. RE1/WRIAN6: E/S digital, señal de escritura en modo PSP, canal 6 del
CAD. RE21 es IAN7: E/S digital, selección de chip en el modo PSP, canal 7
del CAD.
1.3.5 Organización de la memoria
En primer lugar tenemos que distinguir claramente entre tres tipos de memoria:
Una: la memoria EEPROM donde almacenaremos el programa que haremos haremos, esta memoria solo
podrá ser leída por el pic (el pic va leyendo las instrucciones de
del programa almacenado en esta
memoria y las va ejecutando).
ejecutando . Al apagar el pic esta memoria no se borra.
Dos: la memoria RAM en cuyos registros se irán almacenando los valores de las variables que
nosotros queramos y cuando nosotros queramos (por programa
programa), al apagar el pic esta memoria
se borra.
Bancos-y-registros
registros
1.3.7. Palabra de configuración
Es una Posición reservada de la memoria de programa FLASH, que ocupa la dirección Ox2007
y que sólo es accesible durante la programación del PIC. El valor de sus bits determina algunas
características de funcionamiento.
output_low (GP0);
output_high (GP0);
output_low (GP1);
output_high (GP1);
#include "16f877A.h"
#device adc=10 //Usa resolución de 10 bits.
#use delay (clock=4000000)
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#include <12F629.h>
Void main ()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC);
setup_vref(FALSE);
set_tris_a(0x00);
//con esta instruccion programas que el puerto sea unicamente salida
for(;;)
{
output_high(PIN_A0);
delay_us(9);
output_low(PIN_A0);
delay_us(9);
En este modo de trabajo, se consiguen impulsos lógicos cuya anchura del nivel alto es de
duración variable, que son de enorme utilidad para controlar motores, dispositivos de estado
sólido o grabar información al digitalizarla.
El pin RC2/CCP1 es la salida del primer módulo PWM, es decir varía entre los niveles lógicos O
y 1 a intervalos de tiempo diferentes en base a un periodo establecido en la programación. La
variación del nivel alto con respecto al nivel bajo se llama ciclo de trabajo (Duty Cycle).
Para lograr el cambio del pin de salida RC2/CCP1, o bien ya sea el pin RC1/CCP2 donde se
encuentra el segundo modulo PWM que contiene este modelo de PIC, se utiliza un comparador
que pone a 1 el set en un flip-flop cuando el valor del registro PR2 coincide con la parte alta del
TMR2, instante en el que el TMR2 toma el valor 0x00. Acto seguido el flip-flop se resetea (se
pone a 0) cuando otro comparador detecta la coincidencia del valor existente en CCPR1H con
el de la parte alta del TMR2. De esta manera, variando los valores que se cargan en PR2 y en
CCPR1 L (que luego se pasa a CCPR1 H) se varía el intervalo de tiempo en el que el pin de
salida está en 1 ó 0.
Ejemplo
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
void main()
{
setup_ccp1(CCP_COMPARE_CLR_ON_MATCH);
// Configure CCP1 in COMPARE mode
setup_timer_1(T1_INTERNAL); // Set up timer to instruction clk
while(TRUE)
{
while(input(PIN_B0)) ; // Wait for keypress
setup_ccp1(CCP_COMPARE_CLR_ON_MATCH);
// Configure CCP1 in COMPARE
// mode and to pull pin C2
// low on a match with timer1
Para instalar el software WinPic800, bastará con ejecutar el archivo Winpic800.exe, se instalara
en la carpeta C:\Winpic800.
Una vez hecho esto ejecutar el EXE con doble click y establecer la configuración del hardware.
1. Seleccionar el dispositivo a programar, elegimos Pie F, luego el Pie 16F877 por ejemplo.
2. Abrir el archivo que contiene los datos a programar en el Pic. El programa trabaja con
ficheros .HEX. En el menú Archivo seleccionamos Abrir archivo, en el cuadro de diálogo que
nos aparece seleccionamos el fichero que deseamos grabar en el Pic.
3. Pulsamos el botón Config. para ajustar el tipo de oscilador y los bits de configuración (de ser
necesario).
4. Para programar el dispositivo seleccionamos Programar todo del menú Dispositivo. Con ello
comenzará la grabación.
Tiny Bootloader
• Es muy pequeño para todas las versiones de PIC 16F, 18F Y dsPIC. (ocupa menos de
100 palabras).
• Permite escribir en memoria FLASH o EEPROM y las palabras de configuración.
• Después de un reset espera 1 segundo (puede ajustarse a mas o menos tiempo) a que
la PC responda.
• Permite seleccionar fácilmente la velocidad de baudaje.
debe empezar siempre con un nivel bajo y acabar con un nivel alto. El bit de paridad
sirve para detectar errores en la comunicación.
Estandar RS-232C
Para que una comunicación serie funcione correctamente se necesita, a parte de las
características ya mencionadas, que los niveles de voltaje, que representan el "1" Y el
"O" sea iguales para cada caso; se necesita también de unas señales de protocolo
para preparar a los dispositivos a trasmitir o recibir. Todo esto se incluye en el estándar
RS-232C que se explica a continuación.
Publicado par la Asociación de Industrias Electrónicas (EIA por sus iníciales en inglés),
el estándar RS-232C define las señales de protocolo, los niveles de voltaje de las
señales y un conectar de 25 terminales, necesarios para la comunicación serie
actualmente este estándar es el más usado para la comunicación serie y es el que
viene incluido en la mayoría de las computadoras personales. Esta especificado para
una distancia máxima de 15m (50 pies) a una velocidad máxima de 20,000 baudios
(bits por segundo). Para velocidades de transmisión menores, se pueden usar cables
de 610 a 915 m (2000 a 3000 pies). Existen otras versiones de este estándar, como el
RS-422 y el RS-423, en los que se ve mejorada la velocidad de transmisión
principalmente.
Las terminales descritas en amabas figuras con excepción de TxD, RxD y GND, son las que
conforman las señales de protocolo. Un protocolo es la forma en que la computadora y la interfaz se
piden permiso para trasmitir datos, para avisar que ya están preparados para recibir datos, para
interrumpir la transmisión, etc.
Un protocolo posterior puede llevarse a cabo, ya dentro del programa, para indicarle al dispositivo
externo el inicio de la transmisión y el fin de datos, o por parte del dispositivo hacia la computadora
para pedirle más datos, etc. Este protocolo se explicará cuando se desarrolle el programa de
comunicación definitivo.
En cuenta a los niveles de voltaje, las señales RS-232C están estandarizadas a los siguientes
valores; Un "1" lógico o marca es un voltaje entre -3 y -15 volts. Un "O" lógico o espacio es un voltaje
entre +3 y +15 volts.
Debido a que la interfaz trabajará con circuitos TIL y CMOS deben convertirse estos voltajes a
niveles de +5 volts para el "1" Y O volts para el "O". Esto se logra utilizando un circuito integrado el
MAX232.
Comunicación síncrona
La comunicación se realiza sobre dos líneas, la DT que traslada en los dos sentidos los bits a la
frecuencia de los impulsos de reloj que salen por la línea CK desde el maestro. Se utiliza para
comunícarse con periféricos como memorias, conversores, etc.
En ambos modos las líneas de comunicación son las dos de más peso de la Puerta C:
RC6ITX/CK y RC7/RX/DT.
Como nuestro fin es la comunicación con un dispositivo que posea comunicación serie y no a un
nivel de comunicación circuito integrado con circuito integrado (esclavo y maestro). Se describirá la
comunicación Asíncrona.
Comunicación asíncrona
Receptor asíncrono
Circuito maestro
Actúa sobre la patita RC7/RX/DT, que es por donde se recibe el bit de información o control y se
encarga de muestrear tres veces su valor, para decidir éste por mayoría.
Transmisor asíncrono
El dato que se desea transmitir por el USART transmisor se deposita en el registro TXREG y a
continuación se traspasa al registro de desplazamiento TSR, que va sacando los bits
secuencialmente y a la frecuencia establecida. Además, antes de los bits del dato de información
incluye un bit de inicio y después de sacar todos los bits añade un bit de PARADA. El USART
receptor recibe uno a uno, los bits, elimina los dos de control y los de información una vez que han
llenado el registro de desplazamiento RSR los traslada automáticamente al registro RCREG, donde
quedan disponibles para su posterior procesamiento.
Le secuencia de pasos para configurar la transmisión en el USART es la siguiente:
1. Hay que configurar las líneas RC6 como salida y RC7 como entrada
2. Poner SYNC = O Y SPEN = 1 para activar la comunicación asíncrona y la comunicación
puerto serie respectivamente.
3. Si se desea trabajar con interrupción poner TXIE = 1, además de habilitar las interrupciones
en general (registro INTCON).
4. Si el dato consta de 9 bits, en lugar de los 8 típicos, poner el bit TX9 = 1. El noveno bit se
coloca en TX9D (TESTA).
5. Se carga el valor X adecuado en el registro SPBRG, para producir la frecuencia de trabajo
deseada. Hay que controlar el bit BRGH (alta y baja velocidad)
6. Activar la transmisión con TXEN = 1. El bit TXIF tendrá valor 1, ya que TXREG se
encuentra vacío.
7. Cargar en TXREG el dato a transmitir. Comienza transmisión.
Receptor asíncrono
Los datos se reciben en serie, bit a bit, por la patita RC7 y se van introduciendo secuencialmente en
el registro desplazamiento RSR, que funciona a una frecuencia 16 veces más rápida que la de
trabajo. Cuando el dato consta de 9 bits hay que programar el bit RX9 = 1 Y el noveno bit de
información se colocará en el bit RX9D del registro RESTA. Cuando CREN = 1 en el registro RCSTA,
se habilita la recepción.
1. Hay que configurar las líneas RC6 como salida y RC7 como entrada
2. Poner SYNC = O Y SPEN = 1 para activar la comunicación asíncrona y la comunicación puerto
serie respectivamente.
3. Se carga con el valor X al registro SPBRG para trabajar con la frecuencia deseada, controlando
además el valor de BRGH.
4. Si se desea que se genere una interrupción con la llegada del bit PARADA,
se pone RCIE = 1, además de habilitar las interrupciones en general.
5. Poner RX9 = 1 para permitir la recepción del bit 9.
6. Para detectar la dirección, poner ADDEN = 1.
7. SE habilita la recepción poniendo CREN= 1.
8. Al complementarse la recepción RCIF se pondrá a 1 y se produce una interrupción si se
había permitido.
9. Se lee el registro Resta y se averigua si se ha producido algún error.
10. Lee los 8 bits del registro RCREG para determinar si el dispositivo ha sido el direccionado.
11. Si se ha producido algún error, poner CREN=0.
12. Si ha sido direccionado el dispositivo, poner ADDEN=0 para permitir la recepción de la
información.
Configuración del circuito completo de la interfaz serie.
http://verona.fi-p.unam.mx/crofi/
http://www.microchip.com/
http://es.wikipedia.org/wiki/Microcontrolador_PIC
http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf