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

Interfejs 1-Wire na Atmega8...

09 Wrz 2010 14:42 10363 32
  • Poziom 9  
    Witam. Mam takie pytanko, czy próbował już ktoś może zaimplementować interfejs komunikacyjny 1-Wire na AVRze...? Potrzebuję skomunikować jedną Atmegę (centralka) z 4 innymi (podrzędnymi) i mam do dyspozycji tylko 1 przewód (na komunikację, gdyż każda Atmega ma swoje zasilanie) dochodzący do każdej z nich... Nie jestem zbyt zaawansowany w elektronice więc w zasadzie nie bardzo wiem jak się w ogóle do takiego połączenia zabrać... Na wikipedii (w zasadzie jedyne moje źródło dot. 1-Wire) przeczytałem m/w jak przesyłać i odbierać dane, ale jak to wszystko podłączyć...? Byłbym wdzięczny za wszelkie sugestie bardziej doświadczonych... :)
  • Computer Controls
  • Poziom 43  
    Dać się da ale to nielegalne.
    Slave-y 1Wire są opatentowane i może je produkować tylko Dallas Semiconductors.
    Tobie do celów własnych zgodnie z prawem wolno wyprodukować tylko jeden, a jak widzę chcesz 4.
    No chyba że wykupisz licencję, ale nie sądzę.
    Aż dziw bierze że w EdW był projekt jakiegoś urządzenia pełniącego funkcję Slave-a 1Wire. Łamanie prawa na potęgę (bo na bank licencji nie mieli).
    Jeżeli jednak chcesz się w to pchać, to zajrzyj właśnie do EdW.
  • Computer Controls
  • Poziom 9  
    Damn... A to dziady :| Rozumiem, że innej metody 1-żyłowej komunikacji jak narazie nikt bardziej OpenSoure'owy nie opatentował...? :| W takim razie zrobię w ramach testu 1 slave'a... :twisted: Czy tutaj ktoś może co nieco dopomóc...? :turn-l: Oczywiście EdW też zaraz powrtuję... znalazłem też mały opis warstwy fizycznej 1-Wire w pdf by easy-soft.tsnet.pl, który załączam gdyby się miał jeszcze komuś przydać... :)
  • Pomocny post
    Poziom 43  
    Można UARTa puścić w dwie strony. Odpada od razu całą otoczka programowa, bo UARTa można wykorzystać sprzętowego.
    Tego UARTa to takiego Open Collector mam na myśli. Czyli RXD prosto do linii. TXD do linii przez diodę 1N4148, a sama linia musiała by być podciągana do VCC.
    I wydaje mi sie do tego że był by nawet bardziej odporny na zakłócenia taki wynalazek.
    Ale UART to oczywiście Half-Duplex musiał by być.
  • Pomocny post
    Poziom 42  
    Można także użyć technologii ;) .... 1-RS232-wire ale tylko dla dwóch urządzeń i w trybie softwarowym:

    Interfejs 1-Wire na Atmega8...

    a do tego kodzik programu w załączniku (atorstwa pewnego znanego internauty z ciekawymi pomysłami) ;)
  • Poziom 9  
    Hmm... to też ciekawy pomysł, niestety nie bawiłem się nawet z RS232 na Atmedze jak narazie... :( A co jest ograniczeniem dla 2 urządzeń tylko w tym 1-RS232-wire...?

    atom1477: Szczerze mówiąc nie za wiele rozumiem z tej wypowiedzi :| Zaraz będę chyba musiał porzucić 1-Wire i zgłębić temat tegu UART'a, postaram się też zarysować schemat zgodnie z tym co piszesz... :)
  • Poziom 42  
    yburg --> także zdecydowanie polecam ci UART'a , zresztą powinieneś od niego zacząć naukę programowania AVR zamiast od 1-wire.

    Ograniczeniem do 2 urządzeń jest standard RS232 ale nie ma problemu żeby go rozszerzyć do wielu urządzeń wystarczy przejść na RS485 - też o tym poczytaj - przyda ci się zobaczysz ;)
  • Poziom 43  
    No takie (oczywiście masa też musi być wspólna):
    Interfejs 1-Wire na Atmega8...
  • Poziom 9  
    Ehh troche masakryczny do ogarnięcia ten UART... :P Na razie niewiele łapię, ale będę to wałkował i może w końcu zaskoczę (szczególnie jak się obkupie w części i podłącze RS232 do mojej Atmegi... ;) ) :P

    Co zaś do schematu podłączenia - nie miałem na myśli komunikacji na jednym przewodzie ze wszystkimi Atmegami, tylko podłączenie jednym przewodem do każdej z nich (po jednym przewodzie na układ)... A chcąc wykorzystać sprzętowy USART mógłbym chyba podłączyć tylko jedną linię do Mastera? W takim razie czy ratował by mnie np. demultiplekser typu DM74155 i sterowanie transmisją poprzez odpowiednie adresowanie wyjść?
  • Moderator Mikrokontrolery Projektowanie
    Jeśli to projekt niekomercyjny to miałbym gdzieś licencje na 1-wire :) To raczej nie byłoby złamaniem prawa. Inaczej wykorzystaj tak ja ci Atom pisze USARTa, tyle, że w wersji OC, będziesz miał wired-and i wszystko będzie hulać z dowolną ilością slaveów (w granicach rozsądku). A jeśli i to ci nie pasuje to puść po jednym drucie sygnał kodowany Manchasterem, z tego łatwo odtworzyć zegar i transmisję. Wada taka, że większość AVRów nie ma żadnego wsparcia dla tego protokołu.
  • Poziom 26  
    Witam,
    Jeśli nie jest to projekt komercyjny to spokojnie możesz robić sobie 1-wire Slave i nie potrzebujesz do tego żadnej licencji. Zobacz sobie projekt w EP...robiw
  • Poziom 43  
    Chyba nie wiecie co to jest patent. Owszem można zrobić, ale jedną sztukę. Na dwie, nawet na własny użytek, trzeba już licencję.
    Co nie umniejsza faktu że taką licencję można sobie olać.
  • Poziom 35  
    Opatentowany jest własćiwy standard 1wire, a nie technika ściągania
    linii transmisyjnej do masy.
    Wystarczy że ktoś wymyśli sobie inna logike przesyłu bitów, zmieni czasy,
    timesloty nazwie cyklami zegarowymi ( :P ), i juz nie lamie się zadnych praw - bo taki wytwór wtedy nie jest już standardem 1wire ani nawet nie
    "zgodny" z tym standardem.

    Na duże odległości nie polecałbym UARTa ani nic z tej serii,a już na pewno
    nie po jednej linii transmisyjnej.
    Można wymyślić własną implementację "cyklów zegarowych" (:P po raz kolejny...) zboczami odpalac timer i innymi zboczami bramkowac ten timer...
    Protokołów można wymyślić "milijony"...

    Oprócz wymyślania własnych metod transmisji danych możesz użyć takiego
    "niewypału" jak LIN. W automotive się nie sprawdził, ale dla ciebie może być
    w sam raz...
  • Poziom 43  
    Nie napisałem że opatentowana jest technika ściągania linii transmisyjnej do masy.
    Więcej, nawet zaproponowałem coś dokładnie takiego samego (elektrycznie), ale z innym standardem ramki.
  • Poziom 26  
    Ja wiem jedno, nie czytałem co prawda ich licencji ani nie wgłębiałem się w patent ale na moje pytanie skierowane do Dallas/Maxim dotyczące zrobienia sobie 1-wire Slave dostałem odpowiedź, iż jeśli urządzenie nie ma charakteru komercyjnego (np. pojedyncza sztuka, artykuł w gazecie itp.) to nie ma problemu z ich strony. To wszystko w temacie... robiw

    Dodano po 1 [minuty]:

    Kodowanie Manchester (jak już napisano) zdaje świetnie egzamin w sterowaniu bezprzewodowym (a śmieci w eterze jest masa) przy transmisjach rzędu 4800bps, więcej nie sprawdzałem...robiw
  • Poziom 9  
    Cóż... dzięki wszystkim za wszelkie sugestie - teraz to dopiero daliście mi do myślenia... :P Jak na razie zgłębiam co prawda temat USART'a, ale skoro na duże odległości będzie słaby... to marnie :| Tym bardziej, że z tego co mi się teraz kojarzy to interfejs 1-Wire też ma ograniczenie pojemnościowe (400uF?) jeśli chodzi o połączenie, a u mnie długość przewodu między centralką a najdalszym podmodułem może wynosić nawet i 5-6m (w tym po drodze jakieś 1-2 luty...) :| Nie wiem ile to może 'zżerać' pojemności (jak już pisałem z nie jestem zbyt zaawansowany w elektronice), a zmierzyć też nie mam jak :|

    P.S. Mój projekt jest oczywiście jak najbardziej na własny użytek, zajmuje się tym hobbystycznie - 0 komercji :) A na obrazku dołączam ideowy schemat podłączenia mojego układu dla uniknięcia nieporozumień o co mi dokładnie chodzi :P Wszelkie inne podłączenia do MASTERA (zasilanie, czujniki itp.) pominąłem, podobnie inne wyprowadzenia slave'ów :)

    Interfejs 1-Wire na Atmega8...
  • Poziom 38  
    nsvinc napisał:

    Na duże odległości nie polecałbym UARTa ani nic z tej serii,a już na pewno
    nie po jednej linii transmisyjnej.


    a rozwiązanie podane przez tmf i atoma? na 5-6m oneWire raczej wyśle śmieci
  • Poziom 35  
    gaskoin napisał:
    [...]na 5-6m oneWire raczej wyśle śmieci

    lol ;]
    Dziwne, że po 50m kabelku przy nawet przy 3v3 nie wysyła śmieci....
    (oczywiscie mowimy o standardowej prędkości 1wire)
  • Poziom 43  
    Nie rozumiem dlaczego jedziecie po UARTcie, że niby będzie nieodporny na zakłócenia.
    Przecież z elektrycznego punktu widzenia będzie to coś jak 1Wire, a do tego 3 przewodowy (osobna linia zasilania).
    Jedynie ramka danych będzie wzięta z UARTa.
    Czyli powinno to być tak samo odporne na zakłócenia jak 1Wire (oczywiście przy założeniu że prędkość UARTa będzie mniej więcej taka jak prędkość 1Wire).
    Co innego że jak się okazało ATMega ma wiele wolnych linii, więc nie musowo się pchać w 1Wire czy inne cuda. Można dać np. RS485.
  • Poziom 42  
    Ja też nie wiem jak można "jeździć" po UARCIE ;) ... to jeden z najstarszych i bardzo dobrze dopracowanych sposobów transmisji dodatkowo posiadający pełne wsparcie sprzętowe i to w oparciu pięknie o przerwania. Wbrew pozorom także bez problemu działa na kilkanaście/kilkadziesiąt nawet metrów jeśli sygnały puszczone są np skrętką komputerową. Żadnych problemów.

    Co więcej zamiast męczyć się z 1wire można zrobić 1wire po RS232 - nie wspomnę już wtedy o tym, że czochrają nas procedury czaso-zależne 1wire a wszystko odbywa się poprzez "rozmawianie" zmodułem UART programowo ;) ... proszę bardzo - jakiś pierwszy lepszy przykład z netu:

    http://openwrt.pl/doku.php/usb:1wire
  • Poziom 9  
    atom1477 napisał:
    [...] z elektrycznego punktu widzenia będzie to coś jak 1Wire, a do tego 3 przewodowy (osobna linia zasilania)

    Jeżeli chodzi o mój problem, to niestety wykluczone bo tak jak rozrysowałem mam tylko po 1 przewodzie łączącym centralkę z podmodułami (najlepiej byłoby w ogóle z tego przewodu też układ zasilać, ale na upartego moge przerobić uziemienie układu na VCC i będzie to co na rysunku wyżej - a GND inne się zawsze jakieś znajdzie...:)).

    mirekk36 napisał:
    Co więcej zamiast męczyć się z 1wire można zrobić 1wire po RS232 - nie wspomnę już wtedy o tym, że czochrają nas procedury czaso-zależne 1wire a wszystko odbywa się poprzez "rozmawianie" zmodułem UART programowo :)

    Prawdopodobnie będę zmierzał jakoś w tym kierunku właśnie (tzn. 'pseudo' 1-Wire :P), bo ten USART wydaje się całkiem ciekawy, tyle że musiałby pracować asynchronicznie u mnie bo nie będzie linii zegarowej pomiędzy układami i nie wiem jak by się to sprawdzało...

    Zaś co do zakłóceń, to prawdopodobnie okaże się dopiero w praktyce... :| :P Tym bardziej, że zastosowany przewód to nie taka crossówka z komputerowej skrętki, a nieco grubszy przewód pleciony...
  • Poziom 42  
    yburg napisał:
    USART wydaje się całkiem ciekawy, tyle że musiałby pracować asynchronicznie u mnie bo nie będzie linii zegarowej pomiędzy układami i nie wiem jak by się to sprawdzało...


    Widać kolega omawia wymarzony schemat ustrojstwa na bardzo dużym poziomie abstrakcji. Nawet został już zaprojektowany a tymczasem nawet nie zostały przeprowadzone własne testy i próby z tak podstawowym interfejsem jak RS232 ;)

    Toż UART w 99% przypadków wykorzystuje się w trybie asynchronicznym.

    Jeśli to nie jest skrętka tylko jakiś tam sobie byle kabel - to proponuję sobie dać spokój i przemyśleć wszystko od nowa, bo czy to będzie 1wire, czy RS232 wg atoma itp - to na odległościach kilkadziesiąt metrów będzie kiepściutko, oj kiepściutko jeśli chodzi o zakłócenia.

    Dodano po 3 [minuty]:

    O matko, a tym bardziej, że "GND się jakieś znajdzie" to już będzie hardcore jeśli chodzi o zakłócenia i namęczysz się tylko.

    Proponuję zacznij od podstaw, czyli od nauki i przetestowania podstawowych interesujących cię form transmisji na płytkach testowych na małych odległościach najpierw. To już wtedy wiele się tobie samemu wyjaśni w jakim kierunku zaprojektować cały ten układ od nowa ;) bo będzie to jedyna droga
  • Poziom 9  
    Eh, choć jest to bolesna prawda, to proszę jednak o odrobinę wyrozumiałości... :) "wymarzony schemat ustrojstwa" to raczej pewne moje oczekiwania, które są jakie są bo ekspertem nie jestem - a dotyczą właśnie projektu który mam nadzieje sporo pozwoli mi się dowiedzieć... :) O własnych testach i próbach z interfejsem RS232 też już pisałem - że oczywiście będą (w końcu to praktyka czyni mistrza), niemniej dopiero kiedy obkupie się w części, a to mam zaplanowane na poniedziałek :D Tymczasem pytać chyba nie zaszkodzi, by już na etapie projektowania móc coś wychwycić - i przemyśleć lepiej właśnie...? :) Co zaś do propozycji to nie omieszkał bym nie skorzystać :P Wręcz przeciwnie - wszystkie te wasze sugestie będę oczywiście testował na płytce w prostszych realizacjach ucząc się przy tym 'praktycznie' co i jak, co nie zmienia faktu że szukam od razu rozwiązania pod konkretny problem - bo to mi daje motywację :)

    A notabene nie byłoby też tego tematu, gdyby nie fakt iż ja tu nie projektuję wszystkiego od podstaw - tzn. nie pociągnę sobie kabla takiego a takiego i GND tak, bo robię układ pod te warunki, o których pisałem i tylko resztę moge jakoś sprytnie zrealizować - dlatego też radzę się was by temu podołać...
  • Moderator Mikrokontrolery Projektowanie
    No więc jak pisałem użyj Manchestera, UART asynchronicznie zadziała, ale procesory powinny być stabilizowane kwarcem. Zasilać od biedy też można po jednym kablu, tylko komplikuje to układ nadajnika/odbiornika. Możesz za pomocą opampów przesunąć poziom napięcia np. 1 to będzie 24V, 0 - 12V, z tej linii bierzesz prąd do stabilizatora, a drugi opamp w odbiorniku robi jako konwerter poziomów do TTL.
  • Poziom 42  
    Nie, no spokojnie - myślałem, że po prostu już masz położoną całą instalację na tym jednym przewodzie, porobione jakieś płytki w oparciu o niesprawdzone własne schematy itp ;)

    Dlatego oczywiście, warto pytać no ale nie do końca tylko w oparciu o czysto teoretyczne założenia. Dlatego pisałem, że jak już w końcu zabierzesz się za rzeczywiste testy po zebraniu części - to sam wiele rzeczy zobaczysz w innym świetle a i pytania zaczną się nasuwać całkiem inne.

    Dodano po 5 [minuty]:

    yburg napisał:
    A notabene nie byłoby też tego tematu, gdyby nie fakt iż ja tu nie projektuję wszystkiego od podstaw - tzn. nie pociągnę sobie kabla takiego a takiego i GND tak, bo robię układ pod te warunki, o których pisałem i tylko resztę moge jakoś sprytnie zrealizować - dlatego też radzę się was by temu podołać...


    No a co tu miałeś na myśli w końcu z tym kablem? bo tak zakręciłeś, że nie wiadomo o co chodzi. Czy masz już jakiś kabel i na siłę chcesz do niego dostosować układy i transmisję? (jeśli tak to opisz dokładnie co to za kabel?

    Czy też w końcu zdecydujesz się ułożyć coś normalnego jeśli chodzi o okablowanie a dzięki temu mieć większe możliwości co do transmisji?

    Bo jak widzisz sposobów jest dużo a nawet gdybyś nie miał możliwości zmiany tego nieszczęsnego kabla to zawsze można radiówkę zastosować np 433MHz, ale wtedy też już wcześniej wspomniany np Manchester zastosować. Jakieś trensciever'ki proste.
  • Poziom 9  
    No Manchestera też będę wobec tego zgłębiał równolegle z USARTem, nawet pod kątem tej ew. radiówki... Co do przesunięcia napięć - 24V raczej nie wycisnę, bo układ jest robiony do samochodu i tu wiadomo: aku na 12-13V :P

    Co do przewodu, to dokładnie tak: jest już zrobiona instalacja i chcę z niej skorzystać. Mam do dyspozycji przewód ze splotu a nie jednej miedzianej żyły, gruby na ok. 2mm. A własnych przewodów nie mam jak pociągnąć zbytnio :| W ostateczności zaś zdecyduje się na tą radiówkę - jeśli faktycznie po kablu będzie mocno zakłócało albo będę musiał komunikować się z jakąś masakrycznie małą prędkością...
  • Poziom 35  
    do samochodu....
    W samochodach nawet LIN (który był opracowany pod automotive i wspierają go kontrolery U(S)ART w prockach) nie sprawdzał się.
    Żadne kodowanie transmisji niewiele da - dane będą szły, ale pewnikiem jest,
    że właściwa ramka bez przekłamań zostanie odebrana raz na jakiś czas.
    Nie można sobie po prostu wysyłać bitów po kabelku w samochodach.

    Transmisję danych w samochodach realizuje się różnicowo, a dodatkowo koniecznie dołączać do każdej ramki CRC.
    Druga kwestia, to krótkie ramki - im krócej bity będą szły po kablu, tym mniejsze prawdopodobieństwo, że któryś się przekłamie.

    Gdy jest konieczność wysyłania długich ramek często, (tak, że nie ma czasu
    dwa razy wysłać tej samej), można rozważyć implementację ECC na poziomie składu/rozkładu ramki.
  • Poziom 9  
    Hmm... a dlaczego można przesyłać sobie bity po kabelku w różnych środowiskach, ale w aucie akurat to niewykonalne...? Rozumiem że istnieje jakiś tam wpływ pracy poszczególnych układów ale czy jest on aż tak znaczny...? oO Moje ramki nie muszą być duże, bo nie będę przesyłał jakiś skomplikowanych danych, a jedynie ustawiał parametry pracy podmodułów, a przed tym je oczywiście odczytywał...
  • Poziom 15  
    No dobra o a tych slavach 1-WIRE to w którym numerze EdW było?