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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Помогите бестолковому с "С"

Непрочитано 10.05.2008, 09:11  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Помогите бестолковому с "С"

Я только начал осваивать эту тему поэтому прошу знаюших не сильно смеятся.
Есть задача
Непрерывно контролировать кнопку на одном из входов порта например PINA.3 програмно подавлять дребезг контактов.
И также непрерывно читать значение некоторой переменной и выводть на семисегментники с динамической индикацией.
Если по отдельности то все более менее понятно. Вместе никак. Чето туплю.
Судя по всему это две функции с бесконечными циклами. Возникает вопрос как из одной попадать в другую и наоборот.
Реклама:
7Fantomas7 вне форума  
Непрочитано 10.05.2008, 09:15  
sanitar249
Почётный гражданин KAZUS.RUN
 
Аватар для sanitar249
 
Регистрация: 19.01.2007
Сообщений: 1,745
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
sanitar249 на пути к лучшему
По умолчанию Re: Помогите бестолковому с "С"

Сообщение от 7Fantomas7
....Возникает вопрос как из одной попадать в другую и наоборот.
Для таких задач существуют прерывания...
Идет в главном цикле процесс Х( индикация)
По прерыванию вызываеться процесс У, подпрограмма(нажатая кнопка)
Данные(параметры процесса Х) на время ухода в прерывание сохраняються в стеке.
Данные от выполненного прерывания(по завершению процесса У)передаються через регистры основному процесу.
Процесс Х, полностью восстанавливаеться из стека и теперь может пользовать данные, полученные от процесса У
примерно так.
Удачи!
__________________
Я, думаю, нужно подумать...
sanitar249 вне форума  
Непрочитано 10.05.2008, 09:55  
delay
Гражданин KAZUS.RUN
 
Регистрация: 24.06.2005
Сообщений: 530
Сказал спасибо: 262
Сказали Спасибо 216 раз(а) в 118 сообщении(ях)
delay на пути к лучшему
По умолчанию Re: Помогите бестолковому с "С"

Сообщение от 7Fantomas7
Непрерывно контролировать кнопку на одном из входов порта.
Для этого, как было описанно выше используйте внешнее прерывание, например INT0. Подключите к этому пину подтяжку для установки 1, установите прерывание по спадающему фронту или по нулю. Когда нажмется кнопка, произойдет прерывание и из основного цикла программы обработка перейдет в тело обработки прерывания, после выполнения которой продолжится выполнение основного цикла.
Цитата:
програмно подавлять дребезг контактов.
Для этого можно сделать задержку на 20 мил. сек. Например в CodeVision для этого можно использовать встроенную функцию delay_ms(20)
Цитата:
И также непрерывно читать значение некоторой переменной и выводть на семисегментники с динамической индикацией.
Это поместите в основной цикл программы.
delay вне форума  
Непрочитано 10.05.2008, 11:23  
avr123-nm-ru
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Пример с двумя кнопками на INT0 INT1 с наглядной симуляцией вы можете взять на страничке "Прерывания в AVR" - http://avr123.nm.ru/03.htm

Удачи !
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 10.05.2008, 12:23  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию

За ответы спасибо о прерываниях честно говоря не подумал хотя и знаю о таковых. Подтяжку к +5 конечно же сделал и кнопка работает на землю.
Вопрос вот в чем
На трехразрядный семисегментник с порта выводится цифра, зажигается разряд (например единицы), пауза 20 мс. тушится разряд. Далее с порта выводится цифра, зажигается разряд десятков, пауза 20 мс. тушится разряд. И т.д сотни, а потом опять по кругу.
Кнопка (условно кнопка) может быть нажата 9999 раз в секунду т.е длительность импульса 50 мкс. период 50 мкс.
И выходит следующая ерунда, кнопку нажали, прирывание вызвали, подождали 50 мкс.(т.е. пропустили дребезг), если кнопка не отпущена ждем дальше пока отпустится, если отпущена или отпустилась увеличиваем значение переменной на 1, переходим в индикацию.
Но позвольте в индикации времена горения разрядов значительно больше и пока зажжем разряд десятков или сотен то значение переменной может изменится. При таком подходе контролер с ума не сойдет случайно.
7Fantomas7 вне форума  
Непрочитано 10.05.2008, 12:57  
CERGEI1982
Почётный гражданин KAZUS.RUN
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Сообщение от 7Fantomas7
За ответы спасибо о прерываниях честно говоря не подумал хотя и знаю о таковых. Подтяжку к +5 конечно же сделал и кнопка работает на землю.
Вопрос вот в чем
На трехразрядный семисегментник с порта выводится цифра, зажигается разряд (например единицы), пауза 20 мс. тушится разряд. Далее с порта выводится цифра, зажигается разряд десятков, пауза 20 мс. тушится разряд. И т.д сотни, а потом опять по кругу.
Кнопка (условно кнопка) может быть нажата 9999 раз в секунду т.е длительность импульса 50 мкс. период 50 мкс.
И выходит следующая ерунда, кнопку нажали, прирывание вызвали, подождали 50 мкс.(т.е. пропустили дребезг), если кнопка не отпущена ждем дальше пока отпустится, если отпущена или отпустилась увеличиваем значение переменной на 1, переходим в индикацию.
Но позвольте в индикации времена горения разрядов значительно больше и пока зажжем разряд десятков или сотен то значение переменной может изменится. При таком подходе контролер с ума не сойдет случайно.
20 мс на разряд это слишком много,у тебя они перемигивать будут,с этой проблемой встретился когда делал термометр на DS18B20 и семигментиках,видать как подмигивают пока идет опрос датчика.Лучше всего жки.
Прерывания на то они и прерывания,то есть контролер занят своими делами(у тебя выводит на индикаторы),как только произойдет прерывание,он останавливает основную программу(запоминая) и обрабатывает прерывание и снова возращается в главную программу откуда ушел в прерывание.
CERGEI1982 вне форума  
Непрочитано 10.05.2008, 12:59  
avr123-nm-ru
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от 7Fantomas7
кнопку нажали, прирывание вызвали, подождали 50 мкс.(т.е. пропустили дребезг)
Обычно 20-70 мили сек - антидребезг.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 10.05.2008, 13:20  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию

Не возражаю но всеравно ждем пока будет отпущена. А аесли 1 нажатие в секунду.
7Fantomas7 вне форума  
Непрочитано 10.05.2008, 15:42  
avr123-nm-ru
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Не надо жадать. Просто проверяйте периодически.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 10.05.2008, 16:25  
Laksus
Частый гость
 
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Laksus на пути к лучшему
По умолчанию

Не понял о 9999 нажатиях кнопки в секунду.
А по поводу
Сообщение от 7Fantomas7
Не возражаю но всеравно ждем пока будет отпущена. А аесли 1 нажатие в секунду.
Вы путаете два события
1- нажатие кнопки
2- удержание кнопки
а есть еще
3- отпускание кнопки
__
1- нажатие кнопки
Обнаруживаем изменение состояния с 1 на 0.
Например по прерыванию INT1, The falling edge of INT1 generates an interrupt request. Или периодически (5...20мсек), по таймеру, опрашивая кнопки и запоминая предыщее состояние и сравнивая его с текущим. Затем, для проверки не дребезг ли это, включаете задержку времени, по таймеру, (или с помощью delay()) и по окончании этой задержки снова проверяете состояние кнопки, можно повторить несколько раз для большей надежности. Убедившись, что не дребезг выполняете обработку события "нажатие кнопки".
__
2- удержание кнопки
После того, как нажатие кнопки обработано дальнейшее ее удержание может быть неважным и никак не обрабатываться. А может быть важным, тогда включаем другую задержку времени и по окончании ее снова проверяем состояние кнопки. Если нажата, то обрабатываем событие "удержание кнопки", и так далее.
Отпускание кнопки, тоже проверяем на дребезг.
Laksus вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертор с "CallerID" на "Советский АОН" Sergey K Микроконтроллеры, АЦП, память и т.д 31 27.06.2009 20:37
Треп на "заданную" тему или помогите начинающему.. vo1 Отвлекитесь, эмбеддеры! 64 23.09.2008 09:02
[Решено] RISC vis CISC, все "ЗА" и "ПРОТИВ". sanitar249 Отвлекитесь, эмбеддеры! 1 24.10.2007 09:56
Нужны схемы "Милты" и "Узора" lfaiccug Поиск схем. Делимся схемами 1 18.05.2005 13:27


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


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