pilot rc5 wielokanalowy na attiny 2313


Mam pytanko co do pilota rc5 wielokanalowego na attiny 2313 chciałbym zrobić taki ale mając tylko trzy przyciski jak napisać program aby dwa przyciski były głównymi przyciskami a ten jeden zmieniał by kody tych dwóch głównych?




Portret użytkownika matrix

Re: pilot rc5 wielokanalowy na attiny 2313

Opisz problem dokładniej bo na przykład ja nie kojarzę ocb?

Jak chcesz trzema przyciskami zastąpić jakieś 30 na przeciętnym pilocie?

Portret użytkownika gosc

no nie chodzi tylko 3-5

no nie chodzi tylko 3-5 kanalowy nie wszystkie

Portret użytkownika matrix

Re: pilot rc5 wielokanalowy na attiny 2313

No to gdzie widzisz kłopot? Standardowa procedura do wysyłania RC5 i oprogramuj z pięć pinów któregoś portu i po problemie.

Portret użytkownika mirley

Re: Pilot

Popatrz w helpie bascoma na polecenie sendRc5... jest tam nawet schemat aplikacyjny jak podłączyć diodę ired nadawczą do procka... Co do tych trzech przycisków to nie bedzie raczej problemu.... narazie napisz żeby działały 2.... lub żeby cokolwiek wysyłało a potem się zobaczy

-

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


Dobra bo chyba nikt mnie nie zrozumiał bo nie wiem jak mam to wytłumaczyć. Chodzi o to ze tak jak na rysunku mamy trzy przyciski z czego numer 3 na czerwono zmienia po każdym wciśnięciu kody przycisków pozostałych czyli numeru 1 i numeru 2.
Np:
przycisk 1 ma komende =16 i adres=0
przycisk 2 ma komende=17 i adres=0
naciskając przycisk numer 3 zmienić komendy przycisków 1,2 na inne dowolne
i tak naciskajac np: ze trzy razy przycisk 3 wraca spowrotem do pozycji komende= 16,17 przyciskow 1,2

-

ROOKIE

Portret użytkownika mirley

Pilot Rc5

Trzeba najpierw zapoznać się z komendami wysyłającymi Rc5 w bascomie. Jak już będziesz umiał wysłać dowolny kod to napisanie takiego pilota będzie banalne. Zacznij coś pisać, wklej kod to będziemy mogli coś doradzić.

-

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

kody umiem wyslac i przypisac dowolne kody ale nie wiem jak mam sie do tego zabrac zeby ten jeden przycisk zmienial komendy
napisalem ten programik i zrobilem pilota banalnie proste

$regfile = "attiny2313.dat"       'informuje kompilator o pliku użytego mikrokontrolera
$crystal = 4000000       'informuje kompilator o zastosowanym rezonatorze kwarcowym
 
Config Portb = Output    'Portb ustawiony jako wyjście
Config Portd = Input     'Portd ustawiony jako wejście
 
Portd.4 = 1              'ustawienie stanów spoczynkowych portów,
Portd.5 = 1              'do których podpięte są mikroswitche
Portd.6 = 1
 
Declare Sub Gor          'deklaracje podprogramów
Declare Sub Dol
Declare Sub Wyl
 
Dim Togbit As Byte       'deklaracje zmiennych
Dim Adres As Byte
Dim Komenda As Byte
 
S1 Alias Pind.4          'przypisanie alias'ów
S2 Alias Pind.5
S3 Alias Pind.6
 
 
Do                       'początek pętli głównej programu
 
Debounce S1 , 0 , Gor , Sub       'wciśnięcie S1 spowoduje skok do podprogramu gora
 
Debounce S2 , 0 , Dol , Sub       'wciśnięcie S2 spowoduje skok do podprogramu dol
 
Debounce S3 , 0 , Zmiana , Sub
Waitms 100               'odczekaj 100ms
 
Loop                     'koniec pętli nieskończonej
 
End                      'koniec programu głównego
 
 
 
Sub Gor                  'początek podprogramu gora
 
Togbit = 0               'ustaw określone wartości podanym zmiennym
Adres = 0
Komenda = 16
 
Rc5send Togbit , Adres , Komenda       'wygeneruj "słowo" w standardzie RC5 załączające czuwanie
 
Waitms 200               'zaczekaj 200ms
 
Return                   'opuść podprogram
End Sub                  'koniec podprogramu
 
 
 
Sub Dol                  'początek podprogramu dol
 
Togbit = 0               'ustaw określone wartości podanym zmiennym
Adres = 0
Komenda = 17
 
Rc5send Togbit , Adres , Komenda       
 
Waitms 200               'zaczekaj 200ms
 
Return                   'opuść podprogram
End Sub
 
Sub Zmian                'początek podprogramu zmiana kodu
 
'tu nie wiem co mam wpisac zeby sie zmienialy komendy  ????????????????????
 
Rc5send Togbit , Adres , Komenda       
 
Waitms 200               'zaczekaj 200ms
 
Return                   'opuść podprogram
End Sub                  'koniec podprogramu

-

ROOKIE

Portret użytkownika mirley

Re: Rc5

To wygląda prosto. Robisz sobie nowe zmienne typu byte adr_dol kom_dol adr_gora kom_gora. W podprogramach dol i góra wpisujesz adres = adr_gora, komenda = kom_gora i potem send_rc5 tak jak dalej. W zasadzie to w tym send rc5 można by od razu wysyłac adr_dol lub adr_gora w zależności co kliknięto. W procedurze obsługi trzeciego przycisku wywal sed rc5. Zadeklaruj jeszcze jedną zmienną byte MUX. I napisz:

Incr MUX
if mux = 3 then MUX = 0
select case MUX
case 0:
  adr_gora = ....
  adr_dol =...
  'itd
case 1:
  'to samo co wyżej, tylko inne wartosci
case 2:
  'jak wyżej
 
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 rybaczenko

re

Napisałem to tak po malej modyfikacji i działa wielkie dzięki mirley o tą zmienna mux tylko chodziło takie to proste:

 $regfile = "attiny2313.dat"       'informuje kompilator o pliku użytego mikrokontrolera
$crystal = 4000000       'informuje kompilator o zastosowanym rezonatorze kwarcowym
 
Config Portb = Output    'Portb ustawiony jako wyjście
Config Portd = Input     'Portd ustawiony jako wejście
 
Portd.4 = 1              'ustawienie stanów spoczynkowych portów,
Portd.5 = 1              'do których podpięte są mikroswitche
Portd.3 = 1
 
Declare Sub Gor          'deklaracje podprogramów
Declare Sub Dol
Declare Sub Zmian
Dim Togbit As Byte       'deklaracje zmiennych
Dim Adres As Byte
Dim Komenda As Byte
Dim Mux As Byte
 
S1 Alias Pind.4          'przypisanie alias'ów
S2 Alias Pind.5
S3 Alias Pind.3
 
 
Do                       'początek pętli głównej programu
 
Debounce S1 , 0 , Gor , Sub       'wciśnięcie S1 spowoduje skok do podprogramu gora
 
Debounce S2 , 0 , Dol , Sub       'wciśnięcie S2 spowoduje skok do podprogramu dol
 
Debounce S3 , 0 , Zmian , Sub
Waitms 100               'odczekaj 100ms
 
Loop                     'koniec pętli nieskończonej
 
End                      'koniec programu głównego
 
Sub Gor                  'początek podprogramu gora
Togbit = 0               'ustaw określone wartości podanym zmiennym
Adres = 0
If Mux = 0 Then
Komenda = 16
End If
 
If Mux = 1 Then
Komenda = 32
End If
Rc5send Togbit , Adres , Komenda  'wygeneruj "słowo" w standardzie RC5
Waitms 200               'zaczekaj 200ms
 
Return                   'opuść podprogram
End Sub
 
Sub Dol
 
Togbit = 0               'ustaw określone wartości podanym zmiennym
Adres = 0
If Mux = 0 Then
Komenda = 17
End If
 
 If Mux = 1 Then
Komenda = 33
End If
Rc5send Togbit , Adres , Komenda       'wygeneruj "słowo" w standardzie RC5
 
Waitms 200               'zaczekaj 200ms
 
Return                   'opuść podprogram
End Sub
 
Sub Zmian                'początek podprogramu zmiana komend
Incr Mux
If Mux = 3 Then Mux = 0
 
Return                   'opuść podprogram
End Sub

-

ROOKIE

Portret użytkownika rybaczenko

problem z pradem

Witam zbudowalem pilota ale mam jeden problem z bateria nie trzyma nawet dnia o co chodzi pilot zbudowalem w normalnej wersji nie w smd czy mozna wpisac aby pobieralniej pradu przeszwdl w tryb powwr down

-

ROOKIE

Portret użytkownika mirley

Re: Idle

Spróbuj tryb idle.... ale nie da się zrobić w jakiś sposób włączenia po kliknięciu. Np tranzystorem baterię włączać jak którykolwiek z przycisków zostanie wciśnięty. bateria działała by tylko wtedy jak przycisk jest wcisnięty

-

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

zrobione

Witam ponownie udało mi się zrobić pilota dużo się naszukałem w sieci jak zmniejszyć pobór prądu przez baterie!.Wiec od początki za tryb idle i power-down odpowiada rejestr MCUCR trzeba ustawić odpowiednio bity tego rejestru wzorowalem się na AT90S2313 gdyż posiadam książkę z tym Prockiem lecz to był błąd bo attiny 2313 rożni się od swojego poprzednika
może niewiele ale jednak, chociażby o ten rejestr ciekawskich odsyłam do karty katalogowej i porównania sobie tych prockow. Moj układ pobiera nawet nie wiem ile pobiera w stanie spoczynku gdyż miernik wskazuje same zera a zakres mam do 2mA.ponizej schemat mojego pilocika i zdjęcie oczywiscie uklad oparty jest o przerwanie na int0 jak ktoś chce wsad to pisać pozdrowienie dla wszystkich.

-

ROOKIE

Portret użytkownika mirley

Re: Pilot

