0% encontró este documento útil (0 votos)
16 vistas67 páginas

Interrupciones y Timer1 en Microcontroladores

El documento aborda el uso de microcontroladores, específicamente el Curiosity Nano, y cubre temas como interrupciones vectorizadas, el Timer1, y la manipulación de servos. Se presentan ejercicios prácticos para implementar un reloj en tiempo real utilizando Timer1 y se discuten las configuraciones necesarias para controlar servomecanismos. Además, se mencionan tareas pendientes y evaluaciones en el curso, así como una asignación para modificar un ejemplo previo.

Cargado por

richard.huayte
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas67 páginas

Interrupciones y Timer1 en Microcontroladores

El documento aborda el uso de microcontroladores, específicamente el Curiosity Nano, y cubre temas como interrupciones vectorizadas, el Timer1, y la manipulación de servos. Se presentan ejercicios prácticos para implementar un reloj en tiempo real utilizando Timer1 y se discuten las configuraciones necesarias para controlar servomecanismos. Además, se mencionan tareas pendientes y evaluaciones en el curso, así como una asignación para modificar un ejemplo previo.

Cargado por

richard.huayte
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Microcontroladores

Semana 11
Por Kalun José Lau Gan
¿Preguntas previas?
• Puede explicarnos mas sobre interrupciones vectorizadas en el XC8
con el Curiosity Nano?
• Hoy atenderemos este punto nuevamente
• ¿Cómo puedo construir un reloj con el Curiosity Nano?
• Empleando el Timer1 ó algún módulo RTC externo (DS1307, DS3231 ó
similares)
• ¿MPLAB Xpress puede correr fuera de una PC?
• Como se evidenció la semana pasada, MPLAB Xpress al ser una plataforma
que corre en un navegador web, se puede emplear cualquier máquina que
tenga ello (un web browser), pudiendo ser una PC desktop corriendo
Windows, Linux, MacOS, Android. Hasta desde un celular puedes desarrollar
una aplicación con el Curiosity Nano!
Preguntas previas
• ¿Veremos manipulación de servos?
• Si, hoy atenderemos ese tema
• ¿Cuáles son los temas pendientes en el curso?
• Comunicación serial I2C
• Comunicación serial UART
• Protocolos e interfaces propietarias (sensores DHT11, 1-wire)
• Otras interfaces y protocolos (RS485, CAN)
• PCB
• Modelado 3D y manufactura aditiva
• Micros de 32bits (ESP32, Rpi-Pico, STM32, PIC32)
• ¿Cuáles son las evaluaciones pendientes en el curso?
• Según el sílabo: LB3 (Sem12), PC2(Sem14), DD(Sem15) y TF(Sem16)
Preguntas previas
• ¿Cómo se transmiten los datos en el UART?
• Usando el registro UxTXB (U1TXB por ejemplo)
Agenda:
• Resumen de interrupciones vectorizadas
• El Timer1
• Aplicación de reloj en tiempo real con Timer1
• El servomecanismo
• Aplicación de replicación de movimiento entre un potenciómetro y un
servomecanismo
Interrupciones vectorizadas a detalle
• Hay una tabla de interrupciones vectorizadas (IVT)
• Cada fuente de interrupción que posee el microcontrolador se
encuentra en una dirección en particular en la IVT
Interrupciones vectorizadas a
detalle
• La IVT:
• La atención de las
interrupciones en el
orden natural: menor
valor de dirección
mayor prioridad.
Interrupciones vectorizadas a detalle
• Plantilla de funciones de interrupciones:
El Timer 1 en el PIC18F57Q43
• Módulo temporizador de 16
bits
• Empleado para aplicaciones
de RTC
• Función de gate
• Funciona con el CCP1 (modo
captura ó modo comparación)
• Múltiples fuentes de reloj
El Timer 1 en el PIC18F57Q43
• Selección de la fuente de reloj
(registro T1CLK)
El Timer 1 en el PIC18F57Q43
• Oscilador secundario
El CCP1 en el PIC18F57Q43
• Módulo
captura/comparación/PWM
El CCP1 en el PIC18F57Q43
• CCP1 en modo comparación
• Diagrama de bloques
El CCP1 en el PIC18F57Q43
• CCP1 en modo comparación
• Información importante:
Ejercicio: Reloj empleando el Timer1
• Hardware

Implementar el circuito (17:20) y


