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

Модератор: boogyman

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

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

#1

Сообщение Alex_och »

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

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

Предварительно для Atmega8
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

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

#2

Сообщение AntonChip »

Держи мой проект, пиши если что не так
chastotomer_20_40.rar
AVRStudio4, Proteus
(34.09 КБ) 798 скачиваний
Аватара пользователя
Alex_och
Новичок
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 10:52

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

#3

Сообщение Alex_och »

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

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

#4

Сообщение Alex_och »

Продолжу тему, с целью усложнить программу.
Задача в принципе та же, только вместо светодиодов хочу поставить шаговый двигатель (вращение вперед/назад). Простой коллекторный моторчик ставил - работает, а вот с шаговиком пока не получается.
Все по отдельности работает: шаговик по урокам и по этой ссылке работает http://radioparty.ru/forums/viewtopic.php?f=2&t=776 ;
Слежка за частотой по архиву в начале темы работает и со светодиодами и на моторчике (переписал немного)
А вот соединить две программы ни как не могу.
Нужно два таймера в этом случае настраивать или можно обойтись одним? Пробовал и с одним и с двумя, но протеус молчит))
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

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

#5

Сообщение AntonChip »

Как я понял надо сделать так:
при частоте меньше 20 Гц шаговый вращается по часовой,
при частоте более 40 Гц шаговый вращается против часовой,
в диапазоне 20-40 Гц шаговый не работает.
Аватара пользователя
Alex_och
Новичок
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 10:52

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

#6

Сообщение Alex_och »

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

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

#7

Сообщение Alex_och »

Код написал (слепил из двух). Сделал два таймера TIMER0 и TIMER2. Первый для шаговика, второй для подсчета внешних импульсов. А когда прописывал TIMER1 - даже первоначальный код не работал.
Могу скинуть, чтоб услышать коментарии.
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

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

#8

Сообщение AntonChip »

Выкладывай код, посмотрим
Аватара пользователя
Alex_och
Новичок
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 10:52

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

#9

Сообщение Alex_och »

Выкладываю архив для комментариев. Код в WinAVR, но это не суть важно и схема в протеус.
Сделал для двух моторчиков: коллекторного и шагового биполярного. На практике посмотрю какой будет лучше справляться с задачей.
Вложения
Shag ot Oborot.rar
(54.65 КБ) 730 скачиваний
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

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

#10

Сообщение AntonChip »

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

Код: Выделить всё

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;	
}
}
Аватара пользователя
Alex_och
Новичок
Сообщения: 8
Зарегистрирован: 19 ноя 2013, 10:52

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

#11

Сообщение Alex_och »

Спасибо!
Я как раз думал о таком, но не знал как правильно написать эту строчку : if((edgecounter < 40) && (edgecounter > 20))
Ответить