Отговори на тема  [ 34 мнения ]  Отиди на страница 1, 2, 3  Следваща
Бутон със светодиод като тригер 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Бутон със светодиод като тригер
Прикачени файлове:
f.JPG
Моля, дай те ми идея как на един от портовете на пик да поставя едновременно светодиод и бутон който при натискане да включва диода и при повторно натискане да го изключва. Не ми трябва схема с два бутона а един бутон на един порт.


Последна промяна timt на Сря Ное 28, 2012 9:10 pm, променена общо 1 път



Вто Ное 27, 2012 9:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: Бутон с светодиод като тригер
Пусни си 1 таймер да цъка, на всяко четно събитие, правиш извода като изход и светваш/изгасяш светодиода, а на всяко нечетно - правиш извода вход и четеш бутона.


Вто Ное 27, 2012 10:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: Бутон с светодиод като тригер
При инициализация- пускаш таймер на 10 милисекунди ( Всъщност ако няма някакви ограничения - например много окастрен процесор - аз винаги използвам такъв таймер). Тоя таймер ти е на пркъсване. В процедурата на прекъсването - вдига се флаг - "Флаг10мс'. Вдигаш флаг 'светнато_неугасено'. Приготвяш някой друг брояч и флаг за обработка на бутон/ите. Отиваш в главния цикъл.

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

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

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


Вто Ное 27, 2012 10:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Бутон с светодиод като тригер
Тая схема е кофти решение! Диода ще си свети и без контролера докато е натиснат бутона, а ако в тоя момент RB0 е изход с ниско ниво може и той да светне. Иначе това дето искаш се прави като на определено време правиш порта вход и четеш състоянието на бутона, после пак го правиш изход за светодиода.


Вто Ное 27, 2012 10:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение 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


Вто Ное 27, 2012 10:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Бутон с светодиод като тригер
Докато RB0 ти е изход с ниско ниво(несветещ светодиод) винаги ще го прочиташ като 0, дори да му подадеш високо отвън. А като му подадеш високо ниво, в твоя случай директно 5v., си става директно късо и със сигурност ще повредиш RB0 защото през него ще протече доста повече от 25 ma. Е... остават ти още 7 опита с PORTB, докато не си оправиш схемата.

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


Вто Ное 27, 2012 11:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: Бутон с светодиод като тригер
Съгласен съм че не е най добрият вариант просто някъде съм го срещал а сега ми трябва този вариант или да почна да мисля за нов. Незнам с таймера как ще се държи но ще се опитам да го подкарам някакси.


Вто Ное 27, 2012 11:21 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 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 ако не е.


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

_________________
'просто' е технически синоним на 'красиво'
Сря Ное 28, 2012 11:59 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: Бутон с светодиод като тригер
Дай малко код като пример.


Сря Ное 28, 2012 1:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение 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);
}

_________________
'просто' е технически синоним на 'красиво'


Сря Ное 28, 2012 2:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: Бутон със светодиод като тригер
Ако във варанта Мутум'ба се натисне бутонът - кой параметър на процесора осигурява прочитането на лог.0?

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


Сря Ное 28, 2012 10:29 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 34 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни