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

[ Bascom ] Atmega8 LM75 LM75A pomiar temperatur ujemnej

gts1991 01 Lis 2010 11:43 3508 9
  • #1 8688372
    gts1991
    Użytkownik obserwowany
    Cześć
    Jak zrobić pomiar temperatury ujemnej na LM75A według dokumentacji może mierzyć od - 55 do +125 C.
    Mój kod na temp 0 - 125 C
     
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Config Scl = Portb.0
    Config Sda = Portb.1
    Config I2cdelay = 150
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    
    
    Dim Lm75write As Byte
    Dim Lm75read As Byte
    Cursor Off
    Deflcdchar 0 , 15 , 9 , 9 , 15 , 32 , 32 , 32 , 32
    Lm75write = &B10010000
    Lm75read = &B10010001
    Do
    I2cstart
    I2cwbyte Lm75read
    I2crbyte A , Ack
    I2crbyte B , Nack
    I2cstop
    
    If B.7 = 0 Then
    Cls
    Lcd "Temp= " ; A ; ",0" ; Chr(0) ; "C"
    End If
    
    If B.7 = 1 Then
    Cls
    Lcd "Temp= " ; A ; ",5" ; Chr(0) ; "C"
    End If
    Waitms 100
    Loop
    
    End

    Pozdrawiam Marcin!
  • Pomocny post
    #2 8688855
    tmf
    VIP Zasłużony dla elektroda
    Zajrzyj do dokumentacji LM, tam jest pokazane, jak należy go podpiąć, żeby mierzył ujemne temperatury.
  • #3 8688962
    gts1991
    Użytkownik obserwowany
    tmf napisał:
    Zajrzyj do dokumentacji LM, tam jest pokazane, jak należy go podpiąć, żeby mierzył ujemne temperatury.

    Dzięki za szybko odpowiedź, pierwszą rzeczą jaką zrobiłem to patrzyłem na pdf ale mi to nie pomogło sprawy wyjaśnić. Możesz mnie nakierować na właściwą drogę? :)
  • Pomocny post
    #4 8689027
    Freddy
    Poziom 43  
    tmf napisał:
    Zajrzyj do dokumentacji LM, tam jest pokazane, jak należy go podpiąć, żeby mierzył ujemne temperatury.

    Teraz to i ja nie rozumie, jakież to specjalne sposoby podpięcia trzeba zastosować ? Może powiesz nam, bo w DS nic nie ma na ten temat.
    gts1991 :arrow: zobacz na stronę 10 w DS.
  • #5 8689080
    gts1991
    Użytkownik obserwowany
    Freddy napisał:
    tmf napisał:
    Zajrzyj do dokumentacji LM, tam jest pokazane, jak należy go podpiąć, żeby mierzył ujemne temperatury.

    Teraz to i ja nie rozumie, jakież to specjalne sposoby podpięcia trzeba zastosować ? Może powiesz nam, bo w DS nic nie ma na ten temat.
    gts1991 :arrow: zobacz na stronę 10 w DS.

    [ Bascom ] Atmega8 LM75 LM75A pomiar temperatur ujemnej
    Cytat:
    Zgodnie z opisem http://cache.national.com/ds/LM/LM75.pdf punkt 1.12 pobierając temperaturę na wyjściu otrzymujesz aż 16 bitów danych (w tym 7 bitów nieokreślonych). 16 bitów to 2 bajty a więc zgodnie z twoim programem część temperatury masz w zmiennej p (8 bitów) a część w pp (1 bit).
    Temperaturę powinieneś obliczyć ze wzoru:
    temp=p+(pp/128)*0,5
    czyli teoretycznie od -128 do 127,5

    Kiedy jest pobierany 9 bit? :/
  • #6 8689227
    Freddy
    Poziom 43  
    Oczywiście na elektrodzie już nie szukałeś, no bo i po co? Przecież inni mają sporo wolnego czasu i odpowiedzą kolejny raz z rzędu, wystarczy zaczekać na gotowca.
    Na elektrodzie jest kilkanaście razy o tym mowa ! Wysil się trochę !
  • #7 8692904
    gts1991
    Użytkownik obserwowany
    Możesz pokazać gdzie to jest bo nie mogę znaleźć?
  • #8 8731547
    gts1991
    Użytkownik obserwowany
    Na chwilę obecną mam coś takiego :

    
    If A.7 = 1 Then
    A.7 = 0
    A = 128 - A
    Cls
    Lcd "Temp= - " ; A ; Chr(0) ; "C"
    End If
    end if 
    


    Niby dobrze mierzy temp układ ale czy jest dobrze napisy program według kolegów?

    Wiem że Bit A.7 odpowiada za znak " - " jeżeli ma 1 i " + " jeżeli ma 0 .A bit B.7 odpowiada że 0.5 C bądź dla jeżeli ma 1 :)
    Ps: Podziękowania dla kolegi ZbeeGin ;)

    Moderowany przez inventco.eu:


    inventco.eu - post edytowałem. Żadne formy zaczepki ani roszczeniowego pisania forum nie toleruje. Regulamin. Następnym razem udzielę ostrzeżenia.

  • Pomocny post
    #9 8732286
    mirley
    Poziom 17  
    Twój LM75 jest na I2C, zakładam więc że umiesz odczytać z niego te dwa bajty z wartością temperatury.

    Sprawdzasz najstarszy bit, starszego bajtu w odczytanym z czujnika wyniku. jeśli jest równy 0, to znaczy że temperatura jest dodatnia i wynik liczysz poprzez:

    1. przesunięcie otrzymanego z czujnika wyniku o 5 bitów w prawo
    2. pomnożenie rezultatu tej operacji przez 0.125

    jesli najstarszy bit w odczytanych z czujnika bajtach jest równy 1 to znaczy że liczba zapisana jest w U2 i liczymy:

    1. przesunięcie otrzymanego z czujnika wyniku o 5 bitów w prawo
    2. zanegowanie bitowe wyniku
    3. wynik = wynik +1
    2. pomnożenie rezultatu tej operacji przez -0.125
  • #10 8732326
    gts1991
    Użytkownik obserwowany
    Kod działającego termometru dla LM75 LM75A Atmega8 -55C do 125C
     ' LM75 LCD i2c termomert LCD -55C  do  125C  by gts1991 2010r
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Config Scl = Portb.0
    Config Sda = Portb.1
    Config I2cdelay = 150
    
    
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    
    
    
    Dim Lm75write As Byte
    Dim Lm75read As Byte
    
    Cursor Off
    Declare Sub Odcz_temp
    Deflcdchar 0 , 15 , 9 , 9 , 15 , 32 , 32 , 32 , 32
    Lm75write = &B10010000                                      ' 144 zapis
    Lm75read = &B10010001                                       ' 145 odczyt
    Do
    I2cstart
    I2cwbyte Lm75read
    I2crbyte A , Ack
    I2crbyte B , Nack
    I2cstop
    
    If A.7 = 0 Then
    Cls
    Lcd "Temp= +" ; A ; Chr(0) ; "C"
    End If
    
    If A.7 = 1 Then
    A.7 = 0
    A = 128 - A
    Cls
    Lcd "Temp= - " ; A ; Chr(0) ; "C"
    End If
    Waitms 100
    
    Loop
    End
    

    Dziękuje wszystkim za pomoc szczególnie ZbeeGin oraz mirley ;)
REKLAMA