Может там нужно "else" или "return" добавить?
Регулировка временных задержек подстроечным резистором???
Скомпилировал. Всё так же работает, но первое реле совсем не включается, а цикл как и раньше - один раз только работает(((
Может там нужно "else" или "return" добавить?
Может там нужно "else" или "return" добавить?
- Реклама
- Сообщения: 19495
- Зарегистрирован: Чт фев 20, 2014 18:57:55
я думал зацикливается что то где то, не работает (работает 1 раз) только тумблер ? другой сигнал нормально формируется в цикле ?sanyo.95 писал(а): Так если я её уберу реле же мгновенно переключиться и всё?
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
нет, вся программа работает 1 раз, и при включенном тумблере, и при выключенном.Morroc писал(а):не работает (работает 1 раз) только тумблер ? другой сигнал нормально формируется в цикле ?
Я дико извиняюсь, затупил. Проблема была в резисторе который регулирует простой 2го реле. Я накрутил его не в ту сторону и задержка получилась огромная))
Извините еще раз.
Morroc, тебе ОГРОМНЕЙШЕЕ спасибо)))
Извините еще раз.
Morroc, тебе ОГРОМНЕЙШЕЕ спасибо)))
- Сообщения: 19495
- Зарегистрирован: Чт фев 20, 2014 18:57:55
это которое с тумблером ? ну примерно так и подумал
желательно цеплять com-порт какой нибудь к мк (и библиотечку какую нибудь готовую чтобы мозг не ломать) для вывода значений переменных на время отладки - очень все упрощает

"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
- Реклама
Нет, то что без тумблера.Morroc писал(а):это которое с тумблером ?
Можно поподробней об этом? Зачем com-порт, какую библиотечку???Morroc писал(а):желательно цеплять com-порт какой нибудь к мк (и библиотечку какую нибудь готовую чтобы мозг не ломать) для вывода значений переменных на время отладки - очень все упрощает
- Сообщения: 19495
- Зарегистрирован: Чт фев 20, 2014 18:57:55
ну чтобы глянуть реальные значения w r t, например, к компу подключается мк через переходник, запускается терминал, а в программе пишем вывод в него и смотрим
есть переходники usb-uart с ttl уровнями - можно такой прям на ноги мк повесить, достаточно даже одной ноги (+ общий)
есть переходники usb-uart с ttl уровнями - можно такой прям на ноги мк повесить, достаточно даже одной ноги (+ общий)
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Что за терминал, это софт какой-то?Morroc писал(а):запускается терминал
терминальная программа для ПК. рекомендую BrayTerminal
http://blindage.org/?p=3035
http://microsin.net/programming/AVR/avr-uart-debug.html
http://avr-start.ru/?p=550
http://blindage.org/?p=3035
http://microsin.net/programming/AVR/avr-uart-debug.html
http://avr-start.ru/?p=550
Ставим плюсы: )
Понял. Спасибо, буду пока изучать информацию, потом попробую.
Вот еще такой вопрос: для данного устройства как лучше поступить с выводами AVcc, AGND, AREF?
- Сообщения: 19495
- Зарегистрирован: Чт фев 20, 2014 18:57:55
avcc +, agnd земля, aref можно оставить висеть наверное
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Здравствуйте еще раз. Поработала данная программа на железе некоторое время и пришлось её значительно исправить, вот тут и возникли у меня проблемы.
По идее PINB.2 это тумблер, когда он включен должен однократно выполниться этот код
потом, за ним всё остальное и так по кругу.
Если же тумблер выключен, то сразу должно выполняться "всё остальное" и так по кругу.
Но по приведенному выше коду происходит что-то не понятное: код, который должен выполняться, когда тумблер включен, выполняется как бы вместе со "всем остальным", при этом программа перестает реагировать на нажатие кнопки (которая после 2ух нажатий выключает PORTB.0
Вот такая беда. Подскажите пожалуйста как решить данную проблему? Спасибо.
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
void main(void)
{
int w;
int r;
unsigned char a=0;
PORTB=0x04;
DDRB=0x03;
PORTC=0x04;
DDRC=0x00;
while (1)
{
ADMUX=0;//замер по ноге РС0
delay_us(10);
ADCSR |=0x40;
while((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
w=ADCW;
ADMUX=1; // замер по ноге РС1
delay_us(10);
ADCSR |=0x40;
while((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
r=ADCW;
if(PINB.2==0)// если контакты замкнуты(постоянно)
{
PORTB.1=1; // "1" на порт В1
delay_ms(10*w); // регулируемая задержка
PORTB.1=0; // "0" на порт В1
}
PORTB.0=1; // "1" на порт Б1
if(PINC.2==0) //если кнопка нажата
{
delay_ms(50); // ждем 50мс
while(PINC.2==0) // ждем отпускания кнопки
{}
if(++a>=2) // если "а" равно 2(кнопка нажата 2 раза)
{
PORTB.0=0; // "0" на порт Б
a=0; // обнуляем "а"
delay_ms(20*r);
}
}
}
}Код: Выделить всё
PORTB.1=1; // "1" на порт В1
delay_ms(10*w); // регулируемая задержка
PORTB.1=0; // "0" на порт В1 Если же тумблер выключен, то сразу должно выполняться "всё остальное" и так по кругу.
Но по приведенному выше коду происходит что-то не понятное: код, который должен выполняться, когда тумблер включен, выполняется как бы вместе со "всем остальным", при этом программа перестает реагировать на нажатие кнопки (которая после 2ух нажатий выключает PORTB.0
Вот такая беда. Подскажите пожалуйста как решить данную проблему? Спасибо.
- Сообщения: 19495
- Зарегистрирован: Чт фев 20, 2014 18:57:55
на сколько велики вообще задержки ? скорее всего оно в принципе работает, но из за такого использования задержек реакция на нажатие кнопки плохо предсказуема (при включенном тумблере и большом w можно давить кнопку до 10 сек без какого то эффекта вообще), надо менять подход - применять прерывания или без них дробить время выполнения, например сделать цикл 0.1 сек, а длительные задержки формировать счетчиками кол-во циклов или используя глобальный счетчик времени (который ++ в прерывании), точность при этом будет определяться длительностью одного цикла (мб точнее и не надо ?) зато глюков с опросом таких не будет, еще лучше формировать вкл/выкл в прерывании с большой частотой регулируя длительности опять же счетчиками для каждого сигнала (в основном цикле опрос кнопки/тумблеров и формирование начальных значений для счетчиков)
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Ну примерно от 1 до 10с каждая (они ведь "регулируются")Morroc писал(а):на сколько велики вообще задержки ?
то есть в функцию обработки прерываний поместить опрос кнопки? или тумблера? Прерывания я так понимаю от таймера?Morroc писал(а):применять прерывания
И еще, обработчик прерываний работает "отдельно" от процессора т.е. процессор делает свои дела, а обработчик в это время с заданной частотой опрашивает кнопку/тумблер?
длительности где применяются переменные r и w? Чего-то я вообще не понимаю, как это сделать?Morroc писал(а):регулируя длительности опять же счетчиками для каждого сигнала
Вот еще блок-схему нарисовал, думал поможет разобраться...


