Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

1-wire - Magistrala 1-wire na 100m i 50 ds1820

krzychk2 21 Jan 2015 16:01 1872 7
  • #1
    krzychk2
    Level 12  
    Witam.
    Trafił na mnie problem pomiaru temperatury w korytarzu chłodniczym. Jednorodność temperatury w takim korytarzu jest sprawą krytyczną.

    Wpadłem na pomysł aby zbudować linię o długości 100m (długość korytarza) i co 2m umieścić układ ds1820. Przewód nie byłby przecinany w miejscu instalacji tylko zdjęta by była w tym miejscu izolacja a sam układzik dolutowany do odsłoniętych drutów, po czym wszystko z powrotem zalane silikonem lub klejem na gorąco.

    Ponieważ projekt jest w fazie koncepcji więc chciałbym się zapytać szanownych forumowiczów czy ktoś kiedyś próbował zbudować podobne urządzenie i mógłby podzielić się doświadczeniem.

    Ilość przewodów w kablu jaką chciałbym wykorzystać to 3 żyły z linką do naciągnięcia. I tu pytanie - czy to powinna być skrętka ekranowana czy może inny przewód?

    Procesor jaki chciałbym użyć to attiny8 oraz magistralę rs485 podłączona do osobnego komputera, który będzie zbierał dane z czujników.

    Problemy to oczywiście zasilanie całości ale bardziej mnie zastanawia transmisja danych. Głównie to czy wydajność prądowa CPU wystarczy aby odpowiednio wysterować tak długą linią transmisji danych czy też powinienem zastosować jakiś dodatkowy układ sterujący?
  • #2
    Father
    Level 26  
    Przy 100m magistrali może być problem, ponieważ pojemność magistrali będzie powodowała wolne narosty zboczy impulsów, a na 1-wire ważne są czasy więc przy ich wydłużeniu pojawią się błędy transmisji. Problemem nie jest master, sterujący magistralą (ATTINY), bo tu zawsze można dołożyć (i pewnie trzeba) driver. Problemem jest transmisja w drugą stronę od DS-a do uC. Tutaj nie ma możliwości dołożenia drivera, chyba, że całą sieć zrobi się jako RS485 i każdy DS będzie miał własny transceiver. To rozwiązanie jest bezpieczniejsze, ale droższe. Najlepiej przeprowadzić test, a jako przewód magistralowy polecał bym raczej skrętkę komputerową, nieekranowaną jeśli nie ma w pobliżu silnych źródeł zakłóceń....
  • #3
    BlueDraco
    MCUs specialist
    Moim zdaniem bez szans. 10 czujników na 20 m przewodu to już coś blisko limitu dla OneWire.
  • #4
    tmf
    Moderator of Microcontroller designs
    Niekoniecznie bez szans. Pojemność skrętki jest niewielka, pojedyncze pF/m, albo nawet coś koło 1,6 pF/m. Więc 100 m to nie problem. Ze względu na poprawność timingów, a przede wszystkim jakąśtam eliminację zakłóceń, wykorzystałbym USART + tranzystor, co przy okazji jakoś tam zabezpieczy MCU. Osobiście robiłem OW na 305m i działało, ponad 20 czujników też mi działało (ale to robiłem na krótszej magistrali - jakieś 5m). Z dokumentów Dallasa wygląda, że nie powinno być problemów. W Dąbrowie Górniczej jest Aquapark, gdzie się wykorzystuje OW jako klucze do szafek, jest tego kilkaset albo i więcej i działa. Niewykluczone, że używają regeneratorów do OW - zawsze można na magistrali wstawić regenerator sygnału, lub MCU, który będzie regenerował sygnał i przy okazji agregował dane z iluśtam czujników. Z pewnością będzie to prostsze i tańsze niż specjalny interfejs do każdego czujnika.
    Przy okazji sprecyzuj jakiej dokładności potrzebujesz, bo DSy nie są zbyt dokładne - katalogowo w szerokich granicach chyba 1,5 stopnia?
  • #5
    piti___
    Level 23  
    Powinno działać. Konieczne są odstępstwa od noty katalogowej OW. Wystarczy po starcie slotu wystawić na us stan wysoki na OW przed przełączeniem na odczyt. Spowoduje to szybsze naładowanie linii. Z powodzeniem osiągnięte 1000m.

    Code: c
    Log in, to see the code
  • #6
    krzychk2
    Level 12  
    tmf wrote:
    Niekoniecznie bez szans. Pojemność skrętki jest niewielka, pojedyncze pF/m, albo nawet coś koło 1,6 pF/m. Więc 100 m to nie problem. Ze względu na poprawność timingów, a przede wszystkim jakąśtam eliminację zakłóceń, wykorzystałbym USART + tranzystor, co przy okazji jakoś tam zabezpieczy MCU. Osobiście robiłem OW na 305m i działało, ponad 20 czujników też mi działało (ale to robiłem na krótszej magistrali - jakieś 5m). Z dokumentów Dallasa wygląda, że nie powinno być problemów. W Dąbrowie Górniczej jest Aquapark, gdzie się wykorzystuje OW jako klucze do szafek, jest tego kilkaset albo i więcej i działa. Niewykluczone, że używają regeneratorów do OW - zawsze można na magistrali wstawić regenerator sygnału, lub MCU, który będzie regenerował sygnał i przy okazji agregował dane z iluśtam czujników. Z pewnością będzie to prostsze i tańsze niż specjalny interfejs do każdego czujnika.
    Przy okazji sprecyzuj jakiej dokładności potrzebujesz, bo DSy nie są zbyt dokładne - katalogowo w szerokich granicach chyba 1,5 stopnia?


    Witam, dziękuję za zwrócenie uwagi na dokładność.
    Chciałbym osiągnąć dokładność poniżej 1 st C - 0.5 byłoby idealne. 1.5 stopnia to jednak za duża różnica. Pogrzebałem i wychodzi na to iż będzie to ds18s20, posiada dokładność na pożądanym poziomie.

    Dodano po 1 [minuty]:

    piti___ wrote:
    Powinno działać. Konieczne są odstępstwa od noty katalogowej OW. Wystarczy po starcie slotu wystawić na us stan wysoki na OW przed przełączeniem na odczyt. Spowoduje to szybsze naładowanie linii. Z powodzeniem osiągnięte 1000m.



    Witam.
    Szalenie dziękuję za kawałek kodu.
  • #7
    piti___
    Level 23  
    Wiadomo że czasy w delay_us() są orientacyjne. Bez oscyloskopu nie ma szans na uzyskanie dobrych wyników. Dobrze sobie wprowadzić na drugi kanał oscyloskopu jakiś pin z procesora, który będzie określał moment próbkowania linii OW.
    Np. coś takiego:

    Code: text
    Log in, to see the code
  • #8
    krzychk2
    Level 12  
    Witam
    Dziękuję wszystkim za sugestię, szczególnie koledze piti za wstawki kodu. Aktualnie jestem w trakcie wielkiego lutowania i powoli piszę oprogramowanie. Jeżeli to kogoś zainteresuje to zdecydowałem się na przeprogramowanie kitu z AVT: AVT1705