Главная  
18.05.2012 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Простые устройстваОтличные товары по превосходным ценамОтличные товары по превосходным ценам
Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
Регулятор яркости и режимов ШИМа на AT89C2051 (1 просматривает)
_GEN_GOTOBOTTOM Ответить

TOPIC: Регулятор яркости и режимов ШИМа на AT89C2051

#3524
Fantomas (Пользователь)
Новичок
Постов: 26
graphgraph
Регулятор яркости и режимов ШИМа на AT89C2051 01.11.2009 20:23 Репутация: 0  
Доброго времени суток.Делаю регулятор яркости и режимов работы ШИМ с переключением режимов на AT89C2051. ШИМ нужно сделать программно на asm. Имеется несколько вопросов. решил воспользоваться помощью людей, имеющих богатый опыт в этом деле.
1. Как избежать зацикливания при опросе кнопки? нужно что бы когда нажал раз на кнопку, светодиод загорелся, нажал второй раз, он погас. а у меня в программе он просто тускло горит. не получается организовать опрос кнопки. Подскажите пожалуйста. Заранее спасибо.

File Attachment:
File name: SV.txt
File size:703 bytes
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3531
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 02.11.2009 15:36 Репутация: 167  
судя по всему, у вас классическая ошибка начинающих: при работе с кнопками необходимо подавлять дребезг контактов кнопки. делается это так: опрашивается порт кнопки, состояние порта запоминается. после этого делается пауза примерно на 10-15 миллисекунд, после чего снова опрашивается порт кнопки и сравнивается с ранее запомненным значением. если оба значения совпали - тогда это значение анализируется как состояние кнопки, если значения разные - следует считать, что из-за дребезга состояние кнопки определить не удалось.

в вашем же исходнике получается как минимум (т.е. то, что я с наскоку заметил) опрос кнопки и тут же переключение светодиода потом снова опрос и снова какие-то действия. из-за дребезга вполне можгут быть многократные ложные срабатывания
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3532
Fantomas (Пользователь)
Новичок
Постов: 26
graphgraph
В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 02.11.2009 17:48 Репутация: 0  
неа,дребезг здесь не причем. проблема с дребезгом решена.
File Attachment:
File name: SV2.txt
File size:1289 bytes

нужно, чтобы кнопкой1 включать и выключать светодиод(пока раскинул эти события на разные кнопки),а как это сделать не знаю
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3533
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 02.11.2009 18:24 Репутация: 167  
ну, во-первых, надо после того, как опознали нажатие кнопки и переключили светодиод, дождаться отпускания кнопки, иначе в то же мгновение снова обнаружится нажатие и переключение светодиода.
ну а включение-выключение светодиода надо делать путем инверсии состояния порта, тогда первый раз он включится, а второй - выключится и т.д.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3534
Fantomas (Пользователь)
Новичок
Постов: 26
graphgraph
В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 02.11.2009 23:28 Репутация: 0  
если правильно понял, то после того как зажгли светодиод поставить задержку, что бы кнопка отжалась.с выкл/вкл вроде понятно, а как быть если кроме выкл/вкл еще например на эту кнопку повесить ШИМ? тогда инверсия линии порта не спасет.
а можно несколько строк на асме, для полного осознания?

Содержимое поста отредактировано: Fantomas, в: 02.11.2009 23:32
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3537
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 03.11.2009 08:56 Репутация: 167  
мне не понятно, что значит "повесить на кнопку ШИМ". включать ею ШИМ? или что?
на счет вкл-выкл, мне кажется, разобрались не совсем: не задержку надо ставить, а ждать отпускания кнопки - это ведь разные вещи, не так ли? задержка даст эффект автоповтора: при удержании кнопки нажатой ваш светодиод будет мигать с некоторой частотой, определяемой этой самой вашей задержкой.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3542
Fantomas (Пользователь)
Новичок
Постов: 26
graphgraph
В ответ на: Регулятор яркости и режимов ШИМа на A 03.11.2009 19:42 Репутация: 0  
ARV писал(а):
мне не понятно, что значит "повесить на кнопку ШИМ". включать ею ШИМ? или что?
да,кроме вкл-выкл, включать ею ШИМ еще.
Насчет вкл-выкл,думаю так:
$MOD51
ORG 0
JMP START
ORG 0033H
START:
jnb P1.5,KNOPKA1
jmp START
KNOPKA1:
jb P1.5,START ; Проверяем на дребезг
call DELAY
jb P1.5,START ; Если на P1.5 1, то дребезг
cpl P1.6 ; Инверсия бита P1.6
call DELAY
jmp START
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3543
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Регулятор яркости и режимов ШИМа на A 03.11.2009 21:45 Репутация: 167  
честно говоря, не понятен последний пост. ну хотите так сделать - сделайте
хотя лично я придерживаюсь иного стиля программирования, примерно в таком ключе:
Code:

 start:    acall  get_key опрос клавиатуры (кнопок)    cjne   A#KEY_START, next_k1    acall  on_off_pwm если нажата START переключаем ШИМ    rjmp   start next_k1:    cjne   A#KEY_LED, next_k2    acall  on_off_led если нажата LED переключаем светодиод    rjmp   start next_k2:    ; и т.добработка всех вариантов нажатия кнопок    rjmp   start и снова все ;------------- get_key -------------- get_key: ; подпрограмма опроса кнопоквозвращает код кнопок в А если не нажато возвращает А=0    push   r0    mov    AP1    rcall  delay    mov    r0P1    cjne   Ar0drebezg    cpl    A exit:    pop    r0    ret drebezg:    mov    A#0    rjmp   exit 

и так далее по-моему, в этом случае понять, как работает программа, значительно проще

P.S. я мог ошибиться в конкретной программе - это не реальный код, а лишь пример стиля оформления кода

Содержимое поста отредактировано: ARV, в: 03.11.2009 21:46
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3546
Fantomas (Пользователь)
Новичок
Постов: 26
graphgraph
В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 03.11.2009 23:37 Репутация: 0  
В вашем стиле присутствует опыт, которого, к сожалению, у меня пока нет. Поэтому пока стараюсь поменьше использовать регистры, а больше оперирую с битами. С опросом клавиатуры понятно , но у меня одна кнопка и мне нужно:
Нажал первый раз - светодиод загорелся,
Нажал второй раз - включили ШИМ,
нажал третий раз - выключили сетодиод и ШИМ.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#3547
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 04.11.2009 09:44 Репутация: 167  
советую набираться опыта, а не продолжать делать вид, что его у вас нет
чтобы одной и той же кнопкой делать 3 разных действия поочереди, проще всего использовать какой-то регистр или ячейку памяти для хранения текущего состояния. например, пусть это будет R5. так вот, в самом начале вы заносите в R5 ноль, что будет означать, что и светодиод, и ШИМ выключены. затем вы начинаете опрос и анализ кнопки. как только обнаружили нажатие кнопки - переходите к проверке значения R5: если там 0, значит надо включить светодиод и увеличить R5 на 1 (инкрементировать его); если там 1 - пора включать ШИМ (и инкрементировать R5); ну а если там 2 - надо все выключить и обнулить R5.
главное, о чем надо не забыть: после того, как вы обработали нажатие кнопки, обязательно дождитесь отпускания кнопки, иначе тут же произойдет повторная реакция на нее - контроллер-то очень быстрый. именно поэтому мой стиль удобнее: ведь вам всего-навсего надо будет для этого добавить
Code:

 m1acall get_key опросить кнопки    jnz   m1 опрашиватьпока будет возвращен НЕ НОЛЬ


то есть я хочу сказать, что оформление частоиспользуемых и логически законченных участков кода в качестве подпрограмм сильно облегчает жизнь программиста
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол