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

na jakim procku to zrobiłeś i jaki użyłeś do tego soft? Jeśli soft używa przerwań to nie możesz sobie pinu wejściowego Rc5 zamienić na inny. Jedynie na pin od drugiego przerwania.

-

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 ja

sterowanie

witam mam pytanie jak zrobić żeby trzymając jeden przycisk na wyjściu któregoś w portów pojawiał się stan wysoki, aby trzymał przekaźnik. ponieważ teraz trzymając guzk przekaźnik "cyka"

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
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 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
 
    Portb.0 = Sbit
 
    Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Teraz powinno zadziałać. Na porcie b.0 będzie stan niski dopóki będziesz trzymał klawisz

-

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 gosc2

zmiana portu

witam jak zrobić żeby na PB.1 i PB.2 były na zmianę stany wysokie tzn gdy PB.1 będzie stan wysoki to na PB.2 będzie niski i gdy zmienię aby na PB.2 był był stan wysoki to PB.1 wraca na niski i tak na zmianę:) będę używał tylko tych 2 portów nic więcej nie będzie do tego podłączone

Portret użytkownika mirley

Re: Rc5

    Select Case Komenda
      Case 1:
          PB.1 = not PB.1
          PB.2 = not PB.1
 
    End Select

-

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 gosc2

rc5

Witam mam pytanie czy da radę przerobić program tak że gdy z np trzymając jeden guzik n jednym z wyjść był stan wysoki gdy go puścimy będzie niski ponieważ chcę wykorzystać ten układ do bariery optycznej.

Portret użytkownika mirley

Re: Rc5

Weź kod 3 posty wyżej tylko zamień 0 z 1 przy Sbit=0 i Sbit=1.....

......
 Sbit = 0
 
    Select Case Komenda
      Case 1:
          Sbit = 1
      Case 2:
          Toggle Portb.1
      Case 3:
......

-

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 maro

Witam serdecznieWystarczy

Witam serdecznie
Wystarczy taki kod do odczytania kody z pilota RC5?

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2       'avt 2313 test boart
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
Config Rc5 = Pind.2
 
 
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
 
    Cls
      Lcd Komenda
 
Loop
End
'************ Petla glowna Koniec **************

Portret użytkownika mirley

Re: Rc5

Tak wygląda to dobrze, jeszcze możesz w drugiej linii wyświetlić adres bo różne piloty mogą mieć różne adresy

-

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 maro

WitamWykonałem płytkę do

Witam
Wykonałem płytkę do odczytu kody i u góry w pierwszej linijce pojawią się cyfry 127, a niżej 255 i chciałem sprawdzić ten pilot co niżej w linku
http://lispol.com/p/2567/Kontroler%20RGB%20z%20pilotem%20IR%2024-KEY
ale niestety nic nie reaguje

To jest mój kod

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2       'avt 2313 test boart
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
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
 
 
 
           Cls
      Lcd Komenda
 
       Lowerline
 
      Lcd Adres
 
      Loop
 
End
'************ Petla glowna Koniec **************

Portret użytkownika mirley

Re: Rc5

Zamiast

Config Rc5 = PIND.2

użyj:

Config Rc5 = PIND.2 , Wait = 2000

Genialny patent bascoma, teraz bez tego waita działa w XMEGA a nie w ATMEGA,doczytałem się w helpie do bascoma

-

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 ze stanem portu przy trzymaniu przycisku

Witam !

Dopisałem do swojego odbiornika RC5 kody odnośnie trzymania stanu portu, tak długo jak trzymany jest przycisk pilota - niestety u mnie to nie działa jak powinno. Układ wykorzystuję jako selektor wejść do wzmacniacza, wraz z wbudowanym potencjometrem cyfrowym z Twojej strony ( żeby nie komplikować sprawy programowo, mam zbudowany potencjometr ze sterowaniem za pomocą Attiny13 ale zamiast przycisków używam portów D.0 oraz D.1 procesora Attiny2313(odbiornika RC5) do sterowania głośnością ). W wersji gdzie stan portów zmianiał się co 200ms uzyskanie minimalnej głośności powodowało że dźwięk "drgał"...stąd też plan by porty działały dokładnie jak przyciski - trzymanie VOL na pilocie to portd.x w stanie wysokim - puszczenie to '0' na porcie d.x...niestety nacisnięcie Vol+ na chwilę sprawia że głośność ciągle rośnie, vol- spada do zera - puszczenie nie zatrzymuje tych operacji... jednakże po chwilowym naciśnięciu któregoś z tych przycisków ( powiedzmy Vol+ ) mogę zatrzymać tę operację naciskając dowolny inny przycisk.
Jak pozbyć się tego problemu ??? w załączeniu kod :

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 10000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
 
Config Rc5 = Pind.2                                         ', Wait = 2000
Dioda Alias Portd.6
 
 
           Portb.7 = 0                                      ' początkowy stan selektora
           Portb.6 = 1
           Portb.5 = 0
           Portb.4 = 0
           Portb.3 = 0
           Portb.2 = 0
           Portb.1 = 0
           Portb.0 = 0
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
Dim Cbit As Bit
Dim Gbit As Bit
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
 
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 0 Then
    Reset Dioda
 
    Cbit = 0
    Gbit = 0
 
    Select Case Komenda
 
      Case 1: ' selektor out1
           Portb.7 = 0 
           Portb.6 = 1
           Portb.5 = 0
           Portb.4 = 0
           Portb.3 = 0
           Portb.2 = 0
           Portb.1 = 0
           Portb.0 = 0
 
      Case 2: ' selektor out2
           Portb.7 = 0
           Portb.6 = 0
           Portb.5 = 1
           Portb.4 = 0
           Portb.3 = 0
           Portb.2 = 0
           Portb.1 = 0
           Portb.0 = 0
 
      Case 3: ' selektor out3
           Portb.7 = 0
           Portb.6 = 0
           Portb.5 = 0
           Portb.4 = 1
           Portb.3 = 0
           Portb.2 = 0
           Portb.1 = 0
           Portb.0 = 0
 
      Case 4: ' selektor out4
           Portb.7 = 0
           Portb.6 = 0
           Portb.5 = 0
           Portb.4 = 0
           Portb.3 = 1
           Portb.2 = 0
           Portb.1 = 0
           Portb.0 = 0
 
      Case 5: ' selektor out5
           Portb.7 = 0
           Portb.6 = 0
           Portb.5 = 0
           Portb.4 = 0
           Portb.3 = 0
           Portb.2 = 1
           Portb.1 = 0
           Portb.0 = 0
 
      Case 6: ' selektor out6
           Portb.7 = 0
           Portb.6 = 0
           Portb.5 = 0
           Portb.4 = 0
           Portb.3 = 0
           Portb.2 = 0
           Portb.1 = 1
           Portb.0 = 0
 
 
      Case 17: ' ciszej
         Cbit = 1
      Case 16: ' głośniej
         Gbit = 1
 
      End Select
 
 
Portd.0 = Cbit
Portd.1 = Gbit
 
  Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Portret użytkownika mirley

Re: Pilot Rc5

Masz na odwrót stany logiczne chyba że zmieniłeś też w tiny 13. Cały czas masz wciśnięte dwa przyciski z tego co widzę a na chwilę tylko je wyłączasz, to nie za dobry pomysł. W stanie spoczynku Portd. 0 i 1 powinny być w stanie 1 a tylko na chwilę w stanie 0.

Patent z trzymaniem klawisza nie jest dobry w tym układzie o wiele lepiej będzie jak będa to impulsy, będzie działać pewniej i szybciej. Zamiast:

           Portb.7 = 0
           Portb.6 = 0
           Portb.5 = 0
           Portb.4 = 0
           Portb.3 = 0
           Portb.2 = 0
           Portb.1 = 1
           Portb.0 = 0

Trzeba napisać:

Portb = &B00000010

i tak we wszystkich przypadkach

-

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 karol

Witam, czy ten układ moze

Witam, czy ten układ moze pracować z serwem tak ze ile bede trzymał nacisnięty przycisk tyle bedzie sie kreciło? Czy to jest tak ze kliknieciem zalącza a drugie kliknięcie wyłącza?

Portret użytkownika mirley

Re: RC5

Oryginalny program na każde kliknięcie generuje impuls, a na trzymanie serię impulsów.... można zrobić aby sygnał po naciśnięciu trwał ileś czasu a jak się trzyma to trwał cały czas.... Poszukaj we wcześniejszych postach bo już chyba takie coś rozważaliśmy wcześniej....

-

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 Wróbel

mam takie pytanko bo zrobiłem

mam takie pytanko bo zrobiłem ten układ na płytce stykowej żeby zobaczyć jak to działa ale jak wgrałem program na attiny to zamiast wysyłać impulsy to po wciśnięciu załącza a po kolejnym wyłącza co trzeba zmienić w programie żeby było poprawnie ??

Portret użytkownika maro

Przeanalizuj fragment kodu i

Przeanalizuj fragment kodu i popraw swój

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 100
    Set Dioda
    Portb = Portb Or &B11111111 
    Waitms 100
  End If

Portret użytkownika Wróbel

Dzięki za pomoc :D Teraz

Dzięki za pomoc :D Teraz działa tak jak ma być :D

Portret użytkownika Vomit

Problem

Witam
Otóż mam pewien problem z działaniem odbiornika. Mam pilota który nadaje w RC5 i mam w nim dwa wolne nie przypisane do układu klawisze ale niestety one nie działają.Zrobiłem sobie dekoder sygnału RC5 i jego adres tak jak innych przycisków z pilota wynosi 8 a ich komendy to 88 i 79. Na początku zbudowałem sobie oto ten włącznik http://www.elektroda.pl/rtvforum/topic1926888-0.html przy którym te przyciski działały bez problemu ale niestety sterownik miał tylko jeden kanał więc postanowiłem zrobić Pana projekt ale nie działają mi te przyciski. Czy jest na to jakaś rada??

Portret użytkownika mirley

Re: Rc5

Jak zrobiłeś dekoder sygnału Rc5? Też korzystasz z bascomowego polecenia getrc5? Standardowy kod rc5 nie obsługuje komend powyżej 63. Spróbuj skorzystać z getrc5 i zobacz jaką komendę odczytuje to polecenie po wciśnięciu klawiszy o które pytasz?

-

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 Vomit

Dekoder zrobiłem

Dekoder zrobiłem tak:

$regfile = "m8def.dat"
$crystal = 4000000
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 20 * 4
 
 
Config Rc5 = Pind.2
 
 
Dim Adres As Byte , Komenda As Byte , Togbit As Byte
 
Enable Interrupts
 
   Cls
   Lcd " Dekoder RC5..."
   Lowerline
   Lcd "Czekam na sygnal... "
Cursor Off
 
 
 
 
 
 Do
 
   Getrc5(adres , Komenda)
   If Adres <> 255 Then
     Komenda = Komenda And &B01111111
     Cls
     Locate 1 , 1
     Lcd "Dekoder RC5..."
     Locate 2 , 1
     Lcd "Adres: " ; Adres
     Locate 3 , 1
     Lcd "Komenda: " ; Komenda
   End If
 
 
 
Loop
 
End

Portret użytkownika mirley

Re: RC5

Sprawdź to jeszcze raz konfigurując port tak:

Config Rc5 = Pind.2 , Wait = 2000 

Czy też komenda przyjmuje wartości > 63?

-

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 Vomit

Po takiej konfiguracji

Po takiej konfiguracji przyjmuje komendy takie jak wcześniej ale zauważyłem coś ciekawego a mianowicie gdy do odbiornika rc5 zbudowanego na attiny2313 wrzucę ten kod

$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Pind.2 = Input
Config Pind.6 = Output
Config Rc5 = Pind.2
 
Dioda Alias Portd.6
 
Enable Interrupts
 
Dim Komenda As Byte , Adres As Byte
Reset Dioda
 
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 8 Then
 
    Select Case Komenda
      Case 88:
          Toggle Dioda
 
      Case 38:
          Toggle Dioda
 
    End Select
 
    Waitms 200
  End If
 
