Odbiornik Rc5


8.16667
Ocena: None Średnia: 8.2 (6 głosujących)

Urządzenie to współpracuje z układami mikroprocesorowymi zawierającymi klawiaturę w formie przycisków zwieranych do masy. Układ włączony jest równolegle do klawiatury urządzenia sterowanego i po odebraniu sygnału z pilota pracującego w standardzie Rc5 powoduje wymuszenie stanu niskiego na odpowiednim przycisku. Układ którym sterujemy odbierze to jako naciśnięcie przycisku na klawiaturze. Odbiornik ten został zaprojektowany jako pilot do przedwzmacniacza cyfrowego ale po zmianie oprogramowania może działać z dowolnym innym urządzeniem. Układ działa w oparciu o mikrokontroler AT89C2051 (lub ATTiny2313) i kilka elementów pomocniczych. Zasilanie pobierane jest ze sterowanego urządzenia.

Działanie:


Schemat ideowy odbiornika przedstawiony jest na rysunku poniżej:

Sercem układu jest mikrokontroler U1 (AT89C4051) wraz z rezonatorem kwarcowym X1 (12MHz) i kondensatorami C1 (22pF) i C2 (22pF). Kondensator C3 (1uF) zapewnia reset procesora po włączeniu napięcia zasilania. Układ U2 (TSOP1736) jest odbiornikiem podczerwieni pracującym na częstotliwości 36KHz. Elementy R3 (220R) i C5 (100uF) stanowią obwód zasilania układu U2. Dioda D1 wraz z rezystorem ograniczającym prąd R4 (330R) służy do sygnalizowania poprawnie odebranej transmisji w kodzie Rc5. Kondensator C4 (47uF) filtruje napięcie zasilające mikrokontroler. Rezystory R1 (1k) i R2 (1k) podciągają piny P1.0 i P1.1 mikrokontrolera do plusa zasilania. Wyjścia sterujące układu (Port P1) oraz zasilanie (5V) wyprowadzone są na złącze SW_Goldpin.

Budowa:


Układ można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym można ściągnąć tutaj. Montaż układu jest prosty i nie powinien sprawić trudności. W pierwszej kolejności należy wlutować rezystor R1 leżący pod mikrokontrolerem. Kolejność pozostałych elementów jest dowolna. Pod procesor bezwzględnie konieczna jest podstawka, w przeciwnym wypadku nie będzie możliwe jego zaprogramowanie. Pomocą przy konstrukcji może okazać się dostępny tutaj schemat montażowy.

Zamiast mikrokontrolera AT89C2051 można zastosować ATTiny2313. W takim wypadku nie należy montować rezystorów R1 i R2 oraz kondensatora C3. Rezonator kwarcowy X1 należy wymienić na 16MHz bo pod taki program był kompilowany. Dla rezonatora 12MHz jaki był w pierwotnym układzie należy zmodyfikować program (pierwszą linijkę z dyrektywą $crystal wpisując 12000000 zamiast 16000000). Ustawienia fusebitów mikrokontrolera ATTiny2313 dostępne są w rozdziale "Programowanie"

Wykaz Elementów:


1x Listwa Gold Pin 1x10

1x 220R
1x 330R
2x 1k

2x 22pF
1x 1uF Elektrolit
1x 47uF Elektrolit
1x 100uF Elektrolit

1x Rezonator Kwarcowy 12MHz
1x Dioda LED
1x AT89C2051 + Podstawka
1x Odbiornik podczerwieni TSOP1736

Programowanie:

UWAGA! W przypadku korzystania z wersji programu dla AVR, podczas kompilacji w nowym bascomie linia konfiguracji RC5 powinna wyglądać następująco:

Config Rc5 = Pind.2 , Wait = 2000 

Mikrokontroler został zaprogramowany w wersji demo programu BASCOM 8051 firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'****************************
           'Konfiguracja
'****************************
$crystal = 12000000                                           '12MHz
$regfile = "89C4051.DAT"
 
Config Rc5 = P3.2
Reset Tcon.0                                                  'reaguje na zbocze narastajace
On Int0 Odbierz_rc5
Enable Int0
Enable Interrupts
 
 
Dim Odebrano As Bit
Dim Komenda As Byte , Adres As Byte
 
Dioda Alias P3.7
'****************************
      'Petla glowna
'****************************
Do
  If Odebrano = 1 Then
     Odebrano = 0
     If Adres = 0 Then
       Disable Int0
 
       Waitms 100
       Reset Dioda
 
       Select Case Komenda
         Case 1:                                              'vol+
           Reset P1.7
         Case 2:                                              'bas+
           Reset P1.6
         Case 3:                                              'treb+
           Reset P1.5
         Case 4:                                              'vol-
           Reset P1.3
         Case 5:                                              'bas-
           Reset P1.2
         Case 6:                                              'treb-
           Reset P1.1
         Case 15:                                             'we
           Reset P1.0
         Case 13:                                             'mute
           Reset P1.4
       End Select
 
       Waitms 100
       Set Dioda
       P1 = 255
 
       Enable Int0
     End If
  End If
