Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Ответ
Опции темы
Непрочитано 26.10.2022, 22:03   #11
Valer 5
Частый гость
 
Регистрация: 19.11.2011
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Valer 5 на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Спасибо всем. Задачу решил. Заменил ожидание
Цитата:
if((k1==20)&&(!PIND.3))
на задержку
Цитата:
delay_ms(2000);
, так же и следующее ожидание и грамотно расставил круглые скобки.
Окончательный вариант:
Цитата:
while (1)
{
// Place your code here
if(!PIND.3)
{ TIMSK=0x02,PORTB=k1;
delay_ms(2000);
if(!PIND.3)
{sec=sec+1,PORTB=k1;}
delay_ms(2000);
if(!PIND.3)
{ TIMSK=0x00,k1=0,sec=sec+9,PORTB=k1;}
while(!PIND.3) {}

}
}
}
Реклама:
Valer 5 вне форума   Ответить с цитированием
Непрочитано 26.10.2022, 22:11   #12
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,248
Сказал спасибо: 11,167
Сказали Спасибо 3,855 раз(а) в 2,926 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Valer 5, а если в течении этих 2*2s Вам потом нужно будет что-то еще обрабатывать?
Вы просто создали задел проблем на будущее…
Именно про это было у Лермонтова: "Смешались в кучу кони, люди…"

PS Таким стилем страдают 99% скетчей Arduino… Может стоит просто перейти на их платформу…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 27.10.2022 в 14:01.
mike-y-k вне форума   Ответить с цитированием
Сказали "Спасибо" mike-y-k
ForcePoint (01.11.2022)
Непрочитано 27.10.2022, 16:45   #13
Valer 5
Частый гость
 
Регистрация: 19.11.2011
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Valer 5 на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

mike-y-k, а что означает " 2*2s" ?
Valer 5 вне форума   Ответить с цитированием
Непрочитано 27.10.2022, 17:00   #14
Yuri222
Почётный гражданин KAZUS.RU
 
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 7,912
Сказал спасибо: 2,741
Сказали Спасибо 2,692 раз(а) в 1,991 сообщении(ях)
Yuri222 на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Сообщение от Valer 5 Посмотреть сообщение
2*2s
это дважды по 2 секунды.
Yuri222 вне форума   Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Yuri222 за это сообщение:
ForcePoint (01.11.2022), mike-y-k (27.10.2022)
Непрочитано 27.10.2022, 17:24   #15
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,951
Сказал спасибо: 2,547
Сказали Спасибо 11,840 раз(а) в 5,933 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Сообщение от Valer 5 Посмотреть сообщение
Задачу решил.
Строго говоря, это не решение задачи. Как правило, это не основная задача, а маленькое действие в основной Задаче. Вы, наверное, обратили внимание, что delay_ms(2000) это тупая загрузка процессора, во время которой возможны только обработки прерываний, которые будут искажать время задержки?
Задачу можно считать решенной при нормальной реализации, а не костылями.
Заработало? Хорошо. А теперь разбирайтесь, почему первый вариант не работает.

ПС И лучше работать с реальным железом, а не с Протезом. Часто бывают стоны (при работе с контроллерами) - "В Протезе работает, в железе - нет!" и наоборот.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 27.10.2022 в 17:29.
akegor вне форума   Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо akegor за это сообщение:
ForcePoint (01.11.2022), mike-y-k (27.10.2022)
Непрочитано 27.10.2022, 21:05   #16
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,248
Сказал спасибо: 11,167
Сказали Спасибо 3,855 раз(а) в 2,926 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Valer 5, у Вас там два delay по 2000ms=2s каждый, итого 2*2s или всего 4s…
И это глубоко порочная практика…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума   Ответить с цитированием
Сказали "Спасибо" mike-y-k
ForcePoint (01.11.2022)
Непрочитано 27.10.2022, 22:01   #17
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,726
Сказал спасибо: 2,427
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Реализовать задержку хотя бы через таймер.
baiderin вне форума   Ответить с цитированием
Непрочитано 27.10.2022, 22:17   #18
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,248
Сказал спасибо: 11,167
Сказали Спасибо 3,855 раз(а) в 2,926 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

baiderin, так изначально в цикле опроса состояния порта ТС так и пытался, но не справился с железом…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума   Ответить с цитированием
Непрочитано 01.11.2022, 17:52   #19
Someone
Гражданин KAZUS.RU
 
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию

Сообщение от Valer 5 Посмотреть сообщение
Где я не прав?
В небрежности ТЗ. Сначала определись, короткое нажатие - это сколько времени удерживается кнопка? Длинное нажатие - это сколько времени кнопка удерживается?

Затем определись с частотой проца - одно дело он будет работать на 8 МГц, и совершенно другое, 1 МГц. От частоты будет зависеть длительность одного тика таймера, а значит и промежутки времени, которые ты сможешь им отсчитывать. Допустим, при частоте 1 Мгц и делителе 1024, один тик будет занимать примерно 1 мс, а при 8 Мгц, один тик, при том же делителе, будет 128 мкс.

Определившись с временными интервалами и частотой, выбери счётчик, который будешь использовать. Например, выбрав таймер0 при частоте 1МГц, максимальное время, что ты сможешь отсчитать, будет 256 мс. Выбрав же таймер1, максимальное время 65536 мс. И получается, что чтобы отсчитать секунду, при использовании таймера0, тебе потребуется дополнительная переменная - счётчик переполнений. И соответствующий код для обработки этой переменной в прерывании и главном теле программы. Если же ты будешь использовать таймер1, то задав его потолок в 1000, получишь прерывание раз в секунду без всяких дополнительных переменных и кода для их обработки.

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

ЗЫ: Совет. Судя по коду, кнопка, подаёт землю на PD3, а это внешнее прерывание INT1, а значит хорошо бы использовать это прерывание, убрав программный опрос пина в главном теле программы. Универсальность при таком решении страдает (на другом контроллере кнопка может не висеть на пине с прерыванием), но в данном конкретном случае, код получается проще и меньше по объёму.

Сообщение от Valer 5 Посмотреть сообщение
Окончательный вариант:
Данный код может выглядеть рабочим только если коротким считать нажатие в 2с, а длинным - более 2с. При этом прерывание переполнения таймера после его разрешения будет вызвано несколько раз, при условии, что частота контроллера 1МГц. В случае 8МГц, или вообще 20МГц, прерывание будет вызвано очень много раз.

Вот ты опрашиваешь кнопку, она нажата. Разрешаешь прерывания таймера. Сразу сваливаешься в него - флаг-то установлен, потому что таймер должен считать, а если он считать не будет, то и прерывание никогда не произойдёт, даже если разрешено. Т.е. таймер у тебя запущен и тикает с момента его настройки, а значит переполнение уже было, флаг прерывания установился, и не сбросился, потому что автоматически сбрасывается при выходе из прерывания, а так как оно запрещено, то этого не случается. Вернувшись из прерывания, зависаешь ничего не делая 2с. За эти 2с таймер переполняется ещё 8 раз, соответственно 8 раз вызывается прерывание. За 2с можно отпустить-нажать кнопку несколько раз, но ты об этом не узнаешь (и соответственно не прибавишь несколько единиц к переменной), потому что ты просто ждёшь 2с. Но допустим, кнопку удерживают 2с, делая длинное нажатие. В этом случае sek увеличивается на 1. Снова 2с паузы, за которые случится ещё 8 заходов в прерывание таймера. Кнопку продолжают удерживать. Соответственно, запрещается прерывание, к1 обнуляется, к sek добавляется ещё 9, после чего начинается бесконечный цикл, пока кнопка удерживается.

Последний раз редактировалось mike-y-k; 01.11.2022 в 18:19. Причина: 6.6
Someone вне форума   Ответить с цитированием
Ответ

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
трансформаторы и выпрямители, не могу понять alexbmd Электроника - это просто 41 14.02.2017 20:54
Не могу переустановить Code Vision на более новую версию. Zemlyanov Proteus, KiCAD и другие ECAD 37 16.12.2009 00:44
Помогите разобраться со схемой. я не могу понять что не так. sofist Источники питания и свет 17 15.11.2007 15:52
Ошибка ISP режима (ISP Mode Error) Не могу понять в чём дело zhan99999 Микроконтроллеры, АЦП, память и т.д 4 11.01.2007 02:21
MP Lab 7.1 Не могу создать проект Dimtr Микроконтроллеры, АЦП, память и т.д 1 10.12.2005 17:09


Часовой пояс GMT +4, время: 06:21.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot