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: Odbiornik Rc5

Chyba chodzi Ci o różne współczynniki wypełnienia a nie częstotliwości.....

Tak czy innaczej będzie z tym problem przy tym programie co jest tutaj napisany.... Trzeba wykorzystać przerwania do obsługi Rc5 http://mirley.firlej.org/odbieranie_transmisji_rc5 a dodatkowo drugi timer skonfigurować do współpracy z programowym PWM. Generalnie da się to zrobić ale wymaga napisania programu od nowa

-

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 wilus

rc5

z konfiguracją PWM i resztą programu powinienem dać sobie rade, tylko pytanie jak powinno wyglądać polecenie ze np guzik 1 ustawia dana częstotliwość??

Portret użytkownika mirley

RE:PWM

PWM nie polega na regulowaniu częstotliwości. Masz ustawić timer na określoną częstotliwość a potem sterować wypełnieniem przebiegu.... Co do sprzętowego PWM to nie wiem bo nigdy nie używałem

-

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 Rusiu

Witam da sie tym sterowac

Witam da sie tym sterowac pocentjometrem z silniczkiem ??

Portret użytkownika mirley

Re: Potencjometr

Myślę że jak najbardziej tak. Wystarczy podłączyć odpowiednio silnik tak żeby jeden kanał sterował obrotami w prawo a drugi w lewo(Mostek typu H). Wnioskuje że w twoim potencjometrze jest niewielki silnik prądu stałego a kierunek obrotu potencjometru ustalony jest przez biegunowość napięcia? Pytam bo nie używałem nigdy takiego elementu jak potencjometr z silnikiem.

-

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 rybaczenko

da się sterować silnikiem

da się sterować silnikiem tylko jest jedno ale gdy wystąpią na obydwu portach sygnały dojdzie do zwarcia prawda jak by się dało np: na Portb.1 jest masa po włączeniu przycisku na pilocie , to żeby na Portb.2 nie można było wlaczyc pilotem i ustawić masy chodzi aby procesor nie odebrał sygnału (zablokował go ) na czas gdy na Portb.1 wystepuje masa jest włączony i odwrotnie da się to zrobić???

-

ROOKIE

Portret użytkownika mirley

Re: Pilot

Wydaje mi się że tak będzie działać, jak w poniższym przykłądzie, trzeba podmienić tylko fragment kodu(W programie dla tiny2313):

......
If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          if Portb.1 = 0 then Toggle Portb.0
      Case 2:
          if portb.0 = 0 then Toggle Portb.1
 
......

Teraz powinno działać tak: jeśli klikniesz przycisk 1 to stan portu b.0 będzie zmieniał się na przeciwny tylko gdy portb.1 jest 0, tak samo jest dla przycisku 2.

Sprawdź czy to działa na diodach zanim podepniesz do właściwego układu

-

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 rybaczenko

okk

tak działa super jestem juz bliski sukcesu ale jeszcze jedno potrzebuje dwa WEJŚCIA na które będzie podawany minus lub plus (nie z pilota tylko z tzw. krańcówki ) aby przy podaniu minusa na Pind.0 wyłączyło Portb.0 ale Portb.1 nadal będzie reagował na impulsy z pilota napisalem cos takiego oczywiscie przy zmiannie linijki

Config Portd = &B11111000 : Portd = &B11111111

If Pind.0 = 0 Then Portb.0 = 1 ale nadal reaguje na pilota zapali diodę lecz po chwili gaśnie

nie będę ukrywał układ planuje do sterowania silniczkiem i po prostu potrzebuje krańcówek aby wylaczaly silniczek przy dodarciu do punktu końcowego dolnego lub górnego. jak uda się to zrobić umieszcze cały schemat do wykorzystania

-

ROOKIE

Portret użytkownika rybaczenko

aa

to jest mój stary projekt sterowany droga radiowa dwa układy chcę zastąpić właśnie attiny 2313

-

ROOKIE

Portret użytkownika mirley

Re: Silnik

Układ jest banalny do zrobienia na uC. Wystarczy sprawdzić warunek czy krańcówka działa:

If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          if Portb.1 = 0 and Pind.0 = 1 then Toggle Portb.0
      Case 2:
          if Portb.0 = 0 and Pind.1 = 1 then Toggle Portb.1
 
......

oczywiście port d.0 i d.1 (krańcówki) muszą być wejściami tak jak napisałeś wcześniej musisz zmienić konfigurację na (w warunku jest =1 więc krańcówka po dojechaniu ma zwierać pin do masy):

Config Portd = &B11111000 : Portd = &B11111111

-

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 rybaczenko

re

tylko ze na Pind.0 i Pind.1 wejściach nie możne panować cały czas masa te wejścia maja wyłączać wyjścia po podaniu na nie masy

-

ROOKIE

Portret użytkownika mirley

Re: Krańcówki

No to przecież tak masz napisane w kodzie wyżej. Masa ma panować na wejściach w procesorze (d.0 i d.1) przeznaczonych na krańcówki wtedy gdy są one naciśnięte. Normalnie gdy silnik odjedzie od krańcówki to nastąpi jej rozwarcie i pin powróci do stanu wysokiego. Nie wiem co tu jeszcze tłumaczyć. Poza tym gdzie napisałem że na pind.0 i pind.1 panuje cały czas masa?

-

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 rybaczenko

re

tak wgralem i musze miec podpiete (d.0 i d.1) do masy inaczej juz nie reaguje na pilota wogole ale tak jak mówisz rozwarcie powraca do stanu wysokiego krancowki to tak jak właczniki ale ten kod nie dziala

-

ROOKIE

Portret użytkownika rybaczenko

re

'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
 If Pind.0 = 0 Then Portb.2 = 1
 
 If Pind.1 = 0 Then Portb.3 = 1
 
  If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 2:
       If Portb.2 = 1 Then Toggle Portb.3
 
      Case 3:
        If Portb.3 = 1 Then Toggle Portb.2
 
 
    End Select
 
    Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End

to dziala ale diody podłaczone do wyjsc i zwarciu wejscia Pind.0 lub Pind.1 do masy gasi diode ale reaguje na pilota a ma nie reagowac juz

Mirley: poprawiłem znacznik do kodu źródłowego, nie wolno wklejać byle jak do tekstu!

-

ROOKIE

Portret użytkownika mirley

Re: Pilot

TO co napisałeś się nie nadaje bo ustawiasz port w kilku miejscach w programie i nie wiadomo co sie dzieje, napisz tak:

If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          if Pind.0 = 1 then 
            if Portb.1 = 0 then Toggle Portb.0
          else
            Portb.0 = 1
          end if 
      Case 2:
          if Pind.1 = 1 then 
            if Portb.0 = 0 then Toggle Portb.1
          else
            Portb.0 = 1
          end if 

-

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 Cezar

Witam.Posiadam kilka

Witam.

Posiadam kilka pilotów z czego 2 lub 3 podobno RC5. Niestety nie moge w żaden sposób określić numerów komend. Znalazłem projekt testera pilotów, lecz na tiny2313. Jako że jestem początkującym "programistą" :) prosze o pomoc w przerobieniu tego kodu na 89c2051. Mam ich kilka a także programator płytkę testową i bascom-8051.

a to moje niezdarne próby :)

$regfile = "89c2051.dat"
$crystal = 16000000
Config Lcdpin = Pin , Db4 = P1.4 , Db5 = P1.5 , Db6 = P1.6 , Db7 = P1.7 , E = P1.3 , Rs = P1.2
Config Lcd = 16 * 2
Config Rc5 = P3.2
Enable Interrupts
 
Dim Address As Byte , Command As Byte
 
Cursor Blink
Cls
Lcd "  Oczekuj" ; Chr(0) ; " na"
Lowerline
Lcd "sygna" ; Chr(1) ; " z pilota"
 
Do
 
 Getrc5(address , Command)
 Command = Command And &B01111111
 If Address <> 255 And Command <> 127 Then
 Cls
 Lcd "Adres: " ; Address
 Lowerline
 Lcd "Komenda:" ; Command
 Waitms 100
 End If
 
Loop

założenie jest takie że w 1 wierszu ma pokazać adres a w 2 kod przycisku

Portret użytkownika mirley

