59 сообщений 59 4 спасибо за тему 4
Опции темы
Pugnator

готово, сменил на автоматическую регистрацию

гут! вошел smile.gif
здесь - "Tips 'n Trics для микроконтроллеров" ?
Критерием истины - является практика ! (с)
---
Difficult we made yesterday impossible we are making now!
Agassy, отдельную тему создавай
Excuses are like assholes: everybody's got one
ок! готово wink.gif
Критерием истины - является практика ! (с)
---
Difficult we made yesterday impossible we are making now!
А можно ссылку?
спс 1 Кто сказал спасибо sed0ff
можно
Критерием истины - является практика ! (с)
---
Difficult we made yesterday impossible we are making now!
Хлопцы, не могу щас с работы в хелп посмотреть, но во первых, в мбейсике - точно - есть в стоковой библиотеке функция Button (порт, х, y, z).
Посмотрите в хелпе параметры. Вроде как задается порт, нога, отжатие/нажатие и длительность удержания в нажатом/отжатом состоянии, если все совпало, результат будет true. И не нужны никакие опросы в цикле.
Про подтяжку ноги - наверняка Лавр имел ввижу внешнюю подтяжку.
Classic forever!
Oxygen,
The Button Library provides routines for detecting button presses and debouncing (eliminating the influence of contact flickering upon pressing a button).


То биш главная задача функции - программный антидребезг контактов.

Код
unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);


Parameter port specifies the location of the button; parameter pin is the pin number on designated port and goes from 0..7; parameter time is a debounce period in milliseconds; parameter active_state can be either 0 or 1, and it determines if the button is active upon logical zero or logical one.


То есть возвращает от 1 до 255 в миллисек сколько было нажато или отжато.
Во-первых не для того придумано, во-вторых, у себя я аппаратный антидребезг на кондере и резисторе сделал, ну и времена нужны более 2 сек.

Вот тут с картинками, только антидребезг убран, ибо протеус все равно его не обрабатывает
http://nonamegarage.com/phpBB3/viewtopic.p...=2&p=30#p30
Excuses are like assholes: everybody's got one
Pugnator, Да, значит не годится...
Ну тогда только отлавливать прерыванием нажатие, засекать время и ждать прерыванием же отжатия, если между ними будет тостаточно времени, тогда профит.
Classic forever!
Oxygen, примерно так я и сделал.
Excuses are like assholes: everybody's got one
итак, Новый год на дворе
Гирлянды в магазах не впечатляют... в итоге была куплена светодиодная гирлянда в количестве 2-х штук, по 50 светодиодов. Батарейная, а значит светодиоды включены паралельно
Внутри одной хотя бы был токоогранич резистор...во второй - нет.
Итак, был взято то, что было под рукой - PIC12F675, транзистор 2SC1815, резистор - 2к в базу.
Токоограничивающий оставлен какой был.
В программе немного индусского кода, типа проверки if char >=255, но просто там изначально был int.
Да и времени было только 2 часа
http://pastebin.com/cP4vTm04

Переключение режимов идет методом включения-выключения. Никаких дополнительных кнопок.
Микроконтроллер висит навесным монтажем, внутренний осциллятор, ресет - внутренний режим.
4МГц, софтовий ШИМ.

Надо заимпрувить, подчистить, добавить плюшек
12-й шьется по двум проводам
Excuses are like assholes: everybody's got one
Блин, всё-таки надо ещё и пики освоить! bu.gif

Могу ток предложить эффекты! мне очень понравилось когда две гирлянды в разных вариациях включаются поочереди, + бегущий огонь.
Ещё прикольно - если повесть с разных строн на ёлку, и попеременно включать - то игрушки как будто начинают поворачиваться!
Двиг 2103, переделанный ОЗОН,
БСЗ, автоматический подсос,
Tomagavk с АвтоЗапуском, ЦЗ,
пружины от 2104, усиленные проставки!
+1 1 Кто согласен с автором Dolfinchik
Dolfinchik, ну смотри, в принципе, на руках 8 ног, из них 6 можно заюзать.
Если аккуратно подпаять SMD в корпусах SOT23 + SMD резисторы, то 6 штук влезет рядом с батарейкой. Главное - аккуратность. Потом залить термоклеем.
Если бы был SSOP PIC у меня - было бы удобней. а так DIP8 не очень удобен(
Но щас бежать в магазины за ним - не хочется. Тем более у меня в коробках их полно.
Сечас включена только одна лента диодов.
Реализовано:
Плавное включение
Плавное выключение
Сочетание обоих.

Что ещё можно с одной лентой придумать? Бегущую волну тут не сделать никак....

Переключение режимов методмо включения-выключения гирлянды.
В еепроме хранится номер эффекта, который на запуске ПИКа инкрементируется и гоняется по кругу
Excuses are like assholes: everybody's got one
столько что обнаружена бага в продуктах microe, в С, Б, П
во всех версиях под 16-ю серию

При использовании обратной нотации не происходит обработка бита

LED = 1 ^ LED;

генерирует следующий код

;RA2_int.c,24 :: void interrupt()
;RA2_int.c,26 :: if(INTF_bit)
0x000B 0x1C8B BTFSS INTF_bit, BitPos(INTF_bit+0)
0x000C 0x2812 GOTO L_interrupt2
;RA2_int.c,28 :: LED = 1^LED;
0x000D 0x2810 GOTO L__interrupt6
0x000E 0x1407 BSF RC0_bit, BitPos(RC0_bit+0)
0x000F 0x2811 GOTO L__interrupt7
L__interrupt6:
0x0010 0x1007 BCF RC0_bit, BitPos(RC0_bit+0)
L__interrupt7:
;RA2_int.c,29 :: INTF_bit = 0;
0x0011 0x108B BCF INTF_bit, BitPos(INTF_bit+0)
;RA2_int.c,30 :: }
L_interrupt2:
;RA2_int.c,31 :: }
L_end_interrupt:


Тогда как

LED = LED ^ 1; и LED ^= 1;

;RA2_int.c,24 :: void interrupt()
;RA2_int.c,26 :: if(INTF_bit)
0x000B 0x1C8B BTFSS INTF_bit, BitPos(INTF_bit+0)
0x000C 0x2810 GOTO L_interrupt2
;RA2_int.c,28 :: LED = LED^1;
0x000D 0x3001 MOVLW 1
0x000E 0x0687 XORWF RC0_bit, 1
;RA2_int.c,29 :: INTF_bit = 0;
0x000F 0x108B BCF INTF_bit, BitPos(INTF_bit+0)
;RA2_int.c,30 :: }
L_interrupt2:
;RA2_int.c,31 :: }
L_end_interrupt:


В результате в первом случае
0x000D 0x2810 GOTO L__interrupt6


Никогда не будет выполнено действие,а во втором случае
0x000D 0x3001 MOVLW 1
Excuses are like assholes: everybody's got one

Войти, чтобы ответить.