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 mic123x

Opis gold pinów

Czy można prosić o dokładny opis co robi każdy gold pin.
Sory że tak się pytam bo jestem jeszcze zielony w tych sprawach.
Szukałem już jakiś miesiąc schematu i kodu na dekoder RC5.
Z góry dzieki.:D

Portret użytkownika matrix

mic123x wrote:Czy można

mic123x wrote:
Czy można prosić o dokładny opis co robi każdy gold pin.

Po pinach procka dodź do tego co robią piny złącza.

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

Natomiast ja mam pytanie do Mirka. Nie wiem jak to było w bascom 8051, ale w bascom avr chyba taki kod nie przeszedł by? Chodzi mi dokładnie o select case.
Jeśli w bascom avr napisze się coś takiego:

Select Case Komenda
         Case 1:                                              'vol+
           Reset P1.7
         Case 2:                                              'bas+
           Reset P1.6
         Case 3:                                              'treb+
           Reset P1.5
 
       End Select

To po wybraniu wszystkich komend, wszystkie wyjścia procka będą w niskim stanie logicznym.

Portret użytkownika mic123x

OK! Już rozumiem nie

OK!
Już rozumiem nie spojrzałem na komentarz.
I mam takie jeszcze pytanie można zamiast TSOP1763 użyć TSOP2236

Portret użytkownika mic123x

TSOP1736 - TSOP2236

OK już rozumiem nie spojrzałem na komentarze!
i takie jeszcze małe pytanie czy zamiast TSOP1736 można użyć TSOP2236?

Portret użytkownika matrix

Re: TSOP1736 - TSOP2236

Z pdf'a wygląda że można

http://pdf1.alldatasheet.com/datasheet-pdf/view/26631/VISHAY/TSOP2236.html

Obydwa są na 36kHz, obydwa mają podobną jeśli nie taką samą budowę układów wyjściowych. Próbuj, tym bardziej że kosztuje grosze. Najszybciej zwykle sprawdza się że tak powiem "organoleptycznie", chyba że nie ma się danego układu.

Portret użytkownika mic123x

Tak zapytałem bo posiadam

Tak zapytałem bo posiadam właśnie takie.
Dzięki wielkie!

Portret użytkownika mirley

Re: rc5

jeśli chodzi o case to w bascomie avr nie przejdzie to ze względu na złe nazwy wyprowadzeń procka i ogólnie trochę inną konstrukcję programu.

-

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 mirley

Re: rc5

jeśli chodzi o case to w bascomie avr nie przejdzie to ze względu na złe nazwy wyprowadzeń procka i ogólnie trochę inną konstrukcję programu.

-

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 gosc22

Witam, wykonałem sobie

Witam, wykonałem sobie podobny układ tylko że na Atmedze8 i chciał bym zrobić ściemniacz tasmy LED na PWM. Mógł by ktoś pomoc napisać ten kawałek kodu do mojego? Nigdy nie robilem nic z PWM z tąd nie wiem jak sie do tego zabrać:)
Mój wsad:

'************* 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 Portb.0
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
Dim Sbit As Bit
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 0 Then
    Reset Dioda
 
    Sbit = 1
 
    Select Case Komenda
      Case 1:
          Sbit = 0
      Case 2:
          Toggle Portc.1
      Case 3:
          Toggle Portc.2
      Case 4:
          Toggle Portc.3
      Case 5:
          Toggle Portc.4
      Case 6:
          Toggle Portc.5
      Case 7:
          Toggle Portb.5
      Case 8:
          Toggle Portb.4
    End Select
 
    Portc.0 = Sbit
 
    Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Portret użytkownika mirley

Re: PWM

Skoro chcesz jeden kanał to najprościej jest wykorzystać sprzętowy PWM, nie powinien się on gryść z obsługą rc5. Skonfiguruj timer1

Config Timer1 = Pwm , Pwm = 8 , Compare_A_Pwm = Clear_Up , Compare_B_Pwm = Clear_Down , Prescale = 1

Teraz jak wydasz polecenia ustawiające wartośći:

Pwm1a = 128
Pwm1b = 128

to na pinach OC1A i OC1B będą przebiegi PWM o wypełnieniu Pwm1a/256 i pwm1b/256. jeden timer obsługuje dwa niezależne wyjścia

-

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 kolega 123

pomoc.

Witam mam takie pytanie próbowałem napisać program z funkcją not i nie działa. Dokładnie to chodzi mi o to aby za pomocą 1 przycisku mogło włączać i wyłączać 1 port (obojętnie jaki).
dziękuje za pomoc

Portret użytkownika kolega 123

pomoc.

Witam mam takie pytanie próbowałem napisać program z funkcją not i nie działa. Dokładnie to chodzi mi o to aby za pomocą 1 przycisku mogło włączać i wyłączać 1 port (obojętnie jaki).
dziękuje za pomoc

Portret użytkownika matrix

Re: pomoc.

Po co Ci NOT ?

Napisz sobie:

do
 If przycisk = 0 then
   toggle PORTB
   waitms 100
 end if
loop
end

Portret użytkownika demsy1

Próbował kolega funkcji

Próbował kolega funkcji "toggle"

Portret użytkownika kolega 123

pomoc

Z toggle nie próbowałem al dzięki za odpowidz a mam jeszcze jedno pytanie mam 1 pin i silnik gdy nacisnę kręci się w prawo i po czasie sie zatrzymuje i gdy naciśnie sie drugi raz ten sam pin kręci sie w strone przeciwną.

Portret użytkownika demsy1

Pewnie namieszałeś w

Pewnie namieszałeś w programie

Portret użytkownika matrix

Re: pomoc

kolega wrote:
mam jeszcze jedno pytanie mam 1 pin i silnik gdy nacisnę kręci się w prawo i po czasie sie zatrzymuje i gdy naciśnie sie drugi raz ten sam pin kręci sie w strone przeciwną.

Pin jest tylko wejściem rozkazu. Silnik zapewne sterowany jest poprzez mostek H któey sterowany jest dwoma pinami wyjściowymi z mikrokontrolera. Nie da się sterować silnikiem za pomocą jednego pinu wyjściowego procesora.

Portret użytkownika mateusz119955

programator

Witam, jakiego programatora używasz przy programowaniu 89c2051?
Szukałem w internecie programatora dla tych mikrokontrolerów ale nic nieznalazłem, a chciałem się pobawić trochę tymi kostkami.

Portret użytkownika mirley

Re: 2051

Używam to trochę mocne słowo.... chyba z 2 lata nie programowałem 2051. Mam dokładnie ten programator na LPT http://sklep.avt.pl/p/pl/48061/programator+procesorow+89cx051.html

-

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 mateusz119955

programator

Fajny programatorek ale czy on współpracuje tylko z bascomem czy też z innymi kompilatorami? Bo ja chciałem programować w asembler.

Portret użytkownika demsy1

Programator

Raczej tylko Bascom

Portret użytkownika Cezary20

Czujnik zbliżeniwy na rc5

Witam. Może odbiegnę trochę od tematu. Chciał bym aby taki nadajnik i odbiornik złączyć w jednym programie na jednym procku (najlepiej attiny13) tak aby nadawał określony sygnał rc5 i jeżeli nie wróci zapalała się dioda. Wtedy od izolowane by zostały jakiekolwiek zakłócenia. Czy jest to możliwe?

Portret użytkownika kw

standby

Uruchomiłem odbiornik na attiny2313 w "wersji" do wzmacniacza. Jest już prawie ok ale... Co trzeba dopisać aby zadziałało standby tzn. po komendzie off procesor zerował wyjścia i nie reagował na inne rozkazy, a po on załanczał jedno z wejść. Można to obejść puszczając zasilanie przez przekaźnik na sterowane układy ale to niezbyt ciekawe rozwiązanie.

Portret użytkownika mirley

Re: Rc5

Wystarczy dodać jedną zmienna typu bit np dim off as bit. Teraz na starcie off=1, a po kliknięciu przycisku włączania zrobisz toggle off. Pozostałe przyciski musza mieć warunek if off=0 then toggle portx.y

-

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 kw

standby

