Olimex Support Forum

DUINO => ARDUINO => Topic started by: BobMcNobby on June 12, 2014, 09:15:29 AM

Title: Using timer 0 on Olimexino85 (AtTiny85)
Post by: BobMcNobby on June 12, 2014, 09:15:29 AM
Hi I have been trying to get a timer to fire a compare ISR on the Olimexino85
Similar code works on the UNO etc, but I cant seem to get it to run, I dont think the ISR is being accessed

Here is the code

/*
* OLIMEXINO tiny85_blink_by_timer_interrupt.ino
*/

#include <avr/io.h>
#include <avr/interrupt.h>

void setup()
{
  // Disable global interrupts before initialization
  cli();
  //initialize the PortB Pin1 to output;
  DDRB |= (1<<PINB1);
  //initialize the timer0
  TCCR0A  = (1<<WGM01);      // Put timer0 in CTC mode and clear other bits
  TCCR0B  = (1<<CS02) ;      // Timer0 prescaling 256 and clearing other bits
  TIMSK  |= (1<<OCIE0A);     // enable timer1 compare interrupt
  //set the timer0 count
  OCR0A = 255; // Count 255 cycles before calling ISR interrupt
  PORTB |= (1<<PINB1); // Set PortB Pin1 high to turn on LED
  //initialize global interrupts before beginning loop
  sei();
}

void loop()
{
}

ISR(TIM0_COMPA_vect) {
  //toggle the PortB pin1 to HIGH or LOW
  PORTB ^= (1<<PINB1);

}
Title: Re: Using timer 0 on Olimexino85 (AtTiny85)
Post by: BobMcNobby on June 12, 2014, 09:24:17 AM
My bad, just realised the ISR was being triggered so fast I couldnt see it !!

I this line into the ISR

if (!count++) { PORTB ^= (1<<PINB1); }


works perfectly now
Title: Re: Using timer 0 on Olimexino85 (AtTiny85)
Post by: jrigbi234 on July 22, 2016, 08:40:43 PM
Hi,

I'm trying same thing as you but the code doesnt work for me. How can I know that interrupt is generated correctly.

Here is my code.

#include <avr/io.h>
#include <avr/interrupt.h>

void setup()
{
  DDRB |= 0x00; // Direction Register
  OCR0A = 0xFF;     // Match value for the counter to be compared against
  TCCR0A = 0x02;  // CTC Mode
  TCCR0B = 0x05;  // clock source / 1024, start timer
  //TIFR |= 0x01;   // Clear interrupt flag
  TIMSK |= (1<<OCIE0A);   // enable interrupt for compare A

  sei();
}
void loop()
{
 
}

ISR(TIM0_COMPA_vect)
{
  PORTB ^= 0x00;
}

Please help.
Title: Re: Using timer 0 on Olimexino85 (AtTiny85)
Post by: 7eggert on August 02, 2016, 11:00:00 AM
Quote from: jrigbi234 on July 22, 2016, 08:40:43 PM

ISR(TIM0_COMPA_vect)
{
  PORTB ^= 0x00;
}

"PORTB ^= ..." will toggle every bit you set in "...". In 0x00, there is no bit set, therefore that instruction does nothing.