Обсуждаем контроллеры компании Atmel.
Ответить

Atmega8 использование HC-SR05 без прерываний

Чт ноя 22, 2018 15:09:35

Использую мегу8, не могу использовать прерывания int0 и int1, как читать длину импульса с датчика?

Re: Atmega8 использование HC-SR05 без прерываний

Чт ноя 22, 2018 15:35:21

Захват от таймера и это лучше int.

Re: Atmega8 использование HC-SR05 без прерываний

Чт ноя 22, 2018 16:10:56

Захват от таймера

Как это реализовать?

Re: Atmega8 использование HC-SR05 без прерываний

Чт ноя 22, 2018 16:40:21

Я не очень по-русски выразился :oops: .
Почитайте про режимы таймера, в частности режим захват.

Re: Atmega8 использование HC-SR05 без прерываний

Пт ноя 23, 2018 09:39:48

Не фурычит, вот так инициализирую

Код:
DDRB |= (1<<DDRB1);
TCCR1B |= (1<<ICNC1)|(1<<CS11)|(1<<CS10);
TIMSK |= (1<<TICIE1);
sei();

Вот так отлавливаю
Код:
ISR(TIMER1_CAPT_vect)
{
   static int tickStart = 0, tickFinish = 0;
   if(tickStart == 0)
      tickStart = ICR1;
   else
   {
      tickFinish = ICR1;
      pulse = (tickFinish-tickStart)*4; // tick = 0.000004s = 0.004ms = 4us
      tickFinish = tickStart = 0;
      cli();
   }
}


То есть в pulse должно лежать сколько микро секунд был импульс, но датчик вообще не адекватно работает, хотя на осциллографе всё вроде как хорошо

Re: Atmega8 использование HC-SR05 без прерываний

Пт ноя 23, 2018 10:06:56

Код:
#define MAX_PULSE 1000 /* тут надо указать предельно возможную длительность импульса в тиках таймера */
ISR(TIMER1_CAPT_vect){
   static unsigned int tickStart, tickFinish;
   tickFinish = ICR1;
   pulse = tickFinish-tickStart;
   if(pulse > MAX_PULSE) pulse = 0x10000-pulse;
   pulse *= 4;// tick = 0.000004s = 0.004ms = 4us
   tickStart = tickFinish;
}
первый "замер", естественно, даст ошибочный результат, все последующие - правильный.

переводить тики таймера в микросекунды - обязательно? все расчеты в тиках таймера вести в программе не разумнее ли?

Re: Atmega8 использование HC-SR05 без прерываний

Пт ноя 23, 2018 10:25:32

daaar
PB0/ICP1- лапа для захвата. Не понимаю в этих кыржиках, но не вижу настройки захвата на фронт в начале импульса и захват спада импульса в конце переключением бита ICES1 регистра TCCR1B

Re: Atmega8 использование HC-SR05 без прерываний

Пт ноя 30, 2018 12:30:59

Проще было поставить мегу 328, что и сделал

Re: Atmega8 использование HC-SR05 без прерываний

Пт ноя 30, 2018 14:21:01

Там же никаких глобальных отличий в плане архитектуры

Re: Atmega8 использование HC-SR05 без прерываний

Сб дек 08, 2018 15:38:15

Там же никаких глобальных отличий в плане архитектуры

Есть общее прерывание для ножек PCINT с ним жить проще
Ответить