Страница 96 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 10:28:22
DX168B
А Вы подтягивающие резисторы ставили?
И что делает ваша программа? Где реакции на события?
Код: Выделить всё
ldi Temp,0b01011111
out DDRD,Temp
ldi temp, (1<<PD7)+(1<<PD5)
out PORTD, temp
;----------------------------------------
PROG_LOOP:
sbis PIND, PIND7
rjmp EVENT_00
sbis PIND, PIND5
rjmp EVENT_01
rjmp PROG_LOOP
;----------------------------------------
EVENT_00:
......
;---------------------------------------
EVENT_01:
.......
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 10:36:41
vit007
прога просто жмет кнопку
start:
ldi Temp5,1
out PortD,Temp5
;зАДЕРЖКА***********************
;*******************************
ldi Temp5,0
out PortD,Temp5
rjmp PROG_LOOP
пока, все на коленке, в прямом смысле слова... хочется свисти ошибки к мин., чтоб реализовать
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 10:48:05
DX168B
Если вы используете внутреннюю подтяжку порта, то у вас уже ошибка в реакции на событие.
(нажатие на кнопку и дёрганье светодиода в ответ)
Смотрите в код:
Код: Выделить всё
ldi temp, (1<<PD7)|(1<<PD5) ;Настраиваем подтяжку порта
out PORTD, temp
ldi temp, 0xFF - ((1<<PB7)+(1<<PB5))
out DDRD, temp ;Настройка входов\выходов
;----------------------------------------
PROG_LOOP:
sbis PIND, PIND7
rjmp EVENT_00
sbis PIND, PIND5
rjmp EVENT_00
rjmp PROG_LOOP
;----------------------------------------
EVENT_00:
sbi PORTD, 0 ;Дёрнем ногу PD0 в лог. 1
;*********
DELAY
;*********
cbi PORTD, 0 ;Опустим ногу PD0 в лог. 0
rjmp PROG_LOOP
Вы отправляете значение в ПортД, нарушая тем самым настройку внутренней подтяжки входов ПД7 и ПД5. (задержка при опросе кнопок не рассматривается мною)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:05:16
Rimsky
DX168B писал(а):Код: Выделить всё
ldi r16, (1<<PD4)|(1<<PD6) ; подтягивающие резисторы на PD4, PD6.
out PORTD, r16
ldi r16, (0<<PD4)|(0<<PD6) ; настройка порта PD4, PD6 на вход.
out DDRD, r16
Так не пробовали?

И что это у Вас получается? 0b00000000, когда нужно так: 0b10101111, только 2 порта на ввод, остальные на вывод (смотрите исходник тов.
qmix)
По поводу
Код: Выделить всё
ldi r16, (1<<PD4)|(1<<PD6) ; подтягивающие резисторы на PD4, PD6
out DDRD, r16
ldi r16, ~((1<<PD4)|(1<<PD6)) ; настройка порта PD4, PD6 на ввход
out DDRD, r16
конечно опечатка, нужно так:
Код: Выделить всё
ldi r16, (1<<PD4)|(1<<PD6) ; подтягивающие резисторы на PD4, PD6
out PORTD, r16
ldi r16, ~((1<<PD4)|(1<<PD6)) ; настройка порта PD4, PD6 на ввход
out DDRD, r16
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:08:44
DX168B
Этим я просто указал, что там нули должны быть и имел в виду только указанные ноги, а не весь порт.

Ясное дело, что оно ничего не даст, кроме 0x00.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:09:31
vit007
Увы не получилось... буду тогда дорабатывать свой стен... (сейчас это просто панелька со светодиодами в ряд объединенная общим корпусом и воздействие симулируется тыканьем проводка в контакт МК)
как я понял, настройка порта на ед. и есть внутренняя подтяжка
А вот внешняя - это надо поставить на порт емкости 104 и на корпус?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:11:06
Gudd-Head
vit007 писал(а):А вот внешняя - это надо поставить на порт емкости 104 и на корпус?
Надо ставить резисторы, а не ёмкости

И подтягивают обычно к "+". К "-" притягивают.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:12:31
DX168B
Нет. Еёмкость нужна для избавления от помех и дребезга. Просто ставится резистор на 5.6к между ногой и плюсом питания МК
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:16:57
Gudd-Head
DX168B писал(а):Просто ставится резистор на 5.6к между ногой и плюсом питания МК

