BMP180 sensörünün PIC16F877 ıle çalıstırılması

Başlatan termınator, 24 Mart 2022, 14:15:18

termınator

Bmp180 basınç sensorü ile yapmış olduğum bir calısma'yı paylaşmak istedim.ardunio ile yapılmış bir çok örnek var birde pıc serisi bir microkontrölcü ile yapayım dedim ve cok sükür saygı değer ete hocamızın daha önce yapmış olduğu yardımlar sayesinde gelen verileri hesaplayıp pascal cinsinden okumayı basardım.proton eski versiyonu kod içerisindeki SDWORD veya SWORD gibi (-) değerli sonuç verecek değiskenleri çalıstırmıyor hata veriyor kullandığım proton versiyon Proton 3.6.00 dır.Bmp 180 sensöründen okuduğum değerlerin gerçeklik kısmına gelirsek
abmp180 ardunio gerçek sonuç veren bir uygulamasını buldum yorumları okudum ve ardunio libraries dosyası içindeki Bmp180.ccp yazan klasörü acıp içindeki bazı x1,x2,b3,b4,up,p.. gibi değerleri serial print yapıp serial çıkış olarak ardunio ile okuyup ekrana verdim ve pıc16f877 ile aldığım değerlerle karşılaştıdım değerlerin başa baş gittiğini gördüm bu şekilde kendime referans aldım.
Device =16F877A
Xtal = 20
All_Digital TRUE
 TRISA=0:PORTA=0
 TRISB=0:PORTB=0
 TRISC=0:PORTC=0
 TRISD=%00000001:PORTD=0        
 TRISE=0:PORTE=0
;-------------------------------------
Declare LCD_Type alpha  
Declare LCD_Lines 2
Declare LCD_Interface 4
Declare LCD_DTPin PORTB.0
Declare LCD_RSPin PORTB.5
Declare LCD_ENPin PORTB.6
Symbol SDA =PORTC.7
Symbol SCL =PORTC.6
;==========CALIBRATION VARIBLE========
Dim AC1 As SWord
Dim AC2 As SWord
Dim AC3 As SWord
Dim AC4 As SWord
Dim AC5 As SWord
Dim AC6 As SWord
Dim B1 As SWord
Dim B2 As SWord
Dim MB As SWord
Dim MC As SWord
Dim MD As SWord
;=============================================
  Symbol BMP180YAZ = $EE  'BMP180 I2C address
  Symbol BMP180OKU = $EF  'BMP180 I2C address
  Symbol CalDatStAd = $AA 'Start address for cal. data.
  Symbol InitConvReg = $F4
  Symbol PReadReg = $34 
  Symbol TReadReg = $2E 
  Symbol BASINCOKU=$F6 
;======SICAKLIK===== 
Dim X1 As Dword
Dim X2 As Dword
Dim X3 As Word
Dim UT As Word
Dim TOPLA As SDword
Dim UTM As Byte
Dim UTL As Byte
Dim T As Float
Symbol BUTON1=PORTD.0
;==================
Dim OSSTIME As Byte
Dim SAMPLES As Byte
Dim OSS As Byte
OSS=0
OSSTIME=5
;========BASINC======
Dim PRES As Dword
Dim PR As SDword
Dim B7 As Dword
Dim B6 As SWord
Dim B3 As Word
Dim B4 As Word
Dim PX1 As Dword
Dim PX2 As SDword
Dim XX1 As SDword
Dim XX2 As SDword
Dim XX3 As SDword

Dim UP As Dword
Dim UPMSB As Byte
Dim UPLSB As Byte
Dim UPXLSB As Byte
Dim TMP As Word
Dim OLCUM As Byte ;HAM BASINC DEGERINI HESAPLAMADA KULLANILIYOR
;==========KALIBRASYON VERILERI ALINIYOR====D======
DelayMS 250
GoSub CALIBRATION
Cls
DelayMS 250
;===========================================
BASLA:
GoSub SICAKLIK
GoSub BASINC
Print At 1,1,"SICAKLIK: ",Dec T
Print At 2,1,"UP: ",Dec UP," B3:",Dec B3
Print At 3,1,"B4:",Dec B4," PR:",Dec PR
Print At 4,1,"PRES:",Dec PRES," OLCUM:",Dec OSS
DelayMS 500                                          
Cls
GoTo BASLA
;=====================CALIBRATION============
CALIBRATION:
    I2CIn SDA,SCL,BMP180OKU,$AA, [AC1] 
    DelayMS 5
    I2CIn SDA,SCL,BMP180OKU,$AC, [AC2] 
    DelayMS 5
    I2CIn SDA,SCL,BMP180OKU,$AE, [AC3]
    DelayMS 10
    I2CIn SDA,SCL,BMP180OKU,$B0, [AC4] 
     DelayMS 10
    I2CIn SDA,SCL,BMP180OKU,$B2, [AC5]
    DelayMS 5
    I2CIn SDA,SCL,BMP180OKU,$B4, [AC6]
     DelayMS 5
    I2CIn SDA,SCL,BMP180OKU,$B6, [B1]
    DelayMS 5
    I2CIn SDA,SCL,BMP180OKU,$B8, [B2]
    DelayMS 5
    I2CIn SDA,SCL,BMP180OKU,$BA, [MB] 
    DelayMS 5                 
    I2CIn SDA,SCL,BMP180OKU,$BC, [MC]  
    DelayMS 5
    I2CIn SDA,SCL,BMP180OKU,$BE, [MD]
    DelayMS 5
Return
;===============SICAKLIK OLCUM BOLUMU===================
SICAKLIK:
 I2COut SDA,SCL,BMP180YAZ,InitConvReg,[TReadReg]  'Start temperature conversion.
 DelayMS OSSTIME  
 I2CIn SDA,SCL,BMP180OKU,$F6,[UTM] 
 I2CIn SDA,SCL,BMP180OKU,$F7,[UTL]
 UT=(UTM<<8)+UTL
    
    X1 = (UT- AC6)                   
    X1 = (X1 *AC5)/32768 ;6543          
    X2 = (MC * 2048)
    X2 = X2/(X1 + MD) ; -2601
    TOPLA = X1 + X2+92  ;3942
    T = (TOPLA + 8)/160;18.5; ortam sıcaklıgı bu bolum ıle aynanarak degıstırılebılır 
Return
;================= E   N   D ============================
;00000000000000000000000000000000000000000000000000000000 
;================BASINC OLCUM BOLUMU======================
BASINC:
SAMPLES=$34+(OSS<<6)
I2COut SDA,SCL,BMP180YAZ,$F4,[SAMPLES]
DelayMS OSSTIME     ;ORNEKLEME ALINIRKEN BEKLEME
I2CIn SDA,SCL,BMP180OKU,$F6,[UPMSB] 
I2CIn SDA,SCL,BMP180OKU,$F7,[UPLSB]
I2CIn SDA,SCL,BMP180OKU,$F8,[UPXLSB]
UP=(UPMSB<<16) + (UPLSB<<8) + (UPXLSB) >>(7-OSS);
;==============OSS ORENKLEME SAYISI VE HASSASIYET AYARI
If BUTON1=1 Then OSS=OSS+1 ;OSS AYARLAMA  PORTD.2=BUTON1
If OSS>3 Then OSS=0
If OSS=0 Then OSSTIME=5 ;ORNEKLEME BEKLEME SURESI   
If OSS=1 Then OSSTIME=10
If OSS=2 Then OSSTIME=15
If OSS=3 Then OSSTIME=25
;__________________B6 DEGERI HESAPLAMA_______________________
 B6 =TOPLA-4000  
;B6=115 FORMULLER CALISIYORMU DIYE B6 SABIT SAYI VERILIP ARDUNIO  VERILERI ILE KARSILASTIRILDI                       
;======B3 DEGERI BASINC ALTINDA DOGRU CALISIYOR=====================          
   XX1=(B2*(B6*B6/4096))/2048
   XX2=(AC2*B6)/2048
   XX3=XX1+XX2
   B3=(((AC1*4+XX3)<<OSS)+150)/2 ;KALIBRE ICIN SAYI EK  YAPILDI +150
   B3=B3+120 ;KALIBRE YAILDI
;============================END=================================== 

;=======B4 DEGERI BASINC ALTINDA NEGATIF YONE CALISIYOR ========== 
           XX1=AC3*B6/8192        
           XX2=(B1*(B6*B6/4096))/65536  
           XX3=((XX1+XX2)+2)/4 ;( - )sonucu rakam verıyor
           B4=32741*(XX3+32768)/32768 
           B4=B4+460 ;KALIBRE YAPILDI
;===========================END===============================================
             B7=(UP-B3)*(50000>>OSS)/2 ;B7 DEGERI 2 YE BOLUNDU
    If B7<$80000000 Then
    PR=(B7*2)/B4
    Else
    PR=(B7/B4)*2
    EndIf 
  
  PX1=(PR/256)*(PR/256);WORD 64785
  PX1=(PX1*3038)/65536 ;WORD 6041
  PX2=(-7357*PR)/65536 ;SWORD
  PRES=PR+(PX1+PX2+3791)/16
Return
;================= E   N   D ============================
;00000000000000000000000000000000000000000000000000000000