serwis elektroniki  
 
 

Elektronika

Forum dyskusyjne dla elektronik i użytkowników sprzętu Audio Video
Obecny czas: Czw Mar 28, 2024 12:11 pm

Wszystkie czasy w strefie UTC + 2 godziny




Napisz nowy temat Odpowiedz  [ 2 posty(ów) ] 
Autor Wiadomość
 Temat postu: atmega+mlx91614+bascom
PostWysłany: Sob Lis 07, 2015 9:20 am 
Offline
New Member
New Member

Dołączenie: Sob Lis 07, 2015 9:17 am
Postów: 2
Dzień dobry, staram się wgrać i odczytać wartość współczynnika emisyjności. Połączenia są sprawdzone i dobre. Czujnik komunikuje się z mikroprocesorem i można odczytać temperaturę. tak więc problem leży za pewne w programie który napisałem. Pierwszy raz komunikuje się po i2c więc proszę o wyrozumiałość. Poczytałem poradniki i przeanalizowałem inne programy. Za pomoc przewidziana nagroda(która rozwiąże problem).


kod BASCOM :
Kod:
$regfile = "m8Adef.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 16
$framesize = 32
$lib "i2c_twi.lbx"

'definicja zmiennych
Dim Lowbyt As Byte
Dim Highbyt As Byte
Dim Pec As Byte
Dim Tempdata As Single
Dim Napis As String * 5
Dim Wsp_e As Single
Const Stala_emisyj = 65535
Const Tempfactor = 0.02
Dim Ar(5) As Byte
Dim Crc As Byte



'zadeklarowanie nóżek do komunikacji i2c
Config Scl = Portc.5                                       
Config Sda = Portc.4                                       
I2cinit
Config Twi = 20000                                          '
Twcr = &B00000100



Config Submode = New

'funkcja licząca kod PEC dla wielomianu X8+X2+X1+1
Function Crc8smb(pdata As Byte) As Byte
    Dim Index As Byte
    Pdata = Pdata Xor Crc                                   '//xor new byte and old crc to get remainder + byte
    For Index = 0 To 7                                      '//check all 8 bits
        If Pdata.7 = 1 Then                                 '//if bit 7 is a 1
            Shift Pdata , Left                              '//shift it out
            Pdata = Pdata Xor $07                           '//then xor with the polynomial
        Else                                                '//if the bit is not a 1
            Shift Pdata , Left                              '//just shift it out
        End If
    Next                                                    '//check next bit
  Crc8smb = Pdata
End Function


Do

Lowbyt = 0
Highbyt = 0
Pec = 0
Tempdata = 0
Wsp_e = 0
Crc = 0

Ar(2) = 0
Ar(3) = 0
Ar(4) = 0
Ar(5) = 0
Wait 2

'odczyt temperatury. Działa
   I2cstart
   I2cwbyte &B10110100                                      '7bit slave addres+0
   I2cwbyte &H07                                                 'rejestr odczytu temp
   I2crepstart
   I2cwbyte &B10110101                                      '7bit slave addres+1
   I2crbyte Lowbyt , Ack
   I2crbyte Highbyt , Ack
   I2crbyte Pec , Nack
   I2cstop


Cls

'przetworzenie wyniku pomiaru na zmienna typu single
Tempdata = Highbyte2
Shift Tempdata , Left , 8
Tempdata = Tempdata + Lowbyte2

'przetwarzanie wyników pomiaru na stopnie celcjusza
   Tempdata = Tempdata * Tempfactor
   Tempdata = Tempdata - 0.01
   Tempdata = Tempdata - 273.15


Napis = Fusing(tempdata , "##.##")
Cls
Lcd " Temp Z Prom "
Lowerline
Lcd "Wynik:" ; Napis2 ; Chr(1) ; "C"

Wait 5





'odczyt współczynnika e
I2cstart
I2cwbyte &B10110100                                         'slave adress wr
I2cwbyte &H24                                                    'rejestr z wsp emisyjności
I2crepstart                                                          'sr
I2cwbyte &B10110101                                         'slave adress RD
I2crbyte Lowbyt , Ack                                          'data byte low
I2crbyte Highbyt , Ack                                         'data byte high
I2crbyte Pec , Nack                                             'pec
I2cstop



'przetworzenie wyniku pomiaru na zmienna typu single
Tempdata = 0
Tempdata = Highbyt
Shift Tempdata , Left , 8
Tempdata = Tempdata + Lowbyt

'przetwarzanie wyników pomiaru na e
  Wsp_e = Tempdata / Stala_emisyj


Napis2 = Fusing(wsp_e , "#.##")
Cls
Lcd "wsp emisyjnosci"
Lowerline
Lcd "Wynik:" ; Napis2 ;
Wait 5




'Zapis_wspolczyinnika_e

'test czy PEC dobrze wyliczony
Ar(2) = &HB4
Ar(3) = &H22
Ar(4) = &H07
Ar(5) = &HC8

Crc = Crc8smb(ar(2))
Crc = Crc8smb(ar(3))
Crc = Crc8smb(ar(4))
Crc = Crc8smb(ar(5))

cls
Lcd "PEC " ; Crc                                            'wychodzi 72 czyli ok
Lowerline
Lcd "PEC nota 72 "
Wait 5
Cls

'Obliczanie pec do zmiany wsp em
Ar(2) = &HB4
Ar(3) = &H24
Ar(4) = &H01
Ar(5) = &H00

Crc = Crc8smb(ar(2))
Crc = Crc8smb(ar(3))
Crc = Crc8smb(ar(4))
Crc = Crc8smb(ar(5))

cls
Lcd "PEC " ; Crc
Lowerline
Lcd "wsp e "
Wait 5
Cls

'zapis wsp emisyjnosci
Lowbyt = &H01
Highbyt = &H00

I2cstart
I2cwbyte &B10110100
I2cwbyte &H24
I2cwbyte Lowbyt
I2cwbyte Highbyt
I2cwbyte Crc
I2cstop

Loop
End
[code]


Góra
 Profil  
 

elektronika



 Temat postu: Re: atmega+mlx91614+bascom
PostWysłany: Nie Lis 08, 2015 5:58 pm 
Offline
New Member
New Member

Dołączenie: Sob Lis 07, 2015 9:17 am
Postów: 2
PROBLEM ROZWIAZNY


Góra
 Profil  
 
Wyświetl posty z poprzednich:  Sortuj według  
Napisz nowy temat Odpowiedz  [ 2 posty(ów) ] 

Wszystkie czasy w strefie UTC + 2 godziny


Kto jest online

Użytkownicy przeglądający to forum: Google [Bot] oraz 34 gości

Polecamy - Porady prawne: Adwokat Warszawa


Nie możesz zakładać nowych tematów na tym forum
Nie możesz odpowiadać w tematach na tym forum
Nie możesz edytować swoich postów na tym forum
Nie możesz usuwać swoich postów na tym forum

Szukaj:
Powered by phpBB © 2000 - 2018 phpBB Group
[ Time : 0.054s | 14 Queries | GZIP : Off ]


Naprawa telewizorów