| Автор |
Съобщение |
|
timt
Ранг: Форумен бог
Регистриран на: Вто Ное 27, 2012 9:27 pm Мнения: 2011
|
 Бутон със светодиод като тригер
Моля, дай те ми идея как на един от портовете на пик да поставя едновременно светодиод и бутон който при натискане да включва диода и при повторно натискане да го изключва. Не ми трябва схема с два бутона а един бутон на един порт.
Последна промяна timt на Сря Ное 28, 2012 9:10 pm, променена общо 1 път
|
| Вто Ное 27, 2012 9:43 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Бутон с светодиод като тригер
Пусни си 1 таймер да цъка, на всяко четно събитие, правиш извода като изход и светваш/изгасяш светодиода, а на всяко нечетно - правиш извода вход и четеш бутона.
|
| Вто Ное 27, 2012 10:23 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Бутон с светодиод като тригер
При инициализация- пускаш таймер на 10 милисекунди ( Всъщност ако няма някакви ограничения - например много окастрен процесор - аз винаги използвам такъв таймер). Тоя таймер ти е на пркъсване. В процедурата на прекъсването - вдига се флаг - "Флаг10мс'. Вдигаш флаг 'светнато_неугасено'. Приготвяш някой друг брояч и флаг за обработка на бутон/ите. Отиваш в главния цикъл.
На всяко прекъсване по таймер -установяваш порта като вход, четеш го и записваш прочетеното някъде. Ако флагът 'светнато_неугасено' е вдигнат - обръщаш порта на изход с логическа 1-ца. Ако глагът е смъкнат - оставяш порта да бъд вход. Излизаш от прекъсването.
В главния цикъл проверяваш "Флаг10мс' ,и ако е вдигнат - изпълняваш всички процедури, които зависят от фактора период(ичност) - включително обработка на бутон.
Сложи някакъв резистор между входа и бутона , че да не прогориш порта при неправилна последователност на командите при обръщане от вход на изход.
|
| Вто Ное 27, 2012 10:24 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Бутон с светодиод като тригер
Тая схема е кофти решение! Диода ще си свети и без контролера докато е натиснат бутона, а ако в тоя момент RB0 е изход с ниско ниво може и той да светне. Иначе това дето искаш се прави като на определено време правиш порта вход и четеш състоянието на бутона, после пак го правиш изход за светодиода.
|
| Вто Ное 27, 2012 10:27 pm |
|
 |
|
timt
Ранг: Форумен бог
Регистриран на: Вто Ное 27, 2012 9:27 pm Мнения: 2011
|
 Re: Бутон с светодиод като тригер
Ще се опитам понеже схемата ми е такава и незнам как става номера ще си поиграя малко. това е примерният код 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
|
| Вто Ное 27, 2012 10:43 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Бутон с светодиод като тригер
Докато RB0 ти е изход с ниско ниво(несветещ светодиод) винаги ще го прочиташ като 0, дори да му подадеш високо отвън. А като му подадеш високо ниво, в твоя случай директно 5v., си става директно късо и със сигурност ще повредиш RB0 защото през него ще протече доста повече от 25 ma. Е... остават ти още 7 опита с PORTB, докато не си оправиш схемата.
Ако тая схема ти е дадена от преподавател му кажи да се логне тук за малко.
|
| Вто Ное 27, 2012 11:07 pm |
|
 |
|
timt
Ранг: Форумен бог
Регистриран на: Вто Ное 27, 2012 9:27 pm Мнения: 2011
|
 Re: Бутон с светодиод като тригер
Съгласен съм че не е най добрият вариант просто някъде съм го срещал а сега ми трябва този вариант или да почна да мисля за нов. Незнам с таймера как ще се държи но ще се опитам да го подкарам някакси.
|
| Вто Ное 27, 2012 11:21 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: Бутон с светодиод като тригер
Варианта е ОК, само размени местат на светодиода и бутона, т.е. светодиона да е от + към пина, а бутона към маса. Това че светодиода ще свети като натискаш бутона може би няма да е фатално защото когато светодиода е светнат и натиснеш бутона нищо няма дасе промени, просто ще си свети, а след отпускане ще изгасне. Обратно, като е изгаснал ще светне още при натискането, и така или иначе след това състоянието му ще е пак светнато. Единствено събитията ще настъпват разместени спрямо фронта, светване при преден, игаснене при заден .. или по скоро обратното щото бутона ти сваля в 0. Относно самото реализиране колегите горе са писали, примерно веднъж на 10 ли 100 или колкото искаш ms слагаш пина като вход и го проверяваш, след това си го връщаш изход с нужното ниво.
|
| Сря Ное 28, 2012 11:05 am |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Бутон с светодиод като тригер
Може да опиташ ето така. Тогава светодиода ще го палиш с 0 и ще го гасиш с 1, а когато превключиш пина на вход, ще можеш да четеш 0 ако бутона е насиснат, или 1 ако не е.
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Ное 28, 2012 11:59 am |
|
 |
|
timt
Ранг: Форумен бог
Регистриран на: Вто Ное 27, 2012 9:27 pm Мнения: 2011
|
 Re: Бутон с светодиод като тригер
Дай малко код като пример.
|
| Сря Ное 28, 2012 1:28 pm |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Бутон с светодиод като тригер
Ами... ето. Приемаме че си на порт RA0 с някакъв пик. Пиша ти го сега на момента, така че може и да има някаква грешка, но идеята би трябвало да е ясна.
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Ное 28, 2012 2:07 pm |
|
 |
|
timt
Ранг: Форумен бог
Регистриран на: Вто Ное 27, 2012 9:27 pm Мнения: 2011
|
 Re: Бутон с светодиод като тригер
От този код нищо не разбрах  Програмирам на асемблер и ми е малко трудно с другите.
|
| Сря Ное 28, 2012 2:31 pm |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Бутон с светодиод като тригер
Eee... ако С не разбираш... Не ми се пише сега на асемблер, пък и съм го позабравил вече.
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Ное 28, 2012 2:46 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Бутон с светодиод като тригер
Варианта със схемата на колегата от Мутум'ба ще стане. Но има един малък проблем(поне за мен). Светодиода ще светва след като се отпусне бутона, а ще угасва веднага при натискането му. Ако това не е проблем схемата е ок. Ако се изисква незабавна реакция на светодиода при натискане на бутона(без значение колко време стои натиснат) - на първата схема трябва да се добави един резистор между бутона и VDD. Останалото се движи от софтуера.
Таймер 0 се пуска 1:128. С 4 mHz кристал ще имаш прекъсване около 30 пъти в секунда за да си четеш бутона. Останалото време е за светодиода. Като влезе в прекъсване правиш RB0 вход(BSF TRISB, 0), четеш RB0 и в зависимост от състоянието му с два флага натиснат/отпуснат бутон определяш дали да светне или да угасне диода след като излезеш от прекъсването. Пак правиш RB0 изход(BCF TRISB, 0) и отиваш да чакаш ново прекъсване. Междувременно в зависимост от флаговете светваш/гасиш диода.
|
| Сря Ное 28, 2012 6:44 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Бутон със светодиод като тригер
Ако във варанта Мутум'ба се натисне бутонът - кой параметър на процесора осигурява прочитането на лог.0?
Темата е много шантава - проста схема, неясни ограничения. Основният проблем е нискоомната верига на ЛЕД-а. Ако бутонът е към маса(през резистор за защита) , а вместо лед се сложи резистор/транзистор (и ледът след него) - ще стане културно - ледът ще може да се угаси при натискането на бутона и ще може да се държи угасен и докато е натиснат бутона. Трабва и някакъв подпиращ (вътершния на входа например) резистор към плюсовата шина.
|
| Сря Ное 28, 2012 10:29 pm |
|
|