actualizar el polling
Ejercicio: Reloj empleando el Timer1
• Hardware
Ejercicio: Reloj empleando el Timer1
• A tener de cuenta con respecto a la frecuencia del reloj principal
Ejercicio: Reloj empleando el Timer1

• Timer 1 conectado a CCP1


• CCP1 en modo comparador evento
especial de disparo
• FOSC (HFINTOSC) debe de configurarse a
32MHz
• Prescaler del Timer1: 1:8
• Valor de referencia de comparación del
CCP1: 10000
• Cuando cuentas del Timer1 llegue a
10000 ocurrirá una igualdad y será
reiniciada la cuenta, por lo tanto el rengo
de cuentas será de 0000 a 9999
• Cuando ocurra el match se levantará la
bandera CCP1IF y generará una
interrupción, esto sucederá de manera
repetitiva y regular cada 10ms.
Ejercicio: Reloj empleando el Timer1
• Algoritmo
Ejercicio: Reloj empleando el Timer1

•Cuatro tareas principales a cumplir on


respecto a la base de tiempo:
•HFINTOSC a 32MHz
•Configurar el Timer1
•Configurar el CCP1 (compare mode)
•Configurar las interrupciones
Ejercicio: Reloj empleando el Timer1
• Configuración del Timer1:
Ejercicio: Reloj empleando el Timer1
• Registro T1CLK
Ejercicio: Reloj empleando el Timer1
• Registro T1CON:
Ejercicio: Reloj empleando el Timer1
• Configuración del CCP1:
Ejercicio: Reloj empleando el Timer1
• Registro CCP1CON:
Ejercicio: Reloj empleando el Timer1
• Registro CCP1CON:
Ejercicio: Reloj empleando el Timer1
• Configuración de las interrupciones del CCP1:
Ejercicio: Reloj empleando el Timer1

Abrir MPLABX, crear proyecto nuevo,


llamar librería LCD, crear archivos *.h
y *.c, transcribir el presente código y
hacer pruebas (30 minutos)
Ejercicio: Reloj empleando el Timer1
Equipo para medir la precision de un reloj
electrónico basado en cristal de cuarzo:
Ejercicio: Reloj empleando el Timer1
• Etapa de ajuste de la hora empleando los pulsadores en RB0/INT0 y
RB1/INT1
• Según el circuito implementado, los botones que están en INT0 e INT1
respectivamente son activos en bajo
• Se debe de activar las pullup en ambos puertos (WPUB.0 y WPUB.1)
• Ambas INTs deben de configurarse en flaco descendente (INT0EDG y
INT1EDG deben de ser cero).
Ejercicio: Reloj empleando el Timer1
• Etapa de ajuste de la hora empleando los pulsadores en RB0/INT0 y
RB1/INT1
Ejercicio: Reloj empleando el Timer1
• Configuración de los puertos RB0 y RB1 donde están los pulsadores:
Ejercicio: Reloj empleando el Timer1
• Configuración de las interrupciones de INT0 e INT1:
Ejercicio: Reloj empleando el Timer1
• Código completo final:
Mejora: empleo del modulo I2C-LCD

• Nota: Se debe de emplear la librería I2C_LCD (revisar el repositorio)


Ejercicio: Reloj empleando el Timer1
• Adicionales:
• Cambio de formato 12H/24H
• Sistema de alarma (activación/desactivación)
• Función de cronómetro
• Función de cuenta regresiva
• Medición de temperatura / humedad con DHT11
• Animación de secundero
• Visualización de reloj analógico usando caracteres personalizados
• Visualización de caracteres gigantes en el LCD
• Sincronismo con NTP
• Acelerómetro para encender la pantalla ante un movimiento
El servo
• Elemento electromecánico realimentado (posee un lazo de control cerrado)
• Empleado comúnmente en hobby para radiocontrol de vehículos terrestres,
aéreos y acuáticos, para el control de posición (ángulo)
• Acelerador, freno, dirección vehicular, alerones (flaps), timón, robótica.
• Son clasificados por: tamaño, torque, velocidad, precisión, tamaño
Servos en el hobby profesional
Servos en el hobby profesional
El servo
• Internamente posee un motor realimentado con un potenciómetro y
mecanismo de reducción.
El servo
• Conexión con el microcontrolador:
Specs del miniservo sg90:
• De preferencia usar fuente
externa para los
servomecanismos
El servo
• Modo de funcionamiento:
• Tren de pulsos de periodo 20ms (f=50Hz)
• El ancho del pulso (1.0ms – 2.0ms) positivo determinará la posición del eje del servo
• Al quitarle el tren de pulsos el servo se inactivará
Opciones para obtener la señal requerida
para manipular el servo
• Utilizando retardos
• PWM a través del módulo CCP
• Uso de temporizadores (Timer0)
• PCA9685A (controlador I2C para sistemas con LEDs)
Circuito de prueba para manipular un servo
con el Curiosity Nano PIC18F57Q43
¿Cómo generar la onda cuadrada de 50Hz con
el módulo CCP del PIC18F57Q43?
• El CCP en modo PWM nos permitiría obtener dicha señal cuadrada
• Tenemos que validad si el CCP-PWM permite generar una señal a 50Hz
¿Cómo generar la onda cuadrada de 50Hz con
el módulo CCP del PIC18F57Q43?
• Diagrama de bloques del modo PWM
¿Cómo generar la onda cuadrada de 50Hz con
el módulo CCP del PIC18F57Q43?
• En el modo PWM del CCP, el periodo lo determina Timer2:
¿Cómo generar la onda cuadrada de 50Hz con
el módulo CCP del PIC18F57Q43?
• En el modo PWM del CCP, el periodo lo determina Timer2:
¿Cómo generar la onda cuadrada de 50Hz con
el módulo CCP del PIC18F57Q43?
• En el modo PWM del CCP, el periodo lo determina Timer2:
Resolución del duty cycle de tu PWM

• En consecuencia: No se puede usar el CCP en modo PWM para


controlar un servo porque se va a mover escalonadamente. Cada
cambio de valor en el duty cycle determinado por CCPRx lo va a
realizar en 20 grados angulares del eje del servomecanismo.
Estrategia de usar retardos - __delay_us();
• Usando el botón,
intercambiar entre
0º y 180º el
servomecanismo
El servo no se mueve los 180°!
• Los servos sg90 requieren de un rango mas amplio del ancho del
pulso positivo para poder movilizarse mas grados
Código ejemplo empleando retardos
• Recomendación:
• Empezar con intervalos de 1ms a 2ms en el
ancho positive de la onda cuadrada y luego
disminuir progresivamente el límite inferior
al igual que el límite superior.
• No bajar de 0.5ms del límite inferior ni
supercar los 2.5ms de límite superior
Empleando el Timer0 para temporizar 20ms
del periodo necesario para el servo
• Asumiendo FOSC=32MHz, 16bit
Empleando el Timer0 para temporizar 20ms
del periodo necesario para el servo
• Asumiendo FOSC=32MHz, 16bit
¿Cómo ingreso un número de cuenta inicial que
esta en formato decimal a los registros de cuenta
del Timer0?
La relación T, TON, TOF con cuentas iniciales y
posición de servo.
Relación ADC con temporizado de servo
Cuestionario:
• Ya que se ha analizado el Timer0 y el Timer3 como fuente de tiempo
para obtener los periodos de un servo. Es posible manipular dos
servos, uno con el Timer0 y otro con el Timer3 junto con el manejo
adecuado de las interrupciones.
Asignación Semana 11 2024-1
• Modificar el ejemplo desarrollado anteriormente para que mediante un pulsador
adicional en RB2 y en interrupción externa INT2 permita intercambiar el formato
de visualización de la hora entre 24h y 12h tal como se muestra en las siguientes
imágenes. Tener en cuenta que en el formato 24h se debe de visualizar hasta las
centésimas.

• Carpeta compartida: [Link]


• Formato de nombre de archivo de video de evidencia: EL256_[tu sección]_[tu
primer apellido]_[tu primer nombre]_Sem11.mp4
• Ejemplo de nombre de archivo de video de evidencia: EL256_EL59_Perez_Juan_Sem11.mp4
• Video grabarlo en calidad 720p como máximo y 30 segundos de duración como
máximo (presentación personal, mostrar su código en el MPLABX, mostrar su
implementación y finalmente manipular los pulsadores para verificar los cambios).
Fin de la sesión
• Destinar una hora el sábado y una hora el domingo para repasar el
curso.
Empleando el Timer0 para temporizar 20ms
del periodo necesario para el servo
• Asumiendo FOSC=32MHz
Empleando el Timer0 para temporizar 20ms
del periodo necesario para el servo
• Escalamiento ángulo de servo vs cuentas del Timer0

También podría gustarte