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.

Bascom atemega16 i ds18b20 brak wyświetlania wyników.

pawelj 07 Sty 2008 22:43 1560 6
  • #1 07 Sty 2008 22:43
    pawelj
    Poziom 15  

    Witam. Mam takie pytanie. Robię termometr na atmega 16 + ds18b20 + 2xled.
    Prawie wszędzie godzie dotąd widziałem podczas odczytu temperatury z ds 1820 jest pętla opóźniająca. W moim programie jak wstawię pętle to w tym czasie wyświetlacz mi nic nie wyświetla. Ponieważ sam ten program tworzyłem a odczyt temp skądś zaporzyczyłem to niekoniecznie jest to prawidłowe. Ale wklejam kod. W miejscu gdzie ma byc pętla daje skok do podprogramu który wykonuje się dłużej niż 600 ms po wykonaniu wraca do odczytu temp. Czy to jest prawidłowe? Zmontowany układ niby temp pokazuje ale czy zawsze ją odczyta?




    Code:

    $regfile = "m16def.dat"
    $crystal = 16000000

    Dim A As Byte
    Dim N1 As Byte
    Dim N2 As Integer
    Dim N3 As Integer
    Dim N4 As Integer
    Dim D1 As Byte
    Dim D2 As Byte

    Dim Odczyt As Integer                                       'do czytania DS-a
    Dim T As Single

    Config 1wire = Portc.5
    Config Pinc.7 = Output
    Config Pinc.6 = Output
    Config Porta = Output
    Portc.6 = 1
    Portc.7 = 1


    Config 1wire = Portc.5

    Do                                                         
    1wreset
    1wwrite &HCC
    1wwrite &H44
     Gosub Wynik
    'Waitms 600
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Odczyt = 1wread(2)
    T = Odczyt
    T = T * 10
    T = T \ 16
    T = T \ 10




    'Gosub Wynik
    Loop





       Wynik:
       N2 = T
      For A = 1 To 200
       Portc.6 = 0
       Portc.7 = 1

       N1 = N2 \ 10
       D1 = Lookup(n1 , Cyfry)
       Porta = D1
       Waitms 8
       Portc.6 = 1
       Portc.7 = 0
       N4 = N1 * 10
       N3 = N2 - N4
       D1 = Lookup(n3 , Cyfry)
       Porta = D1
       Waitms 8
     Next A





      Cyfry:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
      '     0    1     2    3      4     5     6     7    8     9



    Póki co to jestem zadowolony z tego jak to działa. Tzn wyświetlacz mi nie błyska tylko ładnie świeci a do tego pokazuje temperaturę :)
    Jak na pierwszy układ to jest super :)

    Tylko czy tak może zostać z tym skokiem do podprogramu?

    No i koniec mojej radości. Wskazania Temperatury są zawyżone o 2 st. Co prawda nie będzie to straszny prblem ale jakbym to umiał poprawić to chętnie bym poprawił

    0 6
  • #2 08 Sty 2008 00:42
    Sind
    Poziom 15  

    Witam

    Odpowiedz jest prosta, jak dziala i mierzy to znaczy ze jest dobrze :) jak osiagnales rezultat jaki Cie satysfakcjonuje to chyba dobrze, nie ?

    Jeżeli chodzi o wskazanie i dokladnie wiesz ze to jest zawyzanie o 2 stopnie to jaki problem przy koncowym wyniku odjac te 2 stopnie i wyswietlic go ? ;)

    Pozdrawiam

    0
  • #3 08 Sty 2008 07:41
    seba_x
    Poziom 31  

    wyświetlanie wyniku zrób na przerwaniach , niezależnie co będzie robił procek wynik będzie musiał wyświetlic co określony czas

    0
  • #4 08 Sty 2008 18:56
    pawelj
    Poziom 15  

    Sind napisał:
    Witam



    Jeżeli chodzi o wskazanie i dokladnie wiesz ze to jest zawyzanie o 2 stopnie to jaki problem przy koncowym wyniku odjac te 2 stopnie i wyswietlic go ? ;)

    Pozdrawiam


    Niby masz rację. Ale ten kawałek kodu skopiowałem z innego projektu i wiem, że w okolicach 20 st zawyża o 2. Ale nie wiem bo chwilowo nie mam jak sprawdzić co będzie w okolicach 40 czy 60 st.

    Poza tym nie wiem czy wykonanie skoku do porgramu który się wykonuje 600 ms (około) jest równoznaczne z komendą waitms 600 . Bo takie coś bylo w tej procedurze odczytu temperatury przez magistralę.

    0
  • #5 08 Sty 2008 19:31
    Sind
    Poziom 15  

    No wlasnie dlatego napisalem ze jezeli wiesz ze dokladnie o tyle zawyza, ale jezeli rozbieznosc na wyzszych temperaturach bedzie inna to faktycznie nie zdaje to rezultatu...

    Osobiscie nie programowalem nigdy ds18b20 wiec nie powiem co i jak...

    Moja kolejna propozycja to odczytanie charakterystyki producenta lub przebadanie tego czujnika, aproksymacja do jakiejs funkcji logarytmicznej badz wykladniczej ( zalezy jak sie bedzie ukladac) i wyliczenie wspolczynnika ktory nastepnie nalezy odjac badz dodac do wyniku koncowego...

    Metoda dosc pracochlonna i napewno kodozerna :)

    ale faktycznie najlepiej byloby jak bys zdjal ch-ke tego czujnika i zobaczyl wtedy co i jak...

    a jezeli chodzi o wyswietlanie wyniku to faktycznie mozesz to zrobic na przerwaniu jak podpowiada kolega seba_x wowczas nie bedziesz mial zadnego problemu...


    Pozdrawiam

    0
  • #6 09 Sty 2008 07:42
    seba_x
    Poziom 31  

    [quote="pawelj"]

    Sind napisał:


    Poza tym nie wiem czy wykonanie skoku do porgramu który się wykonuje 600 ms (około) jest równoznaczne z komendą waitms 600 . Bo takie coś bylo w tej procedurze odczytu temperatury przez magistralę.


    to też jest dobre rozwiązanie , zamiast czekac możesz przez te 600ms wyświetlac wynik (wszędzie widziałem 750ms lub nawet 1s) , ds18b20 jest dośc dokładny nie powinieneś miec żadnych rozbieżności może ten inny termometr oszukuje ?

    0
  • #7 09 Sty 2008 07:58
    d.d
    Poziom 20  

    Ja też mam mały problem ze wskazaniami temperatury na DS18b20 .
    Teorytycznie pokazuje dokładnie bo pod pachą pokazał 36,6-36,7 ale temperaturę w pokoju mi zawyża pokazuje 21 stopni a gdybym tyle miał to by był luksus tej zimy jeszcze nie odpalałem grzejników bo nie było jeszcze tak zimno .
    Jak włożyłem DS-a w kulkę śniegu to temperatura spadła do 6 stopni i po chwili rosła.
    Jak myślicie może to być błąd w oprogramowaniu czy wadliwy DS.

    0