Dzięki za podpowiedź ale nadal nie działa tak jak trzeba. W trybie "standby" wyjścia się nie załanczają na stale tak jak w normalnej pracy ale pomimo to pojawia się krótki impuls. Mam inną wersję odbiornika, która działa prawidłowo ale autor nie chce udostępnić swojego kodu do przeróbki. Nie wiem czy dobrze myślę- czy da się procek wprowadzić w stan uśpienia z którego można go obudzić tylko tą jedną komendą - ON ?

Portret użytkownika mirley

Re: Odbiornik

Wrzuć kod który zrobiłeś i daje te krótkie impulsy... bo zastanawiam się nad tym i nie powinno tak być

-

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 kw

Off

Oto przykładowy kod. Bez względu czy wrzucę to do pętli czy przed nie działa a wręcz prawie nic nie działa. Obecnie Stby mam na pb.7 i If pb.7 = 0 Then wyjścia = 0 - i to mi mruga.
No i muszę się przesiąść na atmegę 16 bo nawet na 8 wykorzystałem wszystkie porty.

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Portb = &B11111111 : Portb = &B00000000
Config Portd = &B11111011 : Portd = &B11111111
 
Config Rc5 = Pind.2 , Wait = 2000
Dioda Alias Portd.6
 
On Int0 Przzew0 Nosave
Config Int0 = Low Level                                     'Falling
Enable Int0
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
Dim Odebrano As Bit
Dim Off As Bit
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
 
 
 
Do
 
  Portb.4 = 1
  Portb.5 = 1
  Off = 1
  If Off = 0 Then
             Portb.0 = 0
             Portb.1 = 0
             Portb.2 = 0
             Portb.6 = 0
             Portb.4 = 0
             Portb.5 = 0
             End If
If Odebrano = 1 Then
 
        Odebrano = 0
        Reset Dioda
 
 
   If Adres = 20 And Komenda = 63 Then                      'CD
             Portb.0 = 1
             Portb.1 = 0
             Portb.2 = 0
             Portb.6 = 0
 
   Elseif Adres = 17 And Komenda = 63 Then                  'TUNER
             Portb.0 = 0
             Portb.1 = 1
             Portb.2 = 0
             Portb.6 = 0
 
   Elseif Adres = 18 And Komenda = 63 Then                  'Aux
             Portb.0 = 0
             Portb.1 = 0
             Portb.2 = 1
             Portb.6 = 0
 
   Elseif Adres = 21 And Komenda = 63 Then                  'TV
             Portb.0 = 0
             Portb.1 = 0
             Portb.2 = 0
             Portb.6 = 1
 
   Elseif Adres = 0 Or Adres = 20 Or Adres = 17 Or Adres = 18 And Komenda = 16 Then       'vol+
            Set Portb.4
 
   Elseif Adres = 0 Or Adres = 20 Or Adres = 17 Or Adres = 18 And Komenda = 17 Then       'vol-
            Set Portb.5
   Elseif Adres = 0 Or Adres = 20 Or Adres = 17 Or Adres = 18 And Komenda = 12 Then       'stby
            Toggle Off
 
 
   End If
 
   Waitms 100
   Set Dioda
   Waitms 100
   Enable Int0
 
End If
 
Loop
'************ Petla glowna Koniec **************
 
Przzew0:
  Disable Int0
  Enable Interrupts
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
  Odebrano = 1
Return

Mam jeszcze problem z PWM ale najpierw chcę zrobić to Off.

Portret użytkownika mirley

Re: Rc5

Nie działa bo napisałeś t bzdurnie.... co ma robić ten kod:

  Off = 1
  If Off = 0 Then
             Portb.0 = 0
             Portb.1 = 0
             Portb.2 = 0
             Portb.6 = 0
             Portb.4 = 0
             Portb.5 = 0
             End If

nigdy sie nie wykona...

poza tym nie możesz modyfikowac w kilku miejscach w tej samej iteracji pętli tego samego pinu.

jak napiszesz set portx.y, potem jakieś polecenia i potem reset portx.y to na bank będzie coś pikać i będą problemy.