Loop
End
'****************************
      'Inne Etykiety
'****************************
Odbierz_rc5:
  Getrc5(adres , Komenda)
  Adres = Adres And &B00011111                                'zerowanie bitu 5
  Odebrano = 1
Return
'****************************

Poniżej przedstawione są ustawienia fusebitów mikrokontrolera ATTiny2313 (nie dotyczy AT89C2051 jaki został uzyty w pierwotnej wersji):

Zdjęcia Projektu:

ZałącznikWielkość
Schemat41.01 KB
Płytka7.86 KB
Płytka (odbicie lustrzane)7.88 KB
Płytka (9 na stronie)50.99 KB
Montowanie10.59 KB
Opis5.28 KB
Opis (odbicie lustrzane)5.31 KB
Kod Źródłowy2.14 KB
Program po kompilacji (BIN)454 bajty
Program po kompilacji (HEX)1.29 KB
Kod Źródłowy (dla ATTiny2313, BASCOM AVR)1.22 KB
Program po kompilacji (BIN) (dla ATTiny2313, BASCOM AVR)586 bajtów
Program po kompilacji (HEX) (dla ATTiny2313, BASCOM AVR)1.63 KB
Kod Źródłowy (dla ATTiny13, BASCOM AVR) (nie testowany)1.05 KB



Portret użytkownika mirley

Re: Rc5

Każdy procek z rodziny AVR ma na wyjściu dwa tranzystory mocy i może sterować silnie zarówno stan wysoki jak i niski. Dodatkowo AVR'y mają konfigurację typu wyprowadzenia (weście czy wyjście) i należy o tym pamiętać. AT89C2051 i podobne należą do rodziny 8051 i mają proste obwody wyjściowe i związane z tym ograniczenia

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika 8jm

Kod rc5

Witam podaje link do strony zawierającej opis komend pilotów rc5
http://elektron.pol.lublin.pl/users/djlj24/studio24/audio/rc-5.htm

Portret użytkownika darson

RC5 a lampka RGB

Czy dało by się połączyć te dwa układy tak aby zamiast przycisków na lampce rgb można było użyć pilota...?;)

Portret użytkownika mirley

Re: Lampka RC5

Ten układ można bezpośrednio podłączyc do lampki.... wygodniej by było jednak doprogramować obsługę rc5 do lampki, jednak wymaga to troche pracy i przeróbek na które nie ma miejsca w tiny2313

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika darson

Chciał bym zrobić do swojego

Chciał bym zrobić do swojego pokoju oświetlenie i sterownik do tego ale nie wiem za bardzo jak się za to zabrać w sensie o sterownik....: a mam 5m taśmy led biała zimna do oświetlenia pólek i chciałbym je sterować z pilota, standardowo włącz/wyłącz i PWM do sterowania jasnością i dysponuje również diodą RGB 3W którą chce wykorzystać do lampki i żeby miała funkcje jak w twojej lampce RGB2 również sterowane z pilota. Czy wejdzie taki program na Atmega8 i czy bardzo skomplikowany program do tego był by ??

Portret użytkownika mirley

Re: diody

Może nie byłby bardzo skomplikowany ale trochę trzeba pokombinować. Musisz wziąść program do lampki, dołożyć tranzystory do tej 3W diody, potem trzeba dopisać obsługę pilota obowiązkowo na przerwaniach (obsługa jest w dziale z kodami źródłowymi).... ja to zadziała to reszta będzie prosta

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

Modyfikacja kody

Jakby wyglądał kod który sterowałbym 3 urządzeniami i każdy kanał byłby programowany dowolnym pilotem RC5 i tak żeby po zaniku zasilania nie byłoby potrzeby ponownego programowania odbiornika?

Portret użytkownika mirley

Re: Odbiornik Rc5

Chciałbyś aby układ mógł się uczyć kodu klawisza? nie da się tego zrobić w tym układzie bo AT89C2051 nie ma pamięci eeprom. Trzeba wykorzystać attiny2313 i zrobić 3 zmienne np kod1, kod2 kod3 typu byte. Na starcie będzie odczyt z eeproma wartości do tych zmiennych, a w instrukcji case nie będzie już case 1, case 2 itp tylko case kod1, case kod2 itd.

W miejscu odczytu kodu Rc5 trzeba zrobić warunek sprawdzający zewnętrzne dodatkowe zworki, są jeszcze wolne piny więc nie będzie kłopotu. I jak któraś z zworek zwarta (np zwarta 1) to po kliknięciu klawisza do kod 1 wpisuje się ten klawisz. Potem zdejmujesz zworkę i uruchamiasz ponownie układ

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

Chcialem żeby układ uczył się

Chcialem żeby układ uczył się kodu z klawisza i po zaniku zasilania pamiętał ten kod. zapomnialem dodać że sterownik na układzie attiny2313

Portret użytkownika mirley

Re: Klawisz

Będzie dało radę ale musisz dodać zworki mówiące o tym kiedy układ się uczy klawiszy a kiedy reaguje na klawisze. Wklej kod którym zaprogramowałeś procka

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

To jest kod z tej

To jest kod z tej strony
Zworkę możemy dać np na PD5.

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
 
Config Rc5 = Pind.2
Dioda Alias Portd.6
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
 
 
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          Toggle Portb.0
      Case 2:
          Toggle Portb.1
      Case 3:
          Toggle Portb.2
      Case 4:
          Toggle Portb.3
      Case 5:
          Toggle Portb.4
      Case 6:
          Toggle Portb.5
      Case 7:
          Toggle Portb.6
      Case 8:
          Toggle Portb.7
    End Select
 
    Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

zmieniam
Config Portd = &B10111011 : Portd = &B10111111

wpisuje tylko to

Select Case kod Komenda
     Case kod1:
          Toggle Portb.0
     Case kod2:
          Toggle Portb.1

Co jeszcze muszę dopisać?

Portret użytkownika demsy1

będę bardzo wdzięczny za

będę bardzo wdzięczny za pomoc

Portret użytkownika mirley

Re: Rc5

konfiguracja a być tak:

Config Portd = &B10111011 : Portd = &B11111111

zworka do masy..... aha musisz mieć dwie zworki dla dwóch kodów itd.

musisz dopisać sprawdzanie zworki i zapisać do zmiennej kod wartość z pilota jak zworka jest zwarta. I potem to jeszcze zapisac do eeprom. poczytaj w helpie o instrukcjach writeeprom i readeeprom.

Na starcie programu trzeba wczytać kody z eeprom

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

Gdzie dopisać drugi przekaźnik i zworkę?

Wymodziłem coś takiego, niestety nie działa i nie wiem gdzie dopisać przekażnik2 i switch 2

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 12000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B10111011 : Portd = &B11111111
 
Config Rc5 = Pind.2
 
 
Enable Interrupts
 
Dim Adres As Byte
Dim Komenda As Byte
Dim Eeprom As Byte
Dim I As Integer
 
Przekaznik1 Alias Portb.0
Przekaznik2 Alias Portb.1
Switch1 Alias Pind.0
Switch2 Alias Pind.1
 
Declare Sub Programuj
 
Do
      If Switch1 = 0 Then
         If Pind.0 = 0 Then
            I = 0
 
 
            Do
               If I = 5000 Then
                  Call Programuj
                  Goto Koniec:
               End If
               Waitms 1
               Incr I
            Loop Until Switch1 = 1
 
            Set Przekaznik1
 
            Koniec:
         Else
            Bitwait Switch1 , Set
 
            Reset Przekaznik1
 
         End If
      End If
 
   Getrc5(adres , Komenda)
 
   If Adres = 0 Then
      Komenda = Komenda And &H7F
      Readeeprom Eeprom , 1
      If Komenda = Eeprom Then
         If Pind.0 = 0 Then
            Set Przekaznik1
 
            Do
               Getrc5(adres , Komenda)
               Komenda = Komenda And &H7F
               If Komenda <> Eeprom Then
                  Exit Do
               End If
            Loop
         Else
 
            Reset Przekaznik1
 
            Do
               Getrc5(adres , Komenda)
               Komenda = Komenda And &H7F
               If Komenda <> Eeprom Then
 
 
                  Exit Do
               End If
            Loop
         End If
      End If
   End If
 Loop
 Sub Programuj
 
  Do
      Getrc5(adres , Komenda)
 
      If Adres = 0 Then
         Komenda = Komenda And &H7F
         Writeeeprom Komenda , 1                            
 
         Exit Do                                           
      End If
   Loop
End Sub
 
End

Portret użytkownika mirley

Re: Rc5

Nie wiem skąd masz pomysły z goto itp oraz dodatkowymi podprogramami. Ja bym to zrobił tak:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11001011 : Portd = &B11111111
 
Config Rc5 = Pind.2
Dioda Alias Portd.6
Z1 Alias Pind.4    'zworki, switche na D4 i D5
Z2 alias Pind.5 
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
Dim k1 as byte, k2 as byte
 
'*************  Zmienne Koniec  ****************
 
readeeprom k1, 1
readeeprom k2, 2
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  if Z1 = 0 then 
    k1 = komenda
    writeeeprom k1, 1
  End if
 
  if Z2 = 0 then 
    k2 = komenda
    writeeeprom k2, 2
  End if  
 
  If Adres = 0 Then
    Reset Dioda
    Select Case Komenda
      Case k1:
          Toggle Portb.0
      Case k2:
          Toggle Portb.1
    End Select
 
    Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

teoretycznie powinno działać. Zwierasz zworkę 1 klikasz klawisz i rozwierasz, zwierasz zworkę 2 klikasz inny klawisz i rozwierasz. Urządzenie zaprogramowane

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

Zwierasz zworkę 1 klikasz

Zwierasz zworkę 1 klikasz klawisz i rozwierasz, zwierasz zworkę 2 klikasz inny klawisz i rozwierasz
Zero reakcji
No i zmieniłem kwarc

$crystal = 16000000
na
$crystal = 12000000

bo taki mam na płytce, ale to nie powinno przeszkadzać

Portret użytkownika mirley

Re; Rc5

No to trzeba powoli sprawdzać co ie działa. Wpisz zaraz za readeeprom

k1= 1  'lub inna znana wartośc klawisza pilota
k2 = 2

nie zwieraj zworek programujących i zobacz czy reaguje na kody 1 i 2

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

wpisałem to i dział przy tych

wpisałem to i dział przy tych wartościach, ale jak wezmę drugi pilot i programuje zworkami to nie chce działać

k1= 1  'lub inna znana wartośc klawisza pilota
k2 = 2

Portret użytkownika mirley

Re: Rc5

To teraz zostaw to na początku co jest i zamień obsługę zworek na:

  if Z1 = 0 then 
    Toggle Portb.0
  End if
 
  if Z2 = 0 then 
    Toggle Portb.1
  End if 

teraz jeśli zworka z1 jest zwarta każde naciśnięcie jakiegoś klawisza różnego od 1 i 2 zmieni stan b.0 na przeciwny. Jeśli zworka Z2 zwarta to będzie się zmieniał stan b.1. Sprawdzisz tym czy zworki są dobrze odczytywane w programie.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

Zamieniłem kod, ale po

Zamieniłem kod, ale po zwarciu zworki 1 lub 2 załącza się przekaźnik i rozłącza jeden albo drugi i naciskanie jakiegokolwiek klawisza na pilocie nie programuje układu

 if Z1 = 0 then 
    Toggle Portb.0
  End if
 
  if Z2 = 0 then 
    Toggle Portb.1
  End if 

Portret użytkownika mirley

Re: Rc5

No to dobrze... działa jak ma działać..... w takim razie nie ma szans żeby to nie działało:

  if Z1 = 0 then 
    k1 = komenda
    writeeeprom k1, 1
  End if
 
  if Z2 = 0 then 
    k2 = komenda
    writeeeprom k2, 2
  End if  

sprawdź jeszcze raz. Zewrzyj zworke Z1 wcisnij jakis klawisz a potem zdejmij zworkę i włacz ponownie ukad. Aha ta linijkę k1= 1 i k2 = 2 musisz usunąć. Zostawić tylko te readeeprom.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

usunełek k1 i k2 i wstawiłem

usunełek k1 i k2 i wstawiłem to

if Z1 = 0 then 
    k1 = komenda
    writeeeprom k1, 1
  End if
 
  if Z2 = 0 then 
    k2 = komenda
    writeeeprom k2, 2
  End if  

Układ reaguje tylko na jeden pilot i mogę zaprogramować dowolny klawisz ale tylko tym jednym pilotem, a chciałbym dowolnym pilotem sterować.

Portret użytkownika demsy1

Wróćmy do sprawdzenia zworki

Wróćmy do sprawdzenia zworki czy są dobrze odczytywane w programie.
Wgrałem to co niżej jeszcze raz i jest taka sytuacja że po zwarciu zworki Z1 przekaźnik załącza się i rozłącza i tak co ok. pół sekundy cały czas dopóki nie rozłączę zworki, tak samo jest ze zworką Z2, a gdy wciskam jakiś klawisz na pilocie to przekaźnik zaczyna załączać się i rozłączać z inną częstotliwością.

                                 '************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11001011 : Portd = &B11111111
 
Config Rc5 = Pind.2
Dioda Alias Portd.6
Z1 Alias Pind.4    'zworki, switche na D4 i D5
Z2 alias Pind.5
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
Dim k1 as byte, k2 as byte
 
'*************  Zmienne Koniec  ****************
 
readeeprom k1, 1
Readeeprom K2 , 2
 
K1 = 1
K2 = 2
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
 if Z1 = 0 then
    Toggle Portb.0
  End if
 
  if Z2 = 0 then
    Toggle Portb.1
  End If
 
  If Adres = 0 Then
    Reset Dioda
    Select Case Komenda
      Case k1:
          Toggle Portb.0
      Case k2:
          Toggle Portb.1
    End Select
 
    Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End

Mam taki kod na attyny 13, ale szkoda że tylko na jeden przekaźnik

$regfile = "attiny13.dat"                                   'plik z definicjami procesora, w tym przypadku attiny13
$crystal = 1200000                                          'czestotliwosc taktowania procka, 1,2Mhz, nie potrzeba wiecej
 
$hwstack = 16
 
Config Rc5 = Pinb.1                                         'odbiornik IR
 
Config Pinb.0 = Output                                      'led stand-by w stanie off
Config Pinb.2 = Output                                      'led stand-by w stanie on
 
Config Pinb.4 = Input                                       'switch on/off / programowanie, typ 'reset'
Config Pinb.3 = Output                                      'przekaznik
 
Enable Interrupts
 
Dim Adress As Byte                                          'dla rc5
Dim Command As Byte                                         'dla rc5
Dim Eeprom As Byte                                          'dla czytania z pamieci eeprom
Dim I As Long                                               'dla zliczania czasu przytrzymania przycisku
Dim Blokada As Integer                                      'ta zmienna blokuje przelanczanie sie przekaznika po pwrocie do petli glownej z programowania
 
Przekaznik Alias Portb.3                                    'aliasy
Switch Alias Pinb.4
Ledoff Alias Portb.0
Ledon Alias Portb.2
 
Set Ledoff                                                  'po zasileniu ukladu domyslnie zapala sie led stand-by off
 
Declare Sub Programuj
 
Do
      If Switch = 0 Then                                    'obsluga switcha, przyciskanie zmienia stan przekaznika, przytrzymanie okolo ~9 sekund wlacza tryb programowania
         If Przekaznik = 0 Then
            I = 0
 
            Blokada = 0                                     '0, bo idziemy przez switch
 
            Do
               If I = 120000 Then                           'zliczaj czas przytrzymania, jesli dobije do konca to wlacz programowanie
                  Call Programuj
               End If
 
               Incr I
            Loop Until Switch = 1
 
            If Blokada = 0 Then
               Set Przekaznik
               Set Ledon
               Reset Ledoff
            End If
         Else
            Bitwait Switch , Set
 
            Reset Przekaznik
            Reset Ledon
            Set Ledoff
         End If
      End If
 
   Getrc5(adress , Command)
 
   If Adress = 0 Then
      Command = Command And &H7F
      Readeeprom Eeprom , 1                                 'odczytaj z pierwszej komorki pamieci eeprom zapisany kod przycisku rc5
      If Command = Eeprom Then                              'wtedy gdy ID przycisku rowna sie temu co zaprogramowalismy
         If Przekaznik = 0 Then                             'i gdy przekaznik jest off
            Set Przekaznik                                  'wlacz przekaznik
            Set Ledon                                       'wlacz leda stand-by on
            Reset Ledoff                                    'wylacz leda stand-by off
            Do                                              'petelki dzieki ktorym mozna smialo przytrzymac klawisz na pilocie
               Getrc5(adress , Command)
               Command = Command And &H7F
               If Command <> Eeprom Then
                  Exit Do
               End If
            Loop
         Else                                               'a gdy przekaznik jest on
            Reset Przekaznik                                'wylacz przekaznik
            Reset Ledon                                     'wylacz leda stand-by on
            Set Ledoff                                      'wlacz leda stand-by off
            Do
               Getrc5(adress , Command)
               Command = Command And &H7F
               If Command <> Eeprom Then
                  Exit Do
               End If
            Loop
         End If
      End If
   End If
Loop
 
Sub Programuj
   Set Ledon                                                'wlacz leda stand-by on
   Set Ledoff                                               'wlacz leda stand-by off
                                                            'dwa ledy zapalone oznaczaja tryb programowania, szybkie mrygniecie ledow oznacza jego koniec
   Blokada = 1                                              '1, nie chcemy aby po powrocie przekaznik sam sie przelaczyl
 
   Do
      Getrc5(adress , Command)
 
      If Adress = 0 Then
         Command = Command And &H7F
         Writeeeprom Command , 1                            'zapisz komorki pamieci eeoprom kod przycisku RC5
         Reset Ledon
         Reset Ledoff
         Waitms 150
         Set Ledon
         Set Ledoff
         Waitms 150
         Reset Ledon
         Reset Ledoff
         Waitms 150
         Set Ledon
         Set Ledoff
         Waitms 150
         Reset Ledon
         Reset Ledoff
         Waitms 150
         Set Ledoff
         Exit Do                                            'jak juz cos zlapales, to wyjdz z petli i powroc do petli glownej programu
      End If
   Loop
End Sub
 
End

Portret użytkownika mirley

Re: Rc5

Układ reaguje na jeden pilot bo tak zostało napiane.... inny pilot ma inny kod i trzeba go osobno zaprogramować.

CO do przypadku że przekaźnik się załącza przy testowaniu zworki to normalne. Przecież o to chodziło jest przecież napisane:

 if Z1 = 0 then
    Toggle Portb.0
  End if

nie ma się co dziwić

Program który dałeś od tiny13 przecież działa tak samo jak mój.... też zapamięta ci tylko jednego pilota naraz... nie rozumiem problemu

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

Nie chodzi mi o to że nie

Nie chodzi mi o to że nie chce mi działać z dwoma pilotami na raz. Dziala mi tylko ten pilot którym obsługuje również program podany u pana w załączniku, gdzie napisane są komendy na stale. Sprawdzałem 5 różnych pilotów i nie moglem zaprogramować, a biorę ten jeden i każdy klawisz programuje.

Portret użytkownika mirley

Re: Pilot

Może pilot ma inny adres bazowy, albo w ogóle nie pracuje w standardzie Rc5. trzeba by zbudować prosty analizator z wyświetlaczem LCD, który pokazał by jaki jest aktualny adres i komendna która przychodzi z pilota

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika demsy1

hmmmm czyli nie ma możliwości

hmmmm czyli nie ma możliwości zbudowania układu którym można by sterować dowolnym pilotem?

Portret użytkownika mirley

Re: Pilot

Jasne że jest możliwość sterować dowolnym pilotem, tylko trzeba sobie samemu napisać procedury do odbioru określonych kodów. Z tego co wiem to bascom ma kilka gotowych procedur ale do wysyłania kodów np firmy sony, rc5 czy rc6. Z tego co się interesowałem to odbiór jest tylko dla rc5.

Trzeba podłączyć zwykłą diodę na podczerwień i spróbować odkodować sygnał programowo. Albo gotowy odbiornik podłączyć jak dla rc5 i próbować w podobny sposób. Narazie nie mam czasu aby zajmowac się dodatkowymi sprawami. Poszukaj artykułów w Edw wydaje mi się że kiedys widziałem taki projekt. Pewnie nie w bascomie ale układ działał na dowolny pilot.

Moje rozwiązanie ma pewne wady ale jest najprostsze z możliwych i działa zawsze

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc3

5v

Witam jak zmienić kod aby na wyjściach zamiast masy pojawiało się 5 v pozdrawiam i dziękuje za pomoc.

Portret użytkownika mirley

RE: RC5

Chodzi o program podstawowy dla 2051 czy ten dla tiny 2313.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika insectteam

problem ...

Witam !

Popełniłem powyższy układ, jednak mam z nim mały problem - na nieparzyste kody z pilota reaguje prawidłowo, na parzyste jakby gubił sygnał z pilota - rzadko zareaguje na przyciśniecie guzika na pilocie. Układ zmontowany prawidłowo, fusebity również jak mają być, sprawdzone 4 piloty ( na pewno z rc5 - sprawdzone na stronie www której teraz nie pamiętam ) ... czy może ktoś z Was wie w czym rzecz ???

Portret użytkownika insectteam

problem ciąg dalszy ...

... znalazłem jakie dokładnie sygnały wysyła mój pilot i jak się okazuje dla parzystych są inne niż dla nieparzystych - poniżej spis ze strony producenta :

" bits 13
flags RC5|CONST_LENGTH
eps 30
aeps 100

one 933 855
zero 933 855
plead 990
gap 114297
toggle_bit 2

begin codes
Standby 0x000000000000100C
1 0x0000000000001801
2 0x0000000000001002
3 0x0000000000001803
4 0x0000000000001004
5 0x0000000000001805
6 0x0000000000001006
7 0x0000000000001807
8 0x0000000000001008
9 0x0000000000001809
0 0x0000000000001000
Src 0x0000000000001038
Menu 0x0000000000000012
Up 0x0000000000001820
Left 0x0000000000001011
Ok 0x0000000000000817
Right 0x0000000000001010
Down 0x0000000000001821
Sleep 0x0000000000001026
Mute 0x000000000000180D
Recall 0x000000000000100F
Del 0x0000000000001837
Move 0x0000000000001036
Skip 0x000000000000182D
Time 0x0000000000001032
Mode 0x0000000000001834
Teletext 0x000000000000103C
end codes

end remote"

Portret użytkownika mirley

Re: Rc5

Zaraz po GetRc5 Trzeba dopisać:

