Podczerwień - jaki nadajnik i odbiornik?

Dyskusje ogólne na temat "cyfrówki" czyli wszystko o TTL/CMOS, językach VHDL i VERILOG, bramkach, rejestrach, przerzutnikach... Dobre miejsce na pytania odnośnie uniwersalnych programatorów (np. Willem) a także podłączania własnych peryferiów do komputera PC.
maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

Post autor: maxxxior » 06 gru 2012, 17:44

tzn w moim programie by wyglądało mniej więcej tak:

if(K_PORT = 0b00100100){
command = _CMD6_RC5; // jedz do przodu i w prawo
}

// przyciski podpiete pod piny PB3-przod PB4-lewo PB5-tyl PB6-prawo
tak?

a w odbiorniku to chyba nie muszę dekodować wcisniętych klawiszy tylko if(command==6) to zalacz silnik i serwo_w_prawo

co nie?

gomarko
-
Posty: 71
Rejestracja: 13 paź 2010, 21:20
Lokalizacja: Konin

Post autor: gomarko » 06 gru 2012, 18:48

Nie, to nie tak.
Nie znam C więc dokładnie nie podam.

Tu wysyłasz komendę po naciśnięciu określonej z góry kombinacji

Kod: Zaznacz cały

if(K_PORT = 0b00100100){
command = _CMD6_RC5; // jedz do przodu i w prawo
} 

A chodzi o to, żeby wysyłać komendę jeżeli którykolwiek z klawiszy jest naciśnięty.

pseudokod:

Jeżeli stan klawiszy (K_PORT) różny od spoczynkowego {
do zmiennej command przepisz K_PORT
i zainicjuj wysyłanie ramki RC5
}
i tak w kółko

Program powinien wysyłać te ramki do momentu puszczenia wszystkich przycisków.

W odbiorniku sprawdzasz bity z komendy odebranej ramki
wszystkie po kolei
i wykonujesz przypisane im akcje
Oczywiście ze sprawdzeniem poleceń sprzecznych
(np. co ma zrobić, jeżeli wciśnięte są klawisze lewo i prawo jednocześnie)

maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

Post autor: maxxxior » 06 gru 2012, 22:41

kombinowalem i niestety nie wiem jak to zrobić w C. A mógłbyś napisać poglądowy program w Bascomie? trohce pisałem kiedys w Bascom to może na jego podstawie coś wymyślę. Chodzi mi głównie o wysyłanie, dekodowanie bitów ramkii konfigurację portów/pinów.
W odbiorniku sprawdzasz bity z komendy odebranej ramki
wszystkie po kolei
tzn?

gomarko
-
Posty: 71
Rejestracja: 13 paź 2010, 21:20
Lokalizacja: Konin

Post autor: gomarko » 07 gru 2012, 0:52

Przy nadajniku chodzi mniej więcej o to, żeby zastąpić
takie przypisywanie konkretnych kodów:

Kod: Zaznacz cały

 do {

                if( !(keys & KEY1) ) command = _CMD1_RC5;
                else
                if( !(keys & KEY2) ) command = _CMD2_RC5;
                else
                if( !(keys & KEY3) ) command = _CMD3_RC5;
                else
                if( !(keys & KEY4) ) command = _CMD4_RC5;
                else
                if( !(keys & KEY5) ) command = _CMD5_RC5;
                else if (!(keys & (KEY5 | KEY2))) command = _CMD6_RC5;

                address = _ADDRESS_RC5;
                send_rc5(address, command, toggle_bit);

                _delay_ms(115);    // gap

                keys = PINB;

            } while ( (keys & KEYS_MASK) != KEYS_MASK );    /* powtarzaj gdy wciśnięty */ 
wysyłaniem bezpośrednio stanu portu (do którego są podłączone przyciski).

Kod: Zaznacz cały

 do {
                command =keys; // lub command = PINB;
                //reszta bez zmian

                address = _ADDRESS_RC5;
                send_rc5(address, command, toggle_bit);

                _delay_ms(115);    // gap

                keys = PINB;

            } while ( (keys & KEYS_MASK) != KEYS_MASK );    /* powtarzaj gdy wciśnięty */ 
Dwa bity z keys są ignorowane ponieważ command używa tylko sześciu
jednak nie mam pewności które, czy dwa najmłodsze czy najstarsze.
Można to dopasować programowo lub sprzętowo.

W odbiorniku po odebraniu ramki RC5 masz wtedy stan klawiszy
zawarty w zmiennej command.

W bascom można to wykorzystywać np. tak:
(to tylko szkic )

Kod: Zaznacz cały

Dim Lewo As Bit
Dim Prawo As Bit


Lewo = Command.3
Prawo = Command.4


If Lewo = 0 And Prawo = 1 Then
'zakładam, że przycisk naciśnięty to stan niski
'czyli tu trzeba pojąć akcję skrętu w lewo
End If

If Lewo = 1 And Prawo = 0 Then
'zakładam, że przycisk naciśnięty to stan niski
'czyli tu trzeba pojąć akcję skrętu w prawo
End If


maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

Post autor: maxxxior » 08 gru 2012, 22:32

ok, zrobiłem, działa. Tylko mam kolejny problem, otóż Pilot ma bardzo słaby zasięg, i trzeba celować w odbiornik... zasilanie pilota jest z 3V, dioda IR podłączona pod tranzystor BC557B i brak rezystora do VCC. Macie jakiś pomysł aby poprawić zasięg pilota lub coś w pojeździe? np kilka odbiorników?

gomarko
-
Posty: 71
Rejestracja: 13 paź 2010, 21:20
Lokalizacja: Konin

Post autor: gomarko » 09 gru 2012, 0:36

Kilka odbiorników to raczej nie, wystarczy jeden "patrzący w sufit".
Już prędzej mocniejszy nadajnik (wyższe napięcie-więcej diod).
Tak w ogóle to jaki masz opornik na bazie tranzystora?
To tranzystor PNP, jak jest podłączony? (przypadkiem diody ired nie dałeś od strony emitera?)
Czy na zasilaniu pilota masz kondensator elektrolityczny ponad 100uF?

Dlaczego uparłeś się na podczerwień?
Ja bym zastosował moduły radiowe.
Ostatnio zmieniony 09 gru 2012, 0:48 przez gomarko, łącznie zmieniany 1 raz.

maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

Post autor: maxxxior » 09 gru 2012, 0:44

no bo to jest projekt na zajęcia i głównie chodzi o wykorzystanie podczerwieni do sterowania... Też już po fakcie, stwierdziłem że moduły radiowe byłyby o wiele lepszym rozwiązaniem. No ale, człowiek uczy się na błędach...:/

ODPOWIEDZ