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

ATTiny2313 - brak odczytu temperatury z DS1820, kod i konfiguracja układu

Pocieszny 20 Sty 2013 22:14 2784 14
  • #1 11817963
    Pocieszny
    Poziom 38  
    Podłączyłem układ DS1820 (dokładnie ten numerek) do pinu PB0 układu ATTiny2313. Linia danych jest podciągnięta do Vcc rezystorem 1kΩ. Taktowanie wewnętrzne 8MHz. Fragment kodu odpowiedzialny za odczyt czujnika:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Niestety odczyt wygląda tak jak poniżej. Numer seryjny najwyraźniej się wczytuje, ale temperatury już nie ma.

    Cytat:
    Numer seryjny16 163 113 94 2 8 0 170

    Odczyt: 255 255

    Odczyt: 255 255

    Odczyt: 255 255

    Odczyt: 255 255

    Odczyt: 255 255

    Odczyt: 255 255

    Odczyt: 255 255

    Odczyt: 255 255

    Odczyt: 255 255

    Odczyt: 255 255



    Co tutaj jest nie tak?

    Mam jeszcze kilka scalaków DS18b20, ale tak się składa, że do jutra wieczorem nie będę miał do nich dostępu :| I jeszcze jedna sprawa - tymczasowo zasilam to napięciem 5V, ale docelowo ma być 2.8V - czy ten czujnik zadziała z takim napięciem?
  • Pomocny post
    #2 11818125
    piotrva
    VIP Zasłużony dla elektroda
    1. Poczytaj w datasheet układu co dokładnie robi komenda &H55 i jak jej używać ;) Jeśli już to użyj bascomowego 1wverify(), ale możesz dać tu też &HCC, jeśli masz tylko 1 czujnik.
    2. Co do zasilania:
    http://www.micropik.com/PDF/ds1820.pdf (Strona 24)
    http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf (Strona 19)
  • Pomocny post
    #3 11818200
    BlueDraco
    Specjalista - Mikrokontrolery
    I jeszcze czas czekania na konwersję - min. 750 ms o ile pamiętam.
  • Pomocny post
    #4 11818322
    jousto
    Poziom 17  
    Tutaj masz źle
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Zamiast
    Kod: text
    Zaloguj się, aby zobaczyć kod
    - match ROM powinno być
    Kod: text
    Zaloguj się, aby zobaczyć kod
    - skip ROM

    oczywiście pod warunkiem że masz tylko jeden układ na magistrali

    Czas na konwersję - wystarczy 200ms, DS1820 ma tylko rozdzielczość 9bit.

    1kOhm może być trochę mało, daj 4,7k albo nawet 10k.
  • #5 11818480
    Pocieszny
    Poziom 38  
    jousto napisał:
    Zamiast

    Kod Basic4GL - [rozwiń]
    1wwrite &H55

    - match ROM powinno być

    Kod Basic4GL - [rozwiń]
    1wwrite &HCC

    - skip ROM


    Pomogło :)

    A co do napięcia zasilania - gdzieś na tym forum ktoś pisał, że te czujniki działają ponoć nawet od 2,5V. Będę musiał to zweryfikować w praktyce (mam nadzieję, że działają, bo chyba będzie ciężko znaleźć coś na 1-wire pod takie napięcie). Tak przy okazji - chyba przeniosę to na większy układ ATMega8L, bo niestety dla ATTiny2313 UART i 1-wire jednocześnie to już zbyt wiele do pomieszczenia w pamięci :|
  • #6 11819901
    pawel_mr
    Poziom 15  
    Pocieszny napisał:

    A co do napięcia zasilania - gdzieś na tym forum ktoś pisał, że te czujniki działają ponoć nawet od 2,5V.

    Mi nie działały, przy spadku zasilania do ok 2.8 zaczynały głupieć, transmisja 1wire była ale temperatury podawał z kosmosu. W datasheet podane jest, że zasilanie może być z przedziału 3 do 5.5V, i tego trzeba się trzymać jeśli chcesz, żeby urządzenie działało bezawaryjnie. Może na jednym czujniku wyciśniesz pracę przy 2.5 a później go zmienisz bo Ci padnie i "nagle" urządzenie przestanie działać. Szczególnie, że czujnik może pracować w bardzo szerokim zakresie temperatur.
  • #7 11819983
    piotrva
    VIP Zasłużony dla elektroda
    To że gdzieś, ktoś pisał że jemu akurat działa o niczym nie świadczy.
    Jak napisał Kolega wyżej - na 2.8V nie ma szans na bezproblemową i prawidłową pracę gwarantowaną przez producenta. Najlepiej dać 3,3V i po sprawie.
  • #8 11820662
    Pocieszny
    Poziom 38  
    Problem polega na tym, że chcę ten układ zasilać z telefonu, który podaje 2.8V do zasilania akcesorium. No cóż, najwyżej rozwiążę to w inny sposób - przerobię telefon tak, żeby podawał nieco wyższe napięcie. Chociaż miałem nadzieję, że bez przeróbek się obejdzie :|
  • #10 11820712
    Pocieszny
    Poziom 38  
    Czas mnie goni ;) Możesz podrzucić nazwę jakiegoś scalaka nie wymagającego wielu elementów?
  • #11 11820764
    piotrva
    VIP Zasłużony dla elektroda
    Np. L6920DB Z prostą regulacją V_out na napięcia 5V i 3,3V, po około 6-7zł w detalu.
  • #12 11821201
    pawel_mr
    Poziom 15  
    Pocieszny napisał:
    Czas mnie goni ;) Możesz podrzucić nazwę jakiegoś scalaka nie wymagającego wielu elementów?

    Ja używam MCP1640, parę elementów zewnętrznych, działa całkiem przyzwoicie.
  • #13 11821217
    piotrva
    VIP Zasłużony dla elektroda
    Z tego co widzę to MCP1640 potrzebuje do minimalnej pracy dzielnika do stabilizacji napięcia. L6920DB potrzebuje tylko dławika i 3 kondensatorów, bo stabilizacja na 3,3V i 5V polega po prostu na połączeniu między odpowiednimi pinami.
  • #14 11821248
    pawel_mr
    Poziom 15  
    piotrva napisał:
    Z tego co widzę to MCP1640 potrzebuje do minimalnej pracy dzielnika do stabilizacji napięcia. L6920DB potrzebuje tylko dławika i 3 kondensatorów, bo stabilizacja na 3,3V i 5V polega po prostu na połączeniu między odpowiednimi pinami.

    Tak, MCP1640 ma dzielnik do ustalenia napięcia wyjściowego. Wygląda, że stosując L6920DB chyba już prościej się nie da :-)
  • #15 11845566
    Pocieszny
    Poziom 38  
    Przeniosłem kod na ATMega8L, ponieważ w ATTiny2313 brakło mi pamięci. Odpuściłem sobie przetwornicę i przerobiłem telefon (zastąpiłem zworką jeden scalak i teraz podaje napięcie baterii zamiast 2.8V i jest OK).

    Mam jeszcze jeden problem z tymi czujnikami. Postanowiłem podłączyć 3 czujniki do 3 różnych portów (żeby temperatury były przypisane do gniazdka a nie czujnika). Wszystkie 3 czujniki mają linię danych podciągniętą do Vcc rezystorem 4,7kΩ. Temperatury próbuję sprawdzić tak jak w poniższym kodzie: przełączam 1wire na wybrany pin, a potem odczytuję temperaturę. Niestety nie działa to zgodnie z moimi zamierzeniami i wszystkie czujniki pokazują tę samą temperaturę albo co najmniej nawzajem na siebie wpływają - jak jeden pogrzeję, to wzrasta na nim odczytana temperatura, ale na pozostałych też trochę wzrasta.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Temp1, Temp2, Temp3 - w tych zmiennych powinny znajdować się temperatury z poszczególnych czujników

    Dodano po 1 [godziny] 17 [minuty]:

    Poszperałem trochę w pomocy Bascoma i poprawiłem kod - teraz działa :)

    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA