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

DS18B20 - brak odczytu przy długim przewodzie...

27 Sty 2019 10:26 1749 55
  • #31
    tmf
    Moderator Mikrokontrolery Projektowanie
    GrandMasterT napisał:
    tmf napisał:

    Nie możesz mieć szeregowych rezystorów z czujnikami. Przecież one utworzą dzielnik napięciowy z rezystorem podciągającym, co zakłóci rozpoznawanie stanu niskiego.



    Przecież nawet na stronie Maxima [1] jak w mordę strzelił jest taki scenariusz, gdzie przy długiej linii gdzie są sensory na odgałęzieniach, stosuje się rezystory w szeregu z sensorem przy każdym odgałęzieniu. I to faktycznie działa, kiedyś przeciągnąłem jakieś 50m skrętki przez pomieszczenia techniczne do pomiaru temperatur na wypadek awarii klimy, najdalsze sensory działały a jak podłączałem odgałęzienia (które miały może po 1,5m) do położonych bliżej, nie działało nic, w ogóle nie dało się znaleźć żadnego sensora na magistrali. Podłączyłem wszystkie sensory do magistrali przez rezystory chyba o ile pamiętam 100Ω i problem rozwiązany, nie udaje się może jeden na kilka milionów odczytów.


    Widzę, że czasami proste rysunki przynoszą więcej szkód niż pożytku, bo ludziom nie chce się czytać i spróbować zrozumieć o co w tym chodzi. Maxim w nocie pisze, że chodzi o wyrównanie impedancji, żeby zredukować odbicia wynikające z niedopasowania tych bocznych odgałęzień. Pisze też, że te 150 om to tak z palca wyssane, a przy niewielkiej poprawie dopasowania, dramatycznie(80% wg Maxim) maleje odporność na zakłócenia. Dlatego przed zastosowaniem takich rozwiązań, jednak trzeba się trochę wgryźć w temat, bo można sobie bardziej pogorszyć niż polepszyć.
    Tak jak już tu pisaliśmy, problem zazwyczaj leży w kiepskiej implementacji mastera 1-wire. A skoro tak, to po co stosować magię, jeśli można poprawić soft? W przypadku autora problemem zapewne jest pojemność linii i złe czasy samplowania. Pewnie przy dużej pojemności zbocza narastają wolno i w chwili, kiedy próbkowany jest stan magistrali jest spora szansa, że właściwy stan się jeszcze nie ustalił. Skoro rezystor 1k2 pomaga, to też pośrednio świadczy co jest źródłem problemu. W dodatku skoro u autora błędy występują na 15 m przewodzie, z 6 czujnikami, gdzie pewnie maksymalne odgałęzienie nie przekraca 0,5m to wyrównywanie impedancji rozgałęzień, w celu minimalizacji odbić jest trochę bez sensu. Tak, jak pisze LChucki, zamiast po omacku testować kolejne dziwne teorie i wymieniać zasilacze, co było proponowane, należy po prostu się do tego zabrać tak jak się powinno - zidentyfikować przyczynę (którą jak sądzę już znamy) i zaimplementować rozwiązanie.
    PierwszyWolnyLogin napisał:
    LChucki napisał:
    ...
    Zastanów się czy poruszanie się po omacku ma sens?

    Jeśli coś wygląda głupio ale działa to tylko wygląda głupio :)


    Niestety tak nie jest. Coś co jest głupie, po prostu jest głupie, niezależnie, czy akurat przez przypadek działa. Skoro w idealnych warunkach to ledwo działa, to w warunkach rzeczywistych będzie problem. Problem też będzie narastał w miarę jak skomplikuje się program. Skoro może się zdarzyć, że okrosowo transmisja umrze, to twój program będzie musiał to uwzględniać, co będzie do implementacji o wiele bardziej skomplikowane, niż po prostu zrobienie prawidłowo 1-wire. Przede wszystkim zastosowałbym implementację opartą o UART, oraz układ zabezpieczający IO MCU, a przy okazji realizujący driver 1-wire. Chcesz się bawić biblioteką, którą masz to pokaż fragmenty kodu o które prosiłem.
  • AM TechnologiesAM Technologies
  • #32
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #33
    LChucki
    Poziom 31  
    PierwszyWolnyLogin napisał:

    Nie mam teraz możliwości poświęcić czasu na naukę C. Robię to co zajmuje chwile i działa

    To użyj DS248x. Rozwiąże wiele problemów za cenę równą kilku minutom pracy programisty.

    PierwszyWolnyLogin napisał:

    LChucki napisał:
    ...
    Jak liczysz stopę błędów?


    (ilość_błednych_odczytów/ilość_odczytów)*100

    Z tego niewiele wynika.
    Jak często przesyłasz dane, jak dużo jest tych danych?

    PierwszyWolnyLogin napisał:

    LChucki napisał:
    ...
    PierwszyWolnyLogin napisał:
    to go wkopie ze 30cm pod ziemie

    Jaki to przewód?

    Zwykły telefoniczny.

    W katalogach producentów nie znalazłem przewodu "Zwykły telefoniczny". Konkretnie, jaki ma symbol? Jest to istotne, bo będzie wiadomo jaka ma pojemność, budowę, tym bardziej, że piszesz o chęci zakopania go.
  • #34
    tmf
    Moderator Mikrokontrolery Projektowanie
    PierwszyWolnyLogin napisał:
    Nie mam teraz możliwości poświęcić czasu na naukę C. Robię to co zajmuje chwile i działa, choć można lepiej...

    Chcesz powiedzieć, że znasz C++ (którego używa Arduino), a nie znasz C? To dosyć niezwykłe :)
    Nie chodzi o to, żebyś pisał w C, bo to samo w sobie nic nie zmieni. Miałeś pokazać kod, którego używasz. Może być nawet w Suahili. Masz 0,1% na biurku, ciekawe jak to się zachowa w dłuższym czasie, przy zmianach temperatury, lub pojemności po zakopaniu w ziemi... No ale przecież nie będziemy cię na siłę uszczęśliwiać :)
  • #35
    LChucki
    Poziom 31  
    tmf napisał:
    lub pojemności po zakopaniu w ziemi

    Kabla, który do tego się nie nadaje. Jak się domyślam, "zwykły telefoniczny" to nie XzTKMXpw tylko YTKSY, który nawet do bezpośredniego położenia pod tynk się nie nadaje a co dopiero do zakopania w ziemi i żadne rureczki czy peszle nie pomogą chyba, że z klimą i pod ciśnieniem.

    Do 1-Wire, na większe odległości, najlepiej używać UTP, którego parametry są dobrze określone a telefoniczne zależą od producenta. Bez karty katalogowej lub pomiarów (nie chodzi tylko o pojemność) niewiele o kablu można powiedzieć.
    Ja i na "sznurku" uruchomię 1-Wire. Kabel mogę sobie zmierzyć czy rozszyć na odcinku 30cm i już co nieco o nim powiedzieć. Oscyloskop pozwoli ustawić odpowiednie parametry transmisji i zadziała. Będzie ok, dopóki nie nastąpią zmiany w okablowaniu :-)
    Początkujący powinien użyć dobrych kabli, mastera DS248x ewentualnie dość skutecznego rozwiązania z UART opisanego w nocie katalogowej Maxim-Dallas.
  • #36
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #37
    LChucki
    Poziom 31  
    PierwszyWolnyLogin napisał:
    W testach odczytuje temperatury co 1s.


    Pytałem też:
    LChucki napisał:

    jak dużo jest tych danych?


    Dodatkowo:
    Jak wykrywasz błędy?
    Po zebraniu jakiej ilości danych wyliczasz stopę błędów?
  • #38
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • AM TechnologiesAM Technologies
  • #39
    tmf
    Moderator Mikrokontrolery Projektowanie
    PierwszyWolnyLogin napisał:
    Zakładam, że temp -127C jest błędem ;) A dokładniej < -50C lub > 50C.

    Te układy mają CRC, które służy do detekcji błędów. Wykorzystaj to, tym bardziej, że tych błędów masz sporo i nie wszystkie muszą polegać na zwrócniu samych 0xff. Jeśli przekłamania dotyczą pojedynczych bitów, to tylko CRC je wykryje.
    PierwszyWolnyLogin napisał:
    Ps. DS2482-800 Wygląda ciekawie. Niestety cena na allegro zwala z nóg :) Poszukam gdzieś taniej...

    Jak się nie chce czegoś samemu zrobić porządnie, to się za to płaci :)
  • Pomocny post
    #40
    LChucki
    Poziom 31  
    PierwszyWolnyLogin napisał:
    Zakładam, że temp -127C jest błędem A dokładniej < -50C lub > 50C

    Naukowa metoda :-)
    Tak naprawdę to nie wiesz co się dzieje ma magistrali! Czy brak odpowiedzi na reset, czy złe CRC jak w ogóle jest czytane a wątpię w to.

    Sprawdzaj CRC!
    Wcześniej jednak zrób sobie log co się dzieje na magistrali:
    - reset
    - presence
    - search rom (tu masz crc)
    - match rom (też masz crc)
    - konwersja
    - odczyt termometru (masz crc) *
    Wyświetlaj czy CRC ok, czy złe. Czy po reset jest presence. Jakie są czasy impulsów reset, presence, 0 i 1 wystawione przez mastera a ile faktycznie trwają na magistrali **. To zastąpi analizator logiczny (ale nie oscyloskop). Teraz zastanów się, czy nie lepiej wydać równowartość dwóch browarów na analizator.

    PierwszyWolnyLogin napisał:
    DS2482-800

    A po co 8 kanałów? Wystarczy jeden. DS2482 kosztuje ok 8zł, DS2484 ok 6. Uważasz, że drogo? Zleć napisanie dobrego mastera, zapłacisz jakieś 4000..8000zł chyba, że ktoś ma w miarę dobrego gotowca, to sprzeda, może poniżej 1000 a nawet za symboliczne 500zł.


    PS
    Zastanawiam się, czy master rozwiąże problem? Potrafisz obsłużyć DS248x? Jak użyjesz kiepskich bibliotek Arduino (innych niż kiepskich pewnie nie znajdziesz) to nie będą sprawdzać CRC ***. Co z tego, że mastery są konfigurowane, skoro nie możesz zobaczyć przebiegu sygnału?

    Według mnie, powinieneś zacząć od zapoznania się z dokumentacją 1-Wire z Dallas-Maxim. Sprawdzić i z pewnością poprawić kiepskie biblioteki Arduino. Sprawdzić oscyloskopem jak wygląda sygnał. Jak trzeba skorygować czas narastania i moment próbkowania (najłatwiej DS248x). Po tym możesz liczyć stopę błędów we właściwy sposób! Mnie poznanie 1-Wire, masterów I2C i UART, obsługi 1-Wire przez UART, kilku slave, searchrom (także dla DS2482/4, które jest inne niż dla GPIO/UART, jeszcze inne dla DS2480) zajęło ok miesiąca po 10..12godzin dziennie, 7dni w tygodniu. Oscyloskop, analizator logiczny był w ciągłym użyciu. Ciężko mi stwierdzić jak długo pisałem mastera, chyba z dwa tygodnie.


    * - Pisałem z pamięci więc porównaj sobie z notą.
    ** - Nie widziałem bibliotek na Arduino, które sprawdzałyby czy po zakończeniu RESET faktycznie magistral przyjęła poziom "H", czy presence nie jest zbyt długi, tylko "walą" dane, nawet jak magistrala cały czas ma poziom "L". DS248x rodzą sobie z tym doskonale.
    *** - CRC termometru sprawdza (powinna sprawdzać) "DS18B20" lub podobna, CRC search rom powinna "OneWire" w wersji dla DS248x.
  • #41
    khoam
    Poziom 38  
    LChucki napisał:
    Jak użyjesz kiepskich bibliotek Arduino (innych niż kiepskich pewnie nie znajdziesz) to nie będą sprawdzać CRC **.

    Biblioteka Arduino-Temperature-Control-Library dla Arduino ma zaimplementowaną obsługę CRC oraz dodatkowo sprawdza, czy wszystkie bajty w odczytanym scratchpadzie nie są zerowe.

    Dodano po 2 [minuty]:

    LChucki napisał:
    Nie widziałem bibliotek na Arduino, które sprawdzałyby czy po zakończeniu RESET faktycznie magistral przyjęła poziom "H",

    Wyżej wymieniona przeze mnie biblioteka również to sprawdza - funkcja readScratchPad().
  • Pomocny post
    #42
    tmf
    Moderator Mikrokontrolery Projektowanie
    khoam napisał:
    LChucki napisał:
    Nie widziałem bibliotek na Arduino, które sprawdzałyby czy po zakończeniu RESET faktycznie magistral przyjęła poziom "H",


    Wyżej wymieniona przeze mnie biblioteka również to sprawdza - funkcja readScratchPad().


    Nie sprawdza, a jedynie odczytuje. Co więcej, nigdzie przy odczycie temperatury nie ma juz sprawdzania CRC, więc poza stratą czasu nic to nie wnosi. Inne dziwne rzeczy, rzucające się po pobieżnym przeglądzie kodu - w większości funkcji (poza jedną, readscratchpad) nigdzie nie jest sprawdzany rezultat resetu, obecność presence pulse itd. Po prostu jest to generowane i autor zakłada, że będzie ok. Efektem takiego pisania kodu są problemy - wielu początkujących potem pisze, że DS im nie działa i czasami otrzymują dziwne odczyty, poradzcie co z tym zrobić.
  • #43
    khoam
    Poziom 38  
    tmf napisał:
    Co więcej, nigdzie przy odczycie temperatury nie ma juz sprawdzania CRC,


    Funkcja getTemp() wywołuje za każdym razem funkcję isConnected(), która z kolei czyta scratchpad i weryfikuje jego zawartość, w tym CRC:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Funkcja readScratchPad() zwraca wartośc false również wtedy, kiedy _wire->reset() != 1.

    Dodano po 4 [minuty]:

    tmf napisał:
    w większości funkcji (poza jedną, readscratchpad) nigdzie nie jest sprawdzany rezultat resetu,


    Do tego celu służy właśnie druga wersja funkcji DallasTemperature::isConnected(const uint8_t* deviceAddress), która to robi poprzez readScratchPad(). Można ją dodatkowo zastosować we własnym kodzie lub też nie.
  • #44
    LChucki
    Poziom 31  
    Taką wypowiedź
    Cytat:

    Upraszczając można powiedzieć, że każde urządzenie w obudowie metalowej typu iButton, tak jakby dodatkowy 1 metr przewodu, natomiast w innej obudowie (plastykowej typu DIP, czy też TO) to 0,5 metra. Stąd też można wyciągnąć wniosek, że na przykład dwadzieścia czujników temperatury typu DS1820 w obudowie TO-92, to dodatkowe 10 metrów przewodu połączeniowego.

    i trochę innych informacji można znaleźć http://www.easy-soft.net.pl/artykuly/techniki...ikow/1-wire-podstawy-protokolu-i-budowy-sieci
    Może się przyda?
  • #45
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #46
    LChucki
    Poziom 31  
    PierwszyWolnyLogin napisał:
    czy ktoś z Was ma pomysł na wyjaśnienie zjawiska takiego,
    że ilość błędnych odczytów zdecydowanie maleje z upływem czasu?

    Bez szklanej kuli a szklaną kulą w tym przypadku jest oscyloskop, analizator logiczny czy analizator 1-Wire nie potrafię powiedzieć dlaczego tak jest. Po analizie trzeba obejrzeć kody źródłowe i wtedy można powiedzieć dlaczego liczba błędnych*** odczytów zmienia się.


    *** - błędnych bo jakie to błędy? -127 niewiele mówi tak jak "Błąd zapisu" w Windows. Ale jaki błąd zapisu? Nie ma nośnika? Za mało miejsca na dysku? Zła nazwa pliku? utd.


    PS
    Otrzymałeś dużo informacji na temat 1-Wire i nadal chcesz aby wróżyć z fusów. Bez sprzętu, programów diagnostycznych, nie da się.
    Daj logi, wygląd przebiegu na magistrali to otrzymasz sensowne odpowiedzi i kolejne pytania. Sprawdzałeś w kodach źródłowych kiedy jest próbkowany (teoretycznie) odczyt?
  • #47
    JanuszKornas
    Poziom 10  
    LChucki napisał:
    To użyj DS248x. Rozwiąże wiele problemów za cenę równą kilku minutom pracy programisty.

    Dla początkujących to jest kilka godzin zaznajamiania się z tematem (nie koniecznie od razu czytasz, to co najważniejsze), później trafiasz na kod w C, którego składni nie rozumiesz, np.
    Serial.println(#label) ;
    czytasz kolejne godziny, co to znaczy i ciągle nie wiesz, czy idziesz w dobrą stronę. Kolega jest tutaj zbytnim optymistą, że to kilka minut.

    PierwszyWolnyLogin napisał:
    W testach odczytuje temperatury co 1s. W docelowym kodzie będzie może co 2min.


    Gdy ja próbowałem użyć DS18b20, to gdzieś wyczytałem (chyba w przykładzie, który użyłem i zmodyfikowałem), że kolejny odczyt z danego dallasa może nastąpić, dopiero po upływie określonego czasu. Albo to było, że inicjujemy konkretnego dallasa, chwilę musimy odczekać i dopiero za chwilę możemy go odpytać o pomiar. To nie były milisekundy. Spróbuj z rzadszymi czasami odczytu. Szczegółów teraz nie podam.

    Ponieważ wiele się słyszy, że odgałęzienia to źle, to ja bym na twoim miejscu zrobił sobie małe puszeczki w których bym zamontował DS18b20 w obudowie TO92 i listwę zasilajcą, nawet jakąś elektryczną. Puszeczki, sobie zrobisz na stole. Tak aby odgałęzienie było 1-3cm, a nie 50cm. Sądzę, że można się pozbyć większości problemów bez studiowania cudzej biblioteki, czy ona zawiera błędy, czy błędów nie zawiera.

    Takie szukanie błędów w cudzej bibliotece bez biegłej znajomości programowania w C, oraz dogłębnej znajomości, jak biblioteka winna wyglądać, to jakaś abstrakcyjna porada. Koledzy chyba sami nie czytają, to co piszą. Tak samo, jak odsyłanie do skorzystania usług komercyjnych. Gdyby kolega chciał usługę komercyjną, to by nie brał się samodzielnie za programowanie Arduino.

    Poza tym ciekawy wątek.
  • #48
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #49
    tmf
    Moderator Mikrokontrolery Projektowanie
    JanuszKornas napisał:
    Gdy ja próbowałem użyć DS18b20, to gdzieś wyczytałem (chyba w przykładzie, który użyłem i zmodyfikowałem), że kolejny odczyt z danego dallasa może nastąpić, dopiero po upływie określonego czasu. Albo to było, że inicjujemy konkretnego dallasa, chwilę musimy odczekać i dopiero za chwilę możemy go odpytać o pomiar. To nie były milisekundy. Spróbuj z rzadszymi czasami odczytu. Szczegółów teraz nie podam.


    Widzisz, bez obrazy, ale niechęć do poznania problemu prowadzi do mitologii, takiej jak powyższa. A wystarczy przejrzeć notę i nastaje jasność. Pomiędzy wysłaniem polecenia konwersji temperatury a jej odczytem musi być pewna przerwa, zależna od rozdzielczości z jaką mierzymy temperaturę. Tu nie ma magii. Jeśli odczytamy wcześniej, to nie będzie żadnego błędu - po prostu odczytamy wynik poprzedniego pomiaru. Także można DS odczytywać z dowolną szybkością i to nie spowoduje błędów transmisji. Jedyny problem jest przy zasilaniu pasożytniczym, ale taka sytuacja tu nie zachodzi, bo autor używa normalnego zasilania. Przy pasożytniczym musimy dać czas na naładowanie kondensatora w strukturze DSa, dlatego, czasami stosuje się tzw. strong pull up - wszystko jest w nocie.
    JanuszKornas napisał:
    Ponieważ wiele się słyszy, że odgałęzienia to źle, to ja bym na twoim miejscu zrobił sobie małe puszeczki w których bym zamontował DS18b20 w obudowie TO92 i listwę zasilajcą, nawet jakąś elektryczną. Puszeczki, sobie zrobisz na stole. Tak aby odgałęzienie było 1-3cm, a nie 50cm. Sądzę, że można się pozbyć większości problemów bez studiowania cudzej biblioteki, czy ona zawiera błędy, czy błędów nie zawiera.

    Puszeczki, czary mary, a problem jest prosty. Nie ma co demonizować - po prostu trzeba zrozumieć jakie potencjalne problemy te rozgałęzienia wprowadzają i zastosować środki zaradcze. Idę o zakład, że u autora też nie odgałęzienia są problemem - jak widać całość działa losowo.
    JanuszKornas napisał:
    Takie szukanie błędów w cudzej bibliotece bez biegłej znajomości programowania w C, oraz dogłębnej znajomości, jak biblioteka winna wyglądać, to jakaś abstrakcyjna porada. Koledzy chyba sami nie czytają, to co piszą.

    Bez przesady, w 1-wire kluczowe są dwa fragmenty - łącznie jakieś 5-6 linii kodu. Jeden fragment to funkcja odczytu bitu, a drugi to funkcja zapisu bitu. Analiza tego kodu nawet w kompletnie abstrakcyjnym języku to chwila. BTW, Arduino używa C++.
    Od kilkunastu postów, piszemy, że najpewniej problemem jest niewłaściwy czas próbkowania magistrali, ale autor nie raczył pokazać kodu, za to snuje dziwne dywagacje.
    PierwszyWolnyLogin napisał:
    Wracając do tematu - czy ktoś z Was ma pomysł na wyjaśnienie zjawiska takiego,
    że ilość błędnych odczytów zdecydowanie maleje z upływem czasu?

    To może być cokolwiek, np. nagrzewanie się elementów, powodujące minimalne zmiany parametrów czasowych. A że jesteś z nimi na granicy dla twojej magistrali to akurat może to pomagać. Może też być wpływ Księżyca lub wróżki zębuszki. Aby to jednoznacznie sprawdzić, rzeczywiście przydałby sie oscyloskop, dzięki któremu w minutę uzyskałbyś potrzebne odpowiedzi. Ponieważ go pewnie nie masz, więc pozostaje grzebanie w programie. Wystarczyłoby zmienić delikatnie czasy samplowania i ocenić jaki to ma wpływ na ilosć błędów i też w 30 minut miałbyś potrzebne odpowiedzi.
    Nawet bez grzebania w kodzie, wystarczy odczytywać np ID układów, albo scratch pad i zobaczyć na których bitach są przekłamania. Ty liczysz błędy transmisji, ale nie zagłębiasz się, gdzie one są i z czego wynikają. A taka informacja powiedziałaby ci dużo o potencjalnej przyczynie. Istotne jest czy, bit trasmitowany jako 0 odbierasz jako 1, czy odwrotnie. To też sporo mówi o timingach na magistrali. Generalnie, jeśli mamy problem to raczej należy dążyć do jego izolacji i dopiero analizować. Jeśli analizujemy na poziomie wymiany sporej liczby danych, tak, jak to robisz, to jak kolega wcześniej napisał, nic to nie daje. Masz tylko info, że jest błąd, ale nie wiesz gdzie i w efekcie z czego wynika. Wiem, że na tym etapie zapewne jak tylko to jakoś zacznie działać to olejesz sprawę i będziesz zadowolony. Ale spójrz na to przyszłościowo. Wymienisz czujnik, dodasz jakiś, spadnie deszcz - układ magicznie przestanie działać i co wtedy? Wrócisz do tematu? Poza tym będziesz pewnie budował inne układy, raz zdobyta rzetelna wiedza i zrozumienie problemu, oszczędzi ci w przyszłości sporo czasu. Ale nic to, w końcu wiesz czego chcesz, a naszą rolą nie jest przekonywanie ciebie, że jak się coś robi, to warto to robić dobrze :)
    BTW, a jak już by mnie przycisło (też kiedyś oscyloskopu nie miałem,. a radzić sobie trzeba było), to bym napisał krótki programik, który mi wysyła po UART wyniki z ADC, podłączyłbym to pod 1-wire i potem w excelu czy innym programie sobie pooglądał stan magistrali.
    Tu też przy okazji jest kolejna przewaga implementacji 1-wire na UART - bo po odczytanym bajcie można się zorientować jakie są timingi.
  • #50
    LChucki
    Poziom 31  
    JanuszKornas napisał:
    Kolega jest tutaj zbytnim optymistą, że to kilka minut.

    W wypowiedzi chodzi o to, że DS2482/4 kosztuje tyle ile kilka minut pracy programisty. Jeśli więc walczyć z jakimś problemem, lepiej użyć gotowego, sprawdzonego układu master 1-Wire. Na dzień dobry nie trzeba zawieszać przerwań. Nie marnuje się drogocennego UART bo na nim najlepiej robić 1-Wire. W komercyjnym produkcie użyłem DS2482 a nie rozwiązania z UART a tym bardziej GPIO. Dlaczego? Bo można łatwo modyfikować czasy sygnałów.

    PierwszyWolnyLogin napisał:
    Oscyloskop, etc chętnie.

    Naprawdę nie masz 100 czy 200zł? 40zł na analizator?
    Jak palisz, to ile wydajesz na fajki? Albo ile na piwo, niezdrową pizzę?

    Dodano po 7 [minuty]:

    Jak widać @tmf także twierdzi, że
    tmf napisał:
    BTW, a jak już by mnie przycisło (też kiedyś oscyloskopu nie miałem,. a radzić sobie trzeba było), to bym napisał krótki programik, który mi wysyła po UART wyniki z ADC, podłączyłbym to pod 1-wire i potem w excelu czy innym programie sobie pooglądał stan magistrali.
    Tu też przy okazji jest kolejna przewaga implementacji 1-wire na UART - bo po odczytanym bajcie można się zorientować jakie są timingi.

    co sie pokrywa z moją wcześniejszą propozycją:
    LChucki napisał:
    Sprawdzaj CRC!
    Wcześniej jednak zrób sobie log co się dzieje na magistrali:
    - reset
    - presence
    - search rom (tu masz crc)
    - match rom (też masz crc)
    - konwersja
    - odczyt termometru (masz crc) *
    Wyświetlaj czy CRC ok, czy złe. Czy po reset jest presence. Jakie są czasy impulsów reset, presence, 0 i 1 wystawione przez mastera a ile faktycznie trwają na magistral
  • #51
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #52
    LChucki
    Poziom 31  
    PierwszyWolnyLogin napisał:
    Nie napisałem, że nie mam 100zł tylko, że mam inne priorytety.
    Najpierw skończę remont domu, potem ustawię biurko, a dopiero wtedy kupię
    oscyloskop który na nim postawię

    OK, nie masz miejsca ale system gdzieś testujesz, komputer gdzieś stoi. Dlaczego nie zrobisz jak pisał @tmf czy ja, aby napisać program, który pokaże kiedy przychodzi odpowiedź? Dlaczego choćby nie sprawdzisz jak wygląda biblioteka? Kiedy próbkuje odpowiedź?
    Od czasu kiedy o tym napisałem minęły dwa dni. Przez ten czas nie zrobiłeś nic! Nadal nie wiesz jakie błędy, wiesz, że są. To wiedziałeś jak zakładałeś temat.
  • #53
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #54
    LChucki
    Poziom 31  
    PierwszyWolnyLogin napisał:
    Nie mogę na uczenie C, analizowanie bibliotek etc.

    Stwierdzam, że śledzenie tego tematu nie ma sensu. Program magicznie sam się nie poprawi a bez znajomości C++ magicznie poprawić się go nie da.
  • #55
    Użytkownik usunął konto
    Użytkownik usunął konto