Почему именно 5,6???
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:17:10
Rimsky
IfoR писал(а):qmix писал(а):кроме ~ можно в двух словах про все это.
Это побитовое НЕ. Или инвертирование. Или функция f(x) = 0xFF - x
Rimsky писал(а):знак ~ означает логическое отрицание (НЕ)
Ну вот не надо. Логическое отрицание - это оператор !

Не пойму Вас, что не так я написал? какой оператор, ну если хотите, то это и есть оператор только для макро ассемблера, макрос. Да дословно Вы расписали, действительно ~ побитовое НЕ, и что, чем здесь, что отличается от того, что я написал?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:24:51
DX168B
Gudd-Head писал(а): 
Почему именно 5,6???
Ну, где и в какой схеме. Может и отличается. Я себе это ввёл, как стандарт. Вполне хватает этого сопротивления для подтяжек и притяжек. Да и часто в промышленных схемах видел подтяжку резисторами именно на 5.6к.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:31:27
Gudd-Head
Мне больше нравится 10к. Самый ходовой "цифровой" резистор ИМХО.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:36:43
DX168B
Ну, кому как. У меня этих резисторов на 5.6к как грязи. С работы достаются. Вот и пихаю.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 11:42:17
Gudd-Head
DX168B писал(а):С работы достаются. Вот и пихаю.

Та же фигня, но с 10к и 4,7к

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 12:31:39
vit007
А если ставить фотоэлемент, то надо транзюк (элемент на базу для открытия) вместо кнопки ставить и тот же резюк на Vcc...?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 12:44:08
vit007
и подтяжку ставить на те порты, кот. идут на ввод?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 13:42:35
DX168B
Да. Подтяжка нужна на ногах, которые настроены на ввод (вход), так как входы МК обладают высоким входным сопротивлением и без подтяжки будут висеть в Z-состоянии. Из - за этого, вход будет чувствителен к помехам и наводкам. В следствии, будут ложные сработки.
Для фоторезистора нужен транзистор. Если вам надо засекать только 2 состояния: Есть свет, нет света. А если вам надо измерить и уровень света, то тут без АЦП или аналогового компаратора, совместно с таймером, настроенным на ШИМ с ФНЧ (если нет АЦП) не обойтись.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 16:39:48
qmix
Gudd-Head писал(а):qmix писал(а):не мог понять вроде обе строчки настраивают портт да и не подтягивалось ничего на железе. может правильно сначала настраиваем порт на вход, но потом ему выводим высокий уровень, и он тогда подтягивается к высокому уровню....
В даташит ни разу не заглядывали?
Собсно постоянно перед глазами, и по нему разбираюсь. Но там часто бывает слишком замудрено написано и поэтому бывает непонятно, поэтому и прибегаю к вашей помощи.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 18:13:14
vit007
собрал внешнюю подтяжку и все правильно заработало, сп Gudd-Head и DX168B
теперь немного о птицах...
объясните как работает первая строка... понятно что значение 7 пина вводим, а куда...
в инструкции работы порта на ввод?
потому что так
in temp, PinD - вроде записываем состояние порта в рег.
вроде одно и тоже, но как-то не понятно...
сам
sbis, где хранит решение... и вообще сам процесс программы подвисает на ожидание? (хочется сделать "без этого вот этого не будет")
и вот
rjmp косвенный (непонятен смысл) переход. всегда его использовал для банального прыжка программы, а тут получается какая-то связь
sbis...
"ни чего не понимаю!"
DX168B, если испоьзуем вн. подтяжку порта, то лучше кн. вешать на один порт, а вывод на др. порт, чтоб не нарушать...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср авг 03, 2011 18:30:40
Gudd-Head
vit007 писал(а):и вот rjmp косвенный (непонятен смысл) переход. всегда его использовал для банального прыжка программы, а тут получается какая-то связь sbis...
Надеюсь, так понятней будет:

Цикл 1 — ни одна кнопка не нажата, прыгаем со sbis на sbis, и снова в начало.
Цикл 2 — нажата кнопка на Пине5, первый sbis = true, поэтому пропускаем след. команду; второй sbis = false, так что выполняем следующую команду — прыжок на обработчик события.
Цикл 3 аналогично циклу 2, но нажата Кнопка7.