Komenda = Komenda And &B01111111

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika insectteam

RE: problem ...

... niestety nikt nie umiał mi pomóc a sprawa okazała się prosta - używałem BASCOM'a w wersji 2xxxx która źle kompiluje kod źródłowy - kompilacja w BASCOM 1xxxx pomogła i rozwiązała problem

Portret użytkownika mirley

Re: Rc5

A spróbuj takiej konfiguracji Rc5:

Config Rc5 = Pind.2 , Wait = 2000

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika MULTIMEN

RC5 16 kanałow

Witaj Mirku! Wszystkieg najlepszego w nowym roku :) nie wiem czy jeszcze pamietasz :), projekt sterowania oswietlenia hali sportowej za pomoca pilota i pytanie czy posiadasz jeszcze w szafie prototyp 16 kanalowego sterownika chce zastapic 12 kanalowy 16tka i sterowac wszytkie 16 sekcji lamp :).

Jesli pisadasz ten prototyp i chcialbys sie go pozbyc daj znac : Pilota na RC5 musze zbudowac od podstaw tak by byl czytelny czyli 2 rzedy po 8 przyciskow ale z tym sobie poradze jedyna sprawa to taka ze musialbym wiedziec jakie kody z matrycy RC5 beda uzyte dla kolejnych kanalow tak bym mogl odpowiednio podpiac rzedy i kolumny pod scalak pilota.

-

MULTI

Portret użytkownika Gość1

Korzystam z tego odbiornika i

Korzystam z tego odbiornika i steruje pilotem od telewizora philipsa. I tak się składa, że taki telewizor mam w pokoju i jak włączam telewizor to także odbiornik reaguje. I mam właśnie odnośnie tego pare pytań
-Jak sobie z tym poradzić?
-Czy istnieje jakaś inna transmisja w bascomie, bądź mogę sobie tak napisać program, do pilota co pracuje na innej częstotliwości?
Rozumiem, że przyciski na pilocie od 1-9 są o adresie 0 i komendzie także od 1-9.
-A jak mogę sprawdzić jaki adres i komendę mam np. przyciski volume?
-Mam pilota od samochodowej centralki alarmowej i czy istnieje możliwość rozszyfrowania na jakiej częstotliwości pracuje ten pilot i do tego zrobić odbiornik?
- W jaki sposób to rozszyfrować? Oscyloskopem?

Niektóre pytania może trochę głupię, ale proszę o odpowiedź.

Portret użytkownika matrix

Re: Rc5

Nie ma prostego rozwiązania bo odbiornik tu opisany pracuje w kodzie RC5 i Philips ma ten sam kod. Musiał byś oprogramować przyciski które nie są używane w normalnej eksploatacji telewizora, czyli na ten przykład przyciski specjalne od telegazety jak kolory żólty, czerwony, niebieski czy zielony.

Możesz na przykład napisać kod tak by reagował na adres inny niż 0 ale wtedy wiadomo, inny pilot.

Tak, przyciski od 1 do 9 zwykle maja przypisane komendy 1 do 9.

Przyciski Vol+ i Vol- mają bodajże komendy 16 i 32, ale mogę się mylić. A sprawdzić to możesz pisząc szybki program na avr'a typu:

getrc5 (komenda,adres)
komanda = komenda And &B01111111
 
home
lcd "adres=" : adres : "  "
locate 2,1
lcd "komenda=" : komenda : "  "

Co do pilota od centralki alarmowej to może być opcja że pilot pracuje na drodze radiowej a nie w podczerwieni. Jeśli jednak w podczerwieni to pomoże serwisówka lub datasheet'y od układów zawartych w pilocie od centralki. Oscyloskop z pewnością też będzie bardzo pomocny.

Portret użytkownika insectteam

Vol+ kod 16 Vol- kod 17 tu

Vol+ kod 16
Vol- kod 17

tu jest wszystko ładnie opisane :
http://elektron.pol.lublin.pl/users/djlj24/studio24/audio/rc-5.htm

Portret użytkownika Gość1

Dziekuje bardzo za pomoc. To

Dziekuje bardzo za pomoc. To będę miał problem z tymi przyciskami, bo telewizor się włącza za pomocą wszystkich przycisków ;/ A są może jakieś inne standardy transmisji? Jaki ma np. Philips? Chyba że się skuszę na zrobienie własnego pilota z diodą nadawczą i odbiornikiem np. 39kHz. A jakie są transmisje dla komunikacji radiowej? Można jakoś wymyśleć swój standard częstotliwości tak żeby nie wcinały się inne urządzenia?

Portret użytkownika matrix

Re: Rc5

