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.

Mega8 - DS1820+Mega8+LCD, nie odczytuje temperatury

Michał93b 20 Lip 2013 17:14 2076 10
  • #1 20 Lip 2013 17:14
    Michał93b
    Poziom 12  

    Witajcie.
    Po pierwszych próbach z programowaniem LCD, które były zadowalające, nadszedł czas na coś ambitniejszego:
    Chciałem sobie do skuterka zrobić termometr, finalnie informujący o temperaturze oleju w silniku i temperaturze zewnętrznej, docelowo na dwóch DSach.
    Ale jak na razie to mam kłopot z jednym.
    Korzystałem z pewnego poradnika w Internecie, zrobiłem wszystko jak kazali, ale wyświetla się tylko:
    "Witaj" <clr>
    "Miłej podróży"
    i symbol stopni Celsjusza.
    Tyle.

    Kod umieszczam na pastebinie:
    Main:
    main.c: http://pastebin.com/GszajsxU
    Wyświetlacz:
    HD44870.c: http://pastebin.com/ipGmsCKU
    HD44780.h: http://pastebin.com/95hVABkp
    DS1820:
    DS1820.c: http://pastebin.com/kB567A5i
    DS1820.h: http://pastebin.com/5G5iE5v0


    Nie wiem czemu nie działa.
    Proszę o pomoc.

    0 10
  • #2 20 Lip 2013 17:22
    mickpr
    Poziom 39  

    Jeśli nie masz debuggera - a masz podłączony wyświetlacz - to z jego pomocą możesz ustalić sobie miejsce, gdzie kod się "zawiesza".
    Ja stawiam (zerkając w szklaną kulę - bo nie pokazałeś schematu), że funkcja ds1820_ConvertT nie zwraca nic innego niż zero.
    Może to być spowodowane najprawdopodobniej złym podłączeniem, ale nie wiem na 100%.
    Pokaż schemat.
    Usuń linki, które znikną - i wstaw je normalnie jako załączniki do postu.

    0
  • #3 20 Lip 2013 17:26
    Michał93b
    Poziom 12  

    mickpr napisał:
    Jeśli nie masz debuggera - a masz podłączony wyświetlacz - to z jego pomocą możesz ustalić sobie miejsce, gdzie kod się "zawiesza".
    Ja stawiam (zerkając w szklaną kulę - bo nie pokazałeś schematu), że funkcja ds1820_ConvertT nie zwraca nic innego niż zero.
    Może to być spowodowane najprawdopodobniej złym podłączeniem, ale nie wiem na 100%.
    Pokaż schemat.
    Usuń linki, które znikną - i wstaw je normalnie jako załączniki do postu.


    Po pierwsze linki z pastebina nie znikają ;)

    Po drugie: Schemat:
    DS1820 jest podłączony do PB1, a LCD od PD0 do PD6.

    EDIT:
    Załączniki dodane, z debbugera nie mam jak skorzystać, bo nie mam oryginalnego programatora.

    EDIT 2:
    Doszukałem się błędu przy przepisywaniu, obecna forma funkcji main w załączniku.
    Teraz jest kolejny kłopot, mianowicie w pierwszym rzędzie wyświetlacza nie ma nic, a w drugim ?"stopni celsjusza"*.
    *symbolicznie oczywiście.

    0
  • #4 20 Lip 2013 17:53
    PDT
    Poziom 24  

    Obejrzałem procedurę 'main' a dokładniej jej główną pętlę:

    Kod: C
    Zaloguj się, aby zobaczyć kod


    Nie wiem jakie skutki uboczne wywoła zapisywanie nowego łańcucha znaków w obszarze stałej tekstowej, ale występujące w pętli wywołanie funkcji 'sprintf' tego próbuje dokonać (nadpisać tekst "Lol").

    Pzdr

    Czyżby specyfikacja formatu: "%4.1f\xdf""C" dała w rozwinięciu: "xx.x°C" ? To nadpisałoby następny w pamięci łańcuch "T.oleju:" resztą z poprzedniego dając: "°C".

    0
  • #5 20 Lip 2013 17:54
    dondu
    Moderator Mikrokontrolery Projektowanie

    Witaj.

    Oczywiście możesz nie stosować się do zasad panujących na forum, ale Twój temat szybko poleci do kosza lub nie uzyskasz pomocy.

    Michał93b napisał:
    Po pierwsze linki z pastebina nie znikają ;)

    Możesz je osobiście skasować? Jeżeli tak, to znikają :)

    Michał93b napisał:
    Po drugie: Schemat:
    DS1820 jest podłączony do PB1, a LCD od PD0 do PD6.

    Jeżeli to jest cały schemat to się nie dziwię, że nie działa.

    Po trzecie do wklejania kodu wykorzystuj znacznik SYNTAX bo wtedy składnia jest kolorowana:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Następnie zapoznaj się z tym tematem: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    0
  • #6 20 Lip 2013 18:05
    Michał93b
    Poziom 12  

    @PDT

    Tak, to moje "przedobrzenie".
    W 3-cim poście dałem lepszą wersję main.c.
    @DONDU
    1) Nie wiem czy mogę, ale po co miałbym to robić?
    2) Chyba nie masz mnie za totalnego idiotę. Wiadomo, że to nie cały SCHEMAT! Do tego dochodzi jeszcze podłączenie do Vcc, GND, kondensatory itd.
    Nie jestem absolutnym amatorem -.-
    Czytając komentarze do poradnika, z którego wziąłem fragmenty kodu, zauważyłem, iż kilkoro ludzi miało kłopoty z funkcją sprintf. Polecano ją zastąpić funkcją: dtostrf(temp,5,1,str);, tak też zrobiłem.
    I teraz temperatura się wyświetla, ale jakoś tak śmiesznie, bo np. w pokoju mam teraz 3.3...
    To z kolei również jest tam opisane przez komentujących. Winne jest użycie przez mnie wersji DS1820, a nie DS18B20. Tego drugiego nie mam pod ręką, a nie wiem jak zmienić kod, by temperatura wyświetlała się poprawnie..
    EDIT: Znalazłem. Wystarczyło info z DSa podzielić nie przez 16, a przez 2.

    0
  • #7 20 Lip 2013 18:11
    dondu
    Moderator Mikrokontrolery Projektowanie

    Michał93b napisał:
    1) Nie wiem czy mogę, ale po co miałbym to robić?

    I właśnie dlatego, że jeden skasuje a drugi nie, to forum zawiera wszelkie narządzia, by nie wykorzystywać zewnętrznych nietrwałych archiwów. Konsekwencje już Ci wskazałem.


    Michał93b napisał:
    2) Chyba nie masz mnie za totalnego idiotę.
    Wiadomo, że to nie cały SCHEMAT!
    Do tego dochodzi jeszcze podłączenie do Vcc, GND, kondensatory itd.
    Nie jestem absolutnym amatorem -.-

    Po pierwsze nie krzycz.
    Pod drugie sam siebie tak oceniasz - Twoja sprawa.
    Po trzecie jesteś tutaj nowy i nie znamy Twojego poziomu, a skoro definiujesz F_CPU w programie, a jednocześnie inkludujesz pliki wykorzystujące funkcje opóźnienia, to niestety świadczy o braku znajomości podstaw. Podobnie sam temat także do podstaw należy.

    Dlatego zastanów się, czy chcesz pomocy, czy honorem się unosić będziesz?

    0
  • #8 20 Lip 2013 18:31
    Michał93b
    Poziom 12  

    dondu napisał:

    Po pierwsze nie krzycz.
    Pod drugie sam siebie tak oceniasz - Twoja sprawa.
    Po trzecie jesteś tutaj nowy i nie znamy Twojego poziomu, a skoro definiujesz F_CPU w programie, a jednocześnie inkludujesz pliki wykorzystujące funkcje opóźnienia, to niestety świadczy o braku znajomości podstaw. Podobnie sam temat także do podstaw należy.

    Dlatego zastanów się, czy chcesz pomocy, czy honorem się unosić będziesz?


    Dobra, ale w pierwszym poście jasno napisałem, iż, zacytuję siebie: "Po pierwszych próbach z programowaniem LCD, które były zadowalające, nadszedł czas na coś ambitniejszego: (...)"
    Inkluduję, bo tak jest w poradniku, z którego się uczyłem.
    Innego nie znam.

    W każdym razie temat jest do zamknięcia.

    0
  • #9 20 Lip 2013 18:37
    mickpr
    Poziom 39  

    Michał93b napisał:
    W każdym razie temat jest do zamknięcia.

    DIY

    0
  • #10 20 Lip 2013 18:38
    dondu
    Moderator Mikrokontrolery Projektowanie

    Michał93b napisał:
    Dobra, ale w pierwszym poście jasno napisałem, iż, zacytuję siebie: "Po pierwszych próbach z programowaniem LCD, które były zadowalające, nadszedł czas na coś ambitniejszego: (...)"

    To nie znaczy, że masz prawidłowo zbudowany układ.

    Michał93b napisał:
    Inkluduję, bo tak jest w poradniku, z którego się uczyłem.
    Innego nie znam.

    Teraz już masz, link podałem Ci wyżej. Przeczytałeś, zrozumiałeś, zastosowałeś?

    Michał93b napisał:
    W każdym razie temat jest do zamknięcia.

    Każdy sam zamyka swój temat.

    0