Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Experimentos con interrupciones en Arduino: Sistemas Digitales y Microcontroladores, Ejercicios de Circuitos Digitales

En este documento se presentan diferentes experimentos relacionados con la programación de interrupciones en Arduino, específicamente en el contexto de Sistemas Digitales y Microcontroladores. El estudiante Julio Jiménez, de la carrera de Ingeniería Automotriz de la Universidad de las Fuerzas Armadas ESPE, realiza una serie de pruebas modificando la instrucción attachInterrupt() y observa el resultado de cada cambio. Además, se incluyen instrucciones para diseñar un cronómetro con botones de inicio-continuar, paro y reset, así como un contador ascendente utilizando la interrupción del Timer1.

Tipo: Ejercicios

2020/2021

Subido el 27/03/2021

juan-ramirez-78
juan-ramirez-78 🇪🇨

3 documentos

1 / 15

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
UNIVERSIDAD DE LAS FUERZAS ARMADAS “ESPE”
SISTEMAS DIGITALES Y MICROCONTROLADORES
ESTUDIANTE: JIMÉNEZ JULIO
CARRERA: INGENIERÍA AUTOMOTRIZ
DOCENTE: ING. SIXTO REINOSO
NRC: 3535
UNIVERSIDAD DE LAS FUERZAS ARMADAS ESPE-L
SISTEMAS DIGITALES Y MICROCONTROLADORES
INGENIERIA AUTOMOTRIZ
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Vista previa parcial del texto

¡Descarga Experimentos con interrupciones en Arduino: Sistemas Digitales y Microcontroladores y más Ejercicios en PDF de Circuitos Digitales solo en Docsity!

UNIVERSIDAD DE LAS FUERZAS ARMADAS “ESPE”

SISTEMAS DIGITALES Y MICROCONTROLADORES

ESTUDIANTE: JIMÉNEZ JULIO

CARRERA: INGENIERÍA AUTOMOTRIZ

DOCENTE: ING. SIXTO REINOSO

NRC: 3535

UNIVERSIDAD DE LAS FUERZAS ARMADAS ESPE-L SISTEMAS DIGITALES Y MICROCONTROLADORES INGENIERIA AUTOMOTRIZ

TAREA 3

1_En el programa 1, cambie la instrucción: attachInterrupt(digitalPinToInterrupt(intPin), interrupt, RISING); Cambie RISING por LOW, HIGH, CHANGE, FALLING, respectivamente. Compile para cada caso y observe como opera la interrupción. Explique el resultado para cada caso. CÓDIGO: const int LED1 = 13; const int LED2 = 12; const int IntPin = 2; volatile int state = LOW; void setup () { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(IntPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(IntPin), interrupt, RISING); } void loop() { //LED 2 TITILA - PROGRAMA PRINCIPAL digitalWrite(LED2, HIGH); delay(2000); digitalWrite(LED2, LOW); delay(2000); } void interrupt() { state = digitalRead(LED1);

//LED 2 TITILA - PROGRAMA PRINCIPAL

digitalWrite(LED2, HIGH); delay(2000); digitalWrite(LED2, LOW); delay(2000); } void interrupt() { state = digitalRead(LED1); state =! state; digitalWrite(LED1, state); } CIRCUITO Cuando se hace el cambio de RISING por LOW la interrupción se realizará solo cuando el pin en este caso el 2, este solo y únicamente en estado bajo.

  • Cambie RISING por HIGH. CÓDIGO const int LED1 = 13; const int LED2 = 12; const int IntPin = 2;

volatile int state = LOW; void setup () { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(IntPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(IntPin), interrupt, HIGH); } void loop() { //LED 2 TITILA - PROGRAMA PRINCIPAL digitalWrite(LED2, HIGH); delay(2000); digitalWrite(LED2, LOW); delay(2000); } void interrupt() { state = digitalRead(LED1); state =! state; digitalWrite(LED1, state);

void loop() { //LED 2 TITILA - PROGRAMA PRINCIPAL digitalWrite(LED2, HIGH); delay(2000); digitalWrite(LED2, LOW); delay(2000); } void interrupt() { state = digitalRead(LED1); state =! state; digitalWrite(LED1, state); } CIRCUITO

Al utilizar la función CHANGE la interrupción se ejecutará cunado el pin cambie de estados ya sea de alto a bajo o de bajo a alto.

  • Cambie RISING por FALLING. CÓDIGO const int LED1 = 13; const int LED2 = 12; const int IntPin = 2; volatile int state = LOW; void setup () { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(IntPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(IntPin), interrupt, FALLING); }

En la instrucción FALLING se observa que la interrupción realizada por el pin 2, cambiara de estado solo cuando pase de alto a bajo.

2. Diseñe el circuito y el programa para realizar un cronómetro con botones de inicio- continuar, paro, reset. Utilizar una interrupción para el reset y otra para parar. #include <LiquidCrystal.h> LiquidCrystal LCD (12, 11, 7, 6, 5, 4); long int mm = 00, ss = 00, ms = 00, ms1 = 0, s1 = 0, m1 = 0; const int intPin0=1; const int intPin1=2; const int intPin2=3; int estado=1; int p1=0; volatile int estado1=0; volatile int estado2=0; void setup() { LCD.begin(16, 2); //Tipo de LCD pinMode(intPin0,INPUT_PULLUP); pinMode(intPin1,INPUT_PULLUP); pinMode(intPin2,INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(intPin1),interrupt,RISING); attachInterrupt(digitalPinToInterrupt(intPin2),interrupt1,RISING); } void loop() { estado=digitalRead(intPin0); if(estado==0) { p1=1; }

LCD.setCursor(4, 1); delay(10); if(p1==1){ if ( ms <= 100) { if (mm <= 9) { LCD.print(m1); } LCD.print(mm); LCD.print(":"); if (ss <= 9) { LCD.print(s1); } LCD.print(ss); LCD.print(":"); if (ms <= 9) { LCD.print(ms1); } LCD.print(ms); ms++; } if (mm == 60) { mm = 0; } if (ms == 60) { ss++; ms = 0; } if (ss == 60 ) { mm++;

3. Utilizando la interrupción del Timer1, diseñe un contador ascendente, que cambie los valores cada 500 ms. No debe haber ningún delay. #include "TimerOne.h" const int decoder[]={64, 121, 36, 48, 25, 18, 3, 120, 0, 24}; int c=0; int P1=1; void setup() { int pin; for(pin=7; pin<=13; pin++) { pinMode(pin, OUTPUT); } pinMode (1,INPUT_PULLUP); Timer1.initialize(300000); Timer1.attachInterrupt(callback); } void callback()

display7(decoder[c]); c++; if(c==10) { c=0; } } void loop(){ P1=digitalRead(1); if (P1==LOW){ c=0; } } void display7(int cant) { digitalWrite(7, bitRead(cant, 0)); digitalWrite(8, bitRead(cant, 1)); digitalWrite(9, bitRead(cant, 2)); digitalWrite(10, bitRead(cant, 3)); digitalWrite(11, bitRead(cant, 4)); digitalWrite(12, bitRead(cant, 5)); digitalWrite(13, bitRead(cant, 6)); }