Poza warunkiem if odebrano=1 nie powinno już nic leżeć w do loop bo cokolwiek może się zmienić tylko w momencie nacisnięcia klawisza. Zatem wewnątrz ifa musi leżeć najpierw warunek sprawdzający czy został naciśniety klawisz off i jeśli tak to zmiana wartości zmiennej off. Zaraz po tym ifie sprawdzany jest warunek czy off=1, jesli tak to ustawiaja się porty tak jak ma być dla off a jesli off nie jest 1 to dopiero teraz zsprawdzane są pozostałe warunki w zalezności od adresu i komendy.

Jesli jest więcej urządzeń jak widzę w kodzie wyżej i więcej pilotów o różnych adresach to jeśli mają działać niezaleznie to musi być więcej zmiennych off, dla każdego urządzenia po jednej.

-

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 kw

Jak pisałem wcześniej to

Jak pisałem wcześniej to jedno urządzenie. "Cd, Tuner, Tv, Aux" to sterowanie przekaźników wejść wzmacniacza. Pilot jest jeden od wieży. W zależności które wejście (urządzenie) się wybierze pilot wysyła rozkaz przypisany temu urządzeniu, np next Cd jest inne niż next Tv a ma sterowac tym samym portem dla tego linijka

Elseif Adres = 0 Or Adres = 20 Or Adres = 17 Or Adres = 18 And Komenda = 17

Tak jak radziłeś dałem na starcie Off = 1 .
Jest tez warunek naciśnięcia Off i jego przełączenie

Elseif Adres = 0 Or Adres = 20 Or Adres = 17 Or Adres = 18 And Komenda = 12 Then 'stby
Toggle Off

I wg tego co radziłeś to co ma być jeśli Off jest wyłączony

If Off = 0 Then
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.6 = 0
Portb.4 = 0
Portb.5 = 0
End If

Tzn ten If Off = 0 .... ma być pod Toggle Off?

Wszystko ma działać zależnie. Jeśli Off = 0 to wszystkie porty = 0.

Dziwne sprawa bo przerzuciłem "moją" wersję na atmega8 wyciągniętą z innego sterownika IR i po rozkazie stby - Komenda=12
gasną wszystkie porty i nie mrugają. Jak kupię to sprawdzę jak to działa na 16 albo 162

Portret użytkownika goscm

dla attiny13 gdzie jest

dla attiny13 gdzie jest podłączony kwarc?
w kodzie jest $crystal = 9600000

Portret użytkownika mirley

Re: Tiny

Nie ma kwarcu, Crystal oznacza ogólnie taktowanie a Tiny jest przestawiony na Wewnętrzy oscylator 9.6MHz

-

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 maly3101

dla attiny13 gdzie jest

ok, dziękować. Brakowało mi wyprowadzeń ;) dam znać czy działa.

Portret użytkownika maly310..

attiny13.dat

sprawdziłem z attiny13 i działa z lekką zmianą. Skasowałem z kody Diodę bo nie potrzebuję jej obsługi i zmieniłem waitms na 10. Mam tylko jednego errora podczas kompilacji "out of sram space" ale działa i to jest ważne. Pozdrawiam.

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny13.dat"
$crystal = 9600000
 
Config Portb = &B11101111 : Portb = &B11111111
 
$hwstack = 20
$swstack = 10
$framesize = 40
 
Config Rc5 = Pinb.4
 
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
 
 
    Select Case Komenda
      Case 16:
          Toggle Portb.0
      Case 17:
          Toggle Portb.1
      Case 35:
          Toggle Portb.2
    End Select
   Waitms 10
   Portb = 255
   Waitms 10
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Portret użytkownika miras1970

Tuner sterowanie

Witam serdecznie jestem tu nowy i glodny kilku informacji. Zmontowałem układ na płytce stykowej z zastosowaniem atiny2313a wgrałem pliki zrodlowe i uklad po malych kombinacjach ruszył.Oczywiscie problem byl w fusebitach.Programator mam zakupiony w iternecie USB ISP a program to PROG ISP 1.72.A teraz do sedna sprawy czytalem posty juz ze 2 razy ale i tak duzo nie kumam ale juz cos tam powoli powoli lapie.Chcialbym wykorzystac uklad do sterowania tunerem: potrzebuje wejcie zalacz/wylcz,nastepne 8 do sterowania kanalam od 1 do 8, i 2 do przestrajania w prawo i lewo czyli sygnal ciagly.Czyli przyciskow bylo by 11.Zalacz moze powodowac zalaczenie tunera czyli stenby i uaktywnic kolejne komendy.Zgory dziekuje za pomoc i pozdrawiam.

