Тупость, не работает кнопка :(

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Тупость, не работает кнопка :(

Сообщение Yuraskas » 21 июл 2009, 14:06

Здравствуйте, только начал заниматься с контроллерами, пока поставил себе задачу зажигать светодиод при нажатии на кнопку (по прерыванию).
Светодиод подключаю через сопротивление к PD0, и PD2 через кнопку подключаю на землю.
Наваял небольшую программку:
Код: Выделить всё
.include "m8def.inc"

.cseg
.org 0x0000

RJMP Reset
RJMP INT_0
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI

Reset:

LDI R16,low(RAMEND)
OUT SPL,R16
LDI R16,high(RAMEND)
OUT SPH,R16

SEI

CBI DDRD,2            ;конфигурируем PD2 на вход
SBI PORTD,2

LDI R16,0x2            ;по восходящему фронту на INT0
OUT MCUCR,R16

LDI R16,1<<INTF0                        ;разрешаем прерывания c INT0
OUT GICR,R16

Main:
RJMP Main

INT_0:
SBI DDRD,0
SBI PORTD,0
RETI


Вроде как бы все должно работать, ан не работает, светодиод не горит :( Причем если тупо установить бит в PD0 - горит, а через прерывание не хочет, подскажите пожалуйста, куда копать?
И еще такой вопрос: после стирания контроллера в программной памяти (и вроде как в EEPROM) каждый раз в разных местах остаются данные типа 7FFF или F7FF. Т.е. полного стирания не происходит. Как от этого избавиться?
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Тупость, не работает кнопка :(

Сообщение Victorovych » 21 июл 2009, 14:55

Код: Выделить всё
LDI R16,0x2            ;по восходящему фронту на INT0OUT MCUCR,R16

Это прерывание по спаду

Код: Выделить всё
LDI R16,1<<INTF0                        ;разрешаем прерывания c INT0OUT GICR,R16

Фигня полная,нада
Код: Выделить всё
ldi r16,$40
out gicr,r16
Аватара пользователя
Victorovych
 
Сообщения: 491
Зарегистрирован: 20 сен 2007, 11:44
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич

Re: Тупость, не работает кнопка :(

Сообщение Yuraskas » 21 июл 2009, 15:05

=DeaD= писал(а):ой ли PD2, а не PD1 ?

Я канешна могу ошибаться, ибо ламер, но почему-то думал что
Код: Выделить всё
CBI DDRD,0 ;обнуляет бит в порту PD0
...
CBI DDRD,2 ;обнуляет бит в порту PD2
и т.д.

Это не так?

Добавлено спустя 6 минут 13 секунд:
Victorovych писал(а):
Это прерывание по спаду

даташита нет сейчас под рукой, не могу посмотреть, возможно что просто коммент не поправил, сперва по-другому хотел..

Фигня полная,нада
Код: Выделить всё
ldi r16,$40
out gicr,r16


Фигня не фигня, а некоторые и так пишут, в частности на easyelectroniсs такой приём со сдвигом видел, да и в симуляторе он прокатывает. Но все же попробую и просто константой.
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Тупость, не работает кнопка :(

Сообщение blindman » 21 июл 2009, 15:07

Фигня полная,нада

Полегче, дружище :) Эти 2 куска кода эквивалентены

По правильному, надо
Код: Выделить всё
LDI R16,1<<INT0


Но по счастливому стечению обстоятельств :) INT0 и INTF0 - оба бит номер 7

=DeaD= писал(а):=DeaD= писал(а):ой ли PD2, а не PD1 ?

Именно PD2
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Тупость, не работает кнопка :(

Сообщение avr123.nm.ru » 21 июл 2009, 15:08

Yuraskas писал(а):Здравствуйте, только начал заниматься с контроллерами, пока поставил себе задачу зажигать светодиод при нажатии на кнопку (по прерыванию).


Именно такой пример есть на страничке о прерываниях в AVR - http://avr123.nm.ru/03.htm - вы можете посимулировать нажатие кнопочек и прерывания от них.

СИЛЬНО РЕКОМЕНДУЮ !!! Учиться программаировать AVR сразу на Си. Это гораздо проще и ИМХО удобней - так как вам будет помогать мастер конфигурации AVR встроеный в компиляторы CVAVR и ICC .
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Тупость, не работает кнопка :(

Сообщение Victorovych » 21 июл 2009, 15:20

blindman писал(а):
Фигня полная,нада

Полегче, дружище :) Эти 2 куска кода эквивалентены

По правильному, надо
Код: Выделить всё
LDI R16,1<<INT0


Но по счастливому стечению обстоятельств :) INT0 и INTF0 - оба бит номер 7


Угу перегрелся чуток
Тока 6, а не 7 если с нуля считать :)
Аватара пользователя
Victorovych
 
Сообщения: 491
Зарегистрирован: 20 сен 2007, 11:44
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич

Re: Тупость, не работает кнопка :(

Сообщение blindman » 21 июл 2009, 15:21

Точно, 6
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Тупость, не работает кнопка :(

Сообщение Yuraskas » 21 июл 2009, 15:39

Так почему кнопка-то не работает? :(
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Тупость, не работает кнопка :(

Сообщение avr123.nm.ru » 21 июл 2009, 15:44

Может подтяжку включить ? Я кнопки рекомендкю подключать к МК только через резистор - 200-400 Ом

И очень советую скачать и использовать PROTEUS - для обучения очень полезно, потому как можно видеть что у МК внутри творится и часто быстрей становится ясно "ПОЧЕМУ ..."

Когда задаете вопросы можно прикладывать проект - тогда проще посмотреть что у вас и помочь легче.

Victorovych, вы чт-то разцитировались ! :D
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Тупость, не работает кнопка :(

Сообщение Yuraskas » 21 июл 2009, 15:54

Может подтяжку включить

т.е. встроенного резистора не хватает? только ламерский вопрос - его до кнопки подключать, или после?
а proteus где-то лежал, надо будет поставить..
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Тупость, не работает кнопка :(

Сообщение Victorovych » 21 июл 2009, 15:56

Может в программаторе проблема...
PD2 точно на землю садишь?
Аватара пользователя
Victorovych
 
Сообщения: 491
Зарегистрирован: 20 сен 2007, 11:44
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич

Re: Тупость, не работает кнопка :(

Сообщение avr123.nm.ru » 21 июл 2009, 15:56

Вы проверьте что на ножке происходит. Очень желательно ПРОЕКТ выложить чтоб не сидеть не гадать на гуще кофейной.

PROTEUS советую свежий скачать - http://proteus123.narod.ru

Если тяжко 70 Мб качать то скачайте всего 5 - это прекрасный симулятор AVR - VMLAB ! Выше я давал вам линк где есть пример для него по прерываниям на INTx
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Тупость, не работает кнопка :(

Сообщение Yuraskas » 22 июл 2009, 10:02

Вот, вроде наваял проект в протеусе
Button.rar
(13.66 КиБ) Скачиваний: 8
реальная схема такая же, только нет кнопки на сброс. Диод горит, при нажатии на кнопку - гаснет.
Код: Выделить всё
.include "m8def.inc"
.cseg
.org 0x0000

RJMP Reset
RJMP INT_0
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI

Reset:

LDI R16,low(RAMEND)
OUT SPL,R16
LDI R16,high(RAMEND)
OUT SPH,R16

SEI

CBI DDRD,2      ;конфигурируем PD2 на вход
SBI PORTD,2

SBI DDRD,0      ;PD0 на выход
SBI PORTD,0      ;зажигаем светодиод при старте МК

LDI R16,0x2      ;по нисходящему фронту на INT0
OUT MCUCR,R16

LDI R16,1<<INTF0
OUT GICR,R16

Main:
RJMP Main

INT_0:
CBI PORTD,0      ;по прерыванию светодиод гасим
RETI

по факту - нифига не гаснет :(, точнее, получилось как-то погасить, когда случайно задел щупом мультиметра ногу PD2. На PD2 почему-то 0,5В хотя на сколько я понимаю, если включена внутренняя подтяжка то должно быть напряжение питания.
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Тупость, не работает кнопка :(

Сообщение galex1981 » 22 июл 2009, 10:05

Слушай, а какие фузы ты перешиваешь, напиши
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Тупость, не работает кнопка :(

Сообщение avr123.nm.ru » 22 июл 2009, 10:06

Подумай чуток что нужно в проект КЛАСТЬ что бы был смысл в его выкладывании !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7