Например TDA7294

Форум РадиоКот • Просмотр темы - Atmega8 и прерывания компаратора
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 05, 2025 23:06:25

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Atmega8 и прерывания компаратора
СообщениеДобавлено: Вт сен 15, 2009 19:47:13 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 18, 2006 17:14:15
Сообщений: 123
Рейтинг сообщения: 0
Подскажите,пожалуйста,никак не могу разобраться, вывожу значение TimeImp на LCD и при первом и иногда 2-м импульсе выводятся разные значения,а с 3-го уже постоянна TimeImp, как можно сделать вывод точного значения при первом импульсе :?

Код:
Chip type           : ATmega8
Program type        : Application
Clock frequency     : 4,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/
unsigned  int clock,EdgeF,STimeImp[5],TimeImp,EdgeR;
char k;
#include <mega8>
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd>
#include<stdio>
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1H=0xff;
TCNT1L=0xce;
clock++;  //прерывания каждые 100 микросекунд
}
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{

TCNT1H=0xff;
TCNT1L=0xce; 
if (k==0){
// Place your code here
EdgeR=ICR1;
k=1; 
TCCR1B=0b00000010; //прерывания по низкому уровню
}else{
EdgeF=ICR1;
k=0;
TimeImp=EdgeF-EdgeR;
TCCR1B=0b01000010;  //прерывания по высокому уровню
}
}
void main(void)
{
TCCR1A=0x00;
TCCR1B=0b01000010;  //прерывание по Rising Pulse
TCNT1H=0xff;
TCNT1L=0xce;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x24;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
#asm("sei")
while (1)
      {
      sprintf(STimeImp,"%u",TimeImp);
      lcd_gotoxy(0,1);
      lcd_puts(STimeImp); 
      };
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 15, 2009 19:56:36 
Друг Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 96
Зарегистрирован: Пн июл 13, 2009 14:37:39
Сообщений: 3961
Откуда: Московская область, наукоград.....
Рейтинг сообщения: 0
Наверное только обрабатывая 2 события.(TimerIcp & INTi). Перестройка в прерывании не всегда хороша...

_________________
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 15, 2009 20:20:31 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 18, 2006 17:14:15
Сообщений: 123
Рейтинг сообщения: 0
Meteor писал(а):
Наверное только обрабатывая 2 события.(TimerIcp & INTi). Перестройка в прерывании не всегда хороша...

А вот у меня вопрос, в программе же сначала тратится какое-то время на инициализацию или нет?Эт не может как-то повлиять на определение длительности первых импульсов? :roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 15, 2009 20:26:42 
Друг Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 96
Зарегистрирован: Пн июл 13, 2009 14:37:39
Сообщений: 3961
Откуда: Московская область, наукоград.....
Рейтинг сообщения: 0
boobonick писал(а):
у меня вопрос, в программе же сначала тратится какое-то время на инициализацию или нет?Эт не может как-то повлиять на определение длительности первых импульсов? :roll:

На 1-й может и да.Предделитель на сколько установлен?

_________________
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 15, 2009 20:34:24 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 18, 2006 17:14:15
Сообщений: 123
Рейтинг сообщения: 0
Meteor писал(а):
boobonick писал(а):
у меня вопрос, в программе же сначала тратится какое-то время на инициализацию или нет?Эт не может как-то повлиять на определение длительности первых импульсов? :roll:

На 1-й может и да.Предделитель на сколько установлен?

Предделитель установлен на 8. Хотя,там второй подсчет импульса ненамного от третьего отличается,но вот первый ооочень далеко.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 15, 2009 21:29:35 
Друг Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 96
Зарегистрирован: Пн июл 13, 2009 14:37:39
Сообщений: 3961
Откуда: Московская область, наукоград.....
Рейтинг сообщения: 0
Сложно сказать... Тут еще обин момент, у Вас может налагаются на старте прерывания от переполнения с захватом? Попробуйте "подготовить" таймер, а запуск проводить перед вечным циклом.(в тимск бит разрешения работы ставить)
PS Это реальное железо (МК, ЛСД) или имитация в программе (я про наблюдения Ваши)?

_________________
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср сен 16, 2009 10:05:27 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 18, 2006 17:14:15
Сообщений: 123
Рейтинг сообщения: 0
Meteor писал(а):
Сложно сказать... Тут еще обин момент, у Вас может налагаются на старте прерывания от переполнения с захватом? Попробуйте "подготовить" таймер, а запуск проводить перед вечным циклом.(в тимск бит разрешения работы ставить)
PS Это реальное железо (МК, ЛСД) или имитация в программе (я про наблюдения Ваши)?


Я в протеусе эмулирую,да прерывания от переполнения с захватом.
Вот сейчас только понял,кажется, когда пошел импульс, в первом прерывании с захватом происходит подсчет только Edge Rising,а только при втором импульсе идет подсчет EdgeR-EdgeF


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб сен 19, 2009 17:46:13 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 18, 2006 17:14:15
Сообщений: 123
Рейтинг сообщения: 0
Переделал я этот код на прерывания INT0 и INT1, после чего опять импульс первый не определялся, оказалось,что в протеусе частота по-дефолту была выставлена, подправил на 4MHz и заработало. :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб сен 19, 2009 17:50:57 
Друг Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 96
Зарегистрирован: Пн июл 13, 2009 14:37:39
Сообщений: 3961
Откуда: Московская область, наукоград.....
Рейтинг сообщения: 0
boobonick писал(а):
опять импульс первый не определялся, оказалось,что в протеусе частота по-дефолту была выставлена, подправил на 4MHz и заработало. :))

Поздравляю.:))
Вот из-за огромного количества "дополнительных условий", я стараюсь перейти как можно быстрее к железу. Только там можно постичь истину

_________________
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y