Obsluga przycisku - atmega8

Jan 31, 2012 8 Replies

Witam wszystkich



Co ja robie nie tak? Probuje obsluzyc przycisk, ale nie potrafie.



Przycisk podpiety do PD7. PD7-przycisk-GND diody PB0 i PB1 Pb0-rezystor100Omow-dioda-GND to samo z druga dioda.


#define F_CPU 1000000L /* Częstotliwość kwarcu */



#include <avr/io.h>



#include <util/delay.h> /* Kiedyś <avr/delay.h> */



int main(void) { DDRB = 0b11111111; DDRD = 0b00000000; PORTD = 0b11111111; for (;;) { if((PIND & 0b10000000)) //if(bit_is_clear(PIND,7)) { PORTB |= (1<<0); _delay_ms(125); } else { PORTB |= (1<<1); _delay_ms(125); } } return 0; }


Pawel <ppf9@USUN_TOpoczta.fm> napisa³(a):

Móg³by¶ ³askawie napisaæ co Ci nie dzia³a. Tzn czego oczekujesz a tego nie ma. Bo z tego co widzê, to kod ogólnie reaguje na przyciski. Obecnie jest tak, ¿e je¶li przycisk nie jest wci¶niêty (na pocz±tku), to dziêki wewnêtrznemu podci±gniêciu najstarszy bit w PIND bêdzie ustawiony i w³±czy Ci siê dioda pod³±czona do PB0 (o ile pod³±czy³e¶ j± w dobrym kierunku). Je¶li teraz wci¶niesz przycisk, to w³±czy siê dioda pod³±czona do PB1 a stan diody pod³±czonej do PB0 nie zmieni siê. Analogicznie, je¶li w momencie w³±czenia zasilania przycisk by³ wci¶niêty, za¶wieci siê dioda pod³±czona do PB1. W momencie puszczenia przycisku w³±czy siê dioda pod³±czona do PB0 a stan diody pod³±czonej do PB1 nie zmieni siê. Twój kod jedynie ustawia bity portu B a nigdy ich nie zeruje. Je¶li przycisk ma prze³±czaæ diody, to w jednym z ifów zmieñ |= na &=~ I w sumie to nie wiem po co Ci tutaj opó¼nienie.

Grzegorz Niemirowski snipped-for-privacy@poczta.onet.pl> napisa³(a):

Przepraszam, to porada na wypadek gdyby by³a tylko jedna dioda. Wiêc je¶li ma byæ prze³±czanie, to musisz za ka¿dym razem jeden bit zerowaæ a drugi ustawiaæ. if((PIND & 0b10000000)) { PORTB |= (1<<0); //w³±cz PB0 PORTB &= ~(1<<1); //wy³±cz PB1 } else { PORTB |= (1<<1); //w³±cz PB1 PORTB &= ~(1<<0); //wy³±cz PB0 }

A opó¼nienie ma sens je¶li potrzeba odk³ócaæ styki. Jest to potrzebne gdy liczy siê ilo¶æ przyci¶niêæ i drgania styków mog³yby fa³szowaæ zliczanie.

W dniu 2012-01-31 02:41, Grzegorz Niemirowski pisze:

Reakcja na wcisniecie przycisku nie dzialalo, ale juz sie wyjasnilo. Okazalo sie, ze kable do wyprowadzen byly zle podpiete i myslalem, ze cos w kodzie jest nie tak.

A jest jakies bezpieczne opoznienie, ktore bedzie zawsze dzialalo? A da sie to rozwiazac w sposob sprzetowy? Wydaje mi sie, ze gdzies czytalem, ze da sie takie cos zrobic sprzetowo.

Pawel <ppf9@USUN_TOpoczta.fm> napisa³(a):

50 ms powinno wystarczyæ.

Rezystor + kondensator.

W dniu 2012-02-02 19:36, Grzegorz Niemirowski pisze:

Dzieki. Bede musial poszukac schematou, chyba, ze masz jakis pod reka, to moglbys podrzucic.

Pawel <ppf9@USUN_TOpoczta.fm> napisa³(a):

Ca³e wiadro:

formatting link

Pawel <ppf9@USUN_TOpoczta.fm> napisał(a):

================ VCC | rezystor | | PD7----przycisk----GND

MH

MH snipped-for-privacy@gazeta.SKASUJ-TO.pl> napisa³(a):

Rezystor do VCC ju¿ sobie za³atwi³ przez wewnêtrzne podci±gniêcie.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required