Arduino код на Attiny13

gzp13
Offline
Зарегистрирован: 06.04.2015
volatile int length = 0;
volatile int start_time = 0;

void setup() {
Serial.begin(9600);
// Привязываем к Pin2 прерывание по фронту сигнала
attachInterrupt(0, rising, RISING);
}

void loop() { }

//Обработчик прерывания на возрастание сигнала
void rising() {
// Привязываем к Pin2 прерывание по срезу сигнала
attachInterrupt(0, falling, FALLING);
//сохраняем значение времени начала импульса
start_time = micros();
}

//Обработчик прерывания по срезу сигнала
void falling() {
// Привязываем к Pin2 прерывание по фронту сигнала
attachInterrupt(0, rising, RISING);
//сохраняем значение длительности импульса
length = micros() - start_time;
if (length<1000) Serial.println("werty");
else Serial.println(length);
}

Подскажите пожалуйста. как можно этот код подогнать под Attiny13. Пин Attiny13 на внешнее прерывание PB1. Не пойму как в Attiny13 сделать прерывание по спаду.По фронту вызываем вектор прерывания ISR(INT0_vect) где выполняем start_time = micros();, а как прописать прерывание по спаду не понимаю.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Тут целая тема есть про attiny и там же масса примеров в том числе и по прерыванию

gzp13
Offline
Зарегистрирован: 06.04.2015
#define F_CPU 1200000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile int length = 0;
volatile int start_time = 0;
ISR(INT0_vect)
{
while (PINB & (1<<PB1)) //пока высокий уровень
 { 
  length = micros() - start_time;//считаем длительность импульса до спада
}
 if (length<1200) PORTB |= (1 << PB4);  
if (length>1500) PORTB &= ~ (1 << PB4);
}
int main()
{
  DDRB |= (1 << PB4);   // OUTPUT
  PORTB &= ~ (1 << PB4);
  DDRB &= ~(1 << PB1);  // INPUT
  PORTB |= (1 << PB1);
  rising();
   while (1)
  {
      }
  } 

void rising() {
MCUCR |= (1 << ISC01) | (1 << ISC00); //включаем прерывание по нарастающему фронту
 GIMSK |= (1 << INT0);        //разрешаем прерывание
 start_time = micros();
sei(); 
}
}

Не понимаю, почему этот код не работает? Посмотрите пожалуйста в чем ошибка?