Możez poszukać na przykład pilota od takiego telewizora jakim był TRILUX. Oparty na podzespołach Philipsa też nadawał w rc5 przy czym wewnątrz był układ SAA3010 w standardowej obudowie DIP gdzie można było zewrzeć inne wyprowadzenia adresowe i mieć kod różny od 0.

Wtedy w tym tu oto projekcie drobna zmiana żeby czytał kod o adresie Twojego pilota i po sprawie.

Portret użytkownika insectteam

... mam dla Ciebie prostsze

... mam dla Ciebie prostsze rozwiązanie - jesli masz telewizor praujący z kodami Philipsa to zainwestuj w pilot tejże marki z przełączaniem urządzeń ( mam taki pilot gdzie mogę wybierać między TV, DVD, SAT i CD i kosztował jakieś śmieszne pieniądze ) - gdy będziesz chciał używać pilota do TV to przełączysz na TV, a jak będziesz chciał używać go do swojego urządzenia to zmień zmienną 'ADRES=0' na właściwy adres z listy adresów które podane są w linku przesłanym przeze mnie wyżej. Dla przykładu gdy będziesz używał pilota w trybie CD 'ADRES=12' ... dla pewności skorzystaj z odczytywania adresów i kodów które zaproponował kolega MATRIX0606

Portret użytkownika Krychol

Dziwne działanie.

Witam

Zrobiłem ten odbiornik i używam do niego pilota TechniSat od dekodera ustawionego na "TV" i wszystko działa, ale powiedzmy że nie zawsze reaguje na wciśnięty guzik, 5x zareaguje i np 3 nie.
W czym może tkwić problem ?

Pozdrawiam

Portret użytkownika insectteam

RE: Dziwne działanie.

miałem to samo, bo kompilowałem ten program w BASCOMIE 2.0.7.x - jeśli też masz bascoma w wersji "2" to potrzebujesz mieć wpisane :

"Config Rc5 = Pind.2 , Wait = 2000 "

W Bascomie "1" wystarczy :

"Config Rc5 = Pind.2 "

Portret użytkownika Krychol

insectteam

Wielkie dzięki, wszystko działa jak należy :D

Portret użytkownika Mariusz

#46

ja mam takie pytanie chciał bym to zaprogramować w atmega8 potrzebuje tylko 4 wyjścia na 4 przyciski z pilota np: 1lewo,2prawo,3góra,4dół. czytałem te wszystkie wypowiedzi i te programy ale mało co rozumiem. można powiedzieć ze jestem na początku programowania atmegi8. i czy ktoś by mi pomogł w tym?

Portret użytkownika mirley

Re: Rc5

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
Config Portc = &B11111111 : Portc = &B11110000
 
Config Rc5 = Pind.2
Dioda Alias Portd.6
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          Toggle Portb.0
      Case 2:
          Toggle Portb.1
      Case 3:
          Toggle Portb.2
      Case 4:
          Toggle Portb.3
      Case 5:
          Toggle Portb.4
      Case 6:
          Toggle Portb.5
      Case 7:
          Toggle Portb.6
      Case 8:
          Toggle Portb.7
    End Select
 
    Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Teraz portb.0 do b.7 powinny się włączać na klawiszach 1-8 z pilota

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Mariusz

pytanko

a mam jeszcze jedno pytanko czy to wystarczy tylko tak zaprogramować na atmege 8 i bedzie działać czy trzeba jeszcze te kody z pilota ściągnąc i jakoś w program wpisać?? a i tam gdzie jest napisane
Getrc5(adres , Komenda)
Komenda = Komenda And &B01111111

If Adres = 0 Then
Reset Dioda

Select Case Komenda
tam gdzie jest pogrubione to trzeba coś zamienić czy tak to zostawić i zaprogramować
dzięki za wszystko jestem na początku z programowaniem i cały czas ide do przodu dzięki i pozdrawiam

Portret użytkownika mirley

RE: Rc5

Nic nie wolno zmieniać w miejscach które podałeś... przecież to nazwy zmiennych... Jak już coś chciałbyś zmieniać to linijki Case 1: case 2: case 3: itd. liczby po case to kody klawiszy. Kody 1, 2, 3 itd zwykle odpowiadają klawiszom 1, 2, 3 na pilocie.

W M8 trzeba ustawić fusebity na zewnętrzny kwarc, odpowiednie ustawienia są w artykule o fusebitach na mojej stronie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Mariusz

problem

Pozmieniałem pin od rc5 na inny który mam na płytce i od diody ale to w niczym nie powinno przeszkadzać a i jeszcze mam kwarc 8 000 000 więc nie wiem czy nie musze zmienić na 12 lub 16. zaprogramowałem i nic wszystko nie żywe nic nie działa jeszcze bede kombinował ale może ktos jeszcze jakis pomysł podsunie. dzięki