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

[ATtiny2313][C][DS18B20] - Termometr

meehowk3 03 Paź 2012 16:14 2685 13
  • #1 03 Paź 2012 16:14
    meehowk3
    Poziom 10  

    Witam,
    napisałem kod do obsługi czujnika DS18B20 z mikrokontrolerem Atmega Tiny2313.
    Nistety nie działa. Zatrzymuje się prawdopodbnie na funkcji measure_T.
    Bardzo prosze o weryfikację kodu.
    Programowania dopiero się uczę.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam

    0 13
  • #2 03 Paź 2012 18:48
    zumek
    Poziom 39  

    meehowk3 napisał:
    Programowania dopiero się uczę.

    No właśnie, bo to widać na pierwszy rzut oka :D
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Pomyśl nad tym fragmentem kodu, bo takie "kwiatki" występują w Twoim kodzie dosyć często.

    0
  • #3 03 Paź 2012 19:28
    meehowk3
    Poziom 10  

    Dokonałem zmian które zasugerowałeś.
    Mam na mysli wszytkie warunki w if'ach. Teraz są dobrze? O to chodzi?

    Jakie jeszcze błędy popełniłem?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #5 03 Paź 2012 20:14
    meehowk3
    Poziom 10  

    Oczywiście, że nie:)
    To ma być tylko maskowanie czyli &.

    Nie mniej jednak kod dalej nie działa. Inicjalizacja nie wykonuje się poprawnie.

    Kod: text
    Zaloguj się, aby zobaczyć kod



    [ATtiny2313][C][DS18B20] - Termometr

    Powyżej zacytowałem fragment tutoriala do czujnika DS18B20, który mówi jak pwinna przebiegac inicjalizacja. Czy mój kod spełnia te kryteria?

    0
  • #6 03 Paź 2012 20:32
    excray
    Poziom 39  

    Masz na tym rysunku zaznaczony jeden odstęp czasu z opisem: "DS18B20 waits 15-60us". Poszukaj go u siebie w kodzie.

    0
  • #7 03 Paź 2012 20:48
    meehowk3
    Poziom 10  

    Poprawione:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ale czeskie błędy popełniam.

    edit:

    Teraz jest błąd gdzies w funkcji w_byte.

    0
  • #8 03 Paź 2012 21:11
    excray
    Poziom 39  

    Wklej cały poprawiony kod.

    0
  • #9 03 Paź 2012 21:51
    meehowk3
    Poziom 10  

    Jest błąd gdzieś chyba w funkcji w_byte.

    Poniżej zamieszczam timing dla wysyłania bitów do DS18B20:
    [ATtiny2313][C][DS18B20] - Termometr

    Poprawiony kod wrzuciłem do poprzedniego popstu.

    0
  • #10 04 Paź 2012 20:35
    zumek
    Poziom 39  

    meehowk3 napisał:
    Jest błąd gdzieś chyba w funkcji w_byte.

    Popatrz na pierwszą instrukcję w tej funkcji :|
    Po co Ci ta tablica 'table' :?:
    Komplikujesz proste zadanie i stąd tyle ... 'byków' :D

    0
  • #11 04 Paź 2012 21:37
    meehowk3
    Poziom 10  

    Witam,
    masz rację. Ta tablica jest kompletnie zbędna.

    Poprawiony kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wydaje mi sie, że działa. Bo gdy dmucham na czujnik to zmieniają się znaki ASCII wyświtelane na LCD. Jednym razem jest to ) lub ( lub * lub inne. Czyli komunikacja działa. Nie wiem jeszcze jak przedstawić te dane w formie cyfr pokazujących temperaturę. Ale dojdę do tego:)

    Pozdrawiam

    edit:
    Pewnie muszę zastosować konwersję hex/bin na dec...?

    0
  • #12 06 Paź 2012 23:19
    meehowk3
    Poziom 10  

    Witam ponownie,
    piszę posta pod postem bo nie jestem pewien czy po edycji poprzedniego pojawi się informacja na mailu obserwujących. Jeżeli ktoś odpisze to scalę te posty razem.

    Mam problem:) Problem z konwersją temperatury z reprezentacji binarnej na dziesiętną. chciałem do tego celu użyć funkcji printf z biblioteki stdio.h. Ale po dodaniu jej skompilowany program przekracza pamięć programu o 3% ;/. Nie wiem co z tym fantem zrobić.

    Myślałem też aby wykonać operacje logiczne aby dokonać tej konwersji ale nie wiem jak do tego sie zabrać.

    Macie panowie jakieś pomysły?

    Pozdrawiam

    0
  • #14 07 Paź 2012 17:30
    meehowk3
    Poziom 10  

    Dzięki:) Działa wyśmienicie:)
    Pozdrawiam

    0