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

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

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

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

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

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


 
Опции темы
Непрочитано 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
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
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
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
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.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Не могу понять, где ошибка в программе

Valer 5,
Как объявлена переменная k1?
Так как она изменяется в прерывании и проверяется в цикле, то должна быть объявлена с ключевым словом volatile, ибо могут быть чудеса оптимизации.
AJScorp вне форума  
Сказали "Спасибо" AJScorp
Valer 5 (26.10.2022)
Непрочитано 26.10.2022, 12:05  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,033
Сказал спасибо: 2,559
Сказали Спасибо 11,881 раз(а) в 5,958 сообщении(ях)
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
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
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
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
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, время: 15:57.


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