Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Бутон със светодиод като тригер
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10838
Страница 1 от 3

Автор:  timt [ Вто Ное 27, 2012 9:43 pm ]
Заглавие:  Бутон със светодиод като тригер

Прикачени файлове:
f.JPG
Моля, дай те ми идея как на един от портовете на пик да поставя едновременно светодиод и бутон който при натискане да включва диода и при повторно натискане да го изключва. Не ми трябва схема с два бутона а един бутон на един порт.

Автор:  michev [ Вто Ное 27, 2012 10:23 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

Пусни си 1 таймер да цъка, на всяко четно събитие, правиш извода като изход и светваш/изгасяш светодиода, а на всяко нечетно - правиш извода вход и четеш бутона.

Автор:  stefan63 [ Вто Ное 27, 2012 10:24 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

При инициализация- пускаш таймер на 10 милисекунди ( Всъщност ако няма някакви ограничения - например много окастрен процесор - аз винаги използвам такъв таймер). Тоя таймер ти е на пркъсване. В процедурата на прекъсването - вдига се флаг - "Флаг10мс'. Вдигаш флаг 'светнато_неугасено'. Приготвяш някой друг брояч и флаг за обработка на бутон/ите. Отиваш в главния цикъл.

На всяко прекъсване по таймер -установяваш порта като вход, четеш го и записваш прочетеното някъде. Ако флагът 'светнато_неугасено' е вдигнат - обръщаш порта на изход с логическа 1-ца. Ако глагът е смъкнат - оставяш порта да бъд вход. Излизаш от прекъсването.

В главния цикъл проверяваш "Флаг10мс' ,и ако е вдигнат - изпълняваш всички процедури, които зависят от фактора период(ичност) - включително обработка на бутон.

Сложи някакъв резистор между входа и бутона , че да не прогориш порта при неправилна последователност на командите при обръщане от вход на изход.

Автор:  CarBeta [ Вто Ное 27, 2012 10:27 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

Тая схема е кофти решение! Диода ще си свети и без контролера докато е натиснат бутона, а ако в тоя момент RB0 е изход с ниско ниво може и той да светне. Иначе това дето искаш се прави като на определено време правиш порта вход и четеш състоянието на бутона, после пак го правиш изход за светодиода.

Автор:  timt [ Вто Ное 27, 2012 10:43 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

CarBeta написа:
Тая схема е кофти решение! Диода ще си свети и без контролера докато е натиснат бутона, а ако в тоя момент RB0 е изход с ниско ниво може и той да светне. Иначе това дето искаш се прави като на определено време правиш порта вход и четеш състоянието на бутона, после пак го правиш изход за светодиода.




Ще се опитам понеже схемата ми е такава и незнам как става номера ще си поиграя малко.

това е примерният код

list p=16f628
#include <P16f628.INC>


__CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF
swan equ 0x27
swanalt equ 0x28
Taste equ 0x2c


org 0


init
bsf STATUS, RP0

clrf OPTION_REG
BCF TRISA, 3
movlw B'00000000'
movwf TRISB
bcf STATUS, RP0
clrf PORTB

BCF PORTB,0



call BUTTON



BUTTON
BTFSS PORTB, 0
call resetbutton

BTFSC PORTB, 0
call invert


goto BUTTON

resetbutton
MOVLW 0
MOVWF swanalt
RETURN
invert
MOVLW 1
BTFSS PORTB, 0
MOVWF swan
MOVF swanalt,0
XORLW 1
BZ marke

Incf Taste,1
BTFSS Taste,0

BCF PORTB,0
BTFSC Taste,0

BSF PORTB,0
MOVLW 1
MOVWF swanalt

marke
return


end

Автор:  CarBeta [ Вто Ное 27, 2012 11:07 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

Докато RB0 ти е изход с ниско ниво(несветещ светодиод) винаги ще го прочиташ като 0, дори да му подадеш високо отвън. А като му подадеш високо ниво, в твоя случай директно 5v., си става директно късо и със сигурност ще повредиш RB0 защото през него ще протече доста повече от 25 ma. Е... остават ти още 7 опита с PORTB, докато не си оправиш схемата.

Ако тая схема ти е дадена от преподавател му кажи да се логне тук за малко.

Автор:  timt [ Вто Ное 27, 2012 11:21 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

Съгласен съм че не е най добрият вариант просто някъде съм го срещал а сега ми трябва този вариант или да почна да мисля за нов. Незнам с таймера как ще се държи но ще се опитам да го подкарам някакси.

Автор:  ToHu [ Сря Ное 28, 2012 11:05 am ]
Заглавие:  Re: Бутон с светодиод като тригер

Варианта е ОК, само размени местат на светодиода и бутона, т.е. светодиона да е от + към пина, а бутона към маса. Това че светодиода ще свети като натискаш бутона може би няма да е фатално защото когато светодиода е светнат и натиснеш бутона нищо няма дасе промени, просто ще си свети, а след отпускане ще изгасне. Обратно, като е изгаснал ще светне още при натискането, и така или иначе след това състоянието му ще е пак светнато. Единствено събитията ще настъпват разместени спрямо фронта, светване при преден, игаснене при заден .. или по скоро обратното щото бутона ти сваля в 0.
Относно самото реализиране колегите горе са писали, примерно веднъж на 10 ли 100 или колкото искаш ms слагаш пина като вход и го проверяваш, след това си го връщаш изход с нужното ниво.

Автор:  Н'бабане Гт'муан'га [ Сря Ное 28, 2012 11:59 am ]
Заглавие:  Re: Бутон с светодиод като тригер

Може да опиташ ето така. Тогава светодиода ще го палиш с 0 и ще го гасиш с 1, а когато превключиш пина на вход, ще можеш да четеш 0 ако бутона е насиснат, или 1 ако не е.

Прикачени файлове:
p1.PNG
p1.PNG [ 8.95 KiB | Прегледано 2917 пъти ]

Автор:  timt [ Сря Ное 28, 2012 1:28 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

Дай малко код като пример.

Автор:  Н'бабане Гт'муан'га [ Сря Ное 28, 2012 2:07 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

timt написа:
Дай малко код като пример.


Ами... ето. Приемаме че си на порт RA0 с някакъв пик. Пиша ти го сега на момента, така че може и да има някаква грешка, но идеята би трябвало да е ясна.

Код:
unsigned char cnt=0,led=0;
unsigned char sw=1,swo=0;
while (1) {
    if (!(cnt++)) {
        TRISA|=1;
        sw=(PORTA&1);
        TRISA&=~1;
        if (sw==0 && swo==1) led^=1;
        led? PORTA&=~1 : PORTA|=1;
        swo=sw;
    }
    delay_ms(1);
}

Автор:  timt [ Сря Ное 28, 2012 2:31 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

От този код нищо не разбрах :? Програмирам на асемблер и ми е малко трудно с другите.

Автор:  Н'бабане Гт'муан'га [ Сря Ное 28, 2012 2:46 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

Eee... ако С не разбираш... Не ми се пише сега на асемблер, пък и съм го позабравил вече.

Автор:  CarBeta [ Сря Ное 28, 2012 6:44 pm ]
Заглавие:  Re: Бутон с светодиод като тригер

Варианта със схемата на колегата от Мутум'ба ще стане. Но има един малък проблем(поне за мен). Светодиода ще светва след като се отпусне бутона, а ще угасва веднага при натискането му. Ако това не е проблем схемата е ок. Ако се изисква незабавна реакция на светодиода при натискане на бутона(без значение колко време стои натиснат) - на първата схема трябва да се добави един резистор между бутона и VDD. Останалото се движи от софтуера.

Таймер 0 се пуска 1:128. С 4 mHz кристал ще имаш прекъсване около 30 пъти в секунда за да си четеш бутона. Останалото време е за светодиода. Като влезе в прекъсване правиш RB0 вход(BSF TRISB, 0), четеш RB0 и в зависимост от състоянието му с два флага натиснат/отпуснат бутон определяш дали да светне или да угасне диода след като излезеш от прекъсването. Пак правиш RB0 изход(BCF TRISB, 0) и отиваш да чакаш ново прекъсване. Междувременно в зависимост от флаговете светваш/гасиш диода.

Автор:  stefan63 [ Сря Ное 28, 2012 10:29 pm ]
Заглавие:  Re: Бутон със светодиод като тригер

Ако във варанта Мутум'ба се натисне бутонът - кой параметър на процесора осигурява прочитането на лог.0?

Темата е много шантава - проста схема, неясни ограничения. Основният проблем е нискоомната верига на ЛЕД-а. Ако бутонът е към маса(през резистор за защита) , а вместо лед се сложи резистор/транзистор (и ледът след него) - ще стане културно - ледът ще може да се угаси при натискането на бутона и ще може да се държи угасен и докато е натиснат бутона. Трабва и някакъв подпиращ (вътершния на входа например) резистор към плюсовата шина.

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/