Технический форум по робототехнике.
Duhas » 10 ноя 2009, 22:29
подключить пин VCC к питанию ) и GND все к земле..
Master » 11 ноя 2009, 11:03
И дорожки руками лучше не трогать во время работы девайса, а то долбанешь статикой.
milkpower » 11 ноя 2009, 14:45
чтобы новые темы не плодить, спрошу здесь.
кто знает небольшой алгоритм для кнопок, чтоб если кнопка все еще нажата, то эта кнопка игнорировалась бы, чтобы исключить автоповтор.
а-то что-то мой алгоритм не работает.
желательно бы конечно на асме, но и С хорошо будет, если с коментариями, пожалуйста

=DeaD= » 11 ноя 2009, 14:52
А в чем проблема???
Инициализация:
- Код: Выделить всё • Развернуть
Перем СтатусКнопки=0;
Тело цикла:
- Код: Выделить всё • Развернуть
КнопкаНажатаСейчас=ПолучитьИзПорта();
ТолькоЧтоНажали=0;
Если СтатусКнопки=0 Тогда ТолькоЧтоНажали=КнопкаНажатаСейчас
СтатусКнопки=КнопкаНажатаСейчас
Добавлено спустя 4 минуты 17 секунд:Только это от дребезга контактов не лечит

avr123.nm.ru » 11 ноя 2009, 14:56
milkpower писал(а): что-то мой алгоритм не работает.

Можно его увидеть ?
milkpower » 11 ноя 2009, 15:25
2avr123
avr123.nm.ru писал(а):Можно его увидеть ?
легко, может и проблему свежим взглядом увидите
- Код: Выделить всё • Развернуть
key_prs:
;обработчик кнопок (return возвращаемый результат, либо 0 если кнопка еще нажата либо, ничего не нажато)
;butpres старое значение нажатых кнопок
clr return
in temp,Pind
mov temp1,temp
and temp1,butpres
breq key_ret
mov butpres,temp
mov return,temp
ret
key_ret:
mov butpres,temp
ret
galex1981 » 11 ноя 2009, 16:26
Тебе нужно задержку ввести после определения нажатой клавиши, чтобы исключить дребезг контактов
executer » 11 ноя 2009, 20:02
В книжке читал способ лечения от дребезга (программный конденсатор типа):
- Код: Выделить всё • Развернуть
int С=0; // воображаемый кондер с зарядом 0-100%
short ButNoise=0; // это кнопка после шумодава
short Pressed=0; // кнопка была нажата в прдидущем скане
while(1)
{
if(buton&&(C<100)) C++; else if(C>0) C--;
if(C>90) ButNoise=1;
if(C<10) ButNoise=0;
if(ButNoise&&!Pressed) тут делаем чтото по начатию конпки
if(!ButNoise&&Pressed) тут делаем чтото по отпусканию конпки
Pressed = ButNoise;
}
ALHIMIK » 11 ноя 2009, 20:41
Гхм...
не ужели я один вижу вот это - см рис
не обявленная
не нужная
переменная
- Вложения
-

- РИС
- 123.JPG (11.46 КиБ) Просмотров: 1544
galex1981 » 11 ноя 2009, 22:39
Эта переменная скорее всего объявлена глобально
hadok » 11 ноя 2009, 23:07
Вот весь код полностью:
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 8000000UL
float d;
int main(void) {
DDRD = 0xff;
DDRC = 0xff;
DDRA = 0x00;
DDRA = 0x00;
d=10;
PORTA=0xFF;
while (1) {
PORTC=~PINA;
_delay_ms(d);
}
}
ALHIMIK » 11 ноя 2009, 23:12
а зачем она ?

Duhas » 11 ноя 2009, 23:15
_delay_ms(d);

ALHIMIK » 11 ноя 2009, 23:17
пардон
пора спать
milkpower » 13 ноя 2009, 20:27
победил дребезг контактов, но аппаратно
пришлось собрать небольшую платку на 4043 (4rs-тригера)