Dobrze że udało ci się pokonac problemy..... wsad możesz wrzucić na stronę, żeby wszyscy mogli zobaczyć

-

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

sofcik do pilota $regfile =


sofcik do pilota

$regfile = "attiny2313.dat"
$crystal = 4000000
$noramclear
Config Portb = &B11111111 : Portb = &B11110000
Config Portd = &B1111011 : Portd = &B0111111
Config Int0 = Low Level
Mcucr.5 = 1
 Mcucr.6 = 1
 Mcucr.4 = 0
 Acsr.7 = 1              ' wylaczenie komparatora
 'Acsr.3 = 0              'wylaczenie komparatora
 Gimsk.7 = 1
 Gimsk.6 = 1
Dim Togbit As Byte       'deklaracje zmiennych
Dim Adres As Byte
Dim Komenda As Byte
Dim Mux As Byte
 D1 Alias Portb.7
 D2 Alias Portb.6
Stop Watchdog
 Stop Ac
Enable Interrupts
Enable Int0
On Int0 Ir
Do
Reset D1
Waitms 100
Set D1
 
Powerdown
Loop
 
Ir:
 
Config Portd.2 = Output
Reset Portd.2
Config Portb.0 = Input
Config Portb.1 = Input
Config Portb.2 = Input
Config Portd.6 = Input
Set Portb.0
Set Portb.1
Set Portb.2
Set Portb.3
Set Portd.6
'***** ZMIANA *******
If Pinb.0 = 0 Then
 Incr Mux
If Mux = 3 Then Mux = 0
 End If
 
 
'***** STOP *********
If Pind.6 = 0 Then
Togbit = 0
Adres = 0
Komenda = 3
Rc5send Togbit , Adres , Komenda
Waitms 200
End If
'*****************************gora
If Pinb.1 = 0 Then
Togbit = 0
Adres = 0
If Mux = 0 Then
Komenda = 16
End If
If Mux = 1 Then
Komenda = 32
End If
If Mux = 2 Then
Komenda = 1
End If
 Rc5send Togbit , Adres , Komenda       'wygeneruj "słowo" w standardzie RC5
Waitms 200
End If
'****************************dol
If Pinb.2 = 0 Then
Togbit = 0
Adres = 0
If Mux = 0 Then
Komenda = 17
End If
If Mux = 1 Then
Komenda = 33
End If
If Mux = 2 Then
Komenda = 2
End If
Rc5send Togbit , Adres , Komenda       'wygeneruj "słowo" w standardzie RC5
Waitms 200               'zaczekaj 200ms
End If
Config Portb = &B11111111 : Portb = &B11110000
Config Portd = &B1111011 : Portd = &B0111111
Return

-

ROOKIE

Portret użytkownika matrix

Jak dla mnie to:

Jak dla mnie to niewłaściwie zadeklarowane przerwanie. Zamist

Config Int0 = Low Level

według mnie powinno być:
Config Int0 = Falling

Wówczas przerwanie wywołasz raz jak będzie opadające zbocze a nie ciągle podczas trwania stanu niskiego.
Po co konfiguracja portów za każdym razem kiedy jest przerwanie ? Rozumiem że PORTD.2 wykorzystywany jest w dwojaki sposób więc tylko ten port ustawiaj jako wejście/wyjście.
Po co Ci zmienna MUX ? Rozumiem że zmienia funkcje klawiszy.
Po co za każdym razem ustawiasz zmienną Togbit i zmienną Adres na 0 skoro one zawsze mają wartość 0. Ustaw je na początku na wartość 0 i po kłopocie.
I na koniec po co Ci tak napisana część kodu ?
'*****************************gora
If Pinb.1 = 0 Then
Togbit = 0
Adres = 0
If Mux = 0 Then
Komenda = 16
End If
If Mux = 1 Then
Komenda = 32
End If
If Mux = 2 Then
Komenda = 1
End If
 Rc5send Togbit , Adres , Komenda       'wygeneruj "słowo" w standardzie RC5
Waitms 200
End If

Skoro można zmienić to na coś takiego:

Ir:
  '*****************************gora
  If Pinb.1 = 0 Then
     If Mux = 0 Then
        Komenda = 16
     End If
     If Mux = 1 Then
        Komenda = 32
     End If
     If Mux = 2 Then
        Komenda = 1
     End If
  End If
 
  'na końcu przerwania wysyłasz co Ci trzeba
  'i żadnych waitów w przerwaniu
  Rc5send Togbit , Adres , Komenda       'wygeneruj "słowo" w standardzie RC5
Return

Portret użytkownika gosc

re

konfiguracja portów jest potrzebna gdyż jak zauważyłeś jest w przerwaniu wszystko ,a do tego procek śpi wiec trzeba go wybudzić ze snu jak nie zmienisz portów to go nie wybudzisz.Popatrz na schemat przyciski są podłączone do pinu INT0 czyli PRZERWANIE ZEWNĘTRZNE I TO REALIZUJĄ PRZYCISKI. Z książki przeczytałem jeśli tak budzimy procka to należny to wejście skonfigurować jako wyzwalanie poziomem niskim ,a nie zboczem.