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

[BASCOM]Nie odbiera niektórych kodów RC5

LED5W 13 Gru 2008 22:59 2975 18
REKLAMA
  • #1 5855866
    LED5W
    Poziom 34  
    Wrzuciłem na zl11avr "dekoder" RC5 i stwierdziłem, że niektóre przyciski pilota nie działają. Na telewizorze działają wszystkie.
    Pilot PHILIPS-a. Model pilota to (chyba) RC 2034312/01.
    Czy moglibyście mi powiedzieć dlaczego tak się dzieje i czy można dodać jakoś obsługę tych przycisków?

    Zajrzyj też tu: Ogłoszenie: programator stk200.
  • REKLAMA
  • #2 5855892
    dawid512
    Poziom 32  
    Też zaobserwowałem takie zjawisko. Wydaje mi się że Bascoma ma ograniczone możliwości jeśli chodzi o odbieranie niektórych kodów choć nie jestem tego pewien.
  • #3 5855955
    don diego
    Poziom 32  
    W nowszej wersji RC5 (extended RC5) drugi bit startowy jest wykorzystywany do określania komend. Może Bascom o tym nie wie.
  • Pomocny post
    #4 5856065
    mirekk36
    Poziom 42  
    Witam,

    Bascom wszytko dokładnie wie ;) ... ale tylko z zakresu standardu RC5 (jeśli chodzi o polecenie Getrc5 - jak sama nazwa wskazuje). Oczywiście, że to polecenie nie odbierze poprawnie danych nadawanych w standardzie RC6 czyli (extended RC5)

    LED5W -> pokaż jaki ty program użyłeś do dekodowania sygnałów ze swojego pilota bo coś mi pachnie, że takiego w którym po poleceniu Getrc5 masz linijkę:

    If Address = 0 Then  - wyświetlaj Command


    co powoduje, że sam decydujesz się tylko na wyświetlanie nadlatujących kodów klawiszy, które przeznaczone są dla TV i mają Address = 0 , tymczasem pilot może mieć klaiwsze przeznaczone do np włączania/wyłączania VCR lub innego urządzenia i nadawany sygnał po wciśnięciu tego klawisza ma Address inny niż 0 . Wtedy twój programik zachowa się w ten sposób właśnie, że nie wyświetli kodów niektórych klawiszy.

    Przerób go tak, żeby wyświetlał także Address o ile jest on różny od 255 czyli:

    If Address <> 255 Then - wyświetl Address i Command


    zobaczysz wtedy różnicę oraz to, że nie jest to kwestia jakichś nadprzyrodzonych zjawisk ;)

    pozdr
  • REKLAMA
  • #5 5859293
    LED5W
    Poziom 34  
    mirekk36 napisał:
    Oczywiście, że to polecenie nie odbierze poprawnie danych nadawanych w standardzie RC6 czyli (extended RC5)

    Wydaje mi się, że odbierze ;)
    Cytat:
    Zmiany wprowadzone od wersji 1.11.6.9.

    Funkcja GETRC5() odbiera teraz rozszerzone kody RC5.


    mirekk36 napisał:
    LED5W -> pokaż jaki ty program użyłeś do dekodowania sygnałów ze swojego pilota bo coś mi pachnie, że takiego w którym po poleceniu Getrc5 masz linijkę:

    If Address = 0 Then  - wyświetlaj Command


    co powoduje, że sam decydujesz się tylko na wyświetlanie nadlatujących kodów klawiszy, które przeznaczone są dla TV i mają Address = 0 , tymczasem pilot może mieć klaiwsze przeznaczone do np włączania/wyłączania VCR lub innego urządzenia i nadawany sygnał po wciśnięciu tego klawisza ma Address inny niż 0 . Wtedy twój programik zachowa się w ten sposób właśnie, że nie wyświetli kodów niektórych klawiszy.

    Przerób go tak, żeby wyświetlał także Address o ile jest on różny od 255 czyli:

    If Address <> 255 Then - wyświetl Address i Command


    zobaczysz wtedy różnicę oraz to, że nie jest to kwestia jakichś nadprzyrodzonych zjawisk ;)

    pozdr


    Program skopiowałem z elektrody i nie analizowałem go. Do głowy mi nie przyszło, że jak pokazuje adres, to tylko 0. Poza tym pilot jest tylko do TV. Chciałem wykorzystać przycisk AMBILIGHT, bo takiej funkcji nie ma mój TV. :D A węch masz dobry - była tam taka linijka. :D

    Teraz mój program wygląda tak:
    $regfile = "attiny2313.dat"
    Config Portd.2 = Output
    Set Portd.2
    
    Dim S As Byte
    
    Config Rc5 = Pind.5
    
    Enable Interrupts
    Dim Adres As Byte , Rozkaz As Byte
    Cls
    Lcd " dekoder RC5..."
    Cursor Off
    
    Do
      Getrc5(adres , Rozkaz)
        If Adres <> 255 Then
         Rozkaz = Rozkaz And &B01111111
         If Adres = 3 And Rozkaz = 35 And S = 0 Then
                  Toggle Portd.2
                  Set S
            End If
         Cls
         Lcd "Adr= " ; Adres ; " Roz= " ; Rozkaz
         Else
         Reset S
    End If
    Loop
    End

    Teraz ładnie działa.

    Jeszcze mam inne pytanko: czy można na tym zrobić czujnik zbliżenia?
    Bo jak dam sendrc5 to na getrc5 będzie za późno...
  • #6 5859699
    mirekk36
    Poziom 42  
    hmmm czujniki zbliżeniowe oparte o podczerwień to już troszkę na innej zasadzie się robi. Nie trzeba stosować tam jakiegoś kodowania sygnału bo po co? wysyła się tylko paczki różnych stanów a potem bada się ile ich odebrało się w wyniku odbicia od przeszkody. Wtedy to można także próbować robić na jedym procku.

    Dodano po 14 [minuty]:

    masz tu kilka linków w tym temacie:

    http://www.lutecki.republika.pl/sumo/index.html
    http://www.lynxmotion.com/images/data/irpd-v7.pdf
    http://www.kronosrobotics.com/an150/AAN150.shtml
  • #7 5862020
    LED5W
    Poziom 34  
    Taki zwykły czujnik już zrobiłem. Teraz chcę zrobić na µC.

    Chodzi o to, aby układ nie reagował na pilota, jak na zbliżenie. Chciałbym użyć jednego odbiornika do czujnika zbliżenia (na 2 cm wystarczy) i odbioru RC5.

    Napisał już ktoś takie cóś?
  • #8 5862240
    mirekk36
    Poziom 42  
    podałem ci kilka tych linków, żebyś przeczytał i spróbował zrozumieć dokładnie o co chodzi i na jakiej zasadzie to w ogóle działa.

    Piszesz, że:
    Cytat:
    "Taki zwykły czujnik już zrobiłem. Teraz chcę zrobić na µC"
    otóż każdy z nich właśnie działa z użyciem procesora i każdy trzeba oprogramować choć troszkę inaczej aby skorzystać w pełni z ich "dobrodziejstw"

    Tak więc nie jest to tylko kwestia "napisania takiego cóś" jak piszesz. A gdybyś poczytał sobie więcej n/t podczerwieni i jej zastosowań to byś wiedział dlaczego nie jest tak prosto zrobić to co ty oczekujesz czyli - układ zbliżeniowy na podczerwień, do tego odporny na działające wokoło piloty na podczerwień - a do tego! jeszcze prawidłowo odbierający kody jakiegoś tam rodzaju pilota. Toż to wszystko się wzajemnie wyklucza. Każdy czujnik podczerwieni może zakłócać działanie pilotów i nawzajem każdy pilot działający na podczerwień może zakłócać czujniki odległości działające na podczerwień - to normalne.

    Aby to rozgraniczyć to zainteresuj się czujnikami zbliżeniowymi ale na ultradźwięki - też miły temat do działania z prockiem. Jednak tutaj medium które jest wykorzystywane do pomiaru to nie podczerwień dzięki czemu pilot nie będzie zakłócał czujnika odległości a czujnik odległości nie będzie zakłócał pilota. A wszystko można wtedy ładnie pogodzić w jednym procku
  • REKLAMA
  • #9 5862375
    LED5W
    Poziom 34  
    Ten mój czujnik to prosty generator 36kHz + TFMS.

    Czujnik nie powinien zakłócać odbiorników z uwagi na dużą odległość i minimalną moc diody czujnika (taką, żeby czujnik wykrył obiekt w odl. 2cm). Na dodatek sprawdzanie może odbywać się jednorazowo np. co 0,5s.
    Co do zakłócania czujnika pilotem: Czujnik nie będzie pracował podczas odbierania kodu - i nie powinien.

    Dodano po 5 [godziny] 5 [minuty]:

    Ale może zostawmy sprawę zakłócania i zajmijmy się czujnikiem.
    Napisałem taki programik:
    Config Timer0 = Timer , Prescale = 1 : Enable Interrupts
    On Timer0 Ctrlbit Nosave
    Config Portb.3 = Output
    Cursor Off
    Cls
    Enable Timer0
    
    Do
    Loop
    End
    
    Ctrlbit:
    Timer0 = 200
    Toggle Portb.3
    Home
    If Portb.3 = 1 Then
       If Pind.5 = 1 Then
             Lcd "! "
          Else
             Lcd "OK"
          End If
       End If
    Return

    Niby działa, ale czułość jest b. mała. Jakiś pomysł na poprawienie?
  • #10 5864229
    mirekk36
    Poziom 42  
    Zapamiętaj sobie jedną rzecz na zawsze - nigdy nie używaj wyświetlania na LCD (w ogóle obsługi LCD) i tym podobnych "czaso-żarłocznych" procedur w przerwaniach. Im szybciej się tego nauczysz tym lepiej dla ciebie. (i wcale mi tutaj nie chodzi o czułość twojego układu - bo kompletnie nie wiadomo z tego co pokazałeś jak to miałoby w ogóle działać)
  • REKLAMA
  • #11 5864815
    LED5W
    Poziom 34  
    mirekk36 napisał:
    Zapamiętaj sobie jedną rzecz na zawsze - nigdy nie używaj wyświetlania na LCD (w ogóle obsługi LCD) i tym podobnych "czaso-żarłocznych" procedur w przerwaniach.

    Więc jak to proponujesz "wrzucić" do gł. pętli? Ustawianie flagi?

    mirekk36 napisał:
    kompletnie nie wiadomo z tego co pokazałeś jak to miałoby w ogóle działać

    Faktycznie przydałyby się komentarze.
    Kwarc 4MHz. Przerwanie jest wywoływane z częstotliwością ponad 71kHz. Za każdym przerwaniem zmieniany jest stan diody nadawczej - Portb.3, co daje f≈36kHz. Może tu tkwi problem czułości (w tym przybliżeniu)?
    Dalej wyjaśnię komentarzami:
    
    If Portb.3 = 1 Then      'jeżeli dioda świeci
       If Pind.5 = 1 Then    'jeżeli na odbiorniku stan nieaktywny
             Lcd "! "
          Else 
             Lcd "OK" 
          End If
       End If
  • #12 5864994
    mirekk36
    Poziom 42  
    LED5W napisał:
    Więc jak to proponujesz "wrzucić" do gł. pętli? Ustawianie flagi?

    Oczywiście - to jest jedyny słuszny sposób, dzięki temu twoje przerwanie będzie trwało bardzo krótko. A teraz? zauważ, że podałeś iż teoretycznie działa ono z częstotliwością X, jednak jeśli procedura przerwania trwa dłużej niż okres tej częstotliwości X to - i cała twoja założona częstotliwość bierze w łeb - stąd zapewne nieoczekiwane dla ciebie zachowania układu.

    Odnośnie dalszego fragmentu programu po wyjaśnieniach, to musisz pokombinować
  • #13 5865836
    LED5W
    Poziom 34  
    Zmieniłem program - niestety musiałem usunąć nosave:
    Dim Czujnik As Bit
    Config Timer0 = Timer , Prescale = 1 : Enable Interrupts
    On Timer0 Ctrlbit
    Config Portb.3 = Output
    Cursor Off
    Cls
    Enable Timer0
    
    Do
    Home
    If Czujnik = 0 Then
             Lcd "!             "
          Else
             Lcd "Widze diode!!!"
          End If
    Loop
    End
    
    Ctrlbit:
    Timer0 = 220                                                'f ok.71,43kHz
    Toggle Portb.3
    If Portb.3 = 1 Then                                         'jeżeli dioda IR świeci
       If Pind.5 = 1 Then                       'jeżeli na odbiorniku stan nieaktywny
             Reset Czujnik                                      'odbiornik nie widzi diody
          Else                                                  'jeżeli na odbiorniku stan aktywny
             Set Czujnik                                        'odbiornik widzi diodę
          End If
       End If
    Return

    Efekt jest ciekawy: tekst zamiast wyświetlić się w całości to pokazywany jest po literce (celowo dałem dłuższy napis).

    Wrzucę tą całą procedurę do pętli i zobaczę co na to powie.

    Dodano po 11 [minuty]:

    Teraz nic nie wyświetla. :cry:
    Dim Nad As Bit , Odb As Bit
    'jak wcześniej
    
    Do
    Home
    If Nad = 1 Then                                             'jeżeli dioda IR świeci
       If Odb = 1 Then                                          'jeżeli na odbiorniku stan nieaktywny
             Lcd "!             "                               'odbiornik nie widzi diody
          Else                                                  'jeżeli na odbiorniku stan aktywny
             Lcd "Widze diode!!!"                               'odbiornik widzi diodę
          End If
       End If
    Loop
    End
    
    Ctrlbit:
    Timer0 = 220                                                'f ok.71,43kHz
    Toggle Portb.3
    Nad = Portb.3
    Odb = Pind.5
    Return

    I czy linia Nad = Portb.3 jest w ogóle potrzebna?
  • #14 5866097
    mirekk36
    Poziom 42  
    nie wykorzystałeś mechanizmu flagi , jej ustawiania i zerowania. Generalnie ten mechanizm powinien wyglądać mniej więcej tak:

    Dim Flaga as Byte
    flaga = 0
    
    Do
      if Flaga = 1 then
        Flaga = 0
        .... tutaj reakcja na zdarzenie, np wyświetlenie czegoś na LCD
      Endif
    Loop
    
    
    ' podprogram obsługi jakiegoś tam przerwania
    Przerwanie:
    
      ...Obsługa jakiegoś tam zdarzenia
    
      if JakieśZdarzenie then
        Flaga = 1
      Endif
    
    return


    chyba jasno teraz widać jak to działa? - dopóki nie zajdzie jakieś nasze zdarzenie w przerwaniu to do tego czasu w pętli głównej nic nie będzie wyświetlane na LCD. Gdy natomiast w przerwaniu zajdzie interesujące nas zdarzenie to ustawiamy flagę na = 1 dzięki czemu bezpośrednio po wyjściu z przerwania gdy pętla główna dojdzie do If Flaga = 1 to wykona się reakcja na nasze zdarzenie. Dzięki temu procek i my wszyscy będziemy szczęśliwi. Zauważ, że w pętli głównej zawsze Flaga musi zostać zresetowana aby nie powtórzył się ten fragment kodu dokąd nie nastąpi nowe zdarzenie.

    Można jeszcze robić modyfikację bo czasem istotne jest aby w trakcie obsługi zdarzenia w pętli głównej - nie było obsługiwane kolejne zdarzenie aż skończy się jego obsługa. Wtedy można tak to rozpisać:

    Dim Flaga as Byte
    flaga = 0
    
    Do
      if Flaga = 1 then
        .... tutaj reakcja na zdarzenie, np wyświetlenie czegoś na LCD
    
        Flaga = 0 'flagę kasujemy dopiero po zakończen iu obsługi zdarzenia
      Endif
    Loop
    
    
    ' podprogram obsługi jakiegoś tam przerwania
    Przerwanie:
      If Flaga = 0 then 
    
        ...Obsługa jakiegoś tam zdarzenia
    
        if JakieśZdarzenie then
          Flaga = 1
        Endif
    
      Endif
    
    return

    teraz jak widzisz obsługa przerwania wykona się tylko gdy Flaga = 0 czyli wtedy gdy nie jest wykonywana w pętli głównej obsługa tegoż zdarzenia.

    Oczywiście można jeszcze na milion innych sposobów to realizować ale tu chodziło mi o pokazanie takiej ogólnej zasady

    .... aha a odnośnie parametru NOSAVE to najpierw sobie poczytaj dokładnie co on znaczy a później dopiero go stosuj. W ogromnej większości przypadków nie możesz stosować NOSAVE. A kiedy można? kiedy świadomie korzystasz z przerwania , np jest tam tylko wstawka asemblerowa i wiesz z których rejestrów korzystasz i sam "ręcznie" odkładasz je na stos a przy wyjściu zdejmujesz. Więc na tym etapie nauki bascoma narazie zapomnij o NOSAVE.
  • #15 5866633
    LED5W
    Poziom 34  
    mirekk36 napisał:
    nie wykorzystałeś mechanizmu flagi , jej ustawiania i zerowania.

    W tym drugim (niedziałającym) programie nie ma flagi. przekazuję tylko dane w 2 zmiennych.
    Co do pierwszego:
    Myślałem, że jak się zeruje zmienną "od tej samej str." co ustawia to też można to nazwać flagą.
    Nawiasem to tam w Twoim przykładzie powinno być bit zamiast byte.

    mirekk36 napisał:
    Generalnie ten mechanizm powinien wyglądać mniej więcej tak:[...]

    Ten mechanizm znam.

    mirekk36 napisał:
    Zauważ, że w pętli głównej zawsze Flaga musi zostać zresetowana aby nie powtórzył się ten fragment kodu dokąd nie nastąpi nowe zdarzenie.

    Więc jak wg Ciebie powinien wyglądać program gł.?

    mirekk36 napisał:
    Można jeszcze robić modyfikację bo czasem istotne jest aby w trakcie obsługi zdarzenia w pętli głównej - nie było obsługiwane kolejne zdarzenie aż skończy się jego obsługa.

    Ale tu raczej się nie przyda. Tak?
    A jak już to nie lepiej dać w programie gł. disable timerx?

    mirekk36 napisał:
    na tym etapie nauki bascoma narazie zapomnij o NOSAVE.

    W pustej pętli raczej nie zaszkodzi.
  • Pomocny post
    #16 5866694
    mirekk36
    Poziom 42  
    LED5W napisał:
    W tym drugim (niedziałającym) programie nie ma flagi. przekazuję tylko dane w 2 zmiennych.


    no i masz co masz - przez akurat takie przekazywanie, przecież efekt sam widzisz

    LED5W napisał:
    Nawiasem to tam w Twoim przykładzie powinno być bit zamiast byte.

    Może być Bit ale nie musi - ja zawsze stosuję Byte bo czasem u mnie flaga może przybrać inne wartości niż 0 albo 1 dzięki czemu jedna flaga może mi służyć do różnych celów


    LED5W napisał:
    Więc jak wg Ciebie powinien wyglądać program gł.?

    no sorki ale nie mam tyle czasu teraz żeby aż tak dogłębnie analizować, powiem tylko tyle, że gdy w tym twoim przerwaniu wykryjesz już to, że "zobaczyłeś" odbitą wiązkę IR to, to byłoby moim zdarzeniem, które ustawiłoby flagę na 1, natomiast w pętli głównej gdy flaga = 1 poinformowałbym o tym na wyświetlaczu ale nie przez wyświetlenie samego napisu bo on na nim by pozostał wciąż taki sam, a jego kasowanie by nie pomogło, więc zrobiłbym jakąś zmienną licznikową, która zwiększałaby się o 1 po wystąpieniu zdarzenia i wyświetlałaby się wraz z napisem informującym, że zauważono odbicie nr: x
    (ten x by się zwiększał)


    LED5W napisał:

    mirekk36 napisał:
    Można jeszcze robić modyfikację bo czasem istotne jest aby w trakcie obsługi zdarzenia w pętli głównej - nie było obsługiwane kolejne zdarzenie aż skończy się jego obsługa.

    Ale tu raczej się nie przyda. Tak?

    to zależy - od tego co będziesz chciał uzyskać i jak zbadać to swoje zjawisko.


    LED5W napisał:
    A jak już to nie lepiej dać w programie gł. disable timerx?

    pisałem , że można to rozwiązać na milion różnych sposobów jednym z nich jest włączanie wyłączanie przerwania, ale znowu wszystko zależy od tego co chcesz uzyskać, bo czasem wykonanie programu odbługi przerwania może być istotne a flaga może wstrzymać tylko fragment tegoż podprogramu (na czas obsługi zdarzenia w pętli głównej) .... wszystko zależy od potrzeb i inwencji twórczej



    LED5W napisał:

    mirekk36 napisał:
    na tym etapie nauki bascoma narazie zapomnij o NOSAVE.
    W pustej pętli raczej nie zaszkodzi.

    jeśli masz tylko pustą pętlę i tylko jeden podprogram do obsługi tylko jednego przerwania to oczywiście że nie zaszkodzi NOSAVE ale ja nie powiedziałbym, że nie zaszkodzi tylko, że to jest bez sensu.


    dlatego też na podstawie powyższego, proponuję ci poćwiczyć takie różne warianty pracy z flagami bo tak mi się coś wydaje, że stwierdzenie:
    LED5W napisał:
    Ten mechanizm znam.

    nie jest jednak do końca prawdziwe (bez urazy)
  • #17 5866888
    LED5W
    Poziom 34  
    mirekk36 napisał:
    pisałem , że można to rozwiązać na milion różnych sposobów

    Tylko trzeba się zmieścić w czasie i przestrzeni (tzn. pamięci). I mi właśnie tego pierwszego trochę brakuje.

    mirekk36 napisał:

    LED5W napisał:

    mirekk36 napisał:
    na tym etapie nauki bascoma narazie zapomnij o NOSAVE.
    W pustej pętli raczej nie zaszkodzi.

    jeśli masz tylko pustą pętlę i tylko jeden podprogram do obsługi tylko jednego przerwania to oczywiście że nie zaszkodzi NOSAVE ale ja nie powiedziałbym, że nie zaszkodzi tylko, że to jest bez sensu.

    Ale oszczędza trochę czasu...

    mirekk36 napisał:
    dlatego też na podstawie powyższego, proponuję ci poćwiczyć takie różne warianty pracy z flagami bo tak mi się coś wydaje, że stwierdzenie:
    LED5W napisał:
    Ten mechanizm znam.

    nie jest jednak do końca prawdziwe (bez urazy)

    Co do ogólnego działania to znam, ale jeżeli chodzi o obsługę stosu itp. to już mniej.
  • #18 5867027
    mirekk36
    Poziom 42  
    LED5W napisał:

    mirekk36 napisał:

    LED5W napisał:

    mirekk36 napisał:
    na tym etapie nauki bascoma narazie zapomnij o NOSAVE.
    W pustej pętli raczej nie zaszkodzi.

    jeśli masz tylko pustą pętlę i tylko jeden podprogram do obsługi tylko jednego przerwania to oczywiście że nie zaszkodzi NOSAVE ale ja nie powiedziałbym, że nie zaszkodzi tylko, że to jest bez sensu.

    Ale oszczędza trochę czasu...


    ;) hyhyhy no tak masz niewątpliwie rację z tym, że w tym konkretnym przypadku to jest to oszczędność powiedzmy tak jakbym zaoszczędził

    100ms na wykonanie zadania, które odbywa się co 1 godzinę

    ok nie chodzi o to aby się sprzeczać tylko tworzyć, więc wypróbuj tę wiedzę w praktyce.

    ... aha jeśli chodzi o takie proste wykrywanie dystansu to czasem lepiej się zastanowić na prostym scalonym czujnikiem na podczerwień typu GD2D150 lub podobne. Można je spokojnie u nas kupić i odpada wiele problemów. Dodatkowo będą działać dużo lepiej i bezbłędniej niż taki czujnik stworzony tylko programowo. Po prostu jest to troszkę bardziej skomplikowane zagadnienie niż wykonanie sterowania kodami pilota IR, które w całości z kolei opłaca się zrobić programowo bez wspierania się hardwarowymi scalakami do np dekodowania RC5 (bo takie też przecież są). Rozważ taką możliwość odnośnie tego GDxxxx.

    tak więc powodzenia w walce z podczerwienią życzę oby ci coś wyszło. A taki cel na pewno przyczyni się do lepszej nauki programowania na przyszłość
  • #19 5867235
    LED5W
    Poziom 34  
    Możesz się śmiać, ale po modyfikacji pierwszego programu na sterujący diodą zamiast LCD, układ z użyciem nosave ma dużo większą czułość.
    Teraz program wygląda tak:
    Config Timer0 = Timer , Prescale = 1 : Enable Interrupts
    On Timer0 Ctrlbit Nosave
    Config Portb.3 = Output
    Config Portd.2 = Output
    Set Portd.2
    Cursor Off
    Cls
    Enable Timer0
    
    Do
    Loop
    End
    
    Ctrlbit:
    Timer0 = 220                                                'f ok.71,43kHz
    Toggle Portb.3
    If Portb.3 = 1 Then                                         'jeżeli dioda IR świeci
       If Pind.5 = 1 Then                        'jeżeli na odbiorniku stan nieaktywny
             Set Portd.2                              'odbiornik nie widzi diody - zgaś led
          Else                                             'jeżeli na odbiorniku stan aktywny
             Reset Portd.2                               'odbiornik widzi diodę - włącz led
          End If
       End If
    Return

    Wydaje mi się, że procek nie zrobi więcej w tym czasie, bo ma tylko 56 taktów między przerwaniami, ale się jeszcze trochę pobawię. :D

    Dodano po 1 [minuty]:

    A zaoszczędzisz minutę a nie 100ms. :D ;)

    Dodano po 8 [minuty]:

    Aha, czy mógłbyś odpowiedzieć w temacie do którego dałem link w pierwszym poście?
REKLAMA