Po jednym dniu walki splodzilem cos takiego i nawet dziala:no moze nie calkiem jak bym sobie zyczyl ale zawsze to cos:case 1-8 ok.case 63 0n/off ok chociaz wolałbym jak by zalaczyl calosc a reszta komend działa po włączeniu no ale moze ktos pomoze.A teraz najtrudniejsze lewo prawo lub jak kto woli +/- działa na zasadzie przerywania wolałbym ciągły sygnał moze też ktoś pomoże.

'************* 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
Dim Odebrano As Bit , Volg As Bit , Volc As Bit
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 0 Then
    Reset Dioda
 
 
 
    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
      Case 63:
          Toggle Portd.5
      Case 21:
           Portd.4 = Volg
      Case 22:
          Portd.3 = Volc
    End Select
 
 
    Waitms 100
    Set Dioda
    Portb = Portb Or &B11111111
    Portd = Portd Or &B11011111
    Waitms 20
 
 
   End If
 
Loop
End
'************ Petla glowna Koniec **************

Portret użytkownika miras1970

Tuner sterowanie

Oto moje nowe wypociny które działają wg.moich zyczeń i mój pilot z nr case sam na piechte spisalem

'************* 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
Dim Odebrano As Bit , Volg As Bit , Volc As Bit
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 0 Then
    Reset Dioda
 
 
 
    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
      Case 12:
          Toggle Portd.5
      Case 21:
          Portd.4 = Volc
      Case 22:
          Portd.3 = Volg
    End Select
 
 
    Waitms 50
    Set Dioda
    Portb = Portb Or &B11111111
    Elseif Adres = 255 Then
 
 
      Set Portd.3
      Set Portd.4
 
   End If
 
Loop
End
'************ Petla glowna Koniec **************[code]

Portret użytkownika Mieczysław

Uruchomienie nagrywania.

Witam, skleciłem urządzonko do magnetofonu szpulowego, wszystko gra ale potrzebuję pomocy w kodzie. Jak zrobić aby jednym przyciskiem zwierać dwa piny jednocześnie? Jeden ma dać sygnał dla klawisza record a drugi play. Pozdrawiam

Portret użytkownika EDC

Odp. Uruchomienie nagrywania

W Case obsługującą Rec musisz dopisac pin z Play

Przykład:

 Select Case Komenda
      Case 1:
          Reset Portb.0  'Przycisk Play w magnetofonie
      Case 2:
          Reset Portb.0  'Przycisk Play w magnetofonie
          Reset Portb.1  'Przycisk Rec  w magnetofonie
      Case 3:
          Reset Portb.2
 
        ...itd

Miłego dnia

-

BARTek
Moja strona

Portret użytkownika Mieczysław

Witam, mój układ działa nie

Witam, mój układ działa nie do końca jakbym chciał. Oto kod

'************* 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:
          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 900
    Set Dioda
    Portb = Portb Or &B11111111
 
 
   End If
 
Loop
End
'************ Petla glowna Koniec **************

Problem polega na tym że piny zwierają się do masy, ale kiedy przycisk nie jest wciśnięty,na nich jest ciągle stan wysoki, czyli napięcie. Ja bym potrzebował aby tego napięcia tam nie było i tylko po naciśnięciu klawisza zwierał na np. 100ms pin do masy. Jak do tego podejść? Pozdrawiam

Portret użytkownika EDC

Odp. Uklad nie działa

:D Może w niedzielę głowa tak nie pracuje. Kolego wstaw pomiędzy procesorem a czymś czym sterujesz diodę w kierunku zaporowym. (Jeśli dioda czarna to białą kreską bliżej nóżki procesora, jeśli dioda różowa to czarną kreską na diodzie bliżej nóżki procesora) Hahha. Wybacz takie łopatologiczne wytłumaczenie ale nie wiem czego się jeszcze spodziewać :D
To spowoduje że napięcie 5V nie przejdzie przez diodę, a tylko prąd z drugiej strony diody będzie mógł być zwierany do masy przez procesor :D

Ps. Te Waitms to Twój czas..zmień sobie na jaki chcesz ale 300-500 powinno być OK..100 to trochu mało.

-

BARTek
Moja strona

Portret użytkownika Mieczysław

Sądziłem że da się to

Sądziłem że da się to rozwiązać ze strony programowej attiny2313. Udało mi się w jakiś testach zrobić tak aby nie było napięcia na pinach, ale po naciśnięciu pilotem zwiera do masy na stałe. Dopiero po odłączeniu napięcia i ponownym podłączeniu znikało zwarcie z masą.

Portret użytkownika mirley

Re: RC5

Da się to zrobić. Trzeba na rejestrze port ustawić na stałe 0 i zmieniać rejestr DDR odpowiedzialny za konfigurację pinu. Przełączasz na wyjście jak chcesz do masy i na wejście jak chcesz aby wisiał w powietrzu.... boscom nie może konfigurowac kilka razy pinów za pomocą config ale można zmieniać wartości rejestrów. Zapraszam do poczytania pdf od 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 Mieczysław

Czy pomógłby ktoś konkretnie

Czy pomógłby ktoś konkretnie jak do tego podejść lub podrzucił jakimś przykładowym kodem jak to powinno wyglądać?

Portret użytkownika EDC

RC5 - prawdopodobnie gotowiec :P

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B00000000 : Portb = &B00000000
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:
         Ddrb.0 = 1
      Case 2:
         Ddrb.1 = 1
      Case 3:
         Ddrb.2 = 1
      Case 4:
         Ddrb.3 = 1
      Case 5:
         Ddrb.4 = 1
      Case 6:
         Ddrb.5 = 1
      Case 7:
         Ddrb.6 = 1
      Case 8:
         Ddrb.7 = 1
    End Select
 
 
    Waitms 300
    Set Dioda
      Ddrb = &B00000000
 
   End If
 
Loop
End
'************ Petla glowna Koniec **************

Spróbuj. Jakby nie włączało portów do masy to pod każdym DDRB.x = 1 dopisz jeszcze reset PORTB.x gdzie x to numer pinu portu.

-

BARTek
Moja strona

Portret użytkownika Mieczysław

Dziękuję, działa jak należy.

Dziękuję, działa jak należy. Pozdr

Portret użytkownika wilus

przytrzymanie przycisków

Witam jak zrobić coś takiego, trzymam przycisk i tak długo mam stan wysoki na wyjściu aż go nie puszczę? chcę wykorzystać to do sterowania silnika prawo lewo. Bardzo proszę o odpowiedź

Portret użytkownika wilus

przytrzymanie przycisków

Witam jak zrobić coś takiego, trzymam przycisk i tak długo mam stan wysoki na wyjściu aż go nie puszczę? chcę wykorzystać to do sterowania silnika prawo lewo. Bardzo proszę o odpowiedź

Portret użytkownika EDC

Odp. Przytrzymanie przycisków

Jak chcesz sterować? Dwoma przekaźnikami czy tranzystorami. Stan właśnie jest niski po wykryciu komendy. Sprecyzuj to Ci pomogę. Pilot sam nadaje z przerwami więc wymagane jest programowe podtrzymanie. Zdjęcie linii "Waitms xxx" i dodanie kondensatorka na pin to chyba nie jest dobre rozwiązanie i może uszkodzić port..
Pilot też musi mieć "autorepeat" - Weź telefon komórkowy i popatrz na diodę pilota przez kamerę telefonu (tak jakbyś chciał zrobić zdjęcie diody pilota) . Dioda na ekranie telefonu będzie świecić na biało podczas naciskania ;) Starsze piloty miały to tylko na Głośniej-Ciszej

-

BARTek
Moja strona

Portret użytkownika wilus

przytrzymanie przycisków

Będzie to mostek H na tranzystorach bc547 i bc557 pilot to AN-MR400 od LG (nie używam głośności i programów)ma diodę która świeci na biało przy przytrzymaniu przycisku (nie mruga).

Portret użytkownika wilus

przytrzymanie przycisków

Będzie to mostek H na tranzystorach bc547 i bc557 pilot to AN-MR400 od LG (nie używam głośności i programów)ma diodę która świeci na biało przy przytrzymaniu przycisku (nie mruga).

Portret użytkownika EDC

Pilot RC5 z możliwością przytrzymania przycisku

Proszę kolego sympatyczny :D Testowałem ten program na mojej płytce testowej i dlatego tylko jedno wyjście zadeklarowane. Mam nadzieję że każdy potrafi zmienić sobie pod swoje hardware.
Kilka słów wyjaśnień. Pilot nie nadaje stale. To tylko bezwładność oka kamery telefonu. Zobaczyłbyś że przerywa gdybyś zamiast diody na podczerwień przylutował zwykłą. Idea programu jest prosta. W Wikipedii wyczytałem że ponowne wysłanie komendy z pilota następuje co 114 milisekund. Po naciśnięciu przycisku do odmierzenia zostaje wpisana wartość 60 co odpowiada 120 milisekundom bo Timer odejmuje jedną co 2 milisekundy.
Tak więc bezpiecznie zostaje jeszcze 6 milisekund i jeśli pilot zdąży ponowić komende to wartośc do odmierzenia znów się zwiększy. Jeśli nie dioda gaśnie natychmiast :D
Można wpisywać różne czasy w zalezności od pełnionej przez pin funkcji.

'RC5 z możliwością przytrzymania przycisku
'BARTek EDC
$regfile = "attiny2313.dat"
$hwstack = 32
$swstack = 8
$framesize = 16
$crystal = 12000000
 
$lib "mcsbyte.lbx"                                          'wykorzystamy bibliotekę która ogranicza się
                                                            ' do używania tylko bajtów celem zmniejszenia kodu
Config Timer1 = Timer , Prescale = 256                      ' do odmierzania czasu użyjemy Timer1 bo Timer0
Enable Timer1 : On Timer1 Timer1_isr                        'zajęty przez RC5
 
Config Portd.5 = Output                                     ' do testów tylko jedno wyjście
Led Alias Portd.5                                           'nadanie przyjaznej nazwy
Set Led                                                     'wyłaczamy wyjście
 
Config Rc5 = Pind.4 , Wait = 2000                           'wybór pinu dla RC5
 
Dim Address As Byte                                         'typ urządzenia np.0-telewizor, 8-sat
Dim Command As Byte                                         'np 17 ciszej,16 głośniej
Dim Odliczanie As Byte                                      'zmienna pomocnicza do odliczania czasu
Const Czas_odliczania = 60                                  'czas podtrzymania x 2 milisekundy
 
Const Timer1_preload = 65444                                '2ms przy 12MHz, 65412 dla 16MHz ,65475 dla 8MHz
 
Enable Interrupts                                           ' zezwolenie na przerwania
'*** START ***
Do
 
Getrc5(address , Command)                                   'sprawdź czy pilot nadaje
 
If Address <> 255 Then                                      'jeśli Wpisać "If Address=0 Then"
  Command = Command And &B01111111                          'to zawęzimy tylko do telewizorów
 
 Select Case Command
 
   Case 16                                                  'np głosniej
      Reset Led
      Odliczanie = Czas_odliczania
   Case 17                                                  'np ciszej
      Reset Led
      Odliczanie = Czas_odliczania
 'tu miejsce na kolejne przyciski
  End Select
 
End If
 
Loop
End
'*** KONIEC ***
 
'obsługa przerwania Timera1
Timer1_isr:
Timer1 = Timer1_preload                                     'ładuje wcześniej zdefiniowaną wartość
'jeśli licznik załadowany np.65444 dojdzie do 65535 to odejmie ze zmiennej odliczanie
If Odliczanie > 0 Then Decr Odliczanie
If Odliczanie = 0 Then Set Led
 
Return

Będziesz rolety opuszczał? Hahahaha :D
Zauważ że kwarc inny niż w projekcie bo taki akurat miałem do ATtiny przylutowany. Timer1 preload zmienić trzeba pod swój kwarc.

Życzę miłego dnia

-

BARTek
Moja strona