Loop
End

po odebraniu przez procesor komendy 38 zmienia się stan diody ale po odebraniu komendy 88 nic się nie dzieje. Gdy jednak ten sam program wrzuciłem na odbiornik zbudowany na atmega8

$regfile = "m8def.dat"
$crystal = 8000000
 
Config Pind.2 = Input
Config Pind.6 = Output
Config Rc5 = Pind.2
 
Dioda Alias Portd.6
 
Enable Interrupts
 
Dim Komenda As Byte , Adres As Byte
Reset Dioda
 
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 8 Then
 
    Select Case Komenda
      Case 88:
          Toggle Dioda
 
      Case 38:
          Toggle Dioda
 
    End Select
 
    Waitms 200
  End If
 
Loop
End

komendą 38 jak i 88 mogę zmieniać stan diody. Czemu zatem na atmega8 działają te kody a na attiny2313 nie??

Portret użytkownika mirley

Re: Rc5

To na pewno wina bascoma, pewnie inaczej kompiluje pod tiny a inaczej pod m8 i stąd te różnice w działaniu. Jak mówiłem komenda 88 jest niestandardowa i pochodzi z rozszerzenia standardu Rc5, więc trudno się dziwić że może coś źle dział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 maczu-pikczu

Ello. Mam coś

Ello.
Mam coś takiego:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 8000000
 
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
 
    End Select
 
    Waitms 100
    Set Dioda
    Portb = Portb Or &B11111111
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

W tej sytuacji układ zwiera przyciski do masy, a mi chodzi aby było na odwrót. Żeby podawał napiecie a nie zwierał do masy. Da się to zrobić?

Portret użytkownika maro

Można zastosować tranzystor

Można zastosować tranzystor npn np. BC 547 , albo transoptor

Portret użytkownika maczu-pikczu

No tak, ale miałem zamiar

No tak, ale miałem zamiar zwierać przyciski za pomocą tranzystorów, stad te pytanie zeby układ wystawiał stan wysoki przy przyciskaniu klawiszy pilota.Czemu tak? Bo mam pewien problem układ w pewnej aplikacji nie bardzo sobie radzi- nie zwiera przycisków tak jak powinien.

Portret użytkownika mirley

Re: Rc5

Bez problemu da się to zrobić:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Portb = &B11111111 : 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:
          set Portb.0
      Case 2:
          set Portb.1
      Case 3:
          set Portb.2
 
    End Select
 
    Waitms 100
    Set Dioda
    Portb = 0
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

-

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 elefancik

Przytrzymanie przycisku jeszcze raz...

Witam, chciałem wykonać taki układ do sterowania wzmacniaczem (selektor 4 wejść, sterowanie On/Off, sterowanie głośnością poprzez potencjometr z silnikiem). Wykonałem układ testowy na diodach i napisałem kod, raczej poskładałem z informacji znaleźnych na tej stronie. Mam problem z przytrzymaniem przycisku na pilocie (dotyczy vol+ i vol-). Często podczas puszczenia na wyjściu dalej utrzymuje się stan 0 i dioda świeci ciągle. Stan można zmienić wciskając na chwilę dowolny przycisk. Kod załączam poniżej. Nie wiem jak dalej pokombinować. Podobny problem zgłaszał Kolega insectteam, ale nie zostało to do końca wyjaśnione.
Pozdrawiam. Elf

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111011
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 , Volg As Bit , Volc As Bit
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
 
Do
 
If Odebrano = 1 Then
 
        Odebrano = 0
        Reset Dioda
        Volg = 1
        Volc = 1
 
   If Adres = 20 And Komenda = 63 Then                      'CD
             Portb = &B11111011
 
   Elseif Adres = 17 And Komenda = 63 Then                  'TUNER
             Portb = &B11110111
 
   Elseif Adres = 21 And Komenda = 63 Then                  'Aux
             Portb = &B11101111
 
   Elseif Adres = 0 And Komenda = 63 Then                   'TV
             Portb = &B11011111
 
   Elseif Adres = 16 And Komenda = 16 Then                  'vol+
            Volg = 0
 
   Elseif Adres = 16 And Komenda = 17 Then                  'vol-
            Volc = 0
 
   End If
 
   Portb.0 = Volg
   Portb.1 = Volc
 
   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

Portret użytkownika mirley

Re: Rc5

polecenia:

        Volg = 1
        Volc = 1

Wstaw zaraz na końcu tego samego przejścia procedury odczytu jednego klawisza, zaraz po enable int0, a nie na początku. Powinno być lepiej

-

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 Chicken12

Witam, czy poniższy kod

Witam, czy poniższy kod zródłowy bedzie poprawny gdy chcial bym aby pierwsze 2 porty dzialały jak uSwitch`e a reszta po załaczeniu bedzie zmieniac swój stan na wyjsciu do puki nie wcisne 2 raz?

           '************* 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:
          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
     Portb = Portb Or &B11111100
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Portret użytkownika elefancik

Witam, już tak próbowałem

Witam, już tak próbowałem niestety nadal często po puszczeniu klawisza na porcie pozostaje stan 0. Może zastosować jakąś wewnętrzną pętlę po odebraniu komendy 16 i 17?

Portret użytkownika maczu-pikczu

Dzięki mirley, jak wpadnie mi

Dzięki mirley, jak wpadnie mi uln2803 z powrotem do płytki testowej to będę eksperymentował dalej.

Portret użytkownika mirley

Re: Rc5

musisz jeszcze po wydaniu

 Volg = 1
 Volc = 1

Przypisać te wartości na port, czyli ponownie wykonać

  Portb.0 = Volg
  Portb.1 = Volc

Tak w sumie to uważam te zmienne za niepotrzebne bo wystarczy portem samym sterować

----------------------------------------------------------

If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          Reset Portb.0
      Case 2:
          Reset 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
     Portb = Portb Or &B00000011
    Waitms 100
  End If

Wartość z którą robisz or powinna być tak jak wyżej, teraz piny 0 i 1 zostaną ustwione po 200ms na 1 a pozostałe pozostaną bez zmian

-

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 Chicken12

Po wpisaniu tych

Po wpisaniu tych poleceń:

Volg = 1
Volc = 1

występują błedy. Co moge robić nie tak?

Portret użytkownika elefancik

Witam, gdy wstawię po Enable

Witam, gdy wstawię po Enable Int0:

Volg = 1
Volc = 1
Portb.0 = Volg
Portb.1 = Volc

Uzyskuję miganie diody, również przy OR bez zmiennych Volg i Volc diody na tych portach migają razem z Diodą odbioru.
Najbliżej celu jestem przy kodzie ze zmiennymi, ale pozostawienie na wyjściu 0 będzie powodowało, że potencjometr będzie "kręcił" na max lub min. Zastanawiam się czy nie zastosować potencjometru elektronicznego i impulsatora zamiast potencjometru z silnikiem.

Portret użytkownika Chicken12

Mirley, pisałeś że może być

Mirley, pisałeś że może być sterowanie samym portem, ale bez zmiennych bascom zasypuje błędami. Napisałem taki program:

'************* 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
  Volg = 1
  Volc = 1
  If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          Reset Portb.0
      Case 2:
          Reset 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
 
     Portb.0 = Volg
     Portb.1 = Volc
 
    Waitms 100
    Set Dioda
     Portb = Portb Or &B00000011
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Portret użytkownika elefancik

Przytrzymanie przycisku OK...

Witam, Przytrzymanie przycisku działa kod poniżej.

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111101
Config Portd = &B11111011 : Portd = &B11111111
 
Config Rc5 = Pind.2 , Wait = 2000
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 < 255 Then                                  'jeśli coś odebrano wykonaj
          Reset Dioda
 
 
   If Adres = 20 And Komenda = 63 Then                      'CD
             Portb = &B11111101
 
       Elseif Adres = 17 And Komenda = 63 Then              'TUNER
             Portb = &B11111011
 
       Elseif Adres = 21 And Komenda = 63 Then              'Aux
             Portb = &B11110111
 
       Elseif Adres = 0 And Komenda = 63 Then               'TV
             Portb = &B11101111
 
       Elseif Adres = 16 And Komenda = 16 Then              'vol+ działa tak jak długo trzymamy przycisk na pilocie
            Reset Portb.5
 
       Elseif Adres = 16 And Komenda = 17 Then              'vol- działa tak jak długo trzymamy przycisk na pilocie
            Reset Portb.6
  End If
 
   Waitms 100
   Set Dioda
 
Elseif Adres = 255 Then                                     ' jeśli brak odbioru ustaw porty
         Set Portb.5
         Set Portb.6
 
End If
Loop
'************ Petla glowna Koniec **************

Uwagi: kompiluję w Bascom ?AVR 2.0.7.5 Ważny jest parametr Wait = 2000 (w tej wersji kompilatora).

Config Rc5 = Pind.2 , Wait = 2000

W wersjach 1 Bascoma-AVR chyba nie potrzebny (nie sprawdzałem). Nie udało mi się uruchomić tego kodu na przerwaniu, ale walczę z tym.
Pozdrawiam

Portret użytkownika Chicken12

Pomylka mala u góry:P

Pomylka mala u góry:P

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 12000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
Config Portc = &B11111111 : Portc = &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
  Volg = 1
  Volc = 1
  If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          Reset Portc.0
      Case 2:
          Reset 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
      Case 9:
          Toggle Portb.3
 
    End Select
 
 
     Portc.0 = Volg
     Portc.1 = Volc
 
    Waitms 100
    Set Dioda
     Portc = Portc Or &C00000011
     Portb = Portb Or &B00000000
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Portret użytkownika matrix

Re: czy może być taki?

Czemu nie wgrasz i nie sprawdzisz?
Zajęło by Ci to mniej czasu niż napisanie tych dwóch postów wyżej.

Portret użytkownika Chicken12

Przy kompilacji wyskakuje mi

Przy kompilacji wyskakuje mi błąd przy Or:

Portc = Portc Or &C00000011

Portret użytkownika matrix

Re: Przy kompilacji wyskakuje mi błąd...

Chicken12 wrote:
Przy kompilacji wyskakuje mi błąd przy Or:
Portc = Portc Or &C00000011

Bo w tym miejscu nie możesz napisać

Waitms 100
    Set Dioda
     Portc = Portc Or &C00000011
     Portb = Portb Or &B00000000
    Waitms 100
  End If
 
Loop
End

Nie ma binarnej liczby &C00000011. to nie odnosi się do portu i jego nazwy a do liczby w kodzie dwójkowym.
Napisz tak:
Waitms 100
    Set Dioda
     Portc = Portc Or &B00000011
     Portb = Portb Or &B00000000
    Waitms 100
  End If
 
Loop
End

A gwarantuję Ci że kompilator nie wywali Ci błędu.

Portret użytkownika Chicken12

A fusebity będą takie same

A fusebity będą takie same jak do Attiny2313??

Portret użytkownika Chicken12

SuT i CKSL bedzie takie same

SuT i CKSL bedzie takie same lecz chodzi mi tu o BODEN?

Portret użytkownika matrix

Re: Fusy

Jeśli dobrze pamiętam boden levl odpowiada tylko za detekcję napięcia i jeśli jest niższe niż ustawione za pomocą tego parametru to procesor "ulega" resetowi. Ja zwykle boden ustawiam na włączony czyli detekcja ustawiona na 2,7V

Portret użytkownika chicken12

A doben enable czy disabled??

A doben enable czy disabled??

Portret użytkownika chicken12

boden sory:P

boden sory:P

Portret użytkownika matrix

Re: Fusy

Ja w atmedze 8 mam ustawiona tak fusy:

Portret użytkownika chicken12

A reset w ATmedze8 moge

A reset w ATmedze8 moge podciągnąć do vcc rezystorem 10k?

Portret użytkownika matrix

Re: reset w ATmedze8

chicken12 wrote:
A reset w ATmedze8 moge podciągnąć do vcc rezystorem 10k?

Nie możesz tylko powinieneś.