Skocz do zawartości

Switch - Podłączenie i sprawdzanie jego stanu


Skowron93

Pomocna odpowiedź

Witam Ponownie

W ramach nauki stworzyłem( z ogromną pomocą ze strony forumowiczów - dzięki wielkie :] ) swój pierwszy programowalny układzik który zmienia kolory w diodzie RGB. Jako że nie zamierzam skończyć na samej diodzie RGB, postanowiłem dodać przełącznik( ON - OFF ) który miałbym podłączyć do portu B3 i w zależności od tego czy jest podłączony czy nie jest, wywoływać dane akcje. Szukałem po schematach na forum i znalazłem tylko przyciski podłączone do resetu dlatego pytam: Jak podłączyć przełącznik( PB3->Przełącznik->Masa? ) i jak sprawdzić jego stan w programie w języku C?

Link do komentarza
Share on other sites

pawcio0928 no nie do końca. Odkłócanie styków także trzeba jakoś zrealizować. Sprzętowo czy programowo to już kwestia gustu. Jeśli ktoś pisze w C to twój komentarz jest jak najbardziej poprawny, jeśli w Bascomie to już pośrednio (Debounce to przecież IF z odpowiednim odczekaniem, które również można ustawić).

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Chodziło mi o c ponieważ w ostatnich czasach stał się on bardziej popularny od bascoma.

No i wspominałem że piszę w C. Wiem do czego służy funkcja IF ;D Chodzi bardziej o to, jak sprawdzić. Napisałem taki kod, jednak nie działa:

#include <avr/io.h>
#include <util/delay.h>
#define B(x) (1<<x)

int CZAS = 1000;

void Zapal( int p1, int p2, int p3 )
{
if( PORTB == B(3) ) CZAS = 100;
else CZAS = 1000;

if( p1 == 1 ) PORTB |= B(0);
else PORTB &= ~B(0);
if( p2 == 1 ) PORTB |= B(1);
else PORTB &= ~B(1);
if( p3 == 1 ) PORTB |= B(2);
else PORTB &= ~B(2);

_delay_ms( CZAS );
}

int main(void)
{
DDRB = 0b111;
while(1)
{
	Zapal(1,0,0);
	Zapal(1,1,0);
	Zapal(1,0,1);
	Zapal(0,1,0);
	Zapal(0,1,1);
	Zapal(0,0,1);
}
}

[ Dodano: 21-02-2012, 23:33 ]

Przełącznik mam pod portem B3

Link do komentarza
Share on other sites

Witaj! Tym kawałkiem kodu sprawdzisz czy na pinie b3 jest stan niski

void button_pres(){
if(bit_is_clear(PINC,PC0)){
	_delay_ms(25);                 // eliminuje problem drgających styków
	if(bit_is_clear(PINC,PC0)){
	// Zadanie do realizacji
	}
Link do komentarza
Share on other sites

Port czytasz przez rejestr PINx, np:

if (PINB & B(3))

Część po "if" wykona się, gdy ten jeden bit PINB.3 będzie w stanie 1, bo wtedy całe wyrażenie w nawiasie będzie różne od zera. Jeśli masz wyłącznik zwierający do masy, to jeszcze wypadałoby dorobić coś, co podciągnie linię portu do stanu wysokiego gdy nic nie wciśniesz. Możesz dać zewnętrzny rezystor (np. 10k do Vcc) ale możesz uruchomić "podciąg" wewnątrz procesora i oprócz ustawiania kierunku:

DDRB = 0b111;

dopisać jeszcze:

PORTB = 0b1000;

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.