PRAC11
PRAC11
PRAC11
DOCENTE:
INTEGRANTES BOLETA
MEJÍA ROMERO ARMANDO 2020302845
KEVIN FLORES DE JESUS
ENTREGA: 25/06/2024
Contenido
MARCO TEÓRICO...................................................................................................................................... 4
PROCEDIMIENTO ...................................................................................................................................... 6
PRACTICA 11 A ...................................................................................................................................... 6
Código ................................................................................................................................................... 6
Simulación ............................................................................................................................................ 7
Implementación..................................................................................................................................... 8
PRACTICA 11B ....................................................................................................................................... 9
Código ................................................................................................................................................... 9
Simulación .......................................................................................................................................... 11
Implementación................................................................................................................................... 11
PRACTICA 11C ..................................................................................................................................... 12
Código ................................................................................................................................................. 12
Simulación .......................................................................................................................................... 13
PRACTICA 11D ..................................................................................................................................... 13
Código ................................................................................................................................................. 13
Simulación .......................................................................................................................................... 14
Implementación................................................................................................................................... 14
PRACTICA 11E ...................................................................................................................................... 15
Código ................................................................................................................................................. 15
Simulación .......................................................................................................................................... 17
Implementación................................................................................................................................... 18
PRACTICA 11F ...................................................................................................................................... 20
Código ................................................................................................................................................. 20
Simulación .......................................................................................................................................... 22
Implementación................................................................................................................................... 22
EVIDENCIA ............................................................................................................................................... 24
CONCLUSIONES ...................................................................................................................................... 30
Índice de imagenes
Imagen 1.Código práctica 11A .................................................................................................................... 6
Imagen 2. Simulación práctica 11a .............................................................................................................. 7
Imagen 3. Implementación 1 práctica 11a ................................................................................................... 8
Imagen 4. Implementación 2 práctica 11a ................................................................................................... 8
Imagen 5. Código práctica 11b .................................................................................................................... 9
Imagen 6. Simulación práctica 11b ............................................................................................................ 11
Imagen 7. Implementación 1 práctica 11b ................................................................................................. 11
Imagen 8. implementación 2 práctica 11b ................................................................................................. 11
Imagen 9. Código práctica 11c................................................................................................................... 12
Imagen 10. Simulación práctica 11c .......................................................................................................... 13
Imagen 11. Código práctica 11d ................................................................................................................ 13
Imagen 12. Simulación práctica 11d .......................................................................................................... 14
Imagen 13. Implementación 1 práctica 11d ............................................................................................... 14
Imagen 14. implementación 2 práctica 11d ............................................................................................... 15
Imagen 15. Código práctica 11e................................................................................................................. 15
Imagen 16. Simulación práctica 11e .......................................................................................................... 17
Imagen 17. Implementación 1 práctica 11e ............................................................................................... 18
Imagen 18. Implementación 2 práctica 11e ............................................................................................... 18
Imagen 19. Implementación 3 práctica 11e ............................................................................................... 19
Imagen 20. Código práctica 11f ................................................................................................................. 20
Imagen 21. Simulación práctica 11f........................................................................................................... 22
Imagen 22. Implementación 1 práctica 11f ................................................................................................ 22
Imagen 23. Implementación 2 práctica 11f ................................................................................................ 23
Imagen 24. Implementación 3 prácctica 11f .............................................................................................. 23
Imagen 25. Evidencia 1.............................................................................................................................. 24
Imagen 26. Evidencia 2.............................................................................................................................. 25
Imagen 27. Evidencia 3.............................................................................................................................. 26
Imagen 28. Evidencia 4.............................................................................................................................. 27
Imagen 29. Evidencia 5.............................................................................................................................. 28
Imagen 30. Evidencia 6.............................................................................................................................. 30
MARCO TEÓRICO
Tipos de interrupciones
avr/io.h
La biblioteca avr/io.h es una parte fundamental del entorno de desarrollo AVR-GCC para
microcontroladores AVR de Atmel (ahora parte de Microchip Technology). Proporciona acceso
a todos los registros de entrada/salida (E/S)
Ejemplo:
Define todos los registros y bits específicos del microcontrolador, como PORTB, DDRB,
TCCR0B, TIMSK0, entre otros. Estas definiciones permiten que el código sea más legible y
portable.
• Configuración de puertos:
Permite configurar los puertos de E/S, como definir si un pin es de entrada o salida.
• Configuración de periféricos:
Proporciona acceso a la configuración de periféricos internos del microcontrolador, como
temporizadores, contadores, ADC (Convertidor Analógico a Digital), USART
(Transmisión/Receptor Universal Sincrónico/Asincrónico), etc.
avr/interrupt.h
Permite definir las funciones que se ejecutarán cuando ocurra una interrupción específica. La
macro ISR(vector) se utiliza para declarar una rutina de servicio de interrupción.
PROCEDIMIENTO
PRACTICA 11 A
Código
#include<avr/io.h>
#include<avr/interrupt.h>
Estas bibliotecas incluyen las definiciones necesarias para manejar los registros de E/S y las
interrupciones del microcontrolador.
int main(){
// Configuración inicial
TCCR0B |= (1<<CS00 | 1<<CS02); // Prescaler a
TIMSK0 |= (1<< TOIE0); // Habilita el sobreflujo Reg:TOMSK0
sei(); // Función que habilita INT globales
DDRB |= (1<<PB0); // Configura PB0 como salida
PORTB &= ~(1<<PB0); // Asegura que PB0 comienza en bajo
while(1){
// Código principal que se ejecuta repetidamente
}
return 0;
}
• TCCR0B |= (1<<CS00 | 1<<CS02); Configura el prescaler del temporizador 0. Esta
línea establece el prescaler a 1024, lo que significa que el temporizador contará a una
velocidad más lenta, permitiendo que la interrupción de sobreflujo ocurra a intervalos
más largos.
• TIMSK0 |= (1<<TOIE0);: Habilita la interrupción de sobreflujo del temporizador 0.
• sei();: Habilita las interrupciones globales.
• DDRB |= (1<<PB0);: Configura el pin PB0 como salida.
• PORTB &= ~(1<<PB0);: Asegura que el pin PB0 comience en bajo.
ISR(TIMER0_OVF_vect){
PORTB ^= (1<<PB0); // Alterna el estado del pin PB0
TIFR0 |= (1 << TOV0); // Limpia la bandera de interrupción de sobreflujo
}
• PORTB ^= (1<<PB0);: Alterna el estado del pin PB0. Si estaba en alto, lo pone en bajo y
viceversa. Esto crea un parpadeo en un LED conectado a PB0.
• TIFR0 |= (1 << TOV0);: Limpia la bandera de interrupción de sobreflujo del
temporizador 0 para permitir que la interrupción se dispare nuevamente.
Simulación
#include <avr/io.h>
#include <avr/interrupt.h>
#define LDT PD4
Estas bibliotecas proporcionan acceso a las definiciones y funciones necesarias para trabajar con
los registros de E/S y las interrupciones en microcontroladores AVR. #define LDT PD4 define
el pin PD4 como LDT para que sea más fácil de leer en el código.
int main() {
// Variables y configuraciones iniciales
uint8_t timerOverFlowCont = 0; // Contador de desbordamientos del
temporizador
DDRD = 0xFF; // Configura todo el puerto D como salida
TCNT0 = 0x00; // Inicializa el contador del
temporizador 0 en 0
TCCR0B |= (1 << CS00 | 1 << CS02); // Configura el prescaler del
temporizador 0 a 1024
• while ((TIFR0 & 0x01) == 0): Este bucle se ejecuta mientras la bandera de
interrupción de desbordamiento del temporizador (TOV0) no esté establecida. Sin
embargo, la lógica parece incorrecta aquí ya que la bandera TOV0 debería ser revisada
fuera del bucle para una lógica correcta.
• TCNT0 = 0x00;: Reinicia el contador del temporizador a 0 en cada iteración.
• TIFR0 = 0x01;: Limpia la bandera de interrupción de desbordamiento del temporizador
estableciendo el bit TOV0.
• timerOverFlowCont++;: Incrementa el contador de desbordamientos del temporizador.
• if (timerOverFlowCont >= 6): Si el contador alcanza 6, alterna el estado del pin LDT
(PD4).
o PORTD ^= (0x01 << LDT);: Alterna el estado del pin PD4 (LDT).
o timerOverFlowCont = 0;: Reinicia el contador de desbordamientos.
Simulación
Implementación
Configura el temporizador 0 en modo normal con un prescaler de 1024. Esto hace que el
temporizador cuente con una frecuencia reducida.
while (1) {
TCNT0 = 0;
if ((milis += 10) >= RETARDO) {
// Cambia el estado del LED conectado a PB0
PORTB ^= (1 << PB0);
// Reinicia el contador de milisegundos
milis = 0;
}
_delay_ms(10); // Espera de 10 milisegundos
}
• TCNT0 = 0;: Reinicia el contador del temporizador.
• milis += 10: Incrementa el contador de milisegundos en 10 milisegundos.
• if ((milis += 10) >= RETARDO): Cuando han pasado 1000 milisegundos, alterna el
estado del pin PB0, haciendo que el LED conectado parpadee.
• _delay_ms(10);: Espera de 10 milisegundos entre cada iteración del bucle para cumplir
con el intervalo deseado.
Simulación
PRACTICA 11D
Código
• OCR1A = 1562;: Establece el valor de comparación para generar un retraso aproximado de 100 ms
(detallado más abajo).
• while ((TIFR1 & (1 << OCF1A)) == 0);: Espera hasta que se produzca un
desbordamiento del temporizador T1.
• PORTD ^= (1 << LDT);: Alterna el estado del pin PD5 utilizando la operación XOR para
alternar el bit.
• TCNT1 = 0;: Reinicia el contador del temporizador 1 para el próximo ciclo.
• TIFR1 |= (1 << OCF1A);: Limpia el indicador de desbordamiento del temporizador T1.
Simulación
Implementación
PRACTICA 11E
Código
#include <TimerOne.h>
void setup(void) {
pinMode(led, OUTPUT); // Configura el pin del LED como salida
Timer1.initialize(250000); // Inicializa el temporizador para
disparar cada 250 ms
Timer1.attachInterrupt(ISR_Blink); // Asocia la interrupción a la función
ISR_Blink
Serial.begin(9600); // Inicializa la comunicación serial a
9600 baudios
}
• pinMode(led, OUTPUT);: Configura el pin del LED (pin 13) como salida.
• Timer1.initialize(250000);: Inicializa el temporizador para interrumpir cada 250 ms
(1/4 de segundo).
• Timer1.attachInterrupt(ISR_Blink);: Asocia la función ISR_Blink como la rutina
de interrupción para el temporizador.
• Serial.begin(9600);: Inicia la comunicación serial a 9600 baudios para enviar datos a
la computadora.
void loop(void) {
unsigned long N; // Variable local para almacenar
blinkCount
Serial.print("Ciclos = ");
Serial.println(N); // Imprime el valor actual de blinkCount
por el puerto serial
void ISR_Blink() {
ledState = !ledState; // Invierte el estado del LED (lo apaga
si está encendido y viceversa)
blinkCount++; // Incrementa el contador de parpadeos
del LED
}
• ISR_Blink(): Esta función se ejecuta cada vez que el temporizador 1 genera una
interrupción.
• ledState = !ledState;: Alterna el estado del LED cada vez que se llama a la
interrupción, lo que hace que parpadee.
• blinkCount++;: Incrementa el contador blinkCount, registrando cuántas veces ha
parpadeado el LED.
Simulación
•
• elapsedTime: Almacena el tiempo transcurrido desde la última ejecución de la función
onTimer().
• previousTime: Guarda el tiempo anterior, utilizado para calcular elapsedTime.
void onTimer() {
static boolean state = HIGH;
elapsedTime = millis() - previousTime;
Serial.print(F("Set LED 13 : "));
if (state) {
Serial.print(F("ON"));
} else {
Serial.print(F("OFF"));
}
Serial.print(F(" - "));
Serial.print(elapsedTime);
Serial.println(F("ms"));
digitalWrite(13, state);
state = !state;
previousTime = millis();
}
• state: Variable estática que alterna entre HIGH y LOW, controlando el estado del LED.
• elapsedTime: Calcula el tiempo transcurrido desde la última vez que se ejecutó
onTimer().
• Imprime mensajes en serie que indican el estado del LED (ON o OFF) y el tiempo
transcurrido.
• digitalWrite(13, state): Cambia el estado del LED en el pin 13 según state.
• previousTime = millis(): Actualiza previousTime con el tiempo actual para el
próximo ciclo.
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
cli(); // Deshabilita todas las interrupciones
TCCR2A = (1 << WGM21) | (0 << WGM20); // Modo CTC
TIMSK2 = (1 << OCIE2A); // Habilita la interrupción local OCIE2A
TCCR2B = (0 << WGM22) | (1 << CS22) | (1 << CS21); // Frecuencia 16Mhz /
256 = 62500
OCR2A = 250; // 250 * 125 = 31250 = 16Mhz / 256 / 2
sei(); // Habilita todas las interrupciones
}
ISR(TIMER2_COMPA_vect) {
static int counter = 0;
if (++counter >= 125) { // 125 * 4 ms = 500 ms
counter = 0;
onTimer(); // Llama a la función onTimer() cada 500 ms
}
}
• Esta función se ejecuta cada vez que el temporizador Timer2 alcanza el valor de
comparación (OCR2A).
• counter: Contador utilizado para contar las interrupciones y determinar cuándo llamar a
onTimer().
• Llama a onTimer() cada 500 ms aproximadamente (cada 125 veces que se llama esta
función).
• El bucle loop() está vacío porque la lógica de parpadeo del LED y la gestión del tiempo se
realiza a través de las interrupciones del temporizador
Simulación
Implementación
este código configura el Timer2 del Arduino Uno para generar interrupciones periódicas cada 500 ms.
Cuando se produce una interrupción, se llama a la función onTimer(), que cambia el estado del LED en
el pin 13 y muestra mensajes en serie sobre el estado del LED y el tiempo transcurrido desde la última
ejecución. Este método utiliza interrupciones para permitir que el programa principal (loop()) funcione
de manera eficiente sin esperar activamente en un bucle de retardo.
EVIDENCIA
CONCLUSIONES