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

Termometr 1wire z Atmega8 i DS1820 - kod w Bascom i schemat połączeń

Rysiek.K 24 Sty 2004 10:26 9506 32
Najlepsze odpowiedzi

Jak uruchomić termometr na ATmega8 i DS1820 w Bascomie, gdy układ nie identyfikuje czujnika?

Użyj sprawdzonego kodu BASCOM z `Config 1wire = Pinc.4` lub innym wolnym portem, wykonaj `1wreset`, `1wwrite &HCC`, `1wwrite &H44`, odczekaj, potem `1wreset`, `1wwrite &HCC`, `1wwrite &HBE` i odczytaj 9 bajtów danych [#492726] Sprawdź, czy częstotliwość zegara w rzeczywistości zgadza się z tą zadeklarowaną w programie, bo zły zegar potrafi rozwalić komunikację 1-Wire [#489288] Dla DS18x20 nie ma minimalnej długości przewodu; układ może działać nawet bardzo blisko procka, ważne jest tylko prawidłowe podciągnięcie linii i stan wysoki w spoczynku [#493787] Jeśli mimo poprawnego kodu i zasilania nadal masz stałe `err=1` i brak identyfikacji, najbardziej prawdopodobny jest uszkodzony interfejs 1-Wire w ATmedze8 — autor wątku ostatecznie rozwiązał problem wymianą mikrokontrolera [#527261]
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
  • #1 488332
    Rysiek.K
    Poziom 14  
    Posty: 195
    Pomógł: 10
    Ocena: 17
    Buduję czujnik temperatury oparty o Proc Atmega8, i Ds1820 na szynie 1wire.
    1. Czy ktoś mógłby udostępnić działający kod z baskoma + schemat bo już trace cierpliwość i pomysły
    2. Podłączam 1wire pod końcówkę obsługującą SDA, przebiegi wydają sie być prawidłowe, podłączałem też inne porty
    3. Ds 1820 zasilam w różnych konfiguracjach tj. Z rezystorem podciągającym podłączonym bezposrednio na stabilizatorze, a także bez niego i nic
    4. Oscylator też próbowałem 2Mhz, 4Mhz,8Mhz też nic
    5. Dallasa podłączam na przewodach 10cm
    6. Nawt kupiłem jeszcze jedenego Dallasa bo byślałem ze ten jest zły
  • #2 488338
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Wrzuc tu schemat. BTW to co ma wspolnego SDA z 1wire? SDA to raczej w IIC jest...
  • #3 488596
    yarpen2
    Poziom 22  
    Posty: 549
    Pomógł: 39
    Ocena: 39
    poślij jakiś schemat bo tak trudno coś powiedzieć... SDA rzeczywiście nie ma wiele wspólnego z 1 wire. A swoją drogą czy nie lepiej jest w przypadku atmega8 dać lm35 ? ten procek ma przecież przetwornik a/c a sam lm35 jest chyba tańszy niż ds1820. w przypadku ds1820 korzystanie z atmega8 (40 DIP jeśli się nie mylę ) to trochę przesada... są przecież mniejsze i tańsze procki... choćby at89c2051. A tak wogóle do czego ma być ten termometr ?
  • #4 488610
    rzuber
    Poziom 20  
    Posty: 545
    Pomógł: 3
    Ocena: 19
    Może błąd tkwi w kodzie :)
    Załączniki:
    • Ds1820 dla AVR.txt (580 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 489288
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    SPRÓBUJ TEGO
    PODNIEŚ ZEGAR W MEGA8 NA TAKI JAK ZADEKLAROWAŁEŚ W PROGRAMIE, SPRAWDŹ CZY TAKTOWANY JEST PRAWIDŁOWO.
    CZASAMI SIĘ O TYM ZAPOMINA I WTEDY PROCEK POMIMO DOŁĄCZENIA KWARCU NP. 4 MHZ , CHODZI Z WEWNĘTRZNEGO REZONATORA O SZYBKOŚCI 1 MHZ.ZMIENNA TEMPERATURA CELOWO JEST TYPU SINGLE , ŻEBY CI KROPKĘ WYSWIETLIŁO W PROSTY SPOSÓB.MOŻESZ ZMIENIĆ NA INTEGER ALE POCO?
    JEŻELI I TAK MASZ SETKI BAYTÓW WOLNEGO RAMU.
    PROCEK MEGA8 TO DOSKONAŁY PROCESOR I JA TEŻ NAPEWNO NIE WYBRAŁBYM STAREGO 2051. (STARE MUSI KIEDYŚ ODEJŚĆ....)
    I JESZCZE JEDNO.
    JEŻELI MASZ TAK KRÓTKI KABELEK DO DS TO MUSISZ GO ZASILAĆ PO TRZECH PRZEWODACH. (MUSISZ PODAĆ MU +5V)INACZEJ NIE BĘDZIE CI CHODZIŁ BO NIE BĘDZIE MIAŁ ENERGII ŻEBY CI ODPOWIEDZIEĆ.
    A CZERPIE JĄ Z POJEMNOŚCI KABLA PRZY PRACY DWUPRZEWODOWEJ.A JAK KABELEK MA 1O CM TO NIE ZNAJDZIE W NIM PRĄDU BIEDACZEK.
    POZDRAWIAM





    Config Lcd = 20 * 2
    Config 1wire = Pind.5
    Dim Bd(9) As Byte

    Dim Z As Integer , Tmp As Integer
    Dim T As Integer , T1 As Integer
    Dim Temperatura As Single
    Declare Sub Temperatura1
    Cls
    Call Temperatura1



    Do
    Call Temperatura1
    Cls
    Lcd "TEMP " ; Temperatura
    Loop




    Sub Temperatura1
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Wait 1
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Bd(1) = 1wread(9)
    1wreset
    Tmp = Bd(1) And 1
    If Tmp = 1 Then Decr Bd(1)
    T = Makeint(bd(1) , Bd(2))
    T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
    T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
    Temperatura = T \ 10


    End Sub
  • #6 489864
    yarpen2
    Poziom 22  
    Posty: 549
    Pomógł: 39
    Ocena: 39
    euromatic pisze: "STARE MUSI KIEDYŚ ODEJŚĆ...."
    a ja mówię rachunek jest prosty:

    ceny w Seguro
    2051 - 6,44 zł
    ds1820 - 21 zł
    lm35 - 3,78 zł
    atmega8 - 18 zł

    pomijając pozostałe podzespoły popatrzmy na cenę procka i czujnika
    atmega8 + ds1820 = 39 zł
    2051 + ds1820 = 27,44 zł
    atmega8 + lm35 = 21,78 zł
    według mnie najlepiej użyć tej ostatniej konfiguracji, ale stwierdzenie że 2051 musi odejść jest co najmniej dziwne. dla wielu zastosowań 2051 jest doskonałym układem ( ma UART, komparator , dwa timery)
  • #7 489890
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    Patrząc tylko na cenę to masz rację, kolego.
    Patrząc jednak na możliwości obu procesorów to jak mercedes do syrenki..
    Może kolega potrzebuje 8 kbt kodu i dobrej transmisji danych?
    wewnętrznego eeproma, watchdoga, mocnych portów ( port AVR podciągnięty do plusa przez około 1k daje pewne 100 metrów zasięgu
    natomiast procek 2051 ma za słabe porty do tego celu)

    Możliwości mega8 są w porównaniu do 2051 ogromne a te 10..12 zł różnicy to dwie paczki papierosów (niedługo chyba jedna)
    u mnie w sklepie ds kosztuje 9.50 netto (w warszawie na Hożej)
    w detalu.
    2051 u Piekarza na wolumenie 3,80
    mega8 około 16
    a może są gdzieś tańsze?
    pozdrawiam
  • #8 489978
    yarpen2
    Poziom 22  
    Posty: 549
    Pomógł: 39
    Ocena: 39
    co do możliwości to kolega euromatic ma rację i jest to kwestia bezdyskusyjna, ja chcę tylko zwrócić uwagę na fakt że nie zawsze opłaca się dawać do projektu drogi procek...
    a te ceny to ciekawa sprawa... parę(set) kilometrów a taka różnica (DS1820)
  • #9 490042
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    właśnie, 9.50 za dallasa to tanio
    (ale za ds 18B20)
    trochę inny programowo.
  • #10 491098
    Rysiek.K
    Poziom 14  
    Posty: 195
    Pomógł: 10
    Ocena: 17
    Wiem że procek ATmega 8 to zbyt mocny ale ten czujnik temperatury to jest uzupełnienie większego projektu który na nim buduję, docelowo ma być kilka czujników temperatury na przwodach do 2 metrów ale najpierw musze jakoś uruchomić jeden
  • #11 491262
    calinka
    Poziom 15  
    Posty: 120
    Ocena: 1
    Nowości, świetna rzecz, ale... stare dobrze się trzyma. Nie do wszystkiego należy przykładać miarki ze złotówek. W całym projekcie jest wiele istotnych elementów. Jednym z nich jest to, że na C51 nidgy nie zawiodłam się, na AVR to i owszem, są przypadki. Najwięcej nerwów zjadł mi AT90S8515 z trzymaniem danych w EEPROM oraz ATMEGA103 (swoją drogą fajny procek, ale wychodzi mi, że ma błędną obsługę pamięci na zewnątrz, opieram swoją opinię o zbadaniu zjawiska w kilkunastu przypadkach używając procesorów pochodzących różnych okresów - mają różny numer daty produkcji - wszystkie zachowały się identycznie).
    Czasami stary wychodzony, wytestowany na różne sposoby procek jest lepszy od nowego pięknego ale kulawego. Nie oznacza, to, że go skreślam, używam świadoma jego fanaberii.
  • #12 491899
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    Zadziałał ci ten termometr?
    jak będziesz chciał kilka dallasów naraz to daj znać
    pozdrawiam
  • #13 491949
    rzuber
    Poziom 20  
    Posty: 545
    Pomógł: 3
    Ocena: 19
    otóż ja chce użyć dokładnie mówiąc 3. najprawdopodobniej na atmega8. do tej pory zawsze był jeden.,..... a słyszałem, że są komplikacje
  • #14 492105
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    nie ma żadnych komplikacji, wszystko zależy od oprogramowania
    jak masz wolne porty to możesz na nich zrobić a jak nie to na numerach seryjnych możesz czytać temperaturę i nie ma z tym żadnego problemu.
    pozdrawiam
  • #15 492300
    Rysiek.K
    Poziom 14  
    Posty: 195
    Pomógł: 10
    Ocena: 17
    Sprawdziłem, Oscylator pracuje poprawnie, Zmieniłem przewody (kabelki na wiązkę).
    Układ jest chyba poprawny bo inne próbne programy na nim działają. I nadal nic.
    Ale nasówa mi sie pytanie może naiwne ale jednak;
    1.Czy nie należy w jakiś sposób określić transmisji?
    Np za pomocą komendy CRYSTAL.
    2.Jak najlepiej jest zasilić Dallasa jaka konfiguracja jest najpewniejsza?
  • #16 492444
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    spróbuj na innym porcie. np. w mega 32 trzeba wyłączyć interfejs ( w bezpiecznikach) żeby móc prawidłowo korzystać z portu C.
    i napisz co ci nie wychodzi? masz złe odczyty , wogóle ich nie masz?
    Jednym słowem zobacz co siedzi sprzętowo na tym porcie którego używasz i wyłącz to.
  • #17 492707
    Rysiek.K
    Poziom 14  
    Posty: 195
    Pomógł: 10
    Ocena: 17
    Po prostu mam ciągły brak identyfikacji, dallasa.
    Przebiegi napięcia wyglądają poprawnie.
    Gdy napisze ten warunek że If err=1 wtedy napisz "brak czujnika" else "wyświetl temp" (oczywiście jest to uproszczone) wtedy wciąż jest spełniony warunek err=1
    Ja tu sie doszukuję jakiegośbłędu w konwersacji między procesorem a dallasem, bo opcje zasilania już wykożystałem chyba wszystkie :-(((
    Dallasa podłączałem do portu B, i C
    Użyłem Kodu użyczonego od ciebie i macbartka, dziękuję wam za pomoc i zainteresowanie tematem.
    Euro... A w jaki sposób mogę powyłączać to o czym piszesz? ja używam Bascoma.
  • #18 492726
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    Config 1wire = Pinc.4
    Dim Bd(9) As Byte

    Dim Z As Integer , Tmp As Integer
    Dim T As Integer , T1 As Integer
    Dim Temperatura As Single
    Declare Sub Temperatura1
    Cls
    Call Temperatura1



    Do
    Call Temperatura1
    Cls
    Lcd "TEMP " ; Temperatura
    Loop




    Sub Temperatura1
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Wait 1
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Bd(1) = 1wread(9)
    1wreset
    Tmp = Bd(1) And 1
    If Tmp = 1 Then Decr Bd(1)
    T = Makeint(bd(1) , Bd(2))
    T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
    T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
    Temperatura = T \ 10


    End Sub


    wklej to i skompiluj
    powinno chodzić bez problemów
    daj znać jak poszło
  • #19 493787
    bolek
    Poziom 35  
    Posty: 4099
    Pomógł: 86
    Ocena: 299
    Tak czytam ten wątek i nie wiedze tu nic konkretnego

    Cytat:
    JESZCZE JEDNO.
    JEŻELI MASZ TAK KRÓTKI KABELEK DO DS TO MUSISZ GO ZASILAĆ PO TRZECH PRZEWODACH. (MUSISZ PODAĆ MU +5V)INACZEJ NIE BĘDZIE CI CHODZIŁ BO NIE BĘDZIE MIAŁ ENERGII ŻEBY CI ODPOWIEDZIEĆ.
    A CZERPIE JĄ Z POJEMNOŚCI KABLA PRZY PRACY DWUPRZEWODOWEJ.A JAK KABELEK MA 1O CM TO NIE ZNAJDZIE W NIM PRĄDU BIEDACZEK.


    :arrow: Euromatic
    zapewniam cię że jesli były by to czasy inkwizycjji, to za takie herezje spalili by cie na stosie! :lol: Gdzie to chłopie wyczytałeś?. Dallasy maja wewnętrzny kondensator, który zapewnia im energie na czas transmisji danych. Zwracam uwage na to aby w stanie "ciszy na lini" byłtam stan wysoki.
    Ja w trybie parasite miałem dallasa podłaczonego bezpośrednio do procka- ciekawe czemu działał- pewnie był zepsuty... 8)
    pozatym jesteś jedyna osobą, która wkleiłą tu jaki kolwiek soft- i chwałą ci za to!

    co do problemu z jego obsługą to sugeruje dwie rzeczy:

    1: twórca postu zamieści swój kod
    2: twórca postu przejdzie sie na strone Bascoma i pooglada przykałdowe programy.
    3: można też urzyć ogólno dostępnego przyciku "szukaj" informacji o tych układach jest tu tyle że można by napisać do nich manuala po polsku


    :arrow: Rysiek K
    wklej tu swój program, jesli wywala ci err, to napisz prstą procedure która resetuje dallasa- jesli w tedy odpowie (err to bit ustawiany po resecie ds), bedzie to znaczy że masz błąd w swoim programie. Skąd wiesz że przebiegi są dobre?, czym sprawdzałeś?. sprawdz też czy czasem nie zdeklarowałeś dwa razy linie 1wire. I w rzeczywistoscui sygnał pójdzie ci na inny port

    pozdrawiam!
  • #20 493799
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    calinka napisał:
    Nowości, świetna rzecz, ale... stare dobrze się trzyma. Nie do wszystkiego należy przykładać miarki ze złotówek. W całym projekcie jest wiele istotnych elementów. Jednym z nich jest to, że na C51 nidgy nie zawiodłam się, na AVR to i owszem, są przypadki. Najwięcej nerwów zjadł mi AT90S8515 z trzymaniem danych w EEPROM oraz ATMEGA103 (swoją drogą fajny procek, ale wychodzi mi, że ma błędną obsługę pamięci na zewnątrz, opieram swoją opinię o zbadaniu zjawiska w kilkunastu przypadkach używając procesorów pochodzących różnych okresów - mają różny numer daty produkcji - wszystkie zachowały się identycznie).
    Czasami stary wychodzony, wytestowany na różne sposoby procek jest lepszy od nowego pięknego ale kulawego. Nie oznacza, to, że go skreślam, używam świadoma jego fanaberii.


    Temat zanikających zawartośći EEPROM w AVR był już wielkokrotnie poruszany, jest też dosyć dokładnie opisany w manualach tych uC, a rozwiązać można go brdzo prosto - przez dodanie układu nadzoru napięcia zasilania (większość AVRów ma go już wbudowany). Procesor ATmega103 jest już wycofany z użytku w jego miejsce jest procesot ATmega 128.

    Co do DS18x20 to nie ma minimalnej długości przewodu, dziła nawet wlutowany w płytkę.
  • #21 493809
    calinka
    Poziom 15  
    Posty: 120
    Ocena: 1
    Wiem. że jest wycofany (tak jak i kilka innych), sama stosuję MEGA128 zamiast MEGA103. Chciałam zwrócić uwagę, że 'swiat nie jast taki cudowny' jak opisują w PDF'ach, natomiast życie jest jakie jest i trzeba się w tym znaleźć.
  • #22 493931
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    w takim razie miałem zepsutego dallasa bo wierzcie mi nie chciał działać.Jest jeszcze jedno... to było pewnie z pięć lat temu...wtedy zaczynałem swą przygodę z dallasami.Czasami zdarzają się dallasy które nie pracują poprawnie( kidyś kupiłem ich 100 szt. i 3 były strasznie zawodne, nie pomagała im zmiana lokalizacji). Człowiek całe życie się uczy
    i głupi umiera....
    A może kolega ma DS 18B!!!20 i tego nie zauważył, a to istotna różnica
    ps:
    przypomnę sobie gdzie czytałem o zasilaniu z pojemności kabla i powiadomię tu na forum, Prawdopodobnie w AVT w EP hmmm. pomyślę
    Pozdrawiam
  • #23 493939
    calinka
    Poziom 15  
    Posty: 120
    Ocena: 1
    Ano uczy się całe życie (ba jak skończysz studia, i chcesz do czegoś dojść, to masz wyrok: uczyć się do końca życia), ale z tym umieraniem to bym bie przesadzała.
  • #24 494398
    Rysiek.K
    Poziom 14  
    Posty: 195
    Pomógł: 10
    Ocena: 17
    Nie mam napewno Dallasa DS1820 powiem więcej kupione mam już 3 i każdy w innym sklepie.
    Euro.... Skompilowałem ten kod od ciebie i nic.
    Na ekrajie jest "TEMP 1,1999999992.
    Ja myślę to w tym przyp to może być już wina tylko samego procka, może tam jest uszkodzony ten interfejs? Sprubuję z pracy załatwić nowy na podmiankę.
    Czy jest jakieś uwarunkowanie co do max czasu oczekiwania na odp Dallasa? ja dawałem od 350ms do 2 sekund przy kwarcu 4Mhz,
  • #25 494401
    jacur
    Poziom 32  
    Posty: 1748
    Pomógł: 166
    Ocena: 295
    Mam pytanie do kolegow po zaprogramowaniu proca programem zamieszczonym wyzej jest wszystko ok tylko zakres mierzonej temp. konczy sie na +32 st
    potem odlicza w dol ze znakiem - ja sobie poradzilem ale musialem wykopac cale obliczenia T1 i T
    zostalo tylko

    T= T*5
    temperatura = T/10

    i dziala w pelnym zakresie temperatur od -35 do 100 tyle udalo mi sie sprawdzic ;)
  • #26 527261
    Rysiek.K
    Poziom 14  
    Posty: 195
    Pomógł: 10
    Ocena: 17
    Dzieki wszystkim za pomoc, udało mi sie wreszcie wykonać termometr. Przyczyną był procesor, który ma uszkodzony tyklo interfejs 1wire, poza tym wszystko inne na nim chodzi, nawet szyna i2c na nim działa. Poprostu miałem pecha
  • #27 861343
    TMK_M
    Poziom 22  
    Posty: 671
    Pomógł: 38
    Ocena: 23
    Czy macie kod do tego termometru na 89C2051 w jezyku C
  • #28 863836
    juntom
    Poziom 19  
    Posty: 216
    Pomógł: 35
    Ocena: 27
    Witam !

    Moze troszke z innej beczki. Czy ktos z forumowiczow orientuje sie czy mozna uzyskac certyfikat na czujniki ds ? Czy firmy ,ktore oferuja urzadzenia z wykorzystyaniem tego czujnika dolaczaja swiadectwo zgodnosci lub jakis inny dokument potwierdzajacy dokladnosc tego czujnika ?

    Pozdr.
  • #29 863971
    jacur
    Poziom 32  
    Posty: 1748
    Pomógł: 166
    Ocena: 295
    z tego co widzialem certyfikat do systemu HACCP to albo sie to robi na zasadzie termometru wzorcowego który tez musi miec certyfikat z urzedu miar i wag czy jak tam sie to zwie albo jezeli czujnikiem byl PT1000 to odchylka wskazania miezona przy 1Kohm rezystora dekadowego tez legalizowanego
    tak ze nie powinno byc problemu tylko certyfikat musi byc na kazde urzadzenie oddzielnie z nr. urzadzenia
  • #30 864426
    juntom
    Poziom 19  
    Posty: 216
    Pomógł: 35
    Ocena: 27
    Jacur widze ,ze jestes w temacie. Gdzie moglbym zobaczyc taki certyfikat ?

Podsumowanie tematu

✨ Dyskusja dotyczy budowy czujnika temperatury opartego na mikrokontrolerze Atmega8 i czujniku DS1820 (1-wire). Autor ma problem z komunikacją między procesorem a czujnikiem, mimo różnych prób konfiguracji zasilania, oscylatora i portów mikrokontrolera. Wskazano, że 1-wire nie jest kompatybilny z linią SDA (I2C), co może powodować błędy. Zalecano zasilanie DS1820 trzema przewodami przy krótkim kablu, gdyż zasilanie z pojemności kabla (tryb parasite) przy 10 cm może być niewystarczające. Podkreślono konieczność prawidłowego taktowania procesora zgodnie z deklaracją w programie. Zaproponowano przykładowy kod w Bascom do obsługi DS1820, który umożliwia odczyt temperatury i jej wyświetlanie. Poruszono temat alternatywnych czujników (np. LM35) i innych mikrokontrolerów (np. 89C2051), omawiając ich zalety i koszty. Wskazano, że problemem okazał się uszkodzony interfejs 1-wire w procesorze Atmega8, co po wymianie rozwiązało problem. Dyskusja zawiera także uwagi dotyczące certyfikatów zgodności czujników DS oraz praktyczne aspekty ich stosowania w systemach pomiarowych.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA