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

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

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

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

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

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


 
Опции темы

Не могу понять, где ошибка в программе

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

Написал часть программы для обработки нажатия кнопки для Attiny2313, при котором должно изменяться значение одной переменной. При коротком нажатии однократном или многократном соответственно изменение значения на 1 или равно количеству нажатий. При долгом нажатии изменение на 10 . Чтобы не вводить весь код, описываю словами:
1. В таймере Т0 в прерывании увеличивается на 1 переменная k, при этом прерывание запрещено.
2. В main, while (1) при обработке нажатия кнопки разрешается прерывание Т0;
Код:
     while (1)
 {
      // Place your code here
 if(!PIND.3)
  { TIMSK=0x02,PORTB=k1;}
  if((k1==20)&&(!PIND.3)) {k2=k1, sec++;}

   // if((k1==40)&&(!PIND.3))
   // {TIMSK=0x00,sec+=10-1,k1=0;}
    if(PIND.3)  {TIMSK=0x00,k1=0;}
 }
k1 считается в Т0, k2 показывает выполнение 3ей строки программы,
sec++ должна увеличиваться на единицу, последняя строка останавливает прерывание.
При симуляции в Протеус7 и удержании кнопки на PIND.3 более 4 сек. для прохождения более 20 имп. sec›30. Где я не прав?
Прошу очень не ругать, т.к. программировать учусь.
Пишу и компилирую в CVAVR.
Реклама:
Valer 5 вне форума  
Непрочитано 25.10.2022, 19:05  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,284
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Valer 5, а как связаны T0 и нажатие кнопки?
Может стоит сменить логику обработки?
Например прерывание по нажатию и отпусканию кнопки…
А внутри того прерывания разбираться с длительностью и решать вопрос при отпускании о величине инкремента счетчика…

PS Вы бы логику алгоритма управления кнопками расписали, может там и другие варианты возможны…
Например энкодер, которым можно параметр без заморочек менять в обе стороны - там всего-то код Грея разобрать нужно будет…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 25.10.2022 в 20:41.
mike-y-k вне форума  
Непрочитано 25.10.2022, 20:39  
Valer 5
Частый гость
 
Регистрация: 19.11.2011
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Valer 5 на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

mike-y-k
При нажатии кнопки запускается таймер Т0. В каждом прерывании увеличивается переменная k1, которая говорит о прошедшем, после нажатия кнопки, времени. В
while при прошествии 20 прерываний (примерно 2 сек) переменная sec должна увеличиваться на 1. Далее до отпускания кнопки ничего не должно меняться. При отпускании кнопки прерывания запрещается, k1 обнуляется и при следующем нажатии всё повторяется. Как мне кажется.

Последний раз редактировалось mike-y-k; 25.10.2022 в 20:43. Причина: 7.15
Valer 5 вне форума  
Непрочитано 25.10.2022, 20:52  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,284
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

А если таймер всегда тикает с некоторым интервалом и инкрементирует в некоторой переменной время?
При нажатии кнопки по прерыванию от нажатия сохранили отсчет таймера в переменной, при отпускании посчитали разницу по времени, по величине разницы поменяли значение в счетчике нажатий, если времени прошло мало - отбросили как дребезг контактов и ждем следующего отпускания кнопки…
Алгоритм должен быть минимально зависим от размеров кода в основном цикле программы…
И разрешение прерываний принято делать в обработчике, обычно при выходе и с минимумом команд в нем…

PS Вам очень поможет раздел Конечных Автоматов (Finite-State Machine) из Теории Алгоритмов…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 25.10.2022 в 21:17.
mike-y-k вне форума  
Непрочитано 26.10.2022, 11:52  
AJScorp
Почётный гражданин KAZUS.RUN
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,550
Сказал спасибо: 384
Сказали Спасибо 735 раз(а) в 416 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Valer 5,
Как объявлена переменная k1?
Так как она изменяется в прерывании и проверяется в цикле, то должна быть объявлена с ключевым словом volatile, ибо могут быть чудеса оптимизации.
AJScorp вне форума  
Сказали "Спасибо" AJScorp
Valer 5 (26.10.2022)
Непрочитано 26.10.2022, 12:05  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Сообщение от AJScorp Посмотреть сообщение
Как объявлена переменная k1?
Да, это очень важно, когда "кефаль думает за вас"(из рекламы).
На всякий случай, добавлю для Valer 5: никаких "по умолчанию" и неявных преобразований, только всё ручками. Нюансы умолчаний и неявных преобразований могут меняться от версии к версии одного и того же компилятора и при использовании другого.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 26.10.2022, 14:26  
Valer 5
Частый гость
 
Регистрация: 19.11.2011
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Valer 5 на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

AJScorp, переменная объявлена
Код:
volatile unsigned int k1=0;

Последний раз редактировалось mike-y-k; 26.10.2022 в 14:32. Причина: 7.15, оформление
Valer 5 вне форума  
Непрочитано 26.10.2022, 15:08  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,284
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Valer 5, таки задействуйте 6 или 7 ногу как INT0/INT1 и разбирайтесь с состоянием кнопки по прерыванию при постоянно работающем 8 или 16-битном таймере
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 26.10.2022, 18:08  
Valer 5
Частый гость
 
Регистрация: 19.11.2011
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Valer 5 на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Цитата:
Valer 5, таки задействуйте 6 или 7 ногу как INT0/INT1 и разбирайтесь с состоянием кнопки по прерыванию при постоянно работающем 8 или 16-битном таймере
mike-y-k, я писал, что при коротком нажатии надо увеличить переменную на 1, а при длинном на 10. При постоянно работающем прерывании трудно нажать на требуемый интервал, потребуется сложная обработка. А так при отпущенной кнопке прерывания запрещены, при нажатии начинается прерывания, если их больше 20 в переменную записывается 1. Дальше у меня в виде комментариев записано условие для прибавления 10.
Valer 5 вне форума  
Непрочитано 26.10.2022, 19:02  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,284
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Valer 5, прерывание по edge все решает - читаем состояние порта и при нужном уровне разбираемся с таймером. При нажатии запоминаем текущий таймер или обнуляем его, при отпускании - вычисляем или читаем длительность.
Алгоритм таки стоит основывать изначально на оптимальном выборе из возможностей аппаратуры…
Это для очень больших и быстрых можно немного расслабиться…
Я выше уже на макал на конечные автоматы - тут именно их случай в чистом виде…
Перед написанием кода стоит изучить все особенности целевого МК и расписать весь алгоритм на основе целевого железа, а уже потом диаграмму состояний оформить кодом…
Чем меньше МК, тем это правило существеннее влияет…
В ограниченных ресурсах памяти каждый байт кода значим, а при ограниченной скорости - каждый такт…
Поэтому часто итоговая прошивка допиливается и вылизывается на ассемблере…
С использованием прерывания от кнопки Вы сможете даже дребезг контактов спокойно обработать…
Время работы обработчика ≈10 тактов максимум или 10µs на 1MHz, 1µs на 10MHz, 500ns на 20MHz
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 26.10.2022 в 19:07.
mike-y-k вне форума  
 
Опции темы

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

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, время: 18:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.