SlideShare una empresa de Scribd logo
2
Lo más leído
12
Lo más leído
INSTITUTO POLITÉCNICO NACIONAL
CENTRO DE INVESTIGACIÓN EN COMPUTACIÓN
1° EVALUACIÓN
Microprocesadores
MCIC
Hernández Lara Derlis
Aplicación de los periféricos de un microcontrolador, uso del TMR0, ADC
y USART de un PIC16F.
Profesor:
Dr. Alfonso Gutiérrez Aldana
MÉXICO, D.F. MAYO 2014
Derlis Hernández Lara
2
Conociendo los microcontroladores PIC16F
En este trabajo se describe la práctica realizada para la primera evaluación de la materia
de microprocesadores. Se vio durante el curso correspondiente a este periodo, como
configurar y utilizar algunos de los periféricos más usados de un PIC, como los son el
TMR0, el ADC y el USART.
Introducción:
Se está trabajando con el PIC16F887 en específico, este es un microcontrolador de 8
bits de mediano rango, con 40 terminales y con una arquitectura Harvard lo que indica
que tiene dos memorias, una para datos y una de programa, además utiliza instrucciones
RISC (del inglés Reduced Instruction Set Computer, en español Computador con
Conjunto de Instrucciones Reducidas).
TMR0
El microcontrolador PIC16F887 dispone de tres temporizadores/contadores
independientes, denominados Timer0, Timer1 y Timer2.
El temporizador Timer0 tiene una amplia gama de aplicaciones en la práctica. Sólo unos
pocos programas no lo utilizan de alguna forma. Es muy conveniente y fácil de utilizar
en programas o subrutinas para generar pulsos de duración arbitraria, en medir tiempo o
en contar los pulsos externos (eventos) casi sin limitaciones.
Es un módulo que sirve como contador o como temporizador de 8 bits.
Funcionando como temporizador el TMR0 es un registro donde se puede almacenar un
valor y este se va incrementando de 1 en 1 con los ciclos de instrucción, es decir, con
cada ciclo se incrementa en 1 el TMR0, cuando la cuenta llega a 255 y pasa a 0 (cero) se
produce una interrupción por desborde del TMR0, recordando que en un registro de 8
bits el valor más alto que se puede almacenar es 255 y que si se incrementa estando en
255 pasa a cero, y es a esto a lo que se le denomina desborde.
El TMR0 puede funcionar de dos maneras; como contador de eventos o como
temporizador. Para seleccionar de qué manera queremos que funcione utilizamos el bit
T0CS del registro OPTION_REG.
Cuando se selecciona TMR0 como contador de eventos, mediante el pin T0SE se indica
porque flanco, de subida o bajada, en la señal aplicada en el pin correspondiente, se
desea incrementar el contador.
La señal que lleva al TMR0 se puede preescalar mediante un divisor, este divisor se
puede asignar tanto al WDT como al TMR0 mediante el bit PSA del OPTION_REG. El
valor del rango del divisor viene determinado por los bits PS2:PS0 según la tabla
correspondiente.
El TMR0 es capaz de realizar una interrupción cada vez que pasa de 255 a 0, para
permitirla hay que poner a 1 el bit T0IE del registro INTCON y el flag (bandera) de la
interrupción es el T0IF del registro INTCON.
Derlis Hernández Lara
3
ADC
La conversión analógica-digital (CAD) consiste en la transcripción de señales
analógicas en señales digitales, con el propósito de facilitar su
procesamiento (codificación, compresión, etc.) y hacer la señal resultante (la digital)
más inmune al ruido y otras interferencias a las que son más sensibles las señales
analógicas.
Un ADC en un microcontrolador mide el voltaje V en un pin (que tendrá que estar
declarado como entrada con el correspondiente registro TRISA) y lo convierte en un
número. El voltaje se mide con referencia a un voltaje mínimo, Vref(-) , y a un voltaje
máximo, Vref (+). Normalmente Vref- suele ser Vss=GND=0V y Vref+ = Vcc = 5V,
pero pueden usarse otros voltajes de referencia.
La resolución del ADC es una característica fundamental y nos dice el número de
niveles con los que cubrimos el intervalo [0,1]. Por ejemplo, en los PIC solemos tener
una resolución de 10 bits, que representan 2^10=1024 niveles. El intervalo real [0,1) se
aplicaría al intervalo [0,1023]. Si asumimos un rango de 5V, tendremos que la
resolución de cada nivel es de r=5/1024 V=4.88 mV. Según la documentación de
Microchip (esto puede variar para otros microcontroladores) cualquier voltaje entre [0 y
r] (o por debajo de 0, lo que corresponde a V<Vref-) se cuantificaría en el nivel 0.
Entre r y 2r tendríamos una salida de nivel 1. Así hasta llegar a nivel 1023 que
cuantificaría voltajes por encima de 1023r = 1023x 5/1024 = 4.995V. Como se ve,
voltajes por debajo de Vref- o por encima de Vref+ son posibles y se cuantifican como
nivel mínimo 0 o máximo, 1023. Niveles por debajo de 0V o por encima de la tensión
de alimentación (normalmente 5V) pueden ser dañar el PIC.
Aunque un PIC puede tener del orden de 8-12 posibles canales (pines) de entrada
analógica, solo tiene normalmente un único módulo ADC, lo que significa que no
podemos tomar medidas simultáneas de varios canales. Si es necesario, lo que podemos
hacer es ir conectando (seleccionando) los sucesivos canales al ADC para ir midiendo
sus voltajes.
El proceso de una conversión ADC se divide en un tiempo de adquisición Ta (durante el
cual un condensador interno se carga al voltaje exterior) y un tiempo de conversión Tc
(durante el cual se desconecta el pin exterior y se cuantifica el voltaje del condensador).
Para el PIC16F887 no hay que preocuparse por programar una rutina para el tiempo,
porque ya cuenta con la electrónica necesaria para hacerlo, solo hay que preguntar por
la bandera que indica que ya acabo el proceso de adquisición y utilizar el valor
guardado de la conversión.
El tiempo de conversión Tc depende fundamentalmente del número de bits del
conversor. La unidad básica es el llamado Tad, aproximadamente el tiempo necesario
para ganar un bit adicional. La conversión total tarda entre 11 y 14 Tad (contando con la
descarga final del condensador para estar listo para otra medida. El reloj del ADC se
debe ajustar (como una fracción del oscilador principal) para que dicho Tad no sea
inferior a un valor mínimo especificado en los datasheet. Por ejemplo para la familia
PIC18F252/452 el Tad mínimo es de 1.6 usec y Tc = 14 Tad. En cambio para la familia
PIC18F2520/4520 tenemos un Tad mínimo de 0.75 usec y un Tc = 11 Tad.
Derlis Hernández Lara
4
USART
Cuando se ha logrado implementar cualquier protocolo de comunicación entre una PC y
un microcontrolador se puede decir que una gran cantidad de aplicaciones están a la
puerta, entre las cuales se pueden nombrar monitoreo, control digital, impresión de
datos en papel, impresión en pantalla de datos inmediatos, etc. Los protocolos más
comúnmente implementados en microcontroladores y PC son: RS232, IP, Paralelo, etc.
El microcontrolador PIC16F887 tiene incluido dentro de su estructura interna un
módulo USART (Transmisor receptor universal síncrono asíncrono) que es la
abreviación de “universal syncchronous asynchronous receiver transmitter” en ingles
también es conocido como SCI (“serial comunications interface”) y es uno de los más
comúnmente usados para la implementación de puertos seriales, la configuración
asíncrona full dúplex es una de las más populares de la USART porque es usada para
interfaces con el puerto serie de las PC usando el protocolo RS-232.
La función principal del módulo USART es enviar y recibir datos de forma serial, esta
operación puede ser dividida en dos categorías, transmisión síncrona y transmisión
asíncrona. La operación síncrona usa una línea de datos y una de reloj mientras que la
asíncrona solo usa la línea de datos, para este periodo del curso solo se analizó la
transmisión asíncrona.
Modo asíncrono:
La comunicación asíncrona es la que generalmente se utiliza entre un microcontrolador
y una PC. Para la comunicación serie con la PC se utiliza el estándar “no retorno a cero”
(NRZ) en la forma conocida como 8-N-1 que quiere decir 8 bits de datos, sin paridad y
un bit de parada tal como se muestra en la figura 1.
Figura 1. Cronograma del protocolo RS-232.
Línea libre se define como un estado lógico alto o uno. El inicio de la transmisión de
datos (Bit de inicio) se define como un estado lógico bajo o cero. Los bits son enviados
enseguida del bit de inicio, enviando en primer lugar el bit menos significativo, después
de los bits de datos se envía el bit de parada que es un estado lógico alto o uno. El
periodo T depende de la velocidad de transmisión y es ajustado de acuerdo a las
necesidades de transmisión. En la figura 2 se muestra un conector RS-232 y en la tabla
1 los nombres de cada pin.
Derlis Hernández Lara
5
Figura 2. Conector DB9 estándar.
Tabla 1. Nombres de los pines del conector DB9.
La interface física que ese utiliza comúnmente para conectar un microcontrolador con la
PC se muestra en la figura 3. El circuito MAX232 realiza la tarea de generar de acuerdo
a los valores lógicos entregados por le microcontrolador los niveles necesarios de
voltaje para la comunicación RS-232.
Figura 3. Conexión física para la comunicación RS-232.
Derlis Hernández Lara
6
Para implementar la comunicación serial entre una PC y un microcontrolador en la
etapa experimental se suele utilizar el programa Hyper Terminal como se muestra en la
figura 4.
Figura 4. Configuración y elección del puerto disponible a utilizar.
Una vez que se ha establecido la comunicación entre Hyper Terminal y el
microcontrolador se puede programar la aplicación deseada en cualquier software como
Matlab, Labview, Visual basic, etc.
DESARROLLO:
Realizar un programa y circuito correspondiente que digitalice dos canales analógicos y
los envié a la PC para dibujar lo que se está captando con ayuda de algún software.
Enviar 500 muestras por segundo (mps).
1° Para la parte de la transmisión serial es importante enviar los datos con una
velocidad estándar y exacta por lo que se utiliza un cristal comercial de 3686400 Hz.
2° Por lo que el tiempo de ejecución de una instrucción es:
3° Se envían 4 bytes, luego entonces 500*4=2000 mps y además cada muestra es de 10
bits, luego entonces 2000*10=20000 bps (bits por segundo). Por lo que se puede utilizar
cualquier velocidad de transmisión estándar mayor a 20000 bps, como pueden ser
Derlis Hernández Lara
7
38400 bps, 115200 bps, 230400 bps, etc. Para este caso se utiliza una velocidad de
transmisión estándar de 115200 bps, para poder observar bien la simulación en la
herramienta MPLAB y para asegurar que no haya pérdida de datos.
4° Ahora para saber en cuanto tiempo se envían las 500 muestras:
5° Sabiendo que TMR0 solo puede contar hasta 255, hay que seleccionar el
preescalador que permita contar esta cantidad, si se quiere enviar 2000 bits cada 2 ms:
2000/8=250, por lo que con el preescalador 1:8 es suficiente.
6° Para saber cuántos ciclos hay que contar:
Usando la escala 1:8, 1843/8=230 y como TMR0 cuenta 256, 256-230=26, se debe
inicializar TMR0 en 26, esto se puede ajustar para obtener el menor error posible.
8° Con los valores obtenidos ya se puede configurar el TMR0 encargado de contar que
se envíen los 4 bytes a la PC cada 2 ms. Este temporizador se configura para que
empiece a contar (la primera vez no importa el tiempo que se tarde), y cada 230
instrucciones aumenta en uno su valor, así al cabo de 8 conteos habrá ejecutado las 1843
instrucciones que se necesitan para este caso. Se programa generando una interrupción
cada que se enciende la bandera de fin de conteo. A continuación se muestra su
configuración en lenguaje ensamblador:
Los registros asociados al TMR0 son:
 INTCON y el OPTION_REG.
 El bit T0CS (OPTION 5) a 1 trabaja con un oscilador externo, 0 utiliza la
Fosc/4.
 El bit T0SE (OPTION 4) en modo contador a 1 flanco descendente, 0 flanco
ascendente.
 El bit PSA (OPTION 3) 0 preescaler al temporizador, 1 preescaler al WDT.
 Cuando se desborda el TMR0, se activa el bit 2 de INTCON (T0IF) y si el T0IE
está activado el T0IF generara interrupción y se debe borrar por software cuando
se atienda la interrupción.
Para este caso, OPTION_REG=1101 0010=D2 (hex).
Derlis Hernández Lara
8
Observe que en el programa en lugar de inicializar TMR0 en 26, se hizo en 27, esto se
hizo para obtener el menor error posible, al inicializarlo en 27 y agregar 5 instrucciones
de no operación se obtiene un tiempo de 1.999783 ms que es lo más cercano a los 2ms
que se están buscando (figura 5).
Figura 5. Tiempo del TMR0 y número de instrucciones realizadas.
9° Una vez que ya se tiene el tiempo de envió requerido, es hora de mandar datos a la
PC mediante el periférico USART.
Para la transmisión de datos:
Derlis Hernández Lara
9
 Se inicializa el registro generador de Baud Rate (velocidad de transmisión
deseada) SPBRG con el valor apropiado, si se usa una velocidad alta el bit
BGRH debe estar en 1. Para lo cual se usa la siguiente expresión:
Para este caso:
 Se habilita el puerto serie asíncrono limpiando el bit SYNC y se pone a 1 el bit
SPEN (serial port enable).
 Se carga el dato en el registro TXREG (después de esto se inicializa la
transmisión).
 Habilitar la transmisión poniendo a 1 el bit TXE.
En el código anterior se configura el periférico USART para la transmisión serial de
datos. Después se realiza esta configuración junto con el TMR0, se configura el USART
en la inicialización antes de la interrupción, y ya dentro de la interrupción se envían los
4 bytes cada 2ms aproximadamente como se ve en la figura 6, se realiza una prueba
enviando “U”, que después será remplazada por la adquisición del ADC.
Derlis Hernández Lara
10
Derlis Hernández Lara
11
Figura 6. Envió de datos por el USART cada 2ms.
10° Una vez establecido el TMR0 y el USART, solo falta habilitar el ADC, para enviar
la conversión de dos señales analógicas a la PC, se enviaran 500 mps cada 2ms a una
velocidad de transmisión de 115200 bps.
Para configurar el ADC:
 Configurar pines como entradas analógicas, seleccionar o no voltajes de
referencia (VCFG), etc.
 Una vez configurado, habilitar el ADC (ADON=1).
 Escoger canal (bits CHS) a usar (el pin dado se conecta al condensador).
 Esperar (delay) Ta mientras se carga el condensador.
 Lanzar la conversión (GO=1).
 Esperar a completar a que la conversión concluya (GO=0).
 Extraer el resultado de ADRESH: ADRESL.
 Si hemos terminado con el ADC, apagarlo para reducir consumo.
Derlis Hernández Lara
12
Ahora implementando el ADC dentro del TMR0 para que la conversión y el envió se
haga dentro de los 2 ms establecidos:
Derlis Hernández Lara
13
Derlis Hernández Lara
14
11° Para poder ver las señales enviadas por el microcontrolador a la PC se puede usar
un osciloscopio o capturarlas y graficarlas en Matlab por ejemplo.
Programa ocupado para la adquisición de datos con Matlab:
Derlis Hernández Lara
15
Derlis Hernández Lara
16
Derlis Hernández Lara
17
Como al inicio de la lectura del puerto no se sabe que byte se leerá, se implementó un
algoritmo en el cual pueden existir dos casos, que lea el byte con los bits menos
significativos (caso 2), o el de los bits más significativos (caso 1).
Para determinar en que caso se toma la lectura, primero se obtienen los bytes pares e
impares respecto a su posición y se guardan en su respectivo arreglo, se tomaron los
últimos 5 bits de cada byte y se dividió entre 2, si el residuo de los impares es cero
entonces la lectura se tomó en el caso 2 por que el byte de los bits menos significativos
solo ocupa los 2 primeros bits y por lo tanto los otros 8 bits son ceros, de lo contrario
será el caso 1.
Una vez establecido el inicio de la lectura, se utiliza el arreglo de la lectura del puerto y
se concatenan los pares de bytes, es decir los primeros 2 bytes, luego los siguientes 2 y
así sucesivamente, como el nuevo dato es de 16 bits, se recortan los últimos 6 porque la
resolución del ADC es solo de 10 bits y se crea un nuevo arreglo con datos de 10 bits
cada uno, por último se separan los datos pares e impares respecto a su posición en el
arreglo y se establece que los pares corresponden a un canal y los impares al otro canal
y se mandan a graficar por separado.
Si la lectura callo en el caso 2, es decir empezó la lectura del puerto con el byte menos
significativo, se descarta el primer byte y se realiza el mismo procedimiento pero a
partir del segundo byte de la lectura y hasta el penúltimo.
Conclusiones:
Con la elaboración de la presente práctica se desarrollaron las habilidades necesarias
para poder analizar y configurar aspectos básicos a la hora de usar un microcontrolador
y sus diferentes periféricos, se aplicaron los conceptos de contador, transmisión serial,
convertidor analógico digital, etc., además de cómo poder recibir datos en la PC y
visualizarlos con ayuda de alguna herramienta de software como por ejemplo Matlab.
Referencias:
“PICmicro Mid-Range MCU Family Reference Manual”, Microchip rev/DS33023A,
December 1997.
“PIC16F887 Data sheet” Microchiop rev/30292c, 2001
“MAX232 Data sheet”, Texas Instruments, 2003.

Más contenido relacionado

DOCX
Manejo de teclado 4x4 con pic 16 f84a
PPTX
8085 microprocessor
PPTX
Digital clock presentation
PPT
Notas de clase optoelectronica
PPTX
Sumador\Restador
PPTX
Architecture and pin diagram of 8085
PPT
Counters
PDF
DRAM Cell - Working and Read and Write Operations
Manejo de teclado 4x4 con pic 16 f84a
8085 microprocessor
Digital clock presentation
Notas de clase optoelectronica
Sumador\Restador
Architecture and pin diagram of 8085
Counters
DRAM Cell - Working and Read and Write Operations

La actualidad más candente (20)

PDF
Tutorial creación de modulo 60 en proteus
PPTX
SRAM DRAM
PPTX
Verilog TASKS & FUNCTIONS
DOCX
8086 pin diagram description
PDF
Instruction formats-in-8086
PPT
Flipflops and Excitation tables of flipflops
PPT
PPTX
8085 MICROPROCESSOR ARCHITECTURE AND ITS OPERATIONS
PPT
Master synchronous serial port (mssp)
PPTX
Difference between 8085 and 8086 microprocessor Architecture
PPTX
Divide by N clock
PPTX
PWM con PIC16F877A: Modulos y Registros Involucrados
DOCX
Memoria sram
PDF
L8 understanding-atmega328 p-1
PPT
tegangan pada motherboard
PPT
5a clase el amplificador diferencial
PPTX
Los distintos tipos de diodos
DOC
Qoestion Bank Big Questions
PPTX
Introduction to Embedded system programming using 8051
PDF
Módulo Timer 1 del PIC16F887
Tutorial creación de modulo 60 en proteus
SRAM DRAM
Verilog TASKS & FUNCTIONS
8086 pin diagram description
Instruction formats-in-8086
Flipflops and Excitation tables of flipflops
8085 MICROPROCESSOR ARCHITECTURE AND ITS OPERATIONS
Master synchronous serial port (mssp)
Difference between 8085 and 8086 microprocessor Architecture
Divide by N clock
PWM con PIC16F877A: Modulos y Registros Involucrados
Memoria sram
L8 understanding-atmega328 p-1
tegangan pada motherboard
5a clase el amplificador diferencial
Los distintos tipos de diodos
Qoestion Bank Big Questions
Introduction to Embedded system programming using 8051
Módulo Timer 1 del PIC16F887
Publicidad

Destacado (20)

PDF
Módulo ADC del PIC16F887
PDF
Taxímetro con Pic16F887
PDF
Arquitectura Microcontrolador PIC16F887
PPTX
Comunicación serial PIC16F877A
PDF
Tema 7: Temporizadores y Relojes.
PDF
Módulo EUSART del PIC16F887
PDF
Introduccion a los microcontroladores pic y programacion de una matriz de led's
DOCX
Matriz de leds
PPTX
Programación en c (iii parte)
PDF
PROYECTOS CON PIC 16F84
PPT
21a clase sistemas de protección para fuentes reguladas
PDF
Clase1 c
PPTX
Sistemas de protecion electrica
PDF
Matriz de led
DOCX
Informe N°1-Microcontroladores
DOCX
Informe N°2-Microcontroladores
PPTX
Interrupciones y Temporizadores
DOC
Guía de matemáticas El reloj
PPT
El Reloj
DOCX
Guía n° 3 horas y minutos
Módulo ADC del PIC16F887
Taxímetro con Pic16F887
Arquitectura Microcontrolador PIC16F887
Comunicación serial PIC16F877A
Tema 7: Temporizadores y Relojes.
Módulo EUSART del PIC16F887
Introduccion a los microcontroladores pic y programacion de una matriz de led's
Matriz de leds
Programación en c (iii parte)
PROYECTOS CON PIC 16F84
21a clase sistemas de protección para fuentes reguladas
Clase1 c
Sistemas de protecion electrica
Matriz de led
Informe N°1-Microcontroladores
Informe N°2-Microcontroladores
Interrupciones y Temporizadores
Guía de matemáticas El reloj
El Reloj
Guía n° 3 horas y minutos
Publicidad

Similar a Adc y usart pic16 f887 (20)

PPT
Comunicación RS-232
PDF
Tutorial micro MSP430
PDF
Micro2 tema 5
DOCX
Taller cruce por cero
PPT
DIAGRAMAS DE UNA ALARMA
PDF
DOCX
Comunicación Serial entre un microcontrolador y un PC
PPT
PDF
Interrupciones y Temporizadores pucesi
PDF
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
PDF
Hoja de datos USB2TTL
PPT
Puertoserial[1]
PDF
Tramas phillips
PDF
Protocolo phillips
PPTX
Protocolo comunicación serial
PPTX
Grabacion de microcontroladores_pic
PPTX
ARQUITECTURA DE COMPUTADORAS
Comunicación RS-232
Tutorial micro MSP430
Micro2 tema 5
Taller cruce por cero
DIAGRAMAS DE UNA ALARMA
Comunicación Serial entre un microcontrolador y un PC
Interrupciones y Temporizadores pucesi
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
Hoja de datos USB2TTL
Puertoserial[1]
Tramas phillips
Protocolo phillips
Protocolo comunicación serial
Grabacion de microcontroladores_pic
ARQUITECTURA DE COMPUTADORAS

Último (20)

PDF
S15 Protección de redes electricas 2025-1_removed.pdf
PPT
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
PPTX
clase MICROCONTROLADORES ago-dic 2019.pptx
PDF
5 Presentación de PowerPointGENERACIÓN DESECHOS UIS 18-02-2023 (1).pdf
PPTX
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
PPT
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
PDF
MATRIZ IDENTIFICACIÓN EVALUACION CONTROL PRL.pdf
PDF
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
PDF
GUÍA PARA LA IMPLEMENTACIÓN DEL PLAN PARA LA REDUCCIÓN DEL RIESGO DE DESASTRES
DOCX
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
PDF
Informe Estudio Final Apagon del 25 de febrero
PDF
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
PDF
Electricidad-Estatica-Peligros-Prevencion.pdf
PPTX
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
PDF
Perfilaje de Pozos _20250624_222013_0000.pdf
PPTX
MODULO 1.SEGURIDAD Y SALUD CONCEPTOS GENERALES.pptx
PPT
Sustancias Peligrosas de empresas para su correcto manejo
PPTX
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
PPTX
Notificacion e investigación de incidentes y accidentes de trabajo.pptx
PPTX
GEOLOGIA, principios , fundamentos y conceptos
S15 Protección de redes electricas 2025-1_removed.pdf
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
clase MICROCONTROLADORES ago-dic 2019.pptx
5 Presentación de PowerPointGENERACIÓN DESECHOS UIS 18-02-2023 (1).pdf
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
MATRIZ IDENTIFICACIÓN EVALUACION CONTROL PRL.pdf
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
GUÍA PARA LA IMPLEMENTACIÓN DEL PLAN PARA LA REDUCCIÓN DEL RIESGO DE DESASTRES
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
Informe Estudio Final Apagon del 25 de febrero
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
Electricidad-Estatica-Peligros-Prevencion.pdf
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
Perfilaje de Pozos _20250624_222013_0000.pdf
MODULO 1.SEGURIDAD Y SALUD CONCEPTOS GENERALES.pptx
Sustancias Peligrosas de empresas para su correcto manejo
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
Notificacion e investigación de incidentes y accidentes de trabajo.pptx
GEOLOGIA, principios , fundamentos y conceptos

Adc y usart pic16 f887

  • 1. INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACIÓN EN COMPUTACIÓN 1° EVALUACIÓN Microprocesadores MCIC Hernández Lara Derlis Aplicación de los periféricos de un microcontrolador, uso del TMR0, ADC y USART de un PIC16F. Profesor: Dr. Alfonso Gutiérrez Aldana MÉXICO, D.F. MAYO 2014
  • 2. Derlis Hernández Lara 2 Conociendo los microcontroladores PIC16F En este trabajo se describe la práctica realizada para la primera evaluación de la materia de microprocesadores. Se vio durante el curso correspondiente a este periodo, como configurar y utilizar algunos de los periféricos más usados de un PIC, como los son el TMR0, el ADC y el USART. Introducción: Se está trabajando con el PIC16F887 en específico, este es un microcontrolador de 8 bits de mediano rango, con 40 terminales y con una arquitectura Harvard lo que indica que tiene dos memorias, una para datos y una de programa, además utiliza instrucciones RISC (del inglés Reduced Instruction Set Computer, en español Computador con Conjunto de Instrucciones Reducidas). TMR0 El microcontrolador PIC16F887 dispone de tres temporizadores/contadores independientes, denominados Timer0, Timer1 y Timer2. El temporizador Timer0 tiene una amplia gama de aplicaciones en la práctica. Sólo unos pocos programas no lo utilizan de alguna forma. Es muy conveniente y fácil de utilizar en programas o subrutinas para generar pulsos de duración arbitraria, en medir tiempo o en contar los pulsos externos (eventos) casi sin limitaciones. Es un módulo que sirve como contador o como temporizador de 8 bits. Funcionando como temporizador el TMR0 es un registro donde se puede almacenar un valor y este se va incrementando de 1 en 1 con los ciclos de instrucción, es decir, con cada ciclo se incrementa en 1 el TMR0, cuando la cuenta llega a 255 y pasa a 0 (cero) se produce una interrupción por desborde del TMR0, recordando que en un registro de 8 bits el valor más alto que se puede almacenar es 255 y que si se incrementa estando en 255 pasa a cero, y es a esto a lo que se le denomina desborde. El TMR0 puede funcionar de dos maneras; como contador de eventos o como temporizador. Para seleccionar de qué manera queremos que funcione utilizamos el bit T0CS del registro OPTION_REG. Cuando se selecciona TMR0 como contador de eventos, mediante el pin T0SE se indica porque flanco, de subida o bajada, en la señal aplicada en el pin correspondiente, se desea incrementar el contador. La señal que lleva al TMR0 se puede preescalar mediante un divisor, este divisor se puede asignar tanto al WDT como al TMR0 mediante el bit PSA del OPTION_REG. El valor del rango del divisor viene determinado por los bits PS2:PS0 según la tabla correspondiente. El TMR0 es capaz de realizar una interrupción cada vez que pasa de 255 a 0, para permitirla hay que poner a 1 el bit T0IE del registro INTCON y el flag (bandera) de la interrupción es el T0IF del registro INTCON.
  • 3. Derlis Hernández Lara 3 ADC La conversión analógica-digital (CAD) consiste en la transcripción de señales analógicas en señales digitales, con el propósito de facilitar su procesamiento (codificación, compresión, etc.) y hacer la señal resultante (la digital) más inmune al ruido y otras interferencias a las que son más sensibles las señales analógicas. Un ADC en un microcontrolador mide el voltaje V en un pin (que tendrá que estar declarado como entrada con el correspondiente registro TRISA) y lo convierte en un número. El voltaje se mide con referencia a un voltaje mínimo, Vref(-) , y a un voltaje máximo, Vref (+). Normalmente Vref- suele ser Vss=GND=0V y Vref+ = Vcc = 5V, pero pueden usarse otros voltajes de referencia. La resolución del ADC es una característica fundamental y nos dice el número de niveles con los que cubrimos el intervalo [0,1]. Por ejemplo, en los PIC solemos tener una resolución de 10 bits, que representan 2^10=1024 niveles. El intervalo real [0,1) se aplicaría al intervalo [0,1023]. Si asumimos un rango de 5V, tendremos que la resolución de cada nivel es de r=5/1024 V=4.88 mV. Según la documentación de Microchip (esto puede variar para otros microcontroladores) cualquier voltaje entre [0 y r] (o por debajo de 0, lo que corresponde a V<Vref-) se cuantificaría en el nivel 0. Entre r y 2r tendríamos una salida de nivel 1. Así hasta llegar a nivel 1023 que cuantificaría voltajes por encima de 1023r = 1023x 5/1024 = 4.995V. Como se ve, voltajes por debajo de Vref- o por encima de Vref+ son posibles y se cuantifican como nivel mínimo 0 o máximo, 1023. Niveles por debajo de 0V o por encima de la tensión de alimentación (normalmente 5V) pueden ser dañar el PIC. Aunque un PIC puede tener del orden de 8-12 posibles canales (pines) de entrada analógica, solo tiene normalmente un único módulo ADC, lo que significa que no podemos tomar medidas simultáneas de varios canales. Si es necesario, lo que podemos hacer es ir conectando (seleccionando) los sucesivos canales al ADC para ir midiendo sus voltajes. El proceso de una conversión ADC se divide en un tiempo de adquisición Ta (durante el cual un condensador interno se carga al voltaje exterior) y un tiempo de conversión Tc (durante el cual se desconecta el pin exterior y se cuantifica el voltaje del condensador). Para el PIC16F887 no hay que preocuparse por programar una rutina para el tiempo, porque ya cuenta con la electrónica necesaria para hacerlo, solo hay que preguntar por la bandera que indica que ya acabo el proceso de adquisición y utilizar el valor guardado de la conversión. El tiempo de conversión Tc depende fundamentalmente del número de bits del conversor. La unidad básica es el llamado Tad, aproximadamente el tiempo necesario para ganar un bit adicional. La conversión total tarda entre 11 y 14 Tad (contando con la descarga final del condensador para estar listo para otra medida. El reloj del ADC se debe ajustar (como una fracción del oscilador principal) para que dicho Tad no sea inferior a un valor mínimo especificado en los datasheet. Por ejemplo para la familia PIC18F252/452 el Tad mínimo es de 1.6 usec y Tc = 14 Tad. En cambio para la familia PIC18F2520/4520 tenemos un Tad mínimo de 0.75 usec y un Tc = 11 Tad.
  • 4. Derlis Hernández Lara 4 USART Cuando se ha logrado implementar cualquier protocolo de comunicación entre una PC y un microcontrolador se puede decir que una gran cantidad de aplicaciones están a la puerta, entre las cuales se pueden nombrar monitoreo, control digital, impresión de datos en papel, impresión en pantalla de datos inmediatos, etc. Los protocolos más comúnmente implementados en microcontroladores y PC son: RS232, IP, Paralelo, etc. El microcontrolador PIC16F887 tiene incluido dentro de su estructura interna un módulo USART (Transmisor receptor universal síncrono asíncrono) que es la abreviación de “universal syncchronous asynchronous receiver transmitter” en ingles también es conocido como SCI (“serial comunications interface”) y es uno de los más comúnmente usados para la implementación de puertos seriales, la configuración asíncrona full dúplex es una de las más populares de la USART porque es usada para interfaces con el puerto serie de las PC usando el protocolo RS-232. La función principal del módulo USART es enviar y recibir datos de forma serial, esta operación puede ser dividida en dos categorías, transmisión síncrona y transmisión asíncrona. La operación síncrona usa una línea de datos y una de reloj mientras que la asíncrona solo usa la línea de datos, para este periodo del curso solo se analizó la transmisión asíncrona. Modo asíncrono: La comunicación asíncrona es la que generalmente se utiliza entre un microcontrolador y una PC. Para la comunicación serie con la PC se utiliza el estándar “no retorno a cero” (NRZ) en la forma conocida como 8-N-1 que quiere decir 8 bits de datos, sin paridad y un bit de parada tal como se muestra en la figura 1. Figura 1. Cronograma del protocolo RS-232. Línea libre se define como un estado lógico alto o uno. El inicio de la transmisión de datos (Bit de inicio) se define como un estado lógico bajo o cero. Los bits son enviados enseguida del bit de inicio, enviando en primer lugar el bit menos significativo, después de los bits de datos se envía el bit de parada que es un estado lógico alto o uno. El periodo T depende de la velocidad de transmisión y es ajustado de acuerdo a las necesidades de transmisión. En la figura 2 se muestra un conector RS-232 y en la tabla 1 los nombres de cada pin.
  • 5. Derlis Hernández Lara 5 Figura 2. Conector DB9 estándar. Tabla 1. Nombres de los pines del conector DB9. La interface física que ese utiliza comúnmente para conectar un microcontrolador con la PC se muestra en la figura 3. El circuito MAX232 realiza la tarea de generar de acuerdo a los valores lógicos entregados por le microcontrolador los niveles necesarios de voltaje para la comunicación RS-232. Figura 3. Conexión física para la comunicación RS-232.
  • 6. Derlis Hernández Lara 6 Para implementar la comunicación serial entre una PC y un microcontrolador en la etapa experimental se suele utilizar el programa Hyper Terminal como se muestra en la figura 4. Figura 4. Configuración y elección del puerto disponible a utilizar. Una vez que se ha establecido la comunicación entre Hyper Terminal y el microcontrolador se puede programar la aplicación deseada en cualquier software como Matlab, Labview, Visual basic, etc. DESARROLLO: Realizar un programa y circuito correspondiente que digitalice dos canales analógicos y los envié a la PC para dibujar lo que se está captando con ayuda de algún software. Enviar 500 muestras por segundo (mps). 1° Para la parte de la transmisión serial es importante enviar los datos con una velocidad estándar y exacta por lo que se utiliza un cristal comercial de 3686400 Hz. 2° Por lo que el tiempo de ejecución de una instrucción es: 3° Se envían 4 bytes, luego entonces 500*4=2000 mps y además cada muestra es de 10 bits, luego entonces 2000*10=20000 bps (bits por segundo). Por lo que se puede utilizar cualquier velocidad de transmisión estándar mayor a 20000 bps, como pueden ser
  • 7. Derlis Hernández Lara 7 38400 bps, 115200 bps, 230400 bps, etc. Para este caso se utiliza una velocidad de transmisión estándar de 115200 bps, para poder observar bien la simulación en la herramienta MPLAB y para asegurar que no haya pérdida de datos. 4° Ahora para saber en cuanto tiempo se envían las 500 muestras: 5° Sabiendo que TMR0 solo puede contar hasta 255, hay que seleccionar el preescalador que permita contar esta cantidad, si se quiere enviar 2000 bits cada 2 ms: 2000/8=250, por lo que con el preescalador 1:8 es suficiente. 6° Para saber cuántos ciclos hay que contar: Usando la escala 1:8, 1843/8=230 y como TMR0 cuenta 256, 256-230=26, se debe inicializar TMR0 en 26, esto se puede ajustar para obtener el menor error posible. 8° Con los valores obtenidos ya se puede configurar el TMR0 encargado de contar que se envíen los 4 bytes a la PC cada 2 ms. Este temporizador se configura para que empiece a contar (la primera vez no importa el tiempo que se tarde), y cada 230 instrucciones aumenta en uno su valor, así al cabo de 8 conteos habrá ejecutado las 1843 instrucciones que se necesitan para este caso. Se programa generando una interrupción cada que se enciende la bandera de fin de conteo. A continuación se muestra su configuración en lenguaje ensamblador: Los registros asociados al TMR0 son:  INTCON y el OPTION_REG.  El bit T0CS (OPTION 5) a 1 trabaja con un oscilador externo, 0 utiliza la Fosc/4.  El bit T0SE (OPTION 4) en modo contador a 1 flanco descendente, 0 flanco ascendente.  El bit PSA (OPTION 3) 0 preescaler al temporizador, 1 preescaler al WDT.  Cuando se desborda el TMR0, se activa el bit 2 de INTCON (T0IF) y si el T0IE está activado el T0IF generara interrupción y se debe borrar por software cuando se atienda la interrupción. Para este caso, OPTION_REG=1101 0010=D2 (hex).
  • 8. Derlis Hernández Lara 8 Observe que en el programa en lugar de inicializar TMR0 en 26, se hizo en 27, esto se hizo para obtener el menor error posible, al inicializarlo en 27 y agregar 5 instrucciones de no operación se obtiene un tiempo de 1.999783 ms que es lo más cercano a los 2ms que se están buscando (figura 5). Figura 5. Tiempo del TMR0 y número de instrucciones realizadas. 9° Una vez que ya se tiene el tiempo de envió requerido, es hora de mandar datos a la PC mediante el periférico USART. Para la transmisión de datos:
  • 9. Derlis Hernández Lara 9  Se inicializa el registro generador de Baud Rate (velocidad de transmisión deseada) SPBRG con el valor apropiado, si se usa una velocidad alta el bit BGRH debe estar en 1. Para lo cual se usa la siguiente expresión: Para este caso:  Se habilita el puerto serie asíncrono limpiando el bit SYNC y se pone a 1 el bit SPEN (serial port enable).  Se carga el dato en el registro TXREG (después de esto se inicializa la transmisión).  Habilitar la transmisión poniendo a 1 el bit TXE. En el código anterior se configura el periférico USART para la transmisión serial de datos. Después se realiza esta configuración junto con el TMR0, se configura el USART en la inicialización antes de la interrupción, y ya dentro de la interrupción se envían los 4 bytes cada 2ms aproximadamente como se ve en la figura 6, se realiza una prueba enviando “U”, que después será remplazada por la adquisición del ADC.
  • 11. Derlis Hernández Lara 11 Figura 6. Envió de datos por el USART cada 2ms. 10° Una vez establecido el TMR0 y el USART, solo falta habilitar el ADC, para enviar la conversión de dos señales analógicas a la PC, se enviaran 500 mps cada 2ms a una velocidad de transmisión de 115200 bps. Para configurar el ADC:  Configurar pines como entradas analógicas, seleccionar o no voltajes de referencia (VCFG), etc.  Una vez configurado, habilitar el ADC (ADON=1).  Escoger canal (bits CHS) a usar (el pin dado se conecta al condensador).  Esperar (delay) Ta mientras se carga el condensador.  Lanzar la conversión (GO=1).  Esperar a completar a que la conversión concluya (GO=0).  Extraer el resultado de ADRESH: ADRESL.  Si hemos terminado con el ADC, apagarlo para reducir consumo.
  • 12. Derlis Hernández Lara 12 Ahora implementando el ADC dentro del TMR0 para que la conversión y el envió se haga dentro de los 2 ms establecidos:
  • 14. Derlis Hernández Lara 14 11° Para poder ver las señales enviadas por el microcontrolador a la PC se puede usar un osciloscopio o capturarlas y graficarlas en Matlab por ejemplo. Programa ocupado para la adquisición de datos con Matlab:
  • 17. Derlis Hernández Lara 17 Como al inicio de la lectura del puerto no se sabe que byte se leerá, se implementó un algoritmo en el cual pueden existir dos casos, que lea el byte con los bits menos significativos (caso 2), o el de los bits más significativos (caso 1). Para determinar en que caso se toma la lectura, primero se obtienen los bytes pares e impares respecto a su posición y se guardan en su respectivo arreglo, se tomaron los últimos 5 bits de cada byte y se dividió entre 2, si el residuo de los impares es cero entonces la lectura se tomó en el caso 2 por que el byte de los bits menos significativos solo ocupa los 2 primeros bits y por lo tanto los otros 8 bits son ceros, de lo contrario será el caso 1. Una vez establecido el inicio de la lectura, se utiliza el arreglo de la lectura del puerto y se concatenan los pares de bytes, es decir los primeros 2 bytes, luego los siguientes 2 y así sucesivamente, como el nuevo dato es de 16 bits, se recortan los últimos 6 porque la resolución del ADC es solo de 10 bits y se crea un nuevo arreglo con datos de 10 bits cada uno, por último se separan los datos pares e impares respecto a su posición en el arreglo y se establece que los pares corresponden a un canal y los impares al otro canal y se mandan a graficar por separado. Si la lectura callo en el caso 2, es decir empezó la lectura del puerto con el byte menos significativo, se descarta el primer byte y se realiza el mismo procedimiento pero a partir del segundo byte de la lectura y hasta el penúltimo. Conclusiones: Con la elaboración de la presente práctica se desarrollaron las habilidades necesarias para poder analizar y configurar aspectos básicos a la hora de usar un microcontrolador y sus diferentes periféricos, se aplicaron los conceptos de contador, transmisión serial, convertidor analógico digital, etc., además de cómo poder recibir datos en la PC y visualizarlos con ayuda de alguna herramienta de software como por ejemplo Matlab. Referencias: “PICmicro Mid-Range MCU Family Reference Manual”, Microchip rev/DS33023A, December 1997. “PIC16F887 Data sheet” Microchiop rev/30292c, 2001 “MAX232 Data sheet”, Texas Instruments, 2003.