Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zdalne sterowanie rc5 ATMEGA8 (manipulator)

25 Cze 2012 13:53 1730 6
  • Poziom 12  
    Witam!
    Jestem w trakcie budowy małego manipulatora. Chcę nim sterować przez rc5.
    Mam przerobione serwa(wyjęta elektronika -sterowanie przekaźnikami.) Problem jest w tym ,że nie potrafię ogarnąć rc5 w bascomie.
    to moj kod
    Code:
    $regfile = "m8def.dat"
    
    $crystal = 4000000
    Config Rc5 = Pind.2
    Config Portd.3 = 1
       Portd.3 = 1
    Config Portd.0 = 1
       Portd.0 = 0
    Config Portd.1 = 1
       Portd.1 = 0
       Enable Interrupts
       Dim Address As Byte , Command As Byte
    Do
    Getrc5(address , Command)
    If Address = 0 Then
    If Command = 16 Then
     Portd.2 = 1
    Loop
    End


    Chodzi mi o to ,że jak wcisnę przycisk na pilocie to będzie stan 1 a jak puszczę to będzie 0.Ten kod wyżej działa tak ,że gdy wcisnę to jest stan 1 ale co 70ms. (70ms to takie optymalne do właczenia przekaźnika i nieczęstego wyłączania)
    Czytałem coś o przerwaniach, ale nic mi nie wychodzi.
    Odbiornik rc5 jest stąd http://mirley.firlej.org/odbiornik_rc5 tylko przerobiony pod atmege8 .
    Pozdrawiam!
  • Relpol przekaźniki
  • Poziom 39  
    To co zamieściłeś nie ma prawa działać , chyba że jest fragmentem programu tylko nie wiadomo czego . Brak początku pętli , brak obsługi przerwania RC5 , zapoznaj się z poleceniem TOGGLE oraz przeanalizuj jeszcze raz program który masz za wzór .
    Waitms jest niepotrzebny dla pewności działania lepiej zrób warunek w którym 2-3 krotne odebranie danego polecenia spowoduje zmianę stanu portu .
  • Relpol przekaźniki
  • Poziom 12  
    Przepraszam. Kod jest już poprawiony. Ten działa w 100%
    Myślałem ,żeby zrobić coś w stylu
    If case 16 then portd.1=1
    Ale przydałoby się coś w stylu "no case" Tak jak do najprostszego sprawdzenia czy kod działa i klawiatura
    Np. If pind.0=0 then portd.1=1
    waitms 20
    if pind.0=1 then portd.1=0
  • Poziom 39  
    Zmieniłeś kod ale nie opis problemu z 70ms a waitms 70 znikło z programu jeżeli chcesz sprawdzać klawiaturę oraz odebrane polecenie RC5 to zrób dwa podprogramy oraz eliminację drgań styków . Ponadto po co dwa warunki jeżeli port klawiatury jest podciągnięty to zawsze masz spełniony warunek pind.x=1 . Napisz co dokładnie chcesz zrobić bo z pewnością manipulator nie ograniczy się do jednego polecenia oraz co to ma znaczyć
    ccessiuu napisał:
    70ms to takie optymalne do właczenia przekaźnika i nieczęstego wyłączania
  • Poziom 12  
    Dzięki za cierpliwość.
    70ms dobrałem doświadczalnie. Chodzi o to ,że tylko w ten sposób umiem zrobić ,żeby silnik w serwie kręcił . Tylko są tu kroki bo włącza sie co 70ms. Chcę ,żeby to było płynnie. Tyle ile trzymam przycisk na pilocie tyle się kręci , bez żadnych przerwań . Próbowałem także z toggle ale wtedy trzeba przycisnąć drugi raz przycisk żeby silnik sie wyłączył.
    Ta klawiatura to tylko taki przykład.
  • Pomocny post
    Poziom 39  
    ccessiuu napisał:
    Kod jest już poprawiony. Ten działa w 100%

    Na pewno nie będzie działał brak zakończenia dwóch warunków w pętli Do -Loop oraz coś bardzo ciekawego :
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Najpierw deklarujesz jako RC5 a potem zmieniasz na nim stan ? . Coś mi się wydaje że za bardzo nie wiesz jak się do tego zabrać i 100% to jakieś mizerne . Aby nie ciągnąć tego w nieskończoność masz gotowy , sprawdzony program , przyporządkuj sobie odpowiednie polecenia RC5 oraz porty myślę że tyle dasz radę zrobić .
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Poziom 12  
    Dziękuje! Wszystko działa.