Table of Contents

Actividad 2. TIMERS. INTS

Temas

Precauciones

Instrucciones generales

  1. Lea completamente todos los pasos de la guía de esta actividad
  2. Anote, responda y agregue al reporte todas las preguntas e instrucciones que se realicen en la guía. Dichas preguntas e instrucciones se pueden denotar al estar enumeradas con el siguiente formato: “1) Anote el puerto asignado a su dispositivo Arduino”
  3. Debe realizar una descripción de lo logrado a lo largo de la actividad, incluyendo las dificultades que se presentaron. Una bitácora de lo sucedido es lo mejor. (Anote no solo lo que usted ejecutó sino también el resultado de lo que ejecuta)
  4. El reporte debe ser entregado mediante correo electrónico al asistente con copia al profesor del curso mediante correo electrónico. Debe utilizar formato PDF.
  5. El correo electrónico del reporte debe llevar el siguiente formato en el “subject”: “IE0624 - Reporte N”, donde N es el número de la actividad realizada.

Evaluación

El reporte debe incluir las siguientes secciones (se incluye el porcentaje de nota de cada sección)

  1. Portada (curso, semestre, año, fecha, número y nombre de práctica, integrantes). 2%
  2. Bitácora de trabajo describiendo el resultado de todos los pasos seguidos de la guía incluyendo dificultades y/o situaciones inesperadas. 30%
  3. Capturas o fotografías de puntos importantes realizadas durante la actividad (el circuito ensamblado, resultados observables en el osciloscopio, etc) 20%
  4. Respuestas al cuestionario de la guía. 20%
  5. Todo el código fuente de todos los programas utilizados a lo largo de la actividad. Debe agregar al inicio del código una descripción sobre dicho código (a qué parte de la práctica corresponde, la función que cumple dicho código). 20%
  6. Referencias utilizadas en caso de acceder a alguna fuente de información de Internet o bibliográfica durante la realización de la actividad. 8%

Guía de laboratorio

Parte 1. Lectura de datos digitales (uso de un botón)

Circuito de botón sencillo (botón resistencia)

Circuito de botón con eliminación de rebote analógico

Circuito de botón para Arduino

  void setup(){
    //configure pin2 as an input and enable the internal pull-up resistor
    pinMode(2, INPUT_PULLUP);
    pinMode(13, OUTPUT); 
 
  }
 
  void loop(){
    //read the pushbutton value into a variable
    int sensorVal = digitalRead(2);
 
    // Keep in mind the pullup means the pushbutton's
    // logic is inverted. It goes HIGH when it's open,
    // and LOW when it's pressed. Turn on pin 13 when the 
    // button's pressed, and off when it's not:
    if (sensorVal == HIGH) {
      digitalWrite(13, LOW);
    } 
    else {
      digitalWrite(13, HIGH);
    }
  }

Parte 2. TIMER

  #define ledPin 13
 
  void setup()
  {
    pinMode(ledPin, OUTPUT);
 
    // initialize timer1 
    noInterrupts();           // disable all interrupts
    TCCR1A = 0;
    TCCR1B = 0;
    TCNT1  = 0;
 
    OCR1A = 32000;            // compare match register
    TCCR1B |= (1 << CS12);    // 256 prescaler 
    TIMSK1 |= (1 << OCIE1A);  // enable timer compare interrupt
    TIMSK1 |= (1 << TOIE1);   // enable timer overflow interrupt
    interrupts();             // enable all interrupts
  }
 
  ISR(TIMER1_COMPA_vect)          // timer compare interrupt service routine
  {
    digitalWrite(ledPin, digitalRead(ledPin) ^ 1);   // toggle LED pin
  }
 
  ISR(TIMER1_OVF_vect)        // interrupt service routine that wraps a user defined function supplied by attachInterrupt
  {
    TCNT1 = 0;            // preload timer
    digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
  }
 
  void loop()
  {
 
  }

Parte 3. Interrupción con señal externa como fuente (utilizando un botón)

  #define ledPin = 13;
  #define interruptPin 2
  #define interrupt 0
 
  void setup() {
    pinMode(ledPin, OUTPUT);
    pinMode(interruptPin, INPUT_PULLUP);
    attachInterrupt(interrupt, blink, RISING);
  }
 
  void loop() {
  }
 
  void blink() {
    digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
  }

Parte 4. Programa problema (dos blinking simultáneos con variación de frecuencia utilizando interrupción externa)

Referencias

http://www.labbookpages.co.uk/electronics/debounce.html

http://electronics.stackexchange.com/questions/66764/how-the-capacitor-works-in-a-debouncing-circuit

https://oscarliang.com/arduino-timer-and-interrupt-tutorial/

http://playground.arduino.cc/Code/Timer1

http://forum.arduino.cc/index.php?topic=43333.0

http://www.robotshop.com/letsmakerobots/arduino-101-timers-and-interrupts

https://oscarliang.com/arduino-timer-and-interrupt-tutorial/

https://www.arduino.cc/en/Reference/AttachInterrupt