Re: Piloty

weź kod od mojego odbiornika rc5 na 2051 i dodaj do programu na początku te linijki z LCD a w pętli głównej:

Do
  If Odebrano = 1 Then
     Odebrano = 0
       Disable Int0
 
       Waitms 100
       Reset Dioda
 
       Cls
       Lcd "Adres: " ; Adres
       Lowerline
       Lcd "Komenda:" ; Komenda
 
 
 
       Waitms 100
       Set Dioda
       Enable Int0
  End If
Loop
End

osobiście polecam jednak zastosowanie attiny, zarówno do takiego programu testera jak i do mojego odbiornika rc5

Ps. jeśli pytania odbiegają od tematu odbiornika rc5 który tu opisuję to załóż temat na forum

-

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 mol0922

Sterowanie

Witam mam pytanie ?
W tej chwili kod źródłowy jest ustawiony tak że nóżki działają na zasadzie włącz/wyłącz.
Czy ktoś ma skompilowany program który działa jak u'Switch.
Próbowałem sam to zrobić według wskazówek ale nie działa , a chciałbym sterować lampką RGB.
Ogólnie projekt super działa. Proszę o odpowiedz.
Pozdrawiam

Portret użytkownika mirley

Re: Odbiornik Rc5

Jakbyś poczytał wcześniejsze posty to byś znalazł mnóstwo takich modyfikacji.... rozumiem ze chodzi o kod dla Tiny2313?

Zmodyfikuj fragment programu:

.....
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

na:

......
Select Case Komenda
      Case 1:
          Reset Portb.0
      Case 2:
          Reset Portb.1
      Case 3:
          Reset Portb.2
      Case 4:
          Reset Portb.3
      Case 5:
          Reset Portb.4
      Case 6:
          Reset Portb.5
      Case 7:
          Reset Portb.6
      Case 8:
          Reset Portb.7
    End Select
 
    Waitms 100
    Set Dioda
    portb = 255
    Waitms 100

Powinno zadziałać, ale sam tego nie kompilowałem

-

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 szympek

Re: Rc5

Witam
Mam tylko jedno pytanie...
Skąd mam wiedzieć jakie przyciski na pilocie (kupiłem uniwersalny b]THOMSON ROC 3205[/b w TESCO Sp. z.o.o) mają jakie kody/numery? I gdzie dokładnie w programie, wpisać dane kody/numery?

Portret użytkownika mirley

Re: Pilot

Skąd wiesz ze twój pilot nadaje w standardzie RC5? Zaprogramuj z moimi numerami i sprawdź czy klawisze numeryczne 1-9 coś zmieniają. Do sprawdzania kodów najprościej jest napisać program testowy i wyswietlić na LCD, jeśli masz jakąś płytkę testową lub coś w tym stylu. Można tez poszukać w dokumentacji pilota jeśli taka istnieje i zawiera takie dane

-

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 kuba

Re: Re: Rc5

Pilot uniwersalny nadaje w różnych standardach (tzn. niekoniecznie RC5) w zależności od urządzenia docelowego. Spośród urządzeń obsługiwanych przez tego pilota (patrz: instrukcja obsługi) musisz znaleźć takie, dla których pilot nadaje w RC5. Dodatkowo w pilocie uniwersalnym kody (i adresy) przypisane do danego przycisku zmieniają się przy zmianie numeru urządzenia docelowego.
Jedynym sposobem ustalenia konfiguracji pilota jest odbiornik RC5 wyświetlający odebrane adres i kod, a to oznacza płytkę testową z wyświetlaczem LCD, odpowiedni program i duuużo czasu na to, by przeklikać wszystkie numery urządzeń docelowych.

-

Zepsuje się wszystko, co tylko może.
Zawsze tak, żeby uczynić najwięcej szkód w najmniej spodziewanym momencie.

Portret użytkownika szympek

Re: Pilot

Chyba najlepszym rozwiązaniem będzie płytka testowa...
Jakąś ATMEGE8 mam, WYŚWIETLACZ 2x16 tez... Gdzie znajdę schemat takiego urządzenia?

Portret użytkownika rafliczek22

u góry :D

u góry :D

Portret użytkownika szympek

Re: u góry :D

Do sprawdzania kodów pilota... :|

Portret użytkownika mirley

Re; Schemat

Popatrz na jakikolwiek schemat z moich projektów zawierający LCD i jakiś procesor. Dołącz do wolnego pinu odbiornik RC5 i napisz kilka prostych linijek programu na podstawie http://mirley.firlej.org/odbieranie_transmisji_rc5

-

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 szympek

Pilot THOMSON roc3205

Znalazłem w liście kodów pilota opcje Media Center PC na której znajdują sie trzy kody:

MCE 1100
MICROSOFT 1100
VISTA 1100

Czy ta opcja bedzie pracowla w standardzie RC5?
Zdobylem rowniez odbiornik TSOP 1238 cyz moge go zastosowac?

Napisalem juz program i oddaje do sprawdzenia.

$regfile = "m8def.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Pinc.0 , Db5 = Pinc.1 , Db6 = Pinc.2 , Db7 = Pinc.3 , E = Pinc.4 , Rs = Pinc.5
Config Lcd = 16 * 2
Config Rc5 = Pinb.0
Enable Interrupts
 
Dim Address As Byte , Command As Byte
 
Cursor Blink
Cls
Lcd "  Oczekuj" ; Chr(0) ; " na"
Lowerline
Lcd "sygna" ; Chr(1) ; " z pilota"
 
Do
 
 Getrc5(address , Command)
 Command = Command And &B01111111
 If Address <> 255 And Command <> 127 Then
 Cls
 Lcd "Adres: " ; Address
 Lowerline
 Lcd "Komenda:" ; Command
 Waitms 100
 End If
 
Loop

Mam jeszcze pytanie, po co jest ta linijka w programie... Przepisalem ja wraz z wiekszoscia programu...

 If Address <> 255 And Command <> 127 Then

PS. Pzepraszam za nie pisanie PL liter ale literki na klawiatorze mi sie poprzestawialy

Portret użytkownika mirley

Re: Rc5

Nie znam żadnego z tych kodów co podałeś..... program do analizatora wyględa za to całkiem wporządku. Ta linijka z ifami zapobiega wyświetlaniu wskazań jak nic nie zostało odebrane ale zdaje sie że komenda Getrc5 sama wstrzymuje program na czas odbioru transmisji i oczekuje na sygnał, więc nie będzie to raczej konieczne.

TSOP1238 odbiera na innej częstotliwości, przeczytaj w karcie katalogowej, więc raczej będziesz musiał zainwestować w 1736, ale na 100% ci nie powiem

-

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 Chester

TSOP1736

Witam!
Czy po podłączeniu TSOP1736 do zasilania na wyjściu czyli na nóżce out jest także stan wysoki??
Pozdrawiam!

Portret użytkownika mirley

Re: TSOP

Tak.... stan niski powinien się pojawić po wykryciu zmodulowanego sygnału podczerwieni

-

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 Chester

TSOP

To dobrze bo już się martwiłem że może odbiornik także jest niesprawny, a to jednak wina pilota :)

Portret użytkownika klon1111

problem z odbirem kodu

Witam
Od jakiegoś czasu mecze się nad odebraniem kodu rc5 z pilota
Najgorsze ze za każdym razem nie powtarza kodu przy wciśnięciu klawisza
Program napisany w asm i nie mogę znaleźć błędu w programie niby jest w porządku
ale odczyt do bani.

opis programu nie przestawiam kodu gdyż ma dożo funkcji :
-gdyż obsługuje czujnik Światła
- zegar czasu
-klawiatura PC
-wyświetlacz 7 segmentowy
-podaje wartość z czujnika światła
- dodałem serowarnie z IR
-wyświetla wartość IR

A teraz najpoważniejsze po przerwaniu INT0 z IR odczyt po 500us aktywacja INT0 po 1ms .
zapisuje 14 bitów w tym 3 pierwsze bity zeruje
Przerwanie timera 0 co 255 us
, taktowanie amega8 8mHz
Proszę o poradę czy czasy są dobre

oto kod częściowy program działa prawidłowo tylko odczyt z IR jest nie dobry

intt0:  ;obsługa z pilota  - aktywacja IR
 
        lds   r22 , AKTir 
        SBR r22,1  ; Ustaw bit(y) w rejestrze 
        sts AKTir ,r22
        reti
 
 
 
 
 
 
odcytIR:
 
    ldi r30 ,IRdane ;przygotuj do odczytu
    LD r26, z+ 
    LD r27, z
    LSL XL ; przesuwa bity w lewo mlodszy
    ROL XH  ; przesuwa bity w lewo starszy
    lds r17,IRliczba
    cpi r17 , 4
    BRLO  jjjj1; Skok gdy mniejsze 
 
    sbis  PIND,2 ;SBIS P, b   Pomiń jeśli bit w rejestrze I/O równy 1  
        rjmp jjjj1
    ADIW R27:R26, 1
    jjjj1:
       ldi r30 ,IRdane ;przygotui do zapisu
    st z+ , r26
    st z  , r27
    lds r17,IRliczba 
    cpi r17 , 14
        BRLO uuu; Skok gdy mniejsze 
        rcall zerowanieIR
        rcall ODCZYTgotIR
        uuu:
    ret 
 przerwanieTIMR0:
 
        lds r16,AKTir
        CBR r16,2 ;  Wyczyść bit(y) w rejestrze 
        sts AKTir ,r16
 
        lds r16,IRczas
        inc r16
        sts IRczas , r16
 
        cpi r16 , 2
        BRNE jj4      ;Skok gdy nie ruwne
 
        rcall odcytIR
        jj4:
 
        lds r16,IRczas
        cpi r16 , 4
        BRNE jj6     ;Skok gdy nie ruwne
        RCALL INT0kazdaZmiana
        RCALL WLAint0
        jj6:
        lds r16,IRczas
        cpi r16 , 9
        BRLO jj7; Skok gdy mniejsze 
        RCALL zerowanieIR
        jj7:
 
        ret
 
 
 przerwanieINTT0:
 
    lds r16,AKTir
    CBR r16,1 ;  Wyczyść bit(y) w rejestrze 
    sts AKTir ,r16
        RCALL WYLint0
     lds r17,IRliczba 
     inc r17
    sts  IRliczba , r17              
 
 
     cpi r17 , 1
    BRNE  hhhh      ;Skok gdy nie ruwna
     rcall WLAtimer0
    hhhh:      
     clr r17
    sts  IRczas , r17
 
    ret
 
 
WLAtimer0:
    ZAQ 2,TCCR0   ;   ustaw preskaler timera 
    reti
WYLtimer0:
    ZAQ 0,TCCR0   ;   ustaw preskaler timera 
    clr r16
    OUT tcnt0 ,r16  
    reti
WLAint0:
    in r16 ,GIFR  ; 
    sbr r16 , 1 << int0;włącz 
     OUT GIFR ,r16
    reti
WYLint0:
    in r16 ,GIFR  ; 
    cbr r16 , 1 << int0;wylącz 
     OUT GIFR ,r16
    ret
INT0zboczeOpadajace:
    in r16 ,MCUCR  ; 
    sbr r16 , 1 << isc01;wlącz 
    cbr r16 , 1 << isc00;wylącz 
     OUT MCUCR  ,r16
    ret
 
INT0kazdaZmiana:
    in r16 ,MCUCR  ; 
    cbr r16 , 1 << isc01;wylącz 
   sbr r16 , 1 << isc00;wlącz 
     OUT MCUCR  ,r16
    ret
zerowanieIR:
        RCALL INT0zboczeOpadajace
        RCALL WYLtimer0
        RCALL WLAint0
        clr r16
        sts IRczas , r16
        sts  IRliczba , r16
 
        ret
ODCZYTgotIR:
 
    ldi r30 ,IRdane ;przygotui do odczytu
    LD r26, z+ 
    LD r27, z
    sts   naLedSzesnastkL , r26  ;ZAŁADUI DO    LED
    sts   naLedSzesnastkH , r27
    SBR r24,2 ; aktywuje szesnastkowy led mieisca odczytuje z r2 I R3 liczbe w szesnastkowym systemie
    clr r27
    clr r26
    ldi r30 ,IRdane ;przygotui do zapisu
    st z+ , r26
    st z  , r27
 
ret

Portret użytkownika skejt

pytanko?

czy program bascon 8051 na stronie kórą podaleś jest bezplatny?

Portret użytkownika skejt

nie umie poslugiwac sie

nie umie poslugiwac sie bascompem niewiem jak pisze sie programy
jesli mozez to zmiesć cos w odp tylko wklej zeby netrzeba bylo sciongac
zebym obie skopiowal

Portret użytkownika mirley

Re: Bascom

Bascom w wersji deo jest bezpłatny... ma ograniczenie kompilacji do 4kb kodu.... w przeciwnym wypadku trzeba sobie kupić.

Jaki kod ma ci wkleić? Poszukaj sobie w internecie kursu "mikroprocesorowa ośla łączka" albo dla 8051 to raczej "Bascom collage" http://edw.com.pl/index.php?module=ContentExpress&func=display&btitle=CE&mid=&ceid=69#K4download

-

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 xtreme69

Zawieszający sie procek

Witam
Zbudowałem ostatnio ten układzik i działa elegancko gdy steruje nim diodami, jednak gdy próbowałem wysterować nim układ wykonawczy to procek się zawiesza co jakiś czas.
Procek to Attiny2313
taktowany kwarcem 16Mhz
Attiny zaprogramowany tym kodem

'************* 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 **************

Portret użytkownika rybaczenko

re

zmniejsz ten kwarc zresztą w ogóle go wyrzuć attiny da sobie rade spokojnie bez kwarcu i fusebity ustawione fabrycznie

-

ROOKIE

Portret użytkownika matrix

Re: Zawieszający sie procek

Nie fusy fabrycznie bo będzie pracował na 1MHz tylko trzeba zmienić podział taktowania, żeby nie dzielił przez 8.

Portret użytkownika mirley

Re: Rc5

A procek się zwiesza jak dołączysz układ wykonawczy sam czy jak jest układ wykonawczy i dalej jakiś odbiornik na 230V?

Kwarc nie ma tu nic do problemów zwieszalności

-

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 xtreme69

Re: procek się zwiesza

Procek się zawiesza tylko jak jest podłączony odbiornik na 220V.
Próbowałem podawać sygnał do układu wykonawczego na dłuższym kablu, ale to też nie pomogło.
Awarie procka też już wykluczyłem testując układ na kilku Attiny.

Portret użytkownika mirley

Re: Odbiornik Rc5

Z czego zasilasz układ z prockiem.... może włączający się układ na 230V robi zakłócenia do sieci. Zastosowałeś optotriak z włączaniem w zerze sieci?

-

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 xtreme69

Re: Odbiornik Rc5

Układ zasilam chwilowo z usbaspa, gdyż jest zmontowany na płytce testowej. Optotriak jaki zastosowałem to MOC3041 wraz z BT138-600E. Zastanawiam się czy nie zastosować jakiegoś ekranu na Attiny, gdyż tak jak napisałeś również zaczynam sądzić, że to od jakiś zakłóceń z sieci procek się zwiesza.
..........................................................................................................
Edit: Układ już działa poprawnie, okazało się, że w sterowanym urządzeniu znajdował się przekaźnik który broił przy przełączaniu . Więc go zastąpiłem lekko zmodyfikowanym układem wykonawczym i teraz jest OK.
Zamierzam teraz przerobić układ pod Mega8, gdyż brakuje mi już wyjść.

Portret użytkownika gosc

podwójna dioda led

Wykonałem odbiornik RC5 do TV LCD do którego nie mam pilota, sterowanie działa tak jak zamierzałem jedynie problem jest z diodą LED w oryginale na płytce jest podwójna dioda o wspólnej katodzie jak zmodyfikować program tak żeby jedna świeciła podczas wprowadzania kodu z pilota a druga ma świecić na stałe tylko kiedy TV jest w stanie czuwania.

Portret użytkownika marekmm

Podwójna dioda LED

Uporałem się z jedną diodą LED tą która sygnalizuje wprowadzenie kodu z pilota po prostu zamieniłem
funkcje reset na set pytanie będzie odnośnie drugiej diody LED która ma świecić tylko w stanie czuwania TV myślałem o dopisaniu drugiego portu w miejscu gdzie przypisałem adres wykonywania zał/wył ale jak zapisać funkcje żeby niski poziom na porcie pozostał na stałe (poziom 0)i zmienił się po ponownym naciśnięciu na pilocie zał/wył odbiornik wykonany na 89c2051

Portret użytkownika mirley

Re: Rc5

Zamiast np. reset p1.7, napisz:

p1.7 = not p1.7

zamiast na końcu ustwiania 255 na porcie ustaw tylko konkretne piny. W tym przypadku wszystkie oprócz p1.7. Prościej da się to zrobić chyba tak za pomoca zmiennej byte

a = 255
a.7 = p1.7
p1 = a

-

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 marekmm

Podwójna dioda LED

Poprawiłem kod tak jak podałeś jednak jak zrobić żeby był odwrócony stan portu zaznaczam że dioda jest z wspólną katodą "dioda dwukolorowa" w tej chwili działa tak że jak TV jest wyłączony to dioda nie świeci a jak jest załączony TV to dioda świeci a ma być odwrotnie.

PS jak byś wyjaśnił jak się wstawia kod to bym go tu wkleił. Pozdrawiam

Portret użytkownika mirley

Re: Kod

Normalnie się wkleja w znaczniku "qb", przycisk bas

-

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 marekmm

Podwójna dioda LED

Problem polega na tym że dioda LED "czuwanie" świeci odwrotnie ma świecić kiedy TV jest w stanie wyłączenia a jak jest włączony TV to ma nie świecić i jeszcze jedno druga dioda LED przy pierwszym załączeniu świeci cały czas aż do chwili podania kodu z pilota potem jest dobrze obydwie diody LED to podwójna dioda o wspólnej katodzie

'**************************
       'Konfiguracja
'**************************
 
$crystal = 12000000                                           '12MHz
$regfile = "89C2051.DAT"
 
Config Rc5 = P3.2
Reset Tcon.0                                                  'reaguje na zbocze narastające
On Int0 Odbierz_rc5
Enable Int0
Enable Interrupts
 
Dim Odebrano As Bit
Dim Komenda As Byte , Adres As Byte
Dim A As Byte
 
Dioda Alias P3.7
'**************************
      'Pętla glowna
'**************************
 
Do
   If Odebrano = 1 Then
      Odebrano = 0
      If Adres = 0 Then
        Disable Int0
 
 
        Waitms 100
        Set Dioda
 
        Select Case Komenda
          Case 16:                                            'vol+
            Reset P1.7
          Case 17:                                            'vol-
            Reset P1.6
          Case 32:                                            'Pro+
            Reset P1.5
          Case 33:                                            'Pro-
            Reset P1.4
          Case 56:                                            'AV/TV
            Reset P1.3
          Case 12:                                            'Power
            Reset P1.2
            P1.0 = Not P1.0                                   'druga dioda stan czuwanie
          Case 55:                                            'Menu
            Reset P1.1
        End Select
 
        Waitms 100
        Reset Dioda
 
          A = 255                                             'ustawienie portu P1 w stan 1
          A.0 = P1.0                                          'oprucz portu P1.0
          P1 = A
 
        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
'*****************************

Portret użytkownika mirley

Re: Rc5

Stan początkowy ustawisz na początku dając przed DO polecenia:

set P1.7 'lub 
reset P1.7 'ustawi to stan początkowy. 

podobnie dla innego pinu

Z diodami o wspólnej katodzie będzie problem bo procek 2051 nie ma tranzystora zwierającego do +. Jest tylko jeden tranzystor wyjściowy i on zwiera do masy. Do plus jest wewnętrzny rezystor podciągający.... więc diody będą świecić w zależności od tego co on pozwoli :)

W 2051 wszystko należy sterować przez zwieranie do masy

-

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 marekmm

Podwójna dioda LED

Czyli pozostaje wymienić diodę Led o wspólnej anodzie i problem będzie rozwiązany. Dziękuje za pomoc.

PS. Bym zapomniał a na jakim procku można by takie stany wymusić i czy są taki.