logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Attiny13][BASCOM] problem z RC5

biglolo94 05 Gru 2009 16:00 4812 14
REKLAMA
  • #1 7348356
    biglolo94
    Poziom 16  
    Witam,

    projektuje wlasnie sobie wylacznik swiatla na pilota.
    Oto programik:
    $regfile = "attiny13.dat"
    $crystal = 4000000
    Config Portb.4 = Output
    Config Rc5 = Portb.1
    Dim Address As Byte , Command As Byte
    Do
    Getrc5(address , Command)
    Command = Command And &B01111111
    Waitms 100
    If Address = 0 And Command = 1 Then
    Portb.4 = 1
    End If
    If Address = 0 And Command = 2 Then
    Portb.4 = 0
    End If
    Loop


    Programik ma zalaczac przekaznik, lecz cos jest nie tak z programem bo uklad wogle nie reaguje a wszystko jest dobrze podlaczone. Porsze o pomoc.
  • REKLAMA
  • #2 7349937
    sp3ots
    Poziom 38  
    Witam !
    W listingu brakuje:
    Enable Interrupts
    Pozdrawiam. Stefan
  • REKLAMA
  • #3 7350521
    biglolo94
    Poziom 16  
    Dzieki wielkie juz wszystko dziala :)

    A jeszcze mam pytanko:
    jak napisac program ktory bedzie kierowal przekaznikiem ale w nastepujacy sposob:
    1.Zczytanie komedny RC5 na ON przekaznika
    2.Potwierdzenie switchem komendy
    3.Zczytanie komendy RC5 na OFF przekaznika
    4.Potwierdzenie switchem komendy
    5.I dziala

    np.
    naciskam 1 na pilocie potwierdzam S1 i mam komende na ON przekaznika
    naciskam 2 na pilocie potwierdzam S2 i mam komende na OFF przekaznika
    ?????
  • REKLAMA
  • #4 7352403
    klops_mops
    Poziom 17  
    Witam

    Po wykryciu On z RC5 wpisz do jakiejś zmiennej "1", potem po potwierdzeniu przyciskiem wpisz do niej np. "3". Teraz w pętli głównej możesz dać warunek, jeśli zmienna jest równa 3 to wykonuje oraz wpisuje do zmiennej znów "0"...

    Pozdrawiam
  • #5 7353205
    jacekk232
    Poziom 17  
    Kol. biglolo94 czy chodzi Ci o to, że chcesz "nauczyć" swój układ na jaki klawisz ma zareagować włączeniem przekaźnika, a na jaki jego wyłączeniem?
  • REKLAMA
  • #6 7353874
    biglolo94
    Poziom 16  
    jacek dokladnie tak jak myslisz

    Klops_mops - a moge prosic o przyklad takiego programu?
  • #7 7357503
    jacekk232
    Poziom 17  
    Witam.
    Trzeba by napisać program, który w trybie zapamiętywania zapisał by odebrane komendy i adres w pamięci Eeprom. Potem w trakcie normalnej pracy porównywał by aktualnie odebrane kody z tymi zapisanymi w pamięci Eeprom i odpowiednio sterował przekaźnikiem. Mogło by to wyglądać mniej więcej tak: program w pętli DO...LOOP sprawdza stan przycisków Sw1 i Sw2, sprawdza odebrane kody z tymi zapisanymi w Epromie i steruje przekażnikiem. Po jednoczesnym wciśnięciu obu przycisków program wpada do wewnętrznej pętli DO...LOOP. Program jest w trybie zapamiętywania. Jeśli teraz program odbierze jakąś komendę i adres to po wciśnięciu przycisku Sw1 zapisze je w pamięci Eeprom w zmiennych np Adres i Komenda_ON. Tak samo dla drugiej komendy na OFF. Jeśli obie komendy są zapamiętane to ponownie wciskamy oba przyciski jednocześnie i program opuszcza wewnętrzną pętle (tryb zapamiętywania). Odbiór RC5 najlepiej było by zrealizować na przerwaniu.

    Pozdrawiam
  • #8 7359909
    biglolo94
    Poziom 16  
    OK wielkie dzieki wam.
    Jacek2222 jesli moge prosil bym cie jeszcze o przyklad takiego kodu zrodlowego.
  • #9 7362860
    jacekk232
    Poziom 17  
    Na szybkiego napisałem taki kod, ale na tiny2313 bo tiny13 nie posiadam.
    $regfile = "attiny2313.dat"
    $crystal = 4000000
    
    Ddrd = &B1111000 : Portd = &B0111111
    Ddrb = &B11111111 : Portb = &B11111111
    
    
    Dim Temp_on As Byte , Temp_off As Byte , Temp_adr As Byte
    Dim Adres As Byte , Komenda As Byte , Odebrano As Bit
    Dim Licz As Byte , S1 As Bit , Licz2 As Byte , Licz3 As Byte , Wpis As Bit
    Dim E_adr As Eram Byte At 1 , E_on As Eram Byte At 2 , E_off As Eram Byte At 3
    
    
    Config Rc5 = Pind.2
    Config Int0 = Falling
    On Int0 Rc5
    Enable Int0
    Enable Interrupts
    Sw1 Alias Pind.0
    Sw2 Alias Pind.1
    
    Readeeprom Temp_on , 2
    Readeeprom Temp_off , 3
    Readeeprom Temp_adr , 1
    
    Do
    Waitms 5
    Incr Licz
    If Licz = 4 Then                             'co 20ms sprawdzaj czy zostały naciśnięte oba przyciski
       Licz = 0
       If Sw1 = 0 And Sw2 = 0 Then
          S1 = 1
       Else
          If S1 = 1 Then
             S1 = 0
             Gosub Rec                           'jeśli tak to skocz do podprogramu zapamiętywanie komend
          End If
       End If
    End If
    
    If Odebrano = 1 Then
       Odebrano = 0
       If Adres = Temp_adr Then                  'tu program porównuje odebrane komendy
          If Komenda = Temp_on Then              'z tymi zapisanymi w eepromie
             Portb.7 = 0                         'włącza przekaźnik (diodę)
          End If
          If Komenda = Temp_off Then
             Portb.7 = 1                         'lub wyłącza przekaźnik (diodę)
          End If
       End If
       Enable Int0
    End If
    Loop : End
    
    Rc5:
    Disable Int0
    Enable Interrupts                            'odbiór RC5 w przerwaniu
    Getrc5(adres , Komenda)
    Komenda = Komenda And &B01111111
    Odebrano = 1
    Return
    
    
    Rec:                                             'podprogram zapamiętywania komend 
    Do
    Waitms 5
    Incr Licz
    If Licz = 4 Then
       Licz = 0
       If Sw1 = 0 Then
          Wpis = 1
       Else
          If Wpis = 1 Then
             Wpis = 0
             Writeeeprom Adres , 1
             Writeeeprom Komenda , 2
             Licz2 = 0 : Licz3 = 0
             Gifr.6 = 1                              'zeruj flagę przerwania INT0
             Enable Int0
          End If
       End If
       If Sw2 = 0 Then
          Wpis = 1
       Else
          If Wpis = 1 Then
             Wpis = 0
             Writeeeprom Komenda , 3
             Licz2 = 0 : Licz3 = 0
             Gifr.6 = 1                             'zeruj flagę przerwania INT0
             Enable Int0
          End If
       End If
    End If
    
    Incr Licz2
    If Licz2 = 200 Then
       Licz2 = 0
       Incr Licz3                                'po około 5s od ostatniego naciśnięcia jakiegokolwiek przycisku
       If Licz3 = 5 Then
          Licz3 = 0
          Exit Do                                'opuść podprogram zapamietywania i skocz do pętli głównej
       End If
    End If
    Loop
    Readeeprom Temp_on , 2                       'przepisz nowo zapisane kody z eeproma do
    Readeeprom Temp_off , 3                      'zmiennych tymczasowych
    Readeeprom Temp_adr , 1
    Portb.1 = 0 : Waitms 500 : Portb.1 = 1       'wyjście z podprogramu zapamiętywanie sygnalizowane jest
    Return                                       'krótkim mignięciem diody dołączonej do portu PB1
  • #10 7363479
    biglolo94
    Poziom 16  
    Ok wielkie dzieki.
    W weekend przerobie sobie ten programik na atmega8.
    Pozdrawiam i dziekuje za pomoc
  • #11 7473666
    mobiline
    Poziom 11  
    Witam
    Nie będę zakładał nowego tematu bo pokrywa on się z tym co miałbym założyć. Mam problem z kompilacją tego kodu:
    [Attiny13][BASCOM] problem z RC5

    Chcę zrobić odbiornik RC5. Kod działa bez zarzutu na atmedze a tu ni hu hu. Rodzaj błędu świadczy tak jakby o braku wystarczającej pamięci SRAM. Attiny 13 ma ich 64 Bajty a deklaracja jedej zmiennej wywala błąd. Ktoś wie jak to usunąć??
  • #12 7473830
    sp3ots
    Poziom 38  
    Witam !
    Linię:
    dim address ......
    zastąp:
    Dim Address As Byte At &H62
    Dim Command As Byte At &H63
    Pozdrawiam. Stefan
  • #14 7473932
    mobiline
    Poziom 11  
    Faktycznie odpaliło tylko dziwi mnie nota w datasheets:
    Internal Sram od adresu 0x0060 do 0x009F to daje 42 bajty. Co to jest ten Eram??Jego się inaczej adresuje?
  • #15 7599356
    FastProject
    Poziom 28  
    ERAM to pamięć nieulotna EEPROM, gdzie możesz zapisać sobie coś, co będzie np potrzebne po zaniku zasilania.
REKLAMA