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

Tworzenie indywidualnego IP dla Atmega

huzzar.ts 24 Maj 2012 23:08 1958 11
REKLAMA
  • #1 10931790
    huzzar.ts
    Poziom 13  
    Siema wszystkim.
    Od jakiegoś czasu siedzę nad moim projektem, posiada on 3 mikro kontrolery
    2 Atmega8 i jeden Atmega32. Każdy z nich wykonuje inne funkcje w tym samym czasie, A32 jest szefem. Wymyśliłem system komunikacji miedzy nimi który polega na podawaniu sobie wzajemnie kodów sześciu cyfrowych w ciągu 100 milisekund.
    Wszystko działa super... mam możliwość zastosowania miliona kodów (poleceń).
    Kwestia jest jednak taka że myślę nad tym jak wygenerować w nich indywidualne IP.
    Wiem można porostu wpisać i tyle. Ale chciałbym żeby same go sobie stworzyły. Wpadłem na pomysł o koszcie około 2 zł, mianowicie ne555 + rezystorek + ntc.
    Miało by to działać tak, po włączeniu zasilania, każdy zlicza swoje impulsy ze swojego ne555, przykładowo przez 2s. NTC wpłynie na to że jego pomiar waha się w pewnym stopniu. Co spowoduje że każdy po 2s zliczy inna ilość impulsów. Następnie to pomnożę przez siebie i wytnę któreś cyfry z ciągu który powstał. I mamy indywidualne IP dla każdego. Nienastanie kolejny pin poda sygnał na tranzystor który odłączy ne555 od mikro kontrolera i mamy wszystkie piny wolne.

    Co o tym myślicie i czy macie może już jakiś inny patent na coś podobnego.
    Dzieki i pozdro
  • REKLAMA
  • #3 10931842
    huzzar.ts
    Poziom 13  
    IP czyli indywidualny numer podporządkowany danemu urządzeniu. Inaczej mówiąc jeśli chce przekazać informacje do 13 atmegi w szeregu który jest podpięty pod 4 przewodowa magistrale to trafi on do właśnie tego atmegi.
    IP miałem na myśli coś na styl numeru seryjnego.
  • REKLAMA
  • #4 10931850
    Tommy82
    Poziom 41  
    A nie możesz tego "adresu" o ile Cie dobrze rozumie zaszyć na sztywno?
    Przecież nawet jak będziesz losował to możesz mieć kolizje.
  • #5 10931860
    mirekk36
    Poziom 42  
    huzzar.ts napisał:
    IP czyli indywidualny numer podporządkowany danemu urządzeniu. Inaczej mówiąc jeśli chce przekazać informacje do 13 atmegi w szeregu który jest podpięty pod 4 przewodowa magistrale to trafi on do właśnie tego atmegi.
    IP miałem na myśli coś na styl numeru seryjnego.


    No właśnie bo IP to raczej kojarzy się z numerem IP w sieciach TCP ;) ... A numery seryjne to chyba zwykle się raz ustala na dobre .... a ty chcesz je tworzyć dynamicznie ? A skąd inne procki będą wiedziały ? Nie mówię że to jakiś zły pomysł bo pewnie go nierozumiem - ale wygląda to na coś bardzo zakręconego. I jeszcze te NE555 ???
  • #6 10931869
    huzzar.ts
    Poziom 13  
    No właśnie w tym sęk że chce żeby generował się sam. Jak te zliczone bity przerzucę przez parę dziwnych działań matematycznych razem z wycinaniem tylko części wyniku to prawdopodobieństwo będzie jak w totka. Chce zrobić coś co zapisze w dokumencie tekstowym i jak chce żeby działało na tej magistrali tylko wklejam i śmiga.
  • REKLAMA
  • #7 10931891
    Tommy82
    Poziom 41  
    No ale master musi wiedzieć na jaki adres który gdzieś tam sobie coś przyjęło ma coś wysłać.
    To jak bym Ci miał wysłać pocztówkę na adres który sobie wymyśliłeś.
    Może jakiś protokół ustalania adresu z masterem (szefem)

    Na przykład slave nasłuchuje ruch i po jakimś czasie wybiera nieużywany adres h zgłasza się masterowi a on wykrywa ewentualna kolizje.
  • REKLAMA
  • #8 10932417
    tmf
    VIP Zasłużony dla elektroda
    To po co ci ne555? Równie dobrze sprawdzi się generator liczb pseudolosowych. Ale to ci nie gwarantuje unikalności, ale możesz dowolnie zmniejszyć prawdopodobieństwo konfliktu. Ja ci jednak polecę ciekawsze rozwiązanie. Skoro używasz Mega32, a więc całkiem sporego procesorka, to użyj ATXMega32. Seria XMEGA poza tym, że wygodniejsza (w sumie to produkt ponad 20 lat doświadczeń z AVR, więc nie ma wielu chodób wieku dziecięcego, m.in. bałaganu z rejestrami), ma też unikalny numer seryjny. W efekcie nic nie musisz generować, a masz zagwarantowane, że dwa dowolne procesory nie będą miały tego samego numeru.
  • #9 10932499
    Tommy82
    Poziom 41  
    tmf no tak na poziomie numeru wszystko się zgadza tylko ze jak w prosty sposób rzutuje numer procka na jakiś krótki adres to kolizje będą tak czy siak. Bo to z matematycznego punktu widzenia jak by tego nie realizować będzie tożsame na poziomie prawdopodobieństwa z dzieleniem modulo.
    Powiedzmy ze mamy 4 bitowy "adres" n to możliwych rożnych adresów jest 2^4 i jak by tego nie liczyć będzie ich 16. I nawet jak losować będziemy w milionowym zbiorze to i tak wynik końcowy musi przyjąć wartość z 16 elementowego zbioru a to prosta droga do kolizji. Zwiększanie długości adresu zmniejsza prawdopodobieństwo kolizji ale nie eliminuje.
    Potrzebny jest jakiś mechanizm wykrywania kolizji i ich obsługa lub system z definicji bezkolizyjny.
  • #10 10932798
    tmf
    VIP Zasłużony dla elektroda
    Oczywiście masz rację. Ale my tu mamy nieco inną sytuację. Jeśli UID ma np. 64 bity, to kolizja nie wystąpi dopóki nie będziemy mieli więcej niż 2^64 przypadków (a one nie są losowane) - a mała jest szansa, że ATMEL wyprodukuje ponad 4 miliardy procesorów danego typu. Więc jeśli UID autora wątku będzie 64 bitowy to ma gwarancję niepowtarzalności i braku kolizji. Oczywiście jeśli zechce go skrócić do 8 bitów to pojawią się problemy o których piszesz. Ale odniosłem wrażenie, że autor nie miał ograniczeń związanych z długością UID.
  • #11 10932905
    huzzar.ts
    Poziom 13  
    Pierwsze co to chciałem podziękować za bogate wypowiedzi i własne sugestie.
    Powiem tak, macie Panowie racje w 100%. Przemyślałem to i doszedłem do wniosku że podczas pisania umieszczę coś na styl nr. seryjnego w każdym procku. Wyszukiwarkę też już rozkminiłem jak zrobić. Może tak w skrócie opisze jak działa moja komunikacja.
    Są 4 ścieżki, ABCD.
    A to bit
    B to potwierdzenie nadania bita
    czyli :
    11 to +1 do pierwszej cyfry kodu
    01 to +0 do pierwszej cyfry kodu
    10 oznacza ze zakończyło się nadawanie impulsów do tej cyfry i polecenie do przejścia na następną i rozpoczęcie zliczania
    C jest impulsem powrotnym potwierdzenia nadania (wysyłane od adresata)
    D jest blokada linii, jeśli jest zajęta to inne procki czekają na wolna linie
    Dzięki takiej komunikacji mogę nadać dowolna liczbę składająca się z 6 cyfr w max 60 impulsach, co trwa kilkaset milisekund. I mam do dyspozycji 999999 poleceń.

    Wymyśliłem coś takiego że zaraz po starcie master zacznie nadawać impulsy,
    linia D (blokada linii będzie otwarta na ten czas), slave będą zliczały impulsy i w momencie gdy wynik impulsów i nr. seryjny się wyrównają, slave nada impuls po linii D a master zapisze adres urządzenia. Następnie jak skończy zbierać dane o adresach. Połączy się z każdym z nich i sprawdzi jakie ma dany slave funkcje.

    Tak to widzę... hehe
    pewnie zamotane się wydaje ale ja mam już to w głowie :P
  • #12 10939573
    xury
    Specjalista automatyka domowa
    Nie rozumiem tylko po co takie kombinacje ? Dawno temu przyjęło się ustalanie adresu za pomocą DIP switch'y i to rozwiązanie się sprawdza. Z dwóch powodów: urządzenia wiedzą, które jest które, oraz człowiek również. Przy jakieś awarii łatwo zidentyfikować miejsce problemu, a w Twoim rozwiązaniu jest to skomplikowane.
REKLAMA