Odbiornik RC5


Witam.
Jest to mój pierwszy post i na początek przedstawię się.
Mam na imię Mariusz, jestem z okolic Warszawy.

Chciałbym zrobić włącznik np.oświetlenia sterowany pilotem RC5, napisałem programik, który działa, no i jest jak zwykle jakieś "ale".
Sterowanie tego włącznika realizowane jest za pomocą jednego przycisku w pilocie i dłuższe wciśnięcie powoduje włączanie i wyłączanie żarówki.
Zależy mi, aby tego efektu nie było, tzn. zmiana stanu portu następowała po kolejnym wciśnięciu.
Szukałem rozwiązania i czytałem wiele postów na temat RC5, ale niczego nie znalazłem, a może i czytałem, ale jestem jeszcze zbyt zielony z programowanie i nie wiedziałem, że patrzę na odpowiedź.
Proszę podpowiedzcie mi, a to mój programik:

  $regfile = "m8adef.dat"
  $crystal = 2000000
 
  Config Rc5 = Pind.2 , Wait = 1000
  Config Int0 = Low Level
 
  Dim Adres As Byte , Komenda As Byte , Odebrano As Bit
 
  On Int0 Pilot
  Enable Interrupts
  Enable Int0
 
  Do
 
  If Odebrano = 1 Then
 
   If Komenda = 12 Then
    Toggle Portb.1
    'Gosub Zaswiec
     End If
      Odebrano = 0
       Enable Int0
 
        End If
 
  Loop
 
  Pilot:
 
   Disable Int0
    Enable Interrupts
     Getrc5(adres , Komenda)
      Komenda = Komenda And &B01111111
       Odebrano = 1
 
        Return
 
  Zaswiec:
 
   Toggle Portb.1
 
    Return
 
     End




Portret użytkownika EDC

Odp. Odbiornik RC5

Proszę. Jeśli przed sekundą nic nie naciskano to blokada ma wartość zero i pozwala przełączyć światło.
W tym momencie ustawiana jest blokada. Jeśli podczas blokady nadejdzie kolejna komenda to blokada jest przedłużana. To oznacza że tak długo jak nie puścisz przycisku blokada jest przedłużana. Trzeba puścić przycisk. Wtedy blokada nie jest przedłużana a Timer pomału zdejmie blokade i znów będzie miała wartość zero ;)
Przepraszam za późną odpowiedź, ale jestem bardzo zajęty ;)

$regfile = "m8adef.dat"
$crystal = 2000000
 
$hwstack = 40
$swstack=16
$framesize=32
 
 
 Config Portb.1 = Output : Swiatlo Alias Portb.1
 
 Config Rc5 = Pind.2 , Wait = 1000
 
 Config Int0 = Falling : Enable Int0 : On Int0 Pilot
 
 Portd.2 = 1
 
'timer
Config Timer1 = Timer , Prescale = 64 , Compare_a = Disconnect , Compare_b = Disconnect , Clear Timer = 1
Enable Compare1a : On Compare1a Timer1_isr : Compare1a = 15624       '500ms @2MHz
 
Dim 500ms As Byte , Odbierz As Byte , Odczekaj As Byte
 
  Dim Adres As Byte , Komenda As Byte
 
  Enable Interrupts
 
 
  Do
 
   If Odbierz = 1 Then
       Odbierz = 0
 
        Getrc5(adres , Komenda)
         Komenda = Komenda And &B01111111
 
          If Komenda = 12 Then
 
              If Odczekaj = 0 Then                          'jesli blokada ma wartosc zero
               Toggle Swiatlo                               'przelacz swiatlo
                Odczekaj = 2                                'zablokuj na sekunde (2x500ms)
              Else                                          'jesli zablokowano
                Odczekaj = 2                                'to przedluzaj blokade
              End If
 
          End If
 
       Enable Int0
 
   End If
 
 
   If 500ms = 1 Then
       500ms = 0
 
       If Odczekaj > 0 Then Decr Odczekaj                   'pomalu zdejmuj blokade jesli nie naciskany
 
   End If
  Loop
 
End
 
 
Pilot:
 Disable Int0
  Odbierz = 1
Return
 
Timer1_isr:
 500ms = 1
 Return

Można to rozwiązać wykorzystując ToggleBit transmisji RC5 , ale nie będę zaciemniał tematu w którym zapalamy żarówkę :D
Miłego dnia

-

BARTek
Moja strona

Portret użytkownika marusz10

Dzięki za

Dzięki za zainteresowanie.
Przyznam, że trochę mi skomplikowałeś ten program.
Muszę na spokojnie to przetrawić, ewentualnie będę pytał dalej.
Jeszcze raz dzięki.

P.S.
Zaglądam na Twoją stronę.

Portret użytkownika rybaczenko

Re

http://mirley.firlej.org/node/571 tutaj zagladnij noze cod pomoze

-

ROOKIE