|
Помогите с первой программой, Tiny2313 |
|
|
|
Dec 30 2007, 12:05
|

Участник

Группа: Участник
Сообщений: 43
Регистрация: 28-12-07
Пользователь №: 33 709

|
Всем привет!!! Стал изучать програмирование МК на асемблере. Столкнулся с проблемой. В симуляторе (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) работает как надо, а в реале как описано выше?
|
|
|
|
|
Dec 30 2007, 12:55
|
Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821

|
Может схемку набросаете?
--------------------
Чудес не бывает - бывает мало знаний и опыта!
|
|
|
|
|
Dec 30 2007, 13:01
|
Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821

|
Цитата(DASM @ Dec 30 2007, 17:57)  У Вас - sbic PinD,0 ;Проверяем нажатие кнопки 1 rjmp Loop_3 То есть при Ненажатой кнопке уровень высокий и прога сразу уходит на Loop_3 и зажигает "0". Вы же вроде хотели, чтобы это происходило при НАЖАТИИ, или не так ? Да, похоже так и работает, судя по описанию
--------------------
Чудес не бывает - бывает мало знаний и опыта!
|
|
|
|
|
Dec 30 2007, 13:06
|
Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821

|
Цитата(Chip115 @ Dec 30 2007, 17:54)  Если прописать sbis то кнопки на +5 В надо вешать? Ничего вешать не надо, просто измените, как предлагал DASM
--------------------
Чудес не бывает - бывает мало знаний и опыта!
|
|
|
|
|
Dec 30 2007, 13:22
|

Участник

Группа: Участник
Сообщений: 43
Регистрация: 28-12-07
Пользователь №: 33 709

|
Вот. Набросал по быстрому. Заработала. Млин. А я голову ломал в чом дело. Вот еще не понятки. Зачем нужен подтягивающий резистор? Чтоб на PD был высокий уровень?
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 30 2007, 21:34
|

Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317

|
Цитата(Chip115 @ Dec 30 2007, 16:22)  Вот еще не понятки. Зачем нужен подтягивающий резистор? Чтоб на PD был высокий уровень? Во-первых, когда порт включен на вход, он находится в z-состоянии. Если при этом ни к чему не подключен, то образует элементраную антену, на которую вы рискуете поймать помеху. Во-вторых, после размыкания контакта, изза внутреннего паразитного конденсатора, уровень напряжения будет падать сравнмительно медленно, что не есть хорошо. Поэтому порт нужно подтягивать большИм (50к...100к) сопротивлением к плюс питанию.
|
|
|
|
|
Jan 3 2008, 06:12
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(defunct @ Jan 3 2008, 01:28)  И это можно сделать не внося лишних элементов в схему, а просто включив внутренний pull-up резистор - записав в PORTxx "1". Что автор и сделал в первом посте "ldi temp0,0b00000011 ;подтяжка порта D включена out PortD,temp0" Впрочем для кнопок, удаленных хоть на полметра такая подтяжка уже слабовата
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|