Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с первой программой
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Chip115
Всем привет!!! Стал изучать програмирование МК на асемблере. Столкнулся с проблемой.
В симуляторе (AVR Studio 4) все работает как надо. но в контроллере работает не правильно.
Смысл в том чтобы при нажатии на кнопку 1 (PD0) (кнопка другой ногой висит на минусе) загорался на индикаторе 0, при отпускании- индикатор тух. При нажатии на кн 2 (PD1) на индикаторе загоралась бы 1-при отпускании кн 2 индикатор должен тухнуть.
При прошитой микре при ненажатых кнопках горит 0. При нажатии на кн1 (PD0) загорается 1. при отпускании-горит 0. На кн 2 (PD1) вообще нет реакции. Что сделать? Индикатор с общим катодом.
Вот исходник:

Код
.def   temp0 =r16
.def   temp1 =r17
.def   temp2 =r18

Init:
   ser temp0              ;Все выводы порта А  выход
   out DDRA,temp0
   ser temp0              ;Все выводы порта B  выход
   out DDRB,temp0
   ldi temp0,0b11111100     ;Вывод 0 и 1 порта D вход
   out DDRD,temp0

   ldi temp0,0b00000011     ;подтяжка порта D включена
   out PortD,temp0

Start:
   ldi temp1,0b11111100      ;0
   ldi temp2,0b01100000     ;1
   sbic PinD,0              ;Проверяем нажатие кнопки 1
   rjmp Loop_3
Loop_1:
   sbic PinD,1              ;Проверяем кнопку 2
   rjmp Loop_2
ALL_OFF:
   clr temp1              ;Гасим все светодиоды
   out PortB,temp1
   rjmp Start
Loop_2:
   out PortB,temp2           ;Зажигаем 1
   rjmp Start
Loop_3:
   out PortB,temp1           ;Зажигаем 0
   rjmp Start




почему в симуляторе (AVR Studio) работает как надо, а в реале как описано выше?
DASM
Торможу спросянья, но по-моему Вам надо sbis а не sbic по логике писать
Первый во всяком случае
Chip115
А почему в таком виде в симуляторе работает, а на яву не хотит?
DASM
ну я не знаю, как Вы там в симуляторе кнопки нажимаете smile.gif
Chip115
Если прописать sbis то кнопки на +5 В надо вешать?
Yura_K
Может схемку набросаете?
DASM
У Вас -
sbic PinD,0 ;Проверяем нажатие кнопки 1
rjmp Loop_3
То есть при Ненажатой кнопке уровень высокий и прога сразу уходит на Loop_3 и зажигает "0". Вы же вроде хотели, чтобы это происходило при НАЖАТИИ, или не так ?
Yura_K
Цитата(DASM @ Dec 30 2007, 17:57) *
У Вас -
sbic PinD,0 ;Проверяем нажатие кнопки 1
rjmp Loop_3
То есть при Ненажатой кнопке уровень высокий и прога сразу уходит на Loop_3 и зажигает "0". Вы же вроде хотели, чтобы это происходило при НАЖАТИИ, или не так ?

Да, похоже так и работает, судя по описанию
DASM
Вторая команда тоже sbis должна быть
Yura_K
Цитата(Chip115 @ Dec 30 2007, 17:54) *
Если прописать sbis то кнопки на +5 В надо вешать?

Ничего вешать не надо, просто измените, как предлагал DASM
Chip115
Вот. Набросал по быстрому.


Заработала. Млин. А я голову ломал в чом дело. Вот еще не понятки. Зачем нужен подтягивающий резистор? Чтоб на PD был высокий уровень?
DASM
да. и резисторы омов 470 последовательно со светодиодами поставьте
Aesthete Animus
Цитата(Chip115 @ Dec 30 2007, 16:22) *
Вот еще не понятки. Зачем нужен подтягивающий резистор? Чтоб на PD был высокий уровень?

Во-первых, когда порт включен на вход, он находится в z-состоянии. Если при этом ни к чему не подключен, то образует элементраную антену, на которую вы рискуете поймать помеху. Во-вторых, после размыкания контакта, изза внутреннего паразитного конденсатора, уровень напряжения будет падать сравнмительно медленно, что не есть хорошо. Поэтому порт нужно подтягивать большИм (50к...100к) сопротивлением к плюс питанию.
defunct
Цитата(Aesthete Animus @ Dec 31 2007, 00:34) *
Во-первых, когда порт включен на вход, он находится в z-состоянии.
...
Поэтому порт нужно подтягивать большИм (50к...100к) сопротивлением к плюс питанию.

И это можно сделать не внося лишних элементов в схему, а просто включив внутренний pull-up резистор - записав в PORTxx "1".
DASM
Цитата(defunct @ Jan 3 2008, 01:28) *
И это можно сделать не внося лишних элементов в схему, а просто включив внутренний pull-up резистор - записав в PORTxx "1".

Что автор и сделал в первом посте
"ldi temp0,0b00000011 ;подтяжка порта D включена
out PortD,temp0"
Впрочем для кнопок, удаленных хоть на полметра такая подтяжка уже слабовата
Chip115
Цитата(DASM @ Jan 3 2008, 12:12) *
Впрочем для кнопок, удаленных хоть на полметра такая подтяжка уже слабовата

А что надо для этого?
__nik__
Рискну предложить оптрон.
DASM
Цитата(Chip115 @ Jan 3 2008, 14:17) *
А что надо для этого?

ну уже килоом 10, конденсаторик тоже не помешает, ну вообще от условий зависит - может и на Шоттки диодах защита понадобится
Chip115
А как сделать временую задержку в тини 2313 програируя на ассемблере? как я понимаю для осуществления задрежки можно использовать много путей. и как активировать таймер-счетчик в режиме таймера? В тини1200 идет конфигурирований по трем битам. А как в 2313 чтото не доходит 07.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.