Куда вставить задержку

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Ср апр 06, 2016 09:00:21

Сообщение Дем »

Программа для биполярного двигателя _ взял на одном сайте
Необходимо задержка включения двигателя после нажатия кнопки
Куда вставить функцию _delay_ms(5000)?
ункциб de <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

// Полношаговый режим 2 фазы
// Направление вращения по часовой стрелке
unsigned char cw_dir[4]=
{
0b00000001,
0b00000010,
0b00000100,
0b00001000
};

// Направление вращения против часовой стрелки
unsigned char ccw_dir[4]=
{
0b00001000,
0b00000100,
0b00000010,
0b00000001
};

volatile unsigned char step_index;
volatile unsigned int ovftimes;
volatile unsigned char status;

// Прерывание по переполнению Т0
ISR(TIMER0_OVF_vect)
{
static unsigned int count = 1;
count++;
if(count >= ovftimes) // Применяем задержку
{
cli(); // Запрещаем прерывания

if(status) // если status == 1 крутим против часовой
PORTB = ccw_dir[step_index++];
else // иначе крутим по часовой
PORTB = cw_dir[step_index++];

if (step_index >= 4)
step_index=0;

count = 0; // Сброс счетчика
TCNT0 = 0; // Старт счетчика с нуля
sei(); // Глобально разрешаем прерывания
}
}

// прерывание по вектору INT0
ISR(INT0_vect)
{
status = 0; // по часовой
}

// прерывание по вектору INT1
ISR(INT1_vect)
{
status = 1; // против часовой
}

int main(void)
{
DDRB = 0b00001111; // PB0, PB1, PB2, PB3 - выходы
PORTB = 0x00; // Лог. нули на выходе

ADCSRA = (1 << ADEN) // разрешение АЦП
| (1 << ADPS2) // предделитель на 64 (частота АЦП 125kHz)
| (1 << ADPS1);
ADMUX = 0x00; // ADC0 - вход, внешний ИОН 5 Вольт

GICR |= (1 << INT1)|(1 << INT0); // Разрешаем внешние прерывания
MCUCR |= (1 << ISC11) // Прерывание по заднему фронту INT1
|(1 << ISC01); // Прерывание по заднему фронту INT0

TCCR0 |= (1 << CS01); // Предделитель на 8
TCNT0 = 0; // Старт счетчика с нуля
TIMSK |= (1 << TOIE0); // Разрешаем прерывания по переполнению Т0

step_index = 0;
ovftimes = 10; // первоначальная задержка
status = 0; // при включении вращение по часовой

sei(); // Глобально разрешаем прерывания

while(1)
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while (ADCSRA & (1 << ADSC)); // Ждем пока завершится преобразование
ovftimes = ADCW; // Значение временной задержки
}
}
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Дем писал(а):после нажатия кнопки
После какой кнопки ? Тут про кнопку вообще ничего не сказано.
Реклама
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Ср апр 06, 2016 09:00:21

Сообщение Дем »

Здесь прерывания прописаны. Я програмирмастак не мастак. Но мне кажется в одной из функций можно вставить задержку, что бы движок запустился позже.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Дем писал(а):Куда вставить функцию _delay_ms(5000)?
День рождения у Наташи Ростовой - 19 лет. Приглашены все гусары. Наташа втыкает свечки в торт, поместилось только 18. "Господа, куда же мне вставить 19-ю?"
Всех опережает поручик Ржевский: "Гусары, молчать!"
Если серьезно, то при написании программ и затруднениях: берем бумажку, карандаш, садимся и рисуем. Алгоритмы.

В вашем примере все свалено в кучу.
Некоторые правила при написании программ:
Модульность.
Опрос кнопки отдельный модуль. Аналого-цифровое преобразование - отдельный модуль. Собственно алгоритм устройства - отдельный модуль.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Вообще, вставлять так тупо задержку - равносильно паузы до нажатия кнопки. Просто как захотели нажать на кнопку, подождите 5 секунд и жмите :)
Реклама
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Ср апр 06, 2016 09:00:21

Сообщение Дем »

Я же говорю не спец. Прога работает, но я цепляю устройство к таймеру. Таймер не может работать менее 1 минуты, поэтому нужна задержка запуска, а как сделат незнаю
Реклама
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Дем писал(а):Я же говорю не спец. Прога работает, но я цепляю устройство к таймеру. Таймер не может работать менее 1 минуты, поэтому нужна задержка запуска, а как сделат незнаю
Насколько я понял, вы пытаетесь пристроить какую-то найденную программу. Что вы вообще делаете? Озвучьте вашу задачу.
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Дем писал(а):Таймер не может работать менее 1 минуты, поэтому нужна задержка запуска
Не вижу никакой связи. Причём тут 5 секунд задержи и минуты в каком-то там таймере ? :dont_know:
Порой люди сами не понимают, что им нужно. Отсюда и не могут нормально объяснить.

ЗЫ: Вы бы хоть схему чтоли показали, или ссылку откуда всё это взяли.
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Ср апр 06, 2016 09:00:21

Сообщение Дем »

Есть суточный таймер. Есть плата управления биполярным двигателем. Таямер срабатывает раз в сутки на 1минуту и включает другое устройство через реле. Другое устройство это плата управления двигателем. 1 минута это много вот и необходимо что бы двигатель работал не 1минуту а 10 секунд. Программы управления таймером нет, а управления двигателем есть. Вообще это кормушка черепахи. http://radioparty.ru/index.php/prog-avr ... step-motor
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Дем писал(а):Вообще это кормушка черепахи.
Для того чтобы решить вашу задачу, нужны исходные данные и что имеем на руках, чтобы из этого всего исходить. Какой суточный таймер. Это он включает на 1 минуту? Вообще, ваш вопрос похож на тему в раздел "Есть работа". Я могу написать вам программу. Но за деньги. Потому что двумя строчками и _delay_ms (5000) здесь не обойдешься.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Ср апр 06, 2016 09:00:21

Сообщение Дем »

Теперь понятно что строчкой не обойтись. Буду учиться. Спасибо.
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

*кэп очевидность вкл* Взяли бы ардуину что ли. Одна не одна строчка, но всяко меньше в разы - библиотеку воткнули для двигателя, перед стартом запомнили системный таймер, библиотеку пнули чтобы двигатель завертелся и ждем когда таймер отсчитает 10 сек -> двигатель.стоп, разрешаем новый старт. :)) *кэп очевидность выкл*
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Грызет канифоль
Сообщения: 264
Зарегистрирован: Сб мар 05, 2011 09:19:01

Сообщение _abk_ »

Нагородили...
Есть суточный таймер. Он срабатывает в назначенное время, включает банальный одновибратор на 555АГ3 и еще 3-х деталях, который на 10 сек включает плату двигателя...
Ардуино....за деньги...
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Дем писал(а):Есть суточный таймер. Есть плата управления биполярным двигателем. Таямер срабатывает раз в сутки на 1минуту и включает другое устройство через реле. Другое устройство это плата управления двигателем. 1 минута это много вот и необходимо что бы двигатель работал не 1минуту а 10 секунд. Программы управления таймером нет, а управления двигателем есть. Вообще это кормушка черепахи. http://radioparty.ru/index.php/prog-avr ... step-motor
А причём тут задержка перед включением ? Вам нужно, чтобы устройство работало 5 секунд, а не задерживать его пуск на 5 секунд.
Копайте в сторону одновибратора. На одной микрухе, типа 555, можно собрать.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Аlex писал(а):...
У одновибраторов, мультивибраторов главная проблема - зависимость времянок от емкости. Соответственно, от напряжения питания, температуры. Если используется ТТЛ логика, то времянки долей герца и ниже уже предполагает полярные, электролитические конденсаторы. Которые со временем высыхают. Либо усложнять схемы, чтобы использовать неполярные конденсаторы. Требуется 5 секунд? Тогда ТС-у нужно брать КМОП версию 555 таймера.
Для уменьшения влияния факторов влияющих на частоту и времянки лучше использовать более высокую частоту, соответственно, схемы усложняются делителями частоты.
Что имеем в итоге: либо автор мирится с гулянием времянок, либо усложняет схемы, либо собирает девайс на МК. В последнем случае ТС может постепенно играться функционалом девайса.
Контактная информация:
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

Я думаю черепаха переживет если двигатель будет работать не 10 сек, а 9-11 :))
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Грызет канифоль
Сообщения: 264
Зарегистрирован: Сб мар 05, 2011 09:19:01

Сообщение _abk_ »

Demiurg писал(а):...В последнем случае ТС может постепенно играться функционалом девайса.
...... Человек же сказал, что ему черепаху надо накормить, а не функционалом играться.
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Ср апр 06, 2016 09:00:21

Сообщение Дем »

Будем точить механику
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

_abk_ писал(а):Человек же сказал, что ему черепаху надо накормить, а не функционалом играться.
Это сейчас он хочет просто накормить, когда МК освоит, во вкус войдет, колеса к своему питомцу прикрутит. А то и к антиграву на термоклей насоплит...
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

А не проще одновибратор сляпать на одной микрухе ? Схем море в сети.
Да хоть на том же МК 8-ми выводном. Прога то - пару строк.

ЗЫ: Кстати, там же скорость двигателя регулируется, зачем вводить какие то задержки ? Снизьте просто скорость и будет у Вас минуту мееееедленно он крутиться.
Ответить

Вернуться в «AVR»