Индикатор завышенной/заниженной частоты на двух светодиодах

Модератор: boogyman

Индикатор завышенной/заниженной частоты на двух светодиодах

Сообщение:#1  Сообщение Alex_och » 19 ноя 2013, 10:11

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

Например:
при частоте меньше 20 Гц горит один светодиод,
при частоте более 40 Гц горит другой светодиод,
в диапазоне 20-40 Гц не горят.

Предварительно для Atmega8
Аватара пользователя
Alex_och
Новичок
 
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 09:52

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#2  Сообщение AntonChip » 19 ноя 2013, 11:55

Держи мой проект, пиши если что не так

chastotomer_20_40.rar
AVRStudio4, Proteus
(34.09 КБ) Скачиваний: 514
Аватара пользователя
AntonChip
Администратор
 
Сообщения: 199
Зарегистрирован: 24 дек 2011, 21:11
Откуда: Киров

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#3  Сообщение Alex_och » 19 ноя 2013, 13:59

Все заработало!!!
Спасибо за помощь и за высланные файлики.
У меня частота на МК стояла 1 МГц, поменял на 8 МГц (как у Вас) и все заработало нормально.
Просто в описании статьи увидел 1MHz, а то что на схеме кварц 8MHz значения не предал.
Значит частора 8MHz, предделитель 8 и получаем 1MHz
Аватара пользователя
Alex_och
Новичок
 
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 09:52

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#4  Сообщение Alex_och » 23 фев 2014, 20:08

Продолжу тему, с целью усложнить программу.
Задача в принципе та же, только вместо светодиодов хочу поставить шаговый двигатель (вращение вперед/назад). Простой коллекторный моторчик ставил - работает, а вот с шаговиком пока не получается.
Все по отдельности работает: шаговик по урокам и по этой ссылке работает viewtopic.php?f=2&t=776 ;
Слежка за частотой по архиву в начале темы работает и со светодиодами и на моторчике (переписал немного)
А вот соединить две программы ни как не могу.
Нужно два таймера в этом случае настраивать или можно обойтись одним? Пробовал и с одним и с двумя, но протеус молчит))
Аватара пользователя
Alex_och
Новичок
 
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 09:52

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#5  Сообщение AntonChip » 24 фев 2014, 06:52

Как я понял надо сделать так:
при частоте меньше 20 Гц шаговый вращается по часовой,
при частоте более 40 Гц шаговый вращается против часовой,
в диапазоне 20-40 Гц шаговый не работает.
Аватара пользователя
AntonChip
Администратор
 
Сообщения: 199
Зарегистрирован: 24 дек 2011, 21:11
Откуда: Киров

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#6  Сообщение Alex_och » 24 фев 2014, 11:24

Здравствуйте. Да именно так.
Я вник в суть кодов, соединял их в один и с одним таймером и с двумя, но как-то без результата.
Аватара пользователя
Alex_och
Новичок
 
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 09:52

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#7  Сообщение Alex_och » 24 фев 2014, 22:00

Код написал (слепил из двух). Сделал два таймера TIMER0 и TIMER2. Первый для шаговика, второй для подсчета внешних импульсов. А когда прописывал TIMER1 - даже первоначальный код не работал.
Могу скинуть, чтоб услышать коментарии.
Аватара пользователя
Alex_och
Новичок
 
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 09:52

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#8  Сообщение AntonChip » 25 фев 2014, 05:12

Выкладывай код, посмотрим
Аватара пользователя
AntonChip
Администратор
 
Сообщения: 199
Зарегистрирован: 24 дек 2011, 21:11
Откуда: Киров

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#9  Сообщение Alex_och » 25 фев 2014, 15:01

Выкладываю архив для комментариев. Код в WinAVR, но это не суть важно и схема в протеус.
Сделал для двух моторчиков: коллекторного и шагового биполярного. На практике посмотрю какой будет лучше справляться с задачей.
Вложения
Shag ot Oborot.rar
(54.65 КБ) Скачиваний: 385
Аватара пользователя
Alex_och
Новичок
 
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 09:52

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#10  Сообщение AntonChip » 25 фев 2014, 17:40

Я сделал бы так:

Код: Выделить всё
while(1)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while (ADCSRA & (1 << ADSC)); // Ждем пока завершится преобразование
ovftimes = ADCW; // Значение временной задержки

if(counter == 4000)
{
  if(edgecounter < 20) // Если частота меньше 20
   {
   status = 1;
   PORTC |= (1 << PC1); // Включаем зеленый светодиод
   TIMSK |= (1 << TOIE0); // Разрешаем прерывания от таймера
   }
   
   if(edgecounter > 40) // Если частота больше 40
   {
   status = 0;
   PORTC |= (1 << PC2); // Включаем красный светодиод
   TIMSK |= (1 << TOIE0); // Разрешаем прерывания от таймера
   }

   if((edgecounter < 40) && (edgecounter > 20))
   {
   PORTC &= ~(1 << PC2); // Включаем красный светодиод
   PORTC &= ~(1 << PC1); // Выключаем зеленый светодиод
   TIMSK &= ~(1 << TOIE0); // Запрещаем прерывания от таймера
   }
counter = 0;
edgecounter = 0;   
}
}
Аватара пользователя
AntonChip
Администратор
 
Сообщения: 199
Зарегистрирован: 24 дек 2011, 21:11
Откуда: Киров

Re: Индикатор завышенной/заниженной частоты на двух светодио

Сообщение:#11  Сообщение Alex_och » 25 фев 2014, 19:57

Спасибо!
Я как раз думал о таком, но не знал как правильно написать эту строчку : if((edgecounter < 40) && (edgecounter > 20))
Аватара пользователя
Alex_och
Новичок
 
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 09:52


Вернуться в Микроконтроллеры AVR

Кто сейчас на конференции

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

Rambler's Top100