Welcome, Guest

Author Topic: Using timer 0 on Olimexino85 (AtTiny85)  (Read 7708 times)

BobMcNobby

  • Newbie
  • *
  • Posts: 7
  • Karma: +1/-0
Using timer 0 on Olimexino85 (AtTiny85)
« 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

Code: [Select]
/*
 * 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);

}

BobMcNobby

  • Newbie
  • *
  • Posts: 7
  • Karma: +1/-0
Re: Using timer 0 on Olimexino85 (AtTiny85)
« Reply #1 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

Code: [Select]
if (!count++) { PORTB ^= (1<<PINB1); }

works perfectly now

jrigbi234

  • Newbie
  • *
  • Posts: 1
  • Karma: +0/-0
Re: Using timer 0 on Olimexino85 (AtTiny85)
« Reply #2 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.

7eggert

  • Newbie
  • *
  • Posts: 1
  • Karma: +0/-0
Re: Using timer 0 on Olimexino85 (AtTiny85)
« Reply #3 on: August 02, 2016, 11:00:00 AM »

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.