|
Поддержи наш сайт! |
Через WebMoney
R785211844650
Z210696637574
E368177590409
|
|  | | | |
Регулятор яркости и режимов ШИМа на AT89C2051 (1 просматривает)
|
|
TOPIC: Регулятор яркости и режимов ШИМа на AT89C2051
|
Fantomas (Пользователь)
Новичок
Постов: 26
|
| Регулятор яркости и режимов ШИМа на AT89C2051 01.11.2009 20:23 |
Репутация: 0   |
Доброго времени суток.Делаю регулятор яркости и режимов работы ШИМ с переключением режимов на AT89C2051. ШИМ нужно сделать программно на asm. Имеется несколько вопросов. решил воспользоваться помощью людей, имеющих богатый опыт в этом деле. 1. Как избежать зацикливания при опросе кнопки? нужно что бы когда нажал раз на кнопку, светодиод загорелся, нажал второй раз, он погас. а у меня в программе он просто тускло горит. не получается организовать опрос кнопки. Подскажите пожалуйста. Заранее спасибо. File Attachment:File name: SV.txtFile size:703 bytes
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 2027
|
| В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 02.11.2009 15:36 |
Репутация: 167   |
судя по всему, у вас классическая ошибка начинающих: при работе с кнопками необходимо подавлять дребезг контактов кнопки. делается это так: опрашивается порт кнопки, состояние порта запоминается. после этого делается пауза примерно на 10-15 миллисекунд, после чего снова опрашивается порт кнопки и сравнивается с ранее запомненным значением. если оба значения совпали - тогда это значение анализируется как состояние кнопки, если значения разные - следует считать, что из-за дребезга состояние кнопки определить не удалось. в вашем же исходнике получается как минимум (т.е. то, что я с наскоку заметил) опрос кнопки и тут же переключение светодиода потом снова опрос и снова какие-то действия. из-за дребезга вполне можгут быть многократные ложные срабатывания
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
Fantomas (Пользователь)
Новичок
Постов: 26
|
| В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 02.11.2009 17:48 |
Репутация: 0   |
неа,дребезг здесь не причем. проблема с дребезгом решена. File Attachment:File name: SV2.txtFile size:1289 bytes нужно, чтобы кнопкой1 включать и выключать светодиод(пока раскинул эти события на разные кнопки),а как это сделать не знаю
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 2027
|
| В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 02.11.2009 18:24 |
Репутация: 167   |
|
ну, во-первых, надо после того, как опознали нажатие кнопки и переключили светодиод, дождаться отпускания кнопки, иначе в то же мгновение снова обнаружится нажатие и переключение светодиода. ну а включение-выключение светодиода надо делать путем инверсии состояния порта, тогда первый раз он включится, а второй - выключится и т.д.
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
Fantomas (Пользователь)
Новичок
Постов: 26
|
| В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 02.11.2009 23:28 |
Репутация: 0   |
|
если правильно понял, то после того как зажгли светодиод поставить задержку, что бы кнопка отжалась.с выкл/вкл вроде понятно, а как быть если кроме выкл/вкл еще например на эту кнопку повесить ШИМ? тогда инверсия линии порта не спасет. а можно несколько строк на асме, для полного осознания?
Содержимое поста отредактировано: Fantomas, в: 02.11.2009 23:32
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 2027
|
| В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 03.11.2009 08:56 |
Репутация: 167   |
|
мне не понятно, что значит "повесить на кнопку ШИМ". включать ею ШИМ? или что? на счет вкл-выкл, мне кажется, разобрались не совсем: не задержку надо ставить, а ждать отпускания кнопки - это ведь разные вещи, не так ли? задержка даст эффект автоповтора: при удержании кнопки нажатой ваш светодиод будет мигать с некоторой частотой, определяемой этой самой вашей задержкой.
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
Fantomas (Пользователь)
Новичок
Постов: 26
|
| В ответ на: Регулятор яркости и режимов ШИМа на 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
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 2027
|
| В ответ на: Регулятор яркости и режимов ШИМа на 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 A, P1
rcall delay
mov r0, P1
cjne A, r0, drebezg
cpl A
exit:
pop r0
ret
drebezg:
mov A, #0
rjmp exit
|
и так далее  по-моему, в этом случае понять, как работает программа, значительно проще
P.S. я мог ошибиться в конкретной программе - это не реальный код, а лишь пример стиля оформления кода Содержимое поста отредактировано: ARV, в: 03.11.2009 21:46
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
Fantomas (Пользователь)
Новичок
Постов: 26
|
| В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 03.11.2009 23:37 |
Репутация: 0   |
В вашем стиле присутствует опыт, которого, к сожалению, у меня пока нет. Поэтому пока стараюсь поменьше использовать регистры, а больше оперирую с битами. С опросом клавиатуры понятно  , но у меня одна кнопка и мне нужно: Нажал первый раз - светодиод загорелся, Нажал второй раз - включили ШИМ, нажал третий раз - выключили сетодиод и ШИМ.
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 2027
|
| В ответ на: Регулятор яркости и режимов ШИМа на AT89C2051 04.11.2009 09:44 |
Репутация: 167   |
советую набираться опыта, а не продолжать делать вид, что его у вас нет  чтобы одной и той же кнопкой делать 3 разных действия поочереди, проще всего использовать какой-то регистр или ячейку памяти для хранения текущего состояния. например, пусть это будет R5. так вот, в самом начале вы заносите в R5 ноль, что будет означать, что и светодиод, и ШИМ выключены. затем вы начинаете опрос и анализ кнопки. как только обнаружили нажатие кнопки - переходите к проверке значения R5: если там 0, значит надо включить светодиод и увеличить R5 на 1 (инкрементировать его); если там 1 - пора включать ШИМ (и инкрементировать R5); ну а если там 2 - надо все выключить и обнулить R5. главное, о чем надо не забыть: после того, как вы обработали нажатие кнопки, обязательно дождитесь отпускания кнопки, иначе тут же произойдет повторная реакция на нее - контроллер-то очень быстрый. именно поэтому мой стиль удобнее: ведь вам всего-навсего надо будет для этого добавить | Code: | m1: acall get_key ; опросить кнопки
jnz m1 ; опрашивать, пока будет возвращен НЕ НОЛЬ
|
то есть я хочу сказать, что оформление частоиспользуемых и логически законченных участков кода в качестве подпрограмм сильно облегчает жизнь программиста
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
|
|
|
| | |  |
|