roboforum.ru

Технический форум по робототехнике.

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

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

Vovan » 23 июл 2009, 14:30

Yuraskas писал(а):как тухнуть при отпускании я пока не придумал
так всё таки должно (когда-нибудь) тухнуть :wink:
а если просто зажечь или просто потушить, то всё верно, кроме: 1. почему вторая строчка после SEI закомментирована? (не работает!) 2. в комментариях зажигаем\гасим поменять местами, если СД вторым своим хвостом на минус посажен.

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

Yuraskas » 24 июл 2009, 05:41

Vovan писал(а):так всё таки должно (когда-нибудь) тухнуть


Должно конечно, и уже тухнет! :)
Код: Выделить всёРазвернуть
.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

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

SBI DDRD,0         ;PD0 на выход
CBI PORTD,0         ;убеждаемся что диод не горит :)

LDI R16,0x1         ;по изменению уровня INT0
OUT MCUCR,R16

LDI R16,1<<INTF0
OUT GICR,R16

SEI

Main:
RJMP Main

INT_0:
SBIS PIND,0
RJMP Light_on         ;зажигаем диод
SBIC PIND,0
RJMP Light_off         ;гасим диод
RETI            ;если вдруг третье состояние )))

Light_on:
SBI PORTD,0
RETI

Light_off:
CBI PORTD,0
RETI

P.S. Всем большое спасибо за ответы! :) А я буду разбираться дальше, на очереди таймеры...

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

avr123.nm.ru » 24 июл 2009, 09:57

если INT0: это обработчик прерывания то нафига в нем в нутри RETI ...
Поще на Си писать наверно - там компилятор чуток помогает.

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

boez » 24 июл 2009, 10:33

Так там же в комменте написано - если вдруг на ребро упадет или в воздухе зависнет ;)

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

avr123.nm.ru » 24 июл 2009, 10:35

Ау меня же написано ... в нем в нутри

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

Vovan » 24 июл 2009, 21:58

Так он всё равно не слушает что говорят, по своему делает... Я же дал код давно и гаснет и горит по прерыванию без опроса и нагрузки процессора (sbis, sbic - ф топку!)... а можно тот код ваще до 5 строчек свести, но походу это не надо: ни си ни правильный асм...
Зачем спрашивал человек? непонятно... :crazy:

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

avr123.nm.ru » 24 июл 2009, 22:05

Ну научится то он хочет и наверно научится в конце концов, но советов и правда не слушает хотя спрашивает.

Наверно на парадоксах работает.

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

Yuraskas » 25 июл 2009, 06:35

2 Vovan: вот именно что вы дали код, готовый, для меня же больший кайф дойти до него самому. На мой взгляд для обучения было бы полезнее объяснить чем плох мой код и какие методы нужно применить чтобы его улучшить, например те же sbis, sbic - чем они плохи? А что касается советов, я их слушаю, но на С писать пока все равно не хочу :)
А тем временем кнопка всё же не работает, и дело тут уже не в программе...
Схема такая:
Изображение
Нажимаю на кнопку - не работает, выпаиваю кнопку, прикасаюсь щупом к сопротивлению, либо прямо к ноге МК - работает... Объясните пожалуйста в чём дело...

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

avr123.nm.ru » 25 июл 2009, 07:47

Наверно подтяжки нет. А от пальца расколбас создает на ножке единички и нули и срабатывает. А может вообще нет такта в МК а при касании он тактируется. Правда без такта он и не прошивался бы. Залейте прогу которая в начале чуток просто помигает светодиодом чтобы убедится что с тактом все стабильненько. По длительности горения светика можно вычислить частоту такта AVR.

Вы опять проект не цепляете ? У вас ПРИНЦИП такой чтоль ?

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

Yuraskas » 25 июл 2009, 08:12

Внутренний подтяг включен, на реальной схеме стоит кварц на 8Mhz. Что касается помигать - попробую. По поводу проекта, не прикладывал потом что в проекте вроде всё шоколадно, а вот на реальном макете - никак :(
Вложения
Button.rar
(13.06 КиБ) Скачиваний: 10

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

Vovan » 25 июл 2009, 10:08

Вы пишите:
пока поставил себе задачу зажигать светодиод при нажатии на кнопку (по прерыванию)
я и предложил код (очень простой) зажигать светодиод используя внешние прерывания. Вполне резонно (и логично!) и гасить используя то же.
Т.е. есть вн. прерывание - горим, нет - гасим. Зачем в обработчике задействовать процессор? Это тоже самое что: ощутив ожёг не отдёргивать руку, а сначала посмотреть и убедиться - а точно ли рука касается чего-то горячего? и убедившись, спокойно отодвинуть (не отдёрнуть!) руку. Именно так Вы поступаете используя опрос портов (sbis и sbic) в обработчике.
Я не говорю что такое справедливо всегда, но в данном случае - это очевидно.
Самому дойти до этого очень похвальное желание, однако как идти через глубокую реку не зная броду?
Рекомендую, коль попалась река под названием "Внешние прерывания" пойти там где и указывают люди не раз проходившие по этой дороге...
На мой взгляд для обучения было бы полезнее объяснить чем плох мой код и какие методы нужно применить чтобы его улучшить, например те же sbis, sbic - чем они плохи? А что касается советов, я их слушаю, но на С писать пока все равно не хочу :)
а на мой взгяд - если занялись вн. прерываниями - доведите это дело до конца, "ведь это нужно Вам" (с). Слушать советы - мало, "их нужно применять" (с) :wink:
sbis и sbic ни чем не плохи, однако если пользуетесь ими, нужно знать для чего ЭТО и когда применяется (в этом месте опять хочется процитировать avr123, но удержусь :) ) А код Ваш афтоматически улучшится, если Вы поэтапно и до конца разберётесь сначала с одним, затем с другим, затем с n-ным...
А что непонятного в коде который я дал? Там по-моему и вопрос-то воткнуть некуда...

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

Duhas » 25 июл 2009, 10:44

Vovan, дык в твоем коде там будут мерцания с заоблачной частотой... а он как я понял фиксирует изменение уровня прерыванием, в обработчике проверяет уровень.... мне кажется вполне нормальный код для именно такой функции...

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

Vovan » 25 июл 2009, 12:15

Хех... а в его коде "зажечь светодиод" (не гася) не тоже самое происходит? :wink:
Вы о какой частоте щас?
Добавляю, спустя 5мин: код в последнем прикреплённом архиве ваще не рабочий :crazy: , искать ошибки в нём не хочу и не буду, потому что походу топика задача и условия невнятные, мягко говоря...
Хотелось бы услышать: что мешает зажигать и гасить СД по вн.прерыв.? (INT0)

ЗЫ: Млин, ну реально: диагноз благоприятный если начать с си - там стока подсказок, мастеров, отладчиков и т.д. - всё для начинающего plug & play... и 4 страницы ниочём писать не придётся...
Здесь я двумя, даже тремя руками поддерживаю avr123 :)

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

Yuraskas » 27 июл 2009, 04:46

2 Vovan: ваш код у меня почему-то не заработал, а мой (с последней ссылки) работает. Хотя возможно тут что-то не то со схемой, как я уже говорил, просто прикасаюсь щупом к выводу и проходит срабатывание, поэтому программный вопрос отходит на второй план, сперва нужно понять как сделать чтобы схема стабильно срабатывала от кнопки и не срабатывала от прикосновения.

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

Vovan » 27 июл 2009, 11:49

Не поленился и заснял на видео: в архиве Button - работа Вашего кода и Ваш hex. Код работает непонятно как, а именно - может при нажатии на кнопку загораться, а может тухнуть, рАвно то же и при включении питания...
в архиве knopka - работа моего кода и мой hex. Код работает чётко никаких проблемм :)
Вложения
knopka.rar
(781.83 КиБ) Скачиваний: 14
Button.rar
(1.76 МиБ) Скачиваний: 13


Rambler\'s Top100 Mail.ru counter