Перейти к содержанию
    

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

TCCR0=0x19;

delay_ms(20)

TCCR0=0x00;

delay_ms(20)

}

Уж сколько раз твердили миру - нельзя в прерываниях звать delay_ms (и прочие разные delay)!

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уж сколько раз твердили миру - нельзя в прерываниях звать delay_ms (и прочие разные delay)!

 

То есть вариант там где было Modulation более правильный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уж сколько раз твердили миру - нельзя в прерываниях звать delay_ms (и прочие разные delay)!

Совсем-совсем-никогда?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В принципе мой барьер сейчас ловит, если я прохожу, загорается светодиод. Конечно если быстро пронести что нибудь перекрыв луч то не среагирует то мне этого и не нужно. Остановился на коде который добавил во вложении в связи с отсутствием понимания графиков....) Если можно покритикуйте код. Спасибо

code.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Совсем-совсем-никогда?

Иногда можно, но у того, кто понимает 'когда можно', таких вопросов не возникает :)

 

 

Если можно покритикуйте код.
В коде отсутствует кусок main'а

if внутри while'а явно неправильный (компилятор должен был обругаться)

Уберите delay из прерывания. Например так:

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
static char v=0x19;
TCCR0=v;
v^=0x19;
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо за модернизацию. , щас попробую на железе. А как в вашем варианте выставлять задержку , между посылками?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как в вашем варианте выставлять задержку , между посылками?

В моем варианте по каждому тику таймера 0 происходит включение (а по следующему - выключение) посылки

Если на выходе нужен не меандр (заполненный 36KHz), то нужен дополнительный счетчик (внутри прерывания)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моем варианте по каждому тику таймера 0 происходит включение (а по следующему - выключение) посылки

Если на выходе нужен не меандр (заполненный 36KHz), то нужен дополнительный счетчик (внутри прерывания)

 

 

Мне как раз и нужен меандр 36 кгц. Спаибо

 

 

А сколько раз в секунду тикает таймер?

Изменено пользователем ururur

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А сколько раз в секунду тикает таймер?
Не знаю, сколько раз он у вас тикает. Это же ваша программа, вам должно быть виднее :rolleyes:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...