Страница 1 из 1
Индикатор завышенной/заниженной частоты на двух светодиодах
Добавлено: 19 ноя 2013, 11:11
Alex_och
Предлагаю рассмотреть варианты кода, который отображает двумя светодиодами об уходе частоты за допустимые рамки.
Например:
при частоте меньше 20 Гц горит один светодиод,
при частоте более 40 Гц горит другой светодиод,
в диапазоне 20-40 Гц не горят.
Предварительно для Atmega8
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 19 ноя 2013, 12:55
AntonChip
Держи мой проект, пиши если что не так
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 19 ноя 2013, 14:59
Alex_och
Все заработало!!!
Спасибо за помощь и за высланные файлики.
У меня частота на МК стояла 1 МГц, поменял на 8 МГц (как у Вас) и все заработало нормально.
Просто в описании статьи увидел 1MHz, а то что на схеме кварц 8MHz значения не предал.
Значит частора 8MHz, предделитель 8 и получаем 1MHz
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 23 фев 2014, 21:08
Alex_och
Продолжу тему, с целью усложнить программу.
Задача в принципе та же, только вместо светодиодов хочу поставить шаговый двигатель (вращение вперед/назад). Простой коллекторный моторчик ставил - работает, а вот с шаговиком пока не получается.
Все по отдельности работает: шаговик по урокам и по этой ссылке работает
http://radioparty.ru/forums/viewtopic.php?f=2&t=776 ;
Слежка за частотой по архиву в начале темы работает и со светодиодами и на моторчике (переписал немного)
А вот соединить две программы ни как не могу.
Нужно два таймера в этом случае настраивать или можно обойтись одним? Пробовал и с одним и с двумя, но протеус молчит))
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 24 фев 2014, 07:52
AntonChip
Как я понял надо сделать так:
при частоте меньше 20 Гц шаговый вращается по часовой,
при частоте более 40 Гц шаговый вращается против часовой,
в диапазоне 20-40 Гц шаговый не работает.
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 24 фев 2014, 12:24
Alex_och
Здравствуйте. Да именно так.
Я вник в суть кодов, соединял их в один и с одним таймером и с двумя, но как-то без результата.
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 24 фев 2014, 23:00
Alex_och
Код написал (слепил из двух). Сделал два таймера TIMER0 и TIMER2. Первый для шаговика, второй для подсчета внешних импульсов. А когда прописывал TIMER1 - даже первоначальный код не работал.
Могу скинуть, чтоб услышать коментарии.
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 25 фев 2014, 06:12
AntonChip
Выкладывай код, посмотрим
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 25 фев 2014, 16:01
Alex_och
Выкладываю архив для комментариев. Код в WinAVR, но это не суть важно и схема в протеус.
Сделал для двух моторчиков: коллекторного и шагового биполярного. На практике посмотрю какой будет лучше справляться с задачей.
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 25 фев 2014, 18:40
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;
}
}
Re: Индикатор завышенной/заниженной частоты на двух светодио
Добавлено: 25 фев 2014, 20:57
Alex_och
Спасибо!
Я как раз думал о таком, но не знал как правильно написать эту строчку : if((edgecounter < 40) && (edgecounter > 20))