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

Nadawanie i odbiór danych podczerwienią bez protokołów RC5/RC6/Sony z mikrokontrolerów

fliper_katrill 10 Kwi 2021 11:54 870 13
REKLAMA
  • #1 19370849
    fliper_katrill
    Poziom 20  
    Dzień dobry, chciałem zapytać czy któryś z Szanownych Forumowiczów wykorzystywał przesyłanie informacji podczerwienią, oczywiście z wykorzystaniem mikrokontrolerów, ale nie w oparciu RC5, RC6 czy Sony tylko od tak: nadajnik wysyła liczbę "645" (jak oto właśnie jest pytanie) a odbiornik ją poprawnie odczytuje? Mógłbym w jakiś sposób wykorzystywać utarte schematy/protokoły tylko nie mam pomysłu na wykorzystanie adresu i komendy do przesyłania informacji. Nie będę sterował urządzeniami, mogę bawić się mnożąc np otrzymaną informację 15x43 to daje 645 w odbiorniku (adres 15, komenda 43, nie pamiętam na jak duże liczby mogę sobie pozwalać), może macie jakieś doświadczenia?
    Dziękuję za odpowiedzi
  • REKLAMA
  • #2 19371139
    Justyniunia
    Poziom 36  
    Przeszło mi coś przez myśl.
    Możesz zliczać po prostu impulsy wysyłane przez nadajnik.
    Inkrementujesz zmienną "czas".
    Każdy odebrany impuls resetuje nam czas, a zmienna np "odebrano" zlicza ilość odebranych impulsów.
    Po zaprzestaniu nadawania czas osiąga jakąś wartość i po jej osiągnięciu zmienna "odebrano" zostaje zapisana.
    To tyle by było w BASCOM, nie wiem w czym piszesz.
    Ma to tę wadę, że długość takiej paczki jest różna w zależności od ilości wysyłanych impulsów.
  • REKLAMA
  • #3 19371250
    fliper_katrill
    Poziom 20  
    Dziękuję za odzew, a ja teraz tak sobie myślę jakby jeden uC wysyłał adres i kod (co jest normalne) a drugi odczytywał adres i kod na zasadzie:
    nadajnik (13,25) gdzie to kolejno adres i komenda odbiornik (13,25) analogicznie i ja to zamieniam na string i obrabiam a ta liczba to 1325 i tak samo 00,01 odbieram zamieniam na stringa, obcinam, 0001, po prostu 1. Zostaje kwestia, czy adres i komenda są z zakresu bajta 0-254? mógłbym wysłać liczbę 254254 a to by starczyło i to z ogromnym zapasem, czy RC5 ma ograniczenia nie wiem do 63 czy 127? Tak, programuję w Bascomie.
  • REKLAMA
  • #4 19383175
    pimpuk
    Poziom 23  
    W standardzie RC5 ramka danych składa się z dwóch bitów startu, bitu toggle, pięciu bitów adresu i sześciu bitów danych.
    To co Ty chcesz zrobić, już zostało wymyślone dziesiątki lat temu. Bo jak wysyłasz adres i komendę, to potem się okaże że przydał by się bit startu, potem jeszcze coś itp. Mamy więc, nomen omen,jeden ze standardów komunikacji szeregowej i nic prostszego, ani nic lepszego nie wymyślisz.
  • #5 19383362
    linuxtorpeda
    Poziom 26  
    RC5 wbrew pozorom nie nadaje się do wysyłania większej ilości danych, gdyż marnuje ok. połowę transferu na adresowanie i nie zapewnia integralności danych.

    Problem postawiony przez autora wydaje się dość prosty, wystarczy kodować bit "0" zmodulowanym sygnałem o szerokości np. 1 ms, bit "1" sygnałem 2 ms. W ten sposób odległości między bitami mogą być dowolne, a ich liczba w jednym ciągu nieograniczona. Oczywiście można wprowadzić do protokołu sygnały kontrolne bądź wprowadzić ograniczenia czasowe do rozpoznawania początku i końca transmisji.
  • #6 19383396
    krzysiek_krm
    Poziom 40  
    Przecież jest standard IrDA. Można kupić gotowe podzespoły - ceny na kolana nie rzucają.
  • #7 19383640
    pimpuk
    Poziom 23  
    linuxtorpeda napisał:
    RC5 wbrew pozorom nie nadaje się do wysyłania większej ilości danych...


    Dla tego napisałem, że to jeden z wielu standardów szeregowego przesyłania, danych. Jak kolega wyżej wspomniał, standard IrDA to jeden bit startu, osiem danych i jeden stopu. Ale zasada jest podobna.Asynchroncznie szeregowo nic więcej się nie wymyśli. No chyba że faktycznie jakiś rodzaj modulacji, ale skomplikuje to implementację, bo dojdzie pomiar szerokości impulsów.
  • #8 19383692
    linuxtorpeda
    Poziom 26  
    IrDA to standard obejmujący większy zakres niż warstwa fizyczna. Byłem przekonany, że autorowi raczej chodzi o luźne dywagacje w tym zakresie aniżeli rozwiązywanie konkretnego problemu. W takim przypadku faktycznie lepiej kupić gotowe transceivery IrDA bądź Bluetooth, który mimo że z podczerwienią nie ma nic wspólnego, to sprawdza się od niej o niebo lepiej.
  • #9 19383830
    tmf
    VIP Zasłużony dla elektroda
    Można wykorzystać dowolną opcję. Wystarczy użyć RS232 i zmodulować wyjście jakąś nośną - np. 38 kHz. Wtedy po drugiej stronie dajemy jakiś TSOP i mamy zdemodulowany sygnał RS232. W ten sposób można po IR połączyć dwa MCU przy pomocy diody i odbiornika podczerwieni. Oczywiście jeśli to ma być coś poważniejszego to należy dodać kontrolę integralności danych.
  • REKLAMA
  • #10 19521560
    fliper_katrill
    Poziom 20  
    Dzień dobry, dziękuję za odzew i dyskusję. Udało mi się uzyskać łączność pomiędzy nadajnikiem (sterownikiem) a odbiornikiem, którego zadaniem jest sczytanie z nadajnika liczby. Liczby wydaje mi się, że 99999 by wystarczyło a kto wie czy nie 9999, precyzyjniej 0-9999. Ponieważ RC5 jak pisałem mi działa to chciałem wykorzystać informacje przesyłane tym protokołem. Korzystając bezpośrednio z bitów adresów i komend (jakbym je skleił, chociaż podkreślam, że gdybam) jak dobrze kombinuję uzyskam maksymalnie 2048 (11bitów, chyba że togbit to 12 - 4096), więc kombinuję jak tu umieścić w nadajniku informację poprzez kombinację adresu i komendy żeby otrzymać chociaż 9999. Tu raczej potrzebowałbym wiedzy matematycznej niźli pracowania z czasem i bitami czy nowym protokołem. Piszę do Was bo co kilka głów to nie jedna. Jak wspominałem we wcześniejszych postach sklejenie adresu 99 i komendy 99 odpada, bo protokół nie przewiduje takich adresów a to by było wtedy superproste w implementacji, pytanie jak inaczej?
  • Pomocny post
    #12 19522684
    mpier
    Poziom 29  
    Witam,
    "Wiedza matematyczna":
    Wiedząc, że jednym pakietem możesz przesłać jeden bajt, oblicz liczbę pakietów, które należy nadać, aby przesłać dwa bajty. (2 pkt)

    Pozdrawiam
  • #13 19524116
    fliper_katrill
    Poziom 20  
    A prościej (jak dla mnie) adres 1 komenda 0-9 jedności, adres 2 komenda 0-9 dziesiątki, adres 3 setki, adres 4 tysiące adres 5 dziesiątki tysięcy 😁 nie nadaję z przycisku pilota, mogę nadać i zliczyć kilka par adresów i komend powiedzmy co 100 ms. Mogę odbiornik trzymać dosyć blisko a nadawać co kilka sekund. Niesie to ze sobą oczywiście pewne wady, np. sczytywanie " w połowie" takiego pakietu. Pomysł z podzieleniem informacji na 2-3 paczki również jest fajny, dziękuję!
  • #14 19524233
    mpier
    Poziom 29  
    Możesz tak zrobić, ryzyko odczytania liczby "w połowie" jest niewielkie. Przykładowo licząc od 0 (jedności) do 4 (dziesiątki tysięcy) adres "przekręci się" dopiero po trzech sekundach, np. tak: 0 (jedności), ..., 4 (dziesiątki tysięcy), 5 (jedności), ..., 9 (dziesiątki tysięcy), ..., 29 (dziesiątki tysięcy), ..., 0 (jedności).
    Masz dwanaście bitów, możesz zrobić cokolwiek.

Podsumowanie tematu

Dyskusja dotyczy przesyłania danych podczerwienią z mikrokontrolerów bez użycia standardowych protokołów RC5, RC6 czy Sony. Uczestnicy forum proponują różne metody kodowania danych, takie jak zliczanie impulsów, modulacja sygnału oraz wykorzystanie adresów i komend do przesyłania informacji. Zwracają uwagę na ograniczenia protokołów, takie jak marnowanie transferu na adresowanie w RC5 oraz sugerują alternatywy, takie jak standard IrDA. Użytkownicy dzielą się pomysłami na podział danych na mniejsze pakiety oraz na wykorzystanie prostych schematów do przesyłania liczb w zakresie 0-9999. Wskazują również na potrzebę kontroli integralności danych oraz ryzyko błędów w transmisji.
Podsumowanie wygenerowane przez model językowy.
REKLAMA