Beruflich Dokumente
Kultur Dokumente
i
3.6.- Macros .................................................................................................................................. 30
4.-Perifricos Analgicos ................................................................................................................... 30
4.1.-Introduccion a la conversin analgico digital ...................................................................... 30
4.1.1.- Inicializacin del convertidor A/D .................................................................................. 31
4.1.2.-Proceso de Conversin ................................................................................................... 32
4.1.3.-Asignacin de canal o mltiples canales de entrada ...................................................... 32
4.1.4.-Operacin en mltiples o un solo canal .......................................................................... 33
4.1.5.- Registros de Resultado ................................................................................................... 34
4.1.6.- Registros de estado y control......................................................................................... 35
4.2.- Puertos de el Microcontrolador ............................................................................................ 36
4.3.- Interfase de comunicacin serie sncrona y asncrona ......................................................... 38
4.3.1.- Formato de datos ........................................................................................................... 39
4.3.2.- Operacin de transmisin ............................................................................................. 40
4.3.3.- Operacin de recepcin ................................................................................................. 41
4.3.4.- Deteccin de errores...................................................................................................... 41
4.3.5.- Registros de Estado y de Control ................................................................................... 42
Ejemplo de transmisin..................................................................................................................... 42
Ejemplo de Recepcin ....................................................................................................................... 42
5.-Perifericos Digitales ...................................................................................................................... 43
5.1.-Introduccin ........................................................................................................................... 43
5.2.- Sistema Temporizador .......................................................................................................... 43
5.2.1- Estructura del Sistema Temporizador ............................................................................. 44
5.3.- Registros de control y de estado........................................................................................... 45
5.4.-Capturas de entrada .............................................................................................................. 45
5.4.1.- Comparaciones de salida ............................................................................................... 46
5.6.- Interrupcin en Tiempo Real ................................................................................................ 47
5.7.- Acumulador de Pulsos........................................................................................................... 47
5.8.- Generador de PWM .............................................................................................................. 48
6.- APLICACIN FINAL ....................................................................................................................... 50
6.0.- Descripcin de trabajo final. ................................................................................................. 50
6.1.-Diseo de la circuitera exterior. ............................................................................................ 50
6.2.- Programacin del microcontrolador. .................................................................................... 52
6.3.- Construccin y pruebas del trabajo final. ............................................................................. 56
ii
Bibliografa ........................................................................................................................................ 60
iii
UNIDAD 1 CONCEPTOS Y CARACTERISTICAS
GENERALES DE LOS MICROCONTROLADORES
Objetivo.
Objetivos especficos.
1
1.-1 El Microcontrolador
Un microcontrolador es un solo circuito integrado que contiene: un ALU, alguna de las
siguientes memorias( RAM, ROM, FLASH, EEPROM),Terminales para entradas y salidas
paralelas o seriales y uno o ms de los siguientes perifricos(Convertidor Analgico Digital,
Convertidor Digital analgico, Relojes, sistemas de comunicacin serial [1]
1.2.-Arquitectura Interna
En la siguiente figura se muestra la arquitectura interna de un microcontrolador,
PIC16F1619 [2], que contiene; un CPU de 8 bits, 49 instrucciones en ensamblador, todas las
instrucciones se realizan atreves de un solo registro de trabajo llamado W, tiene 16 niveles
de pila(STACK). En la figura 3 se muestra el diagrama a bloques de la arquitectura interna
2
del PIC16F1619, algunos parmetros importantes: el tamao de palabra de programacin
es de 14 bits, el tamao de palabra en RAM es de 8 bits, La unidad aritmtica lgica tiene
un registro principal de 8 bits llamado registro W.
Los Registros del ncleo, son los registros que directamente afectan la operacin bsica,
ocupan las primeras 12 localidades de cualquiera de los bancos de memoria de datos, estos
registros son listados en la siguiente figura.
STATUS.-Contiene Banderas sobre el estado de la ALU y del RESET. Por ejemplo bandera de
cero, acarreo, Habilitacin de interrupciones, etc.
3
INDF0, INDF1.FSR0L,FSR0H,FSR1L,FSR1H-Son registros para direccionamiento indirecto, es
decir mediante la direccin contenida en los registros FSR, se puede leer o escribir tanto
memoria de datos como memoria de programa. El dato quedara en el registro INDFx, y la
direccin en FSRx.
PC.-Contador de Programa, es el registro que tiene la direccin de la siguiente instruccin a
ejecutar. Tamao 15 bits, puede manejar 32k de direcciones, el tamao de palabra de
programa es de 14 bits. El byte bajo viene del registro PCL, el cual se puede leer o escribir,
la parte alta PC<14:8> no se puede leer directamente o escribir y viene del PCLATCH.
BSR.- Registro selector de Bancos Selecciona el banco activo.
1.3.-Organizacin de la Memoria.
Los Microcontroladores PIC utilizan una arquitectura llamada Harvard Modificada, este tipo
de arquitectura no es exclusiva de los microcontroladores de la compaa microchip, esta
arquitectura se caracteriza por que contiene buses de datos y de direcciones
independientes para memoria de datos y memoria de programa, se representan en la figura
5, permitiendo simultneamente el acceder a los datos y cdigo de programa. Se hace uso
de los perifricos como si fueran memoria de datos, microchip los llama SPECIAL FUNCTION
REGISTERS.
MEMORIA DE PROGRAMA.
Memoria de Programa Flash.-Es la memoria donde se almacenan las instrucciones a ser
ejecutadas, el PIC16F1619 tiene un contador de programa de 15 bits, capaz de direccionar
4
32k de localidades el ancho de la localidad es de 14 bits. En la figura siguiente se muestra la
organizacin de esta.
MEMORIA DE DATOS
La memoria de datos esta dividida en 32 bancos, cada banco cuenta con 128 bytes, cada
banco consiste de 12 registros del ncleo, 20 registros especiales(SPR), hasta 20 bytes de
RAM de Propsito especial, 16 byte de RAM comn entre todos los bancos, es decir la
5
memoria comn es la misma no importando el banco en el que se encuentre. En la figura 7
se indica la forma en que se encuentra la memoria en los bancos.
En la figura 8 se muestran los bancos del 0 al 7 si se requiere ver la totalidad de los bancos
revisar [2].
6
FIGURA 8 BANCO 0 AL 7 DE MEMORIA DE DATOS
1.3.1.-Modelo de Programacin
7
FIGURA 9 INSTRUCCIONES ORIENTADAS A DATOS TIPO BYTE.
Las instrucciones tipo bit permiten hacer operaciones para modificar o probar bits, figura 10.
8
De control y de Literal.-En estas instrucciones el dato esta en memoria de programa
dentro de la misma palabra que contiene la instruccin, se indican en la figura 11, estas
instrucciones son las que caracterizan a la arquitectura Harvard modificada.
1.3.3.-Software de Desarrollo
Es el software que se utiliza para crear cualquier aplicacin o proyecto para
microcontroladores, cada fabricante tiene el propio, pero puede haber mas de un software
de desarrollo por fabricante, por ejemplo Freescale NXP tiene el (Code Warrior) pero otras
compaas como KELLY o IAR pueden tener software de desarrollo para microcontroladores
de Freescale NXP.
1.4.- MPLAB
EL MPLAB es el software de desarrollo de la compaa microchip hay versiones para los
sistemas operativos Windows o Linux, El MPLAB es un software de desarrollo, da en un
solo ambiente los programas para poder desarrollar una aplicacin de microcontroladores,
y controladores digitales de seales, la ltima serie de MPLAB se denomina MPLABX.
9
1.5.- Code Warrior
Es un software de desarrollo para los micros de las familias de Freescale NXP, esta basado
en plataforma eclipse, varios micros usan esta plataforma para sus ambientes integrados
de desarrollo.
10
Ejemplo 1.2.-
Escriba un cdigo que realice un ciclo 99 veces, lleve la cuenta de el nmero de iteraciones
en una variable llamada i, escribir el programa en lenguaje C y utilizar las herramientas del
compilador para ver su equivalente a lenguaje C y en cdigo de maquina.
Respuesta.-Esto se realiza con la instruccin for(i=1;u<=100;i++){};En la figura 13 se muestra
el equivalente en ensamblador y cdigo de mquina dado por el MPLABX (ambiente de
desarrollo). En la carpeta de el proyecto buscar la siguiente carpeta
Dist/default/production/ archivo.lst, ; El archivo .lst contiene la informacin en cdigo de
mquina y ensamblador de las instrucciones en C
11
UNIDAD 2.- PLATAFORMA DE PROGRAMACIN EN C++
Objetivo.
Objetivos especficos.
(a) Que el estudiante tenga la capacidad de crear un proyecto con el ambiente integrado de
desarrollo.
(b) Pueda usar el Editor, compilador, Simulador y programador en la creacin de proyectos.
12
Algunas de las ventajas de programar en C los microcontroladores es que el cdigo es
portable, esto quiere decir que el trasladar un cdigo escrito en C de un microcontrolador
de un fabricante a otro, es poco lo que hay que cambiar para que el cdigo se ejecute en
otro microcontrolador.
El lenguaje C es una herramienta rpida de programacin permite el escribir programas con
pocas lneas de cdigo. El lenguaje C permite la incorporacin de lneas de cdigo en
ensamblador, para partes de un programa que requieran alta rapidez de ejecucin se
pueden insertar lneas de cdigo en lenguaje ensamblador.
Ventajas de C sobre ensamblador [3]: Intuitivo, Tiempo de desarrollo mas rpido, el
compilador hace el trabajo laborioso y repetitivo (sucio), en la industria la mayora de los
diseos se realizan en lenguaje C.
2.1.-CREACION DE UN PROYECTO
13
4.-Debajo de Projects, seleccione StandAlone
5.-Oprima el botn Next
3.- Seleccionar Low Voltaje Program Enable(Programacin en bajo voltaje), esta dentro de
el registro Config2.
2.2.-Editor
Es un programa que nos sirve para escribir las instrucciones del programa, ejemplos de editores
son: Block de notas de Windows, Word pad.
14
2.3.- Compilacin
Compilador.- Es un programa que traslada un programa de computadora en otro lenguaje, algunas
veces es un lenguaje intermedio. En el MPLAB el compilador lo traslada a cdigo ensamblador, y
adems hay un programa llamado ensamblador que lo traslada a lenguaje de mquina, que es el
que finalmente lee el microcontrolador.
2.4.-Simulador
El simulador.- Es un programa que sin tener fsicamente al microcontrolador y usando la
computadora y por puro software se realiza la simulacin de la ejecucin de un programa
de el microcontrolador, pudiendo ver valores de registros y variables, en la computadora,
con la finalidad de poder encontrar errores en la programacin antes de grabar el programa
en un microcontrolador.
Para habilitar el simulador en el MPLAB X, se hace de la siguiente forma.
Seleccionar el proyecto y dar click derecho, hasta abajo dar click en propiedades.
15
FIGURA 14 CONFIGURACIN PARA SIMULAR EN LA FUNCIN MAIN.
2.5.-Opciones de Programacin
Las opciones de programacin son almacenadas en registros de memoria Flash llamados
Config1, Config2, Config3 las opciones son las siguientes:
16
Tipo de oscilador:
ECL.- Reloj externo modo de baja potencia (0 a 0.5MHz)
ECM.- Reloj externo modo de media potencia (0.5MHz a 4MHz)
ECH.- Reloj externo de alta potencia (4-32MHZ).
LP.- 32KHZ cristal de baja potencia.
XT.- Cristal de media potencia o modo de resonador cermico arriba de 4 MHz.
HS.- Cristal de alta ganancia o resonador cermico. (4 a 20MHz).-
RC.- Capacitor y resistor externos.
INTOSC.- Oscilador interno de 32KHz a 32MHz.
POWER up TIMER.-Cuando esta habilitado inserta un retardo de 64 milisegundos despus
de un power on reset o un Brown out reset, el retardo es insertado antes de ejecutar
instrucciones.
MCLR.- Es el pin de restablecimiento, cuando esta habilitado genera un reinicio al detectar
un nivel lgico de cero lgico.
CP.-Proteccin de lectura de flash, si esta habilitado no permite el leer la flash.
BOREN.- braun out reset enable.- reinicia la ejecucin de el programa de el
microcontrolador cuando el voltaje de vdd es debajo de cierto nivel de voltaje, este nivel de
voltaje es seleccionable. en la figura siguiente se muestran algunas situaciones que originan
reset por variacin de voltaje.
17
FCMEN.- Habilitacin de falla segura del monitor de reloj.
WRT.- Proteccin segura de escritura en Memoria Flash. Sirve para evitar escritura en
flash no deseada, como por ejemplo ante un transitorio de voltaje, que por error
modificara la memoria de programa.
18
FIGURA 17 RESUMEN DE OPCIONES DE PROGRAMACIN
19
UNIDAD 3.-Estructura de programacin en C
Objetivo. El alumno programar en lenguaje C ++ sistemas embebidos.
(a) Aplicara la estructura general de un programa en C++, a los microcontroladores.
(b) Declarara las variables segn el tamao requerido para optimizar el uso de la memoria del
microcontrolador.
(c) Utilizar los operadores para manejo de bits.
20
3.0.-Estructura general de programacin en C++ aplicada a los
microcontroladores
La estructura es la siguiente:
#include <htc.h>
//Registros del PIC
#define _XTAL_FREQ 500000 //Usada por XC8 delay_ms(x) macro
// va hasta arriba de los includes y de la funcin Prototipo.
/*funcion prototipo*/
void LcdInit(void);
void SendCmd(char);
` }
void main(void)
{
LcdInit();
}
void Lcd_Init()
{char datlcd;
SendCmd(datlcd);
}
Void SendCmd(char x)
{
++x;
}
21
3.1.- Declaracion de Variables
En la figura siguiente se muestran los tipos de variables soportadas por el compilador XC8 [4].
Todos los valores enteros son representados en formato Little indian , lo que significa que
el valor menos significativo esta en la direccin menor. Si no se especifica el tipo por default
ser variable signada, excepto para el tipo char el cual siempre ser no signado, el tipo bit
es siempre no signado.
Persistent.- se usa para variables que no sern inicializadas en el RESET, por default todas
las varibles son inicializadas a cero en el reset en las rutinas del START UP, son las rutinas
que se ejecutan despus de reset.
Variables locales.- Estn definidas dentro de una funcin, su clase de almacenamiento es
automtica. Solo existen mientras mientras la funcin se ejecuta, no son inicializadas al
crearse. usualmente creadas en el stack.
VARIABLES ESTATICAS Son variables que mantendrn su valor durante sucesivas llamadas
a la funcin que la contenga.
while (1)
{
// Add your application code
Retardo();
}
}
void Retardo(void)
{unsigned long long Cuentas=4294967295;//La variable Local cuenta solo esta definida
22
// en la funcin retardo.
while(Cuentas>0)
{Cuentas--;
}
}
//Ejemplo de variable estatica local
int funcion(void)
{
static int keep=1;
Keep=keep+1;
}
La primera vez que se ejecuta la funcin keep se coloca 1,en las sucesivas ejecuciones,
keep mantendr el valor de la ultima vez que fue ejecutada la funcin.
FIGURA 19 VALORES MNIMOS Y MXIMOS PARA LAS VARIABLES DEL COMPILADOR XC8 [4]
23
3.2.- Operadores para posiciones de bits.
& (AND) i
| O INCLUSIVA
^ O ESCLUSIVA
>> CORRIMIENTO A LA DERECHA
<< CORRIMIENTO A LA IZQUIERDA
~ COMPLEMENTO A UNO
Ejemplo considere el valor de r=b10101010 y diga el valor despus de ejecutar la
operacin r=r&~7;
r=10101110, observe los bits 2 y 3 son puestos a 1 dejando los dems bits de r con su valor
anterior.
Ejemplo considere LATA=0b10101010 cual ser el valor de a despus de ejecutar la
operacin?
LATA=LATA^1;
24
Ejemplo. Considere x=00000001; Cul ser el valor de x despus de ejecutar x=x<<2;
x=00000100
3.3.-Operadores de asignacin
1. En C, el operador igual que (=) se escribe con los caracteres igual-igual (==).
2. En C, el operador distinto que (<>) se escribe con los caracteres admiracin-igual (!=).
OPERADORES LGICOS
&& i Lgica
|| o Lgica
! Negacin
Ejemplo de operadores lgicos A=0b10101010; B=0b10101010;
If (A && B)
printf(se ejecuta verdadero);
else
25
La evaluacin de el anterior if es: A es verdadera y B es verdadera, y al evaluar el i (and)
verdadero con verdadero da verdadero.
Ejemplo A=0b10101010; B=0b01010101;
If(A & B)
{printf(no se ejecuta);}
else {printf(Se ejecuta el else por ser falsa la evaluacion);}
U1
10101010
00000000
01010101 AND2
void main(void)
{LcdInit();
26
}
void Lcd_Init()
{char datlcd
SendCmd(datlcd);
While(1)
{
}
}
Void SendCmd(char x)
{++x;
}
Una Interrupcin proporciona un camino para ejecutar una secuencias de instrucciones
ante un requerimiento de un perifrico, a diferencia de una subrutina en el cual depende
de en donde se coloque el llamado a la funcin, en la interrupcin el salto se hace cuando
el perifrico coloca la bandera en 1.
Requisitos bsicos para una interrupcin son:
Bandera correspondiente del perifrico en cero.
Habilitacin de interrupcin del perifrico en uno.
Habilitacin Global de interrupciones en uno.
En la figura siguiente se muestra la lgica de las banderas y habilitaciones para interrumpir
al CPU.
27
Ejemplo.- El siguiente programa muestra el programa para hacer que un led prenda y
apague utilizando interrupciones.
U1
V1 VDD VSS
5V CCP2/P2A/T1CKI/SD02/T1OSI/OSC1/CLKIN/RA5 RA0/AN0/CPS0/C1IN+/VREF-/DACOUT/ICSPDAT/ICDDAT
T1G/P2B/CLKR/T1OSO/CLKOUT/OSC2/CPS3/AN3/RA4/SS2 RA1/AN1/CPS1/C12IN0-/VREF+/SRI/ICSPCLK/ICDCLK
VPP/T1G/RA3/MCLR RA2/AN2/CPS2/T0CKI/INT/C1OUT/SRQ/CCP3/FLT0
MDCIN2/DT/RX/P1A/CCP1/RC5 RC0/AN4/CPS4/C2IN+/P1D/SS2
MDOUT/CK/TX/P1B/SRNQ/C2OUT/RC4 RC1/AN5/CPS5/C12IN1-/P1C/SDO2
MDMIN/P2A/CCP2/P1C/C12IN3-/CPS7/AN7/RC3 RC2/AN6/CPS6/C12IN2-/P1D/P2B/MDCIN1
CCP4/CPS8/AN8/RC6/SS1 RB4/AN10/CPS10/SDA1/SDI1
SDO/CPS9/AN9/RC7 RB5/AN11/CPS11/RX/DT/SDA2/SDI2 LED4
SCK2/SCL2/CK/TX/RB7 RB6/SCL1/SCK1
APHHS1005CGCK
PIC16F1829-E/P
R1
470,5%
FIGURA 22 DIAGRAMA DEL EJEMPLO PARA PRENDER UN LED CON INTERRUPCIN, UTILIZAR PIC16F1619.
#include "mcc_generated_files/mcc.h"
void main(void) {
SYSTEM_Initialize();
TMR0_Initialize();
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
while (1)
{
}
}
/*Fin de archivo
Archivo donde esta la interrupcin (Interrupt_Manager)
void interrupt INTERRUPT_InterruptManager(void) {
Manejador de interrupcin*/
if (INTCONbits.TMR0IE == 1 && INTCONbits.TMR0IF == 1)
{
TMR0_ISR();
LATCbits.LATC0 ^= 1;
}
else {
/*si entro al vector de interrupcin pero no fueron las banderas ni la habilitacin de TMR0
la que la activo.*/
}
}//Fin de archivo INTERRUPT_InterruptManager(void)
//archivo tmr0.c
void TMR0_Initialize(void) {
// Selecciona las opciones del TMR0
// Prescalador 1:256; TMRSE Incrementa_hi_lo; mask the nWPUEN and INTEDG bits
OPTION_REG = (OPTION_REG & 0xC0) | 0xD7 & 0x3F;
28
// TMR0 12;
TMR0 = 0x0C;
readVal = TMR0;
return readVal;
}
void TMR0_Reload(void) {
// Write to the Timer0 register
TMR0 = timer0ReloadVal;
}
//La funcin siguiente se conoce como servicio de interrupcin, es ah donde se coloca lo que se
desea que realice la interrupcin
void TMR0_ISR(void) {
/**
Fin de Archivo
*/
29
3.6.- Macros
Una Macro es una expansin de caracteres.
Ejemplo
#define cuadrado(t)*(t)
Printf(\t%d\t%f\t%f\n,I,c,cuadrado(c));
Cuando se escriba una definicin de macro, rodee todos los argumento y funciones con parntesis,
de lo contrario podra pasar lo que a continuacin se muestra. #define cuadrado(t) t*t suponga que
la macros se usa de la siguiente manera x=cuadrado(y+3). La expansin de caracteres resultara en
x=y+3*y+3 /*ya que dara (y) mas tres multiplicado por (y) mas 3, que no es el cuadrado de (y+3)*/
4.-Perifricos Analgicos
4.1.-Introduccion a la conversin analgico digital
El convertidor analgico digital convierte las seales analgicas en Digitales. La figura
siguiente muestra una seal de la cual se toman muestras cada cierto intervalo de tiempo
y luego se reconstruye.
La mayora de los microcontroladores tienen un convertidor analgico digital y un selector
asociado a varios pines, pero hay que tomar en cuenta que se realiza una sola conversin a
la vez, usando el selector de pines se pueden convertir varios canales dando la impresin
que es simultaneo el proceso de conversin de varios canales, el tiempo de conversin
usualmente es del orden de microsegundos.
30
FIGURA 23.- SEAL ANALGICA Y DIGITAL.
31
4.1.2.-Proceso de Conversin
//Pot_AN3 = 0x03, que significa canal AN3, RA3
adc_result_t ADC_GetConversion(adc_channel_t channel) {
// Selecciona el canal A/D
ADCON0bits.CHS = channel;//cannel =0x03
// Regresa el resultado
return ((ADRESH << 8) + ADRESL);
}
4.1.3.-Asignacin de canal o mltiples canales de entrada
En la figura siguiente se muestra el selector de canales de acurdo al valor que tiene el
CHS4:CHS0 se selecciona el pin o canal analgico a convertir, pero solo uno a la vez si se
quieren varios canales se requiere volver a realizar el procedimiento de conversin como si
fuera un solo canal pero cambiando el canal seleccionado.
32
4.1.4.-Operacin en mltiples o un solo canal
En la figura anterior observar que las terminales analgicas estn configuradas como analgicas y
sin WPU.
33
4.1.5.- Registros de Resultado
MSB LSB
11111111 11000000
34
Justificado a la Derecha 1023
ADRESH:ADRESL
MSB LSB
00000011 11111111
-- No implementado
35
110 = FOSC/64
111 = FRC Reloj alimentado de oscilador RC).
ADNREF: A/D Bit de configuracin de el voltaje de referencia negativo.
0 = VREF- Es conectado a VSS
1 = VREF- Es conectado al pin de referencia VREF-.
ADPREF<1:0>: A/D Bit de configuracin de el voltaje de referencia positiva.
00 = VREF+ is connected to VDD
01 = Reserved
10 = VREF+ es conectado a VREF+ pin(1)
11 = VREF+ es conectado a la referencia de voltaje interna modulo (Fixed Voltage Reference FVR).
36
Ejemplo.- Escribir un programa que cada vez que se oprima un botn prenda un led este
permanece encendido solo mientras esta oprimido el botn. Se considera el botn
conectado en RA2 y el led en RC0.
Nota .- al usar el PICKit3 con la tarjeta starter seleccionar en propiedades que el voltaje de
alimentacin lo tome del PICKIT3
37
FIGURA 30 CONFIGURACIN PARA ALIMENTAR DE EL PICKKIT3 A LA APLICACIN.
38
FIGURA 32 EJEMPLO DE COMUNICACIN SERIAL SNCRONA.
39
FIGURA 36 SEAL DE ENTRADA Y SALIDA EN EL CIRCUITO. MAX232
void EUSART_Initialize(void) {
// Configura el EUSART.
40
BAUDCON = 0x48;// configura la velocidad de trasmisin. BAUD=Velocidad
TXSTA = 0x26;
// Baud Rate = 9600; SPBRGL 12=0x0c;
SPBRGL = 0x0C;
// Baud Rate = 9600; Conciderando una oscilador interno de 500KHZ y y PLL on;
SPBRGH = 0x00;
}
La siguiente rutina es para transmisin. Esta rutina verifica, antes de escribir en el puerto
serie, revisa que el registro de transmisin este vaco, si no est vaco espera hasta que este
vaco para transmitir el siguiente valor. El bit que indica si esta vacio es TXIF, que es la
bandera de transmicin.
void EUSART_Write(uint8_t txData)
{
while (0 == PIR1bits.TXIF) {}
}
4.3.3.- Operacin de recepcin
La siguiente funcin realiza la lectura de la comunicacin asncrona.
uint8_t EUSART_Read(void)
{
while (!PIR1bits.RCIF)
{//lee el registro de recepcin se queda esperando hasta que este lleno.
}
if (1 == RCSTAbits.OERR)
{//Pregunta si hubo algn error en la recepcin,
// EUSART error - restart
RCSTAbits.CREN = 0;
RCSTAbits.CREN = 1;
}
return RCREG;
}
4.3.4.- Deteccin de errores
La deteccin de errores se denomina error de Framing en el receptor. El error de framing
indica que el bit de parada no fue detectado. Este bit es llamado FERR y se encuentra en el
registro RCSTA. No es necesario el limpiar este bit [2], basta con leer un dato del buffer FIFO
y automticamente se limpia el bit. Si todos los datos que estn en el FIFO presentan error
de FRAME no se limpia el error aunque se lea el buffer.
FIFO.-De sus siglas en ingles primero en entrar primero en salir, es en este caso compuesto
por dos registros, es decir se pueden recibir dos caracteres sin vaciar los registros antes de
generar un error de Framing.
Otro tipo de error es llamado Error de OVERRUN. El bit de over run se llama OERR y esta en
el registro RCSTA. El buffer del FIFO contiene mximo dos caracteres, si un tercer carcter
41
carcter es transmitido antes completamente antes de que se accese al FIFO se genera error
de over run [2]. Los caracteres que estn en el FIFO se pueden leer pero no se aceptan
nuevos caracteres hasta que se limpie el error. El error puede ser limpiado colocando un
cero en el BIT CREN bit del registro RCSTA, o colocando un cero en el bit SPEN del registro
RCSTA.
4.3.5.- Registros de Estado y de Control
Los registros de estado y de control de la comunicacin serial son los siguientes:
TXSTA,RC1STA, BAUD1CON. El TXTA, es el registro de status y control, tiene bits que
controlan la transmisin, de los bits principales estn: TRMT.- Indica con uno que el registro
de corrimiento de transicin de salida esta vaco, en otras palabras si esta vaco se puede
escribir otro dato.
Ejemplo de transmisin
while (1)
{
EUSART_Write(0x30);
EUSART_Write(0x31);
EUSART_Write(0x32);
EUSART_Write(0x0a);
EUSART_Write(0x0d);
}
/ /El programa anterior imprime en la terminal (012) retorno de carro y nueva lnea.
Ejemplo de Recepcin
El programa siguiente lee el Puerto serial y dependiendo el dato recibido prende un led.
while (1)
Lectura=EUSART_Read();
if(Lectura==0x31)
{LATAbits.LATA1 = 1;// se puede escribir tambin IO_RA1_SetHigh()
LATAbits.LATA2 = 0;
LATCbits.LATC5 = 0;
42
}
else if (Lectura==0x32)
{LATAbits.LATA1 = 0;
LATAbits.LATA2 = 1;
LATCbits.LATC5 = 0;
}
else if (Lectura==0x33)
{ LATAbits.LATA1=0;
LATAbits.LATA2=0;
LATCbits.LATC5=1;
}
}
5.-Perifericos Digitales
5.1.-Introduccin
El sistema temporizador es un sistema de reloj que permite generar seales elctricas de
cierta duracin de tiempo o medir duracin de pulsos, los microcontroladores suelen tener
varios sistemas de reloj, se les conoce como timers y se numeran progresivamente,
usualmente un microcontrolador tiene varios de estos, en este caso describiremos el
sistema de reloj del TMR1 del PIC16F1619, sin embargo este sistema de reloj (TMR1) esta
presente en la mayora de los microcontroladores de la compaa Microchip.
43
5.2.1- Estructura del Sistema Temporizador
44
5.3.- Registros de control y de estado
TMR1GE.- Habilitacin del Gatillo del Timer1, si tiene un cero el TMR1 opera de manera
normal si tiene uno el TMR1 es controlador por el perifrico de disparo (gate).
T1GPOL.-Si T1GPOL=1 El Timer1 cuenta cuando el Gate es alto, si T1GPOL=0 cuenta
cuando el disparo es bajo.
T1GSPM.- T1GSPM=1 El disparo es en el modo de un solo pulso. T1GSPM=0 EL disparo es
en el modo de un solo pulso esta deshabilitado.
T1GGO/DONE.- T1GGO/DONE = 1 ,La adquisicin por el disparo de un solo pulso esta en
modo de espera. Si T1GGO/DONE = 0 La adquisicin por disparo de un solo pulso se ha
completado o no ha sido completado.
T1GVAL.-Indica el estado actual de el disparo del Timer1.
T1GSS.-Selecciona la fuente del disparo
00.-Disparo por timer1
01.-Sobreflujo del Timer1
10.-Comparador1 sincronizado
11.-Comparador2 sincronizado
5.4.-Capturas de entrada
Las capturas de entrada utilizan al TMR1, el cual se debe encontrar incrementndose,
cuando un evento ocurre en el pin CPPx, el registro de captura de 16 bits, guarda el valor
del registro de 16 bits del timer1, es como si se le tomara una fotografa al valor de TMR1
en el momento de el filo presente en el pin correspondiente y guardada esta en el registro
CCP, la deteccin del filo puede ser por: cada filo de subida, cada filo de bajada, cada cuatro
filos de subida o cada 16 filos de subida. Se puede generar una interrupcin al ocurrir la
captura. Para medir el periodo o ancho de pulso de una seal es necesario tener dos
capturas, pero solo se tiene un registro de captura, por lo que se debern ingresar las
instrucciones adecuadas para guardar en una variable creada por el usuario la captura
anterior. Las aplicaciones de una entrada por captura son:
45
Medir capacitancia.
Medir la velocidad de motores o bandas
Medir distancia usando sensores ultrasnicos. Se enva un Pulso y se mide el tiempo que
tarda en regresar el pulso.
En la figura anterior se observa una seal cuadrada, durante los filos de subida se copian los
valores que tiene en ese momento el Contador TMR1x a el Registro CCPx. Para poder medir
el periodo de una seal se requiere el tener por lo menos una variable auxiliar para tener el
periodo, la copia del CCPx a la variable auxiliar se realiza en el servicio de interrupcin.
El procedimiento dentro de la interrupcin es el siguiente.
New y Old son variables auxiliares
Old=New;//Se respalda New antes de ser Actualizada
New=CCPx;// EL new actualizado es el valor de la captura
Periodo=New-Old;
5.4.1.- Comparaciones de salida
Las comparaciones de salida permiten generar pulsos de diversa duracin utilizando relojes
internos del microcontrolador, en este caso el TMR1. El TMR1 y el registro CCPRxH:L(es un
registro de 16 bits) siempre se estn comparando bit a bit, por hardware interno del
microcontrolador como se muestra en la figura 42, y cuando existe una igualacin de ambos
(MATCH) se genera una salida la cual activa una bandera llamada CCPxIF=1, esto tambin
puede generar una interrupcin; dependiendo de la lgica de salida se permiten varias
acciones como por ejemplo poner un Pin a 1, ponerlo a cero, invertirlo (toggle), adems se
puede configurar que no se genere ningn cambio en el PIN.
46
FIGURA 42 DIAGRAMA A BLOQUES DE EL PERIFRICO SALIDA POR COMPARACIN.
47
se limpia el TMR0, y se programa la siguiente interrupcin que ocurra en el siguiente
segundo, de esta manera se puede hacer un frecuencmetro, contando el nmero de pulsos
que llega en un segundo.
5.8.- Generador de PWM
La seal de PWM(Modulacin por ancho de pulso), es una seal cuadrada, como la que se
muestra en la figura siguiente: la seal cambia entre un valor alto y uno bajo, se puede
generar un PWM de una frecuencia dada, la frecuencia y por ende el periodo permanecen
constantes. Lo que se varia es la relacin entre el tiempo que esta en uno y el tiempo que
esta en cero la seal. Mientras mayor sea el tiempo que la seal este en uno respecto al
periodo de la seal, mayor ser el valor promedio de dicha seal, si esta seal se aplica a un
motor este girara mas rpido mientras mayor sea el tiempo que esta en uno. En la figura 43
se muestran diversas relaciones de ancho de pulso los cuales tendrn diferentes niveles de
voltaje promedio. En la Figura 45 se muestra el diagrama tpico para la conexin de un
motor de corriente directa, para variar por PWM su velocidad. El transistor a usar depende
de la corriente que consume el motor y la resistencia de base se debe calcular para que el
transistor quede saturado con el nivel alto de voltaje. Son ejemplos de aplicaciones:
Conversin Digital Analgica, Control de Motores Elctricos, Generacin de tonos,
Generacin de Ondas Senoidales. Es posible con un PWM tener un Convertidor de Digital a
Analgico, si se coloca un filtro pasa bajos que elimine la frecuencia fundamental de el
PWM, con lo que se tendr un nivel de tensin de directa como muestra la figura 43 en la
lnea promedio.
48
FIGURA 44 SEAL PWM CON DISTINTOS CICLOS DE TRABAJO(DUTY CYCLE).
La tensin promedio=(Amplitud*Ton)/TPeriodo
El Periodo del PWM en el PIC, se calcula con la siguiente ecuacin
Internal clock=500KHz
TOSC=1/500000=2useg
PR2=255
PWM PERIODO = (PR2+1)*4*TOSC*(TMR2 PRESCALER)=256*4*2us*1=0.002048
FrecPWM=1/PWMperiodo=488.28Hz
El ciclo til es calculado
ANCHO DE PULSO = CCPR *TOSC * (PRESCALADOR)
uint16_t dutycycle;
void main(void) {
49
SYSTEM_Initialize();
PWM3_Initialize();
while (1) {
dutycycle=500;
PWM3_LoadDutyValue(dutycycle);
}
}//Fin del main
// funciones de inicializacin del PWM
void PWM3_Initialize(void) {
PWM3EN Habilita; PWM3POL Polaridad en alta;
PWM3CON = 0x80;
//Carga el ciclo activo =0x7FC0
PWM3DCH = 0x7F;
PWM3DCL = 0xC0;
// Selecciona el Timer
CCPTMRSbits.P3TSEL = 0x0;
}
void PWM3_LoadDutyValue(uint16_t dutyValue) {
//Escribe los 8 bits mas significativos del duty en el registro PWMDCH
PWM3DCH = (dutyValue & 0x03FC) >> 2;
//Escribe los 8 bits menos significativos del duty en el registro PWMDCL
PWM3DCL = (dutyValue & 0x0003) << 6;
}
//////////queda
Xxxx,xxxx & 03 =0000,00xx, despus de correrlo 6 lugares a la izquierda
Xx00,0000;
50
Transistor.- En el segundo mdulo se tienen tres transistores uno por cada display de 7
segmentos, se usan transistores para poder manejar el nivel de corriente requerido para
cada nodo comn.
El bloque de PIC16F1619.- Es el microcontrolador usado en esta aplicacin.
El modulo de Tx y Rx, esta formado por un transductor ultrasnico, el cual enva rfagas
de sonido de 40Khz y mide cuanto tiempo tardan en regresar. Y enva el resultado de la
distancia del objeto como un pulso al microcontrolador.
51
FIGURA 47 DIAGRAMA ELECTRNICO
52
INTERRUPCIN
LATC=0xFF; LATBbits.LATB4=0;
APAGASEGMENTOS
LATBbits.LATB5=1;
LATBbits.LATB6=1;
LATC=TDig7s[RAMVi
deo(2)];
i=0 LATBbits.LATB4=1;
LATBbits.LATB5=0;
NO
LATBbits.LATB6=1;
i=1 LATC=TDig7s[RAMVi
deo(1)];
LATBbits.LATB4=1;
NO
LATBbits.LATB5=1;
i=2 LATBbits.LATB6=0;
LATC=TDig7s[RAMVi
NO deo(0)];
i=0xff;//
Inicializa el contador
i++;
Fin Interrupcin
53
contador de iteraciones a cero para que en la cuarta iteracin se regrese el contador a cero,
y asi se repite el ciclo. Aunque es cada un milisegundo el prender un displey, los humanos
percibimos como si estuvieran prendidos los 3 displays al mismo tiempo. El contador i se
utiliza para seleccionar cual displey se encender.
En la figura 49 se presenta el diagrama de flujo del programa principal. Dentro de la funcin
principal main se tiene un ciclo infinito, Dentro del ciclo infinito se realiza lo siguiente: en
esa parte se transmite un pulso de una duracin x milisegundos, como la seal se recibir
sobre el mismo pin se tiene que cambiar la direccin del pin y se mide la duracin del pulso
de llegada, una vez que se tiene esta duracin, se escala y posteriormente se convierte en
cdigo de siete segmentos y actualizar la tabla de despliegue de los displays de 7 segmentos.
Para medir el ancho de pulso que entrega el sensor ultrasnico se utiliza el perifrico
Timer0, sin interrupciones, se esta verificando el nivel de el pin RA2, cuando se detecta un
cambio de nivel cero a uno se considera el inicio de el pulso que se quiere medir, se coloca
por lo tanto 00 en TMR0, este se estar incrementando, por verificacin se lee el pin RA2 y
cuando regrese a cero significa que el pulso termino, el valor al que haya llegado el Timer0
es el valor de el ancho de pulso expresado en cuentas de tiemer0, el valor en submltiplos
de segundo depende de el prescalador y reloj que se estn utilizando. Tambin se verifica
si el timer no esta cerca del sobre flujo lo cual indica que el objeto a medir esta fuera de
rengo del sensor ultrasnico. Al terminar el ciclo se repite el ciclo para iniciarlo nuevamente
hay que volver a configurar el pin como salida, y enviar el pulso de inicio.
Para el TMR1 su configuracin se requiere saber los siguientes parmetros.
Tiempo mximo de el sensor18.ms
Tiempo minimo de el sensor 115useg.
54
Inicializacion Alpha
Timer0=ON
Beta
AUXDESP=K*AUXTMR0
Delay(); BintoBCDInt
//Retardo (AUXTMR0);
Deshabilita interrupciones
RA2=0 RAMVideo(2)=Centenas
RAMVideo(1)=Decenas
RAMVideo(0)=Unidades
Habilita Interrupciones
Entrada RA2
Beta
Si
RA2=0
No
TMR0=0;
Desplegar Error
No
Si
RA2=1; TMR0=apagado ALPHA
55
6.3.- Construccin y pruebas del trabajo final.
Se describe las pruebas realizadas al trabajo final.
Se armara en una tarjeta de pruebas el cto. de la figura 47. El microcontrolador se grabara
con alguna herramienta como por ejemplo la Curiosity o el Pick kit 3. Se compara la
distancia medida del prototipo contra la medida por una cinta mtrica, los resultados se
muestran en la siguiente tabla.
56
FIGURA 51 MEDIDOR ARMADO EN TARJETA DE PRUEBAS
Distancia medida con regla Disatancia Medida con el Error cm.
cm. proyecto cm.
10 10 0
20 21 1
30 30 0
40 39 -1
50 49 -1
60 61 1
70 71 1
80 82 2
57
Figura 1 Sistema basado en Microprocesador .................................................................................... 2
Figura 2 Sistema basado en Microcontrolador ................................................................................... 2
Figura 3 Arquitectura del PIC16F1619. ............................................................................................... 3
Figura 4 Registros del ncleo. ............................................................................................................. 3
Figura 5 Arquitectura Harvard Modificad ........................................................................................... 4
Figura 6 Memoria de Programa y Pila ................................................................................................. 5
Figura 7 Divisin interna del banco de Memoria ................................................................................ 6
Figura 8 Banco 0 al 7 de memoria de datos ........................................................................................ 7
Figura 9 Instrucciones Orientadas a datos tipo Byte. ......................................................................... 8
Figura 10 Instrucciones orientadas a manejo de tipo bit. ................................................................... 8
Figura 11 Instrucciones de Control y literal ........................................................................................ 9
Figura 12 Instrucciones optimizadas para compilador en C. .............................................................. 9
Figura 13 ejemplo de cdigo en ensamblador y su equivalente en C............................................... 11
Figura 14 Configuracin para simular en la funcin main. ............................................................... 16
Figura 15 Controles para el simulador y depurador. ........................................................................ 16
Figura 16 Condiciones de restablecimiento por variaciones de voltaje(Broun out Reset). .............. 17
Figura 17 Resumen de opciones de Programacin ........................................................................... 19
Figura 18 Tipos de variables para el compilador XC8 ....................................................................... 22
Figura 19 Valores mnimos y mximos para las variables del compilador XC8 [4] .......................... 23
Figura 20 Rango de los tipos flotantes. ............................................................................................. 23
Figura 21 Lgica de banderas y habilitacin de interrupcin. .......................................................... 27
Figura 22 Diagrama del ejemplo para prender un led con interrupcin, utilizar PIC16F1619. ........ 28
Figura 23.- Seal analgica y Digital. ................................................................................................. 31
Figura 24 Seleccin del Canal ............................................................................................................ 32
Figura 25 Configuracin de las terminales en el configurador de cdigo para dos canales
analgicos.......................................................................................................................................... 33
Figura 26 Convertidor A/D justificado a la derecha y a la izquierda. ................................................ 35
Figura 27 Modelo de entrada en microcontrolador PIC16F1619 [2] ................................................ 36
Figura 28 Programa para leer un botn y segn su estado prender un led. .................................... 37
Figura 29 Programa que hace que parpade un led. .......................................................................... 37
Figura 30 Configuracin para alimentar de el PickKit3 a la aplicacin. ............................................ 38
Figura 31 Perifrico de comunicacin Serial contenido dentro del PIC16F1619. ............................. 38
Figura 32 Ejemplo de comunicacin serial sncrona. ....................................................................... 39
Figura 33 Ejemplo de no regreso a cero............................................................................................ 39
Figura 34 Forma de onda en transmisin asncrona en el PIC. ......................................................... 39
Figura 35 El Cto. Max232 recibe TTL y sale RS232. ........................................................................... 39
Figura 36 Seal de entrada y salida en el circuito. Max232 .............................................................. 40
Figura 37 Paquete de transmisin de datos comunicacin asncrona. ............................................. 40
Figura 38 Conexin del Max232. ....................................................................................................... 40
Figura 39 Diagrama a bloques de el TMR1 [2] .................................................................................. 44
Figura 40 Diagrama a bloques de el perifrico de entrada por captura. .......................................... 46
58
Figura 41 Medicin de periodo utilizando dos eventos consecutivos de captura. ........................... 46
Figura 42 Diagrama a bloques de el perifrico salida por comparacin. .......................................... 47
Figura 43 Seal de PWM. .................................................................................................................. 48
Figura 44 Seal PWM con distintos ciclos de trabajo(Duty cycle). ................................................... 49
Figura 45 Esquemtico de control de velocidad de un motor de C.D. con PWM. ............................ 49
Figura 46 Diagrama a bloques de aplicacin final ............................................................................. 51
Figura 47 Diagrama Electrnico ........................................................................................................ 52
Figura 48 Diagrama de Flujo Interrupcin TMR1 .............................................................................. 53
Figura 49 Diagrama de Flujo Principal............................................................................................... 55
Figura 50 Tarjeta Curiosity de Microchip, usada para grabar al microcontrolador. ......................... 56
Figura 51 Medidor armado en tarjeta de Pruebas ............................................................................ 57
59
Bibliografa
[1] C. v. Driscoll, DATA ADQUISITION AND PROCESS CONTROL WITH THE M6811, NEW YORK:
MERRIL, 1994.
[2] Microchip Technology Inc., PIC16(L)F1615/19 Data sheet, Phoenix: Microchip, 2014-2015.
60