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

[BASCOM][ATMEGA32][DS18B20] jak usunąć wynik po przecinku

sq3fyk 28 Gru 2010 11:29 2358 19
REKLAMA
  • #1 8922979
    sq3fyk
    Poziom 11  
    Witam
    Napisałem następujący program....

    temperaturę wysyłam w stopniach fahrenheita
    
    Sub Ds18b20
     1wreset
     1wwrite &HCC
     1wwrite &H44
     Waitms 750
     1wreset
     1wwrite &HCC
     1wwrite &HBE
     Odczyt(1) = 1wread(2)
     T = Odczyt(2)
     Shift T , Left , 8
     T = T + Odczyt(1)
     T1 = T * 0.0625
     T2 = T1
     T1 = T2 / 5
     T2 = T1 * 9
     T1 = T2 + 32
     End Sub
    



    zmienną T1 wysyłam przez uarta w postaci np: 73.4 F co odpowiada

    w jaki sposób wynik sprowadzić do pełnych stopni aby było to 73 F
  • REKLAMA
  • #2 8923604
    skalsky5000
    Poziom 21  
    Szukaj komendy Fusing
  • REKLAMA
  • #4 8923818
    Fredy
    Poziom 27  
    Wystarczy mieć zmienną zadeklarowaną jako Byte i zrobić rzutowanie.

    Przykłąd:

    Dim w as byte
    Dim f as single

    f=73.2
    w=f

    print w ' uzyskasz 73
  • #5 8923935
    sq3fyk
    Poziom 11  
    Witam
    Mam program zrobiony tak

    zmienne
    
    Dim T As Single
    Dim T1 As Integer
    Dim T2 As Integer
    



    odczyt i konwersja

    
    Sub Ds18b20
     1wreset
     1wwrite &HCC
     1wwrite &H44
     Waitms 750
     1wreset
     1wwrite &HCC
     1wwrite &HBE
     Odczyt(1) = 1wread(2)
     T = Odczyt(2)
     Shift T , Left , 8
     T = T + Odczyt(1)
     T1 = T * 0.0625
     T2 = T1
     T1 = T2 / 5
     T2 = T1 * 9
     T1 = T2 + 32
     T1 = T1 Mod 100
     End Sub 
    



    I wszystko działa pięknie , ale przy dodatnich temperaturach.....
    gdy jest -6c to otrzymuje wynik 94 F.

    Pozdrawiam
  • REKLAMA
  • #6 8925264
    Fredy
    Poziom 27  
    Sprawdź czy dobrze mierzy w Celsjuszach.
    Jeśli tak to przelicznik na Fahrenheity to T[F]= T[C]*1.8+32 z tego co pamiętam ze szkoły.
  • #7 8925432
    sq3fyk
    Poziom 11  
    Właśnie wystawiłem czujnik za okno i jest ok.
    14.0 F
    Mam w/g drugiego termometru -10 , czyli wszystko się zgadza.
    Pozostaje sprawa usunięcia wyniku po przecinku.
    Poprzednie sposoby się nie sprawdziły.

    czyli chcę wysłać poprzez uarta 14 zamiast 14.0 tylko jak ?

    Pozdrawiam
  • #8 8926313
    landy13
    Poziom 31  
    Uartem wysyłasz pewnie stringa. Wtedy instrukcja MID, a jeszcze prościej LEFT.
  • #9 8926425
    piotr5000
    Poziom 21  
    T1 = int(T1) ' obcina częśc ułamkową
  • #10 8926499
    sq3fyk
    Poziom 11  
    Dziękuje za podpowiedzi

    W chwili obecnej podprogram wygląda następująco :

    
    Sub Ds18b20
     1wreset
     1wwrite &HCC
     1wwrite &H44
     Waitms 750
     1wreset
     1wwrite &HCC
     1wwrite &HBE
     Odczyt(1) = 1wread(2)
     T = Odczyt(2)
     Shift T , Left , 8
     T = T + Odczyt(1)
     T1 = T * 0.0625
     T2 = T1
     T1 = T2 / 5
     T2 = T1 * 9
     T1 = T2 + 32
     T1 = Int(t1)
     End Sub
    
    

    dodanie funkcji T1 = Int(t1) nic nie dało, wartość dalej jest wysyłana z przecinkiem :( 68.0 F
  • #11 8926559
    Fredy
    Poziom 27  
    Musisz pokazać jak wysyłasz. To tam leży problem.
  • #12 8926657
    sq3fyk
    Poziom 11  
    do
    ds18b20
    waitms 500
    Print t1
    wait 5
    loop


    :)
  • #14 8926742
    sq3fyk
    Poziom 11  
    Przepraszam , ale te F na końcu to sam tutaj dopisałem , żeby było wiadomo ze to nie Celcjusze :) .

    Dane odbieram w terminalu .

    atmega32 ---> ft232rl ---> terminal :)

    W chwili obecnej

    
    dim T1 As single
    
  • REKLAMA
  • #16 8927819
    sq3fyk
    Poziom 11  
    Niestety nadal jest żle :(

    Podprogram wygląda następująco


    
    
     Sub Ds18b20
     1wreset
     1wwrite &HCC
     1wwrite &H44
     Waitms 750
     1wreset
     1wwrite &HCC
     1wwrite &HBE
     Odczyt(1) = 1wread(2)
     T = Odczyt(2)
     Shift T , Left , 8
     T = T + Odczyt(1)
     T1 = T * 0.0625
     T2 = T1
     T1 = T2 / 5
     T2 = T1 * 9
     T1 = T2 + 32
     T1 = Int(t1)
     T3 = T1
     T3 = -74.5                                                 'S-Single
     T4 = T3                                                    'I-Integer lub Long
    
    



    i zmienne:

    
    Dim Odczyt(2) As Byte  
    dim T As Integer 
    dim T1 As Single  
    dim T2 As Integer 
    Dim T3 As Integer
    Dim T4 As Single
    
  • #17 8927873
    Jaca
    Poziom 31  
    Widzę, że masz problemy nie tylko z programem ale i z czytaniem bo nie zrobiłeś tak jak Ci napisałem.
  • #18 8927876
    sq3fyk
    Poziom 11  
    Bardzo śmieszne.
    Siedzę już nad tym tyle godzin ze wszystko mi się już myli.
    Nie jestem programistą i dla mnie niektóre rzeczy nie są oczywiste :)
  • Pomocny post
    #19 8927930
    Jaca
    Poziom 31  
    Poprawiłem - nie sprawdzałem.

    Dim Odczyt(2) As Byte 
    dim T As Integer
    dim T1 As Single 
    dim T2 As Single
    Dim Temp As Long
    
    Do
     Ds18b20
     Print Temp
     Wait 1
    Loop
    End
    
    Sub Ds18b20
     1wreset
     1wwrite &HCC
     1wwrite &H44
     Waitms 750
     1wreset
     1wwrite &HCC
     1wwrite &HBE
     Odczyt(1) = 1wread(2)
     T = Odczyt(2)
     Shift T , Left , 8
     T = T + Odczyt(1)
     T1 = T * 0.0625
     T2 = T1
     T1 = T2 / 5
     T2 = T1 * 9
     T1 = T2 + 32
     Temp = T1
    End Sub
    
  • #20 8927965
    sq3fyk
    Poziom 11  
    Jaca Dziękuje pięknie teraz wszystko działa jak należy.
    Zaraz wystawie czujnik za okno i zobaczę co się stanie przy ujemnych temperaturach.
    Pozdrawiam
REKLAMA