Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 03.10.2008, 16:32  
fiksx
Прописка
 
Регистрация: 08.10.2005
Адрес: Одесса
Сообщений: 117
Сказал спасибо: 22
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
fiksx на пути к лучшему
По умолчанию Пишу прогу частотомера на at90s2313

Вродебы ничего сложного но показания почемуто плавают.Вот пример проги и прикрепленный проект в протезе. Может кто подскажет в чем бок
unsigned int rez,rez1;
char a,n;


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

TCCR1B=0x00; // остановка таймера 1
TCCR0B=0x00;

rez=TCNT1;



}



void main(void)
{


TIMSK=0x02; // разрешаем прерывание по переполнению Т0
DDRB=0xFF;
DDRD=15;
TCCR0B=0x0; // остановка таймера 0
#asm("sei") // разрешаем прерывания

while (1)

{
TCNT1H=0x00; // обнуление регистра результата старшего
TCNT1L=0x00; // обнуление регистра результата младшего
TCCR0B=0b100;
TCNT0=128; // задержка на 10 мс
TCCR1B=0x07; // запуск таймера 1 (таймер считает по спадающему фронту)
a=200; // индикация результата
while (a)
{
indikaciya(rez,1);
a--;
delay_ms(2);
}

};

Прикрепленный файл: 2710587.rar
Реклама:
fiksx вне форума  
Непрочитано 03.10.2008, 17:57  
AlexTA
Прописка
 
Регистрация: 07.10.2006
Сообщений: 108
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
AlexTA на пути к лучшему
По умолчанию

Вот простой рабочий пример

Прикрепленный файл: 3978869.zip
AlexTA вне форума  
Непрочитано 03.10.2008, 17:58  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Оригинальный подход, не спорю... а что мешает индикатору показать показания до окончания подсчета ???
Ну, сработало прерывание, поставьте флажок на разрешение индикации, что-ли. В основном цикле проверяйте его и пока он не взведется, показывать нули. Как-то так...
urry вне форума  
Непрочитано 04.10.2008, 00:04  
fiksx
Прописка
 
Регистрация: 08.10.2005
Адрес: Одесса
Сообщений: 117
Сказал спасибо: 22
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
fiksx на пути к лучшему
По умолчанию

Сообщение от urry
Оригинальный подход, не спорю... а что мешает индикатору показать показания до окончания подсчета ???
Ну, сработало прерывание, поставьте флажок на разрешение индикации, что-ли. В основном цикле проверяйте его и пока он не взведется, показывать нули. Как-то так...
Делал как говорите вот прога но всеравно показания плавают (частота678.9 кГц а показывает 676.7-677.8) но за ответ спасибо:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

TCCR1B=0x00; // остановка таймера 1
TCCR0B=0x00;
rez=TCNT1;
n=0; // разрешаем индикацию

}

void main(void)
{

TIMSK=0x02; // разрешаем прерывание по переполнению Т0
DDRB=0xFF;
DDRD=15;
TCCR0B=0x0; // остановка таймера 0
#asm("sei") // разрешаем прерывания

while (1)
{
TCNT1H=0x00; // обнуление регистра результата старшего
TCNT1L=0x00; // обнуление регистра результата младшего
TCCR0B=0b100;
TCNT0=128; // задержка на 10 мс
TCCR1B=0x07; // запуск таймера 1 (таймер считает по спадающему фронту)
n=1;
while(n);

a=200; // индикация результата
while (a)
{
indikaciya(rez,1);
a--;
delay_ms(2);
}

};
fiksx вне форума  
Непрочитано 04.10.2008, 00:15  
fiksx
Прописка
 
Регистрация: 08.10.2005
Адрес: Одесса
Сообщений: 117
Сказал спасибо: 22
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
fiksx на пути к лучшему
По умолчанию

Сообщение от AlexTA
Вот простой рабочий пример
Большое спасибо за ответ, но меня смущает строка delay_ms(1000); поскольку эта функция имеет погрешность(сам лично проверял)[/b]

Прикрепленный файл: 3978869.zip
fiksx вне форума  
Непрочитано 04.10.2008, 10:07  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Продолжаем разговор (С) Карлсон
А теперь засинхронизируйте начало временного отсчета с входным импульсом - т.е прерывание по входу запускает таймер. У Вас в предыдущем варианте таймер времени начинает считать независимо от того, пришел импульс или нет - а это погрешность, изменяемая в пределах периода и от Вас не зависит.
urry вне форума  
Непрочитано 05.10.2008, 20:38  
fiksx
Прописка
 
Регистрация: 08.10.2005
Адрес: Одесса
Сообщений: 117
Сказал спасибо: 22
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
fiksx на пути к лучшему
По умолчанию

Сообщение от urry
Продолжаем разговор (С) Карлсон
А теперь засинхронизируйте начало временного отсчета с входным импульсом - т.е прерывание по входу запускает таймер. У Вас в предыдущем варианте таймер времени начинает считать независимо от того, пришел импульс или нет - а это погрешность, изменяемая в пределах периода и от Вас не зависит.
TCCR0B=0b100; // 1 такт
TCNT0=128; // 1 такт задержка на 10 мс
TCCR1B=0x07; // запуск таймера 1 (таймер считает по спадающему фронту)
1) Но ведь проходит всего два такта а при частоте кварца 3.27 MГц это приблизительно 2/3 мкс и потом начинается подсчет так что при частоте измеряемого сигнала 1МГц это будет +-один импульс максимум, а у меня частота в примере 678.9кГц и плавает не на еденици а на десятки
но может я чегото не учитваю.
2) А как засинхронизировать? Чтобы входной импульс запускал отсчет времени (прерывание по входу запускает)его надо подать на INT0 или INT1 я правильно понимаю, или можно както по другому?
fiksx вне форума  
Непрочитано 05.10.2008, 22:49  
fiksx
Прописка
 
Регистрация: 08.10.2005
Адрес: Одесса
Сообщений: 117
Сказал спасибо: 22
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
fiksx на пути к лучшему
По умолчанию

urry большое спасибо за подсказку, почитал документацию, и все сделал (нашел нужное прерывание), все получилось
И еще раз большое спасибо
Доведу прогу до ума и выложу весь проект, может комуто тоже понадобится.
fiksx вне форума  
Непрочитано 06.10.2008, 03:49  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от fiksx
Доведу прогу до ума и выложу весь проект, может комуто тоже понадобится.
Дык он особо высоко мерять не будет... У AVR входы таймера синхронизируются с тактовой частоты. Лучше PIC для частостомера. до 100-130 мегагерц моно выжать.
picavr вне форума  
Непрочитано 06.10.2008, 19:46  
fiksx
Прописка
 
Регистрация: 08.10.2005
Адрес: Одесса
Сообщений: 117
Сказал спасибо: 22
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
fiksx на пути к лучшему
По умолчанию

Сообщение от picavr
Сообщение от fiksx
Доведу прогу до ума и выложу весь проект, может комуто тоже понадобится.
Дык он особо высоко мерять не будет... У AVR входы таймера синхронизируются с тактовой частоты. Лучше PIC для частостомера. до 100-130 мегагерц моно выжать.
Согласен, но я с ПИКами не дружу, да и 100-130 мегагерц это не каждый экземпляр сможет, а в атмеле я просто добавлю делитель по входу на 100, и все. Но за совет спасибо.
fiksx вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пишу прогу под Tiny15 на С в ICC Tiny Проблема с ПЕРЕМЕННЫМИ fiksx Микроконтроллеры, АЦП, память и т.д 19 23.11.2009 22:34
Счётчик частотомера vsky Электроника - это просто 19 26.06.2009 14:42
Входная цепь частотомера elker Измерительное оборудование 4 28.02.2009 03:26
Пишу ISP программатор для AT89S8252 - не получается. Алехин Александр Микроконтроллеры, АЦП, память и т.д 7 18.06.2003 14:17


Часовой пояс GMT +4, время: 03:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot