Bmp 180 pıc16f877 calıstırılması

Başlatan Dtmf, 20 Mart 2022, 15:56:20

Dtmf

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   

Dtmf

Ete hocam pow komutu var basicde veya protonda bunun yerine hangi komutu kullanabiliriz veya nasil bir matematiksel islem yapmaliyiz yardimci ourmusunuz rica etsem

Dtmf

#2
bir orenk yazayim
altitude=pow((p/102400),0.190298))

ete

Pow komutu nedir bilmiyorum. Bilen varsa açıklasın.
Ete

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr

ete

Power den geldiğini anlamalıydım. Bir sayının üs yada üst kuvvetini almak. Üs yerinde tam sayı olsa iş kolay idi üs kadar sayıyı kendisi ile çarparak sonuç bulunurdu. Ancak sayı ondalıklı olunca işin içine logaritma girmesi gerek sanırım. Araştıralım hep birlikte.
Ete

Hattuşa

protonda da aynı komut mevcutmuş, POW komutu benim anladığım bir sayının sayı üssünü almak oluyor, yani 2 sayısının 3 üssü =2x2x2 =8 gibi,
protonun helpi pdf sinin 102. sayfasında konu açıklanmış ve aşağıdaki örnek verilmiş

Device = 18F25K22 ' Choose the device
Declare Xtal = 16 ' Choose the oscillator frequency used
Declare Hserial_Baud = 9600 ' Choose the Baud rate for HrsoutLn
Dim PowOf as Float
Dim Floatin as Float ' Holds the value to Pow with
Dim Floatout as Float ' Holds the result of the Pow
PowOf= 10
Floatin = 2 ' Load the variable
Floatout = Pow(Floatin, PowOf) ' Extract the Pow of the value
HrsoutLn Dec Floatout ' Display the result
Stop

Dtmf

hocam yardim icin herkese tesekkur ederim pow komutu protonda 18f serisi kontrolculerde hata vermiyor diger 16fxxx alt guruplarda hata veriyor.dediginiz gibi sayinin 3 ussunu alarak deneyecegim amacim pascal degeri uzerinden deniz seviyesi yuksekligi hesaplamak

Hattuşa

hocam yanlış anlamayın bu 16f877 yi şişirmeye gerek yok bence, 18f serileri ile 16f serileri fiyat farkı çok yok, yani elinizde bolca 877 yoksa geçin 18f serilerine siz üzüleceğinize 877 üzülsün

Dtmf

 ;D dogru soyledin bi tutturduk gitti pıc877  ;D elde bolca varda.

Dtmf

iyi gunler degerli arkadaslar bir tecrube olarak yaziyorum bu Bmp180 sensor modulu uzerinde u328,...u416 gibi piyasada 13 cesit sensor var.bu numaralardan chip numarasi U428 olan orjinal olani.Suan yerel hava durumu istasyonunda gosteren milibar degeri ile ayni örnegin 1011.123.mb rakimida dogru veriyor diger chip numarali olanlardan 4 tanesini denedim sorunlu.+-10 birim farkli gosteriyorlar.yakinda yazdigim kodlari paylasacagim.selametle

Dtmf

bmp180 barometre ıle aynı degerlerı veren ve bolgesel hava tahmın ıstasyonu ıle (telefondan takıp edebılırsınız) aynı degerlerı veren hava tahmınınde yardımcı olacak gy-68 modulu kodu payasıyorum.yardımlarından dolayı ete hocama tesekkur ederım.unutmayalım gy-68 modulu orjınal olanı metal kasalı chıp uzerınde U428  yazacak.yapacak arkadaslara kolay gelsın
Device =18F45K22
Xtal = 64 ;pll aktıf et
All_Digital TRUE
 TRISA=0:PORTA=0
 TRISB=0:PORTB=0
 TRISC=0:PORTC=0
 TRISD=%00000111: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 Word
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 Word
;=============================================
  Symbol BMP180YAZ = $EE;$EE  'BMP180 I2C address
  Symbol BMP180OKU = $EF;$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 SDword
Dim X3 As Word
Dim UT As Word
Dim UTM As Byte
Dim UTL As Byte
Dim T As Float

Symbol BUTON1=PORTD.1
Symbol BUTON2=PORTD.0
Symbol BUTON3=PORTD.3
Dim I As Byte
Dim K As Byte
Dim BASINC1 As Float 
Dim ALTITUDE As Dword
Dim ALTITUDE1 As Dword
Dim SEALEVEL_ALTITUDE As Dword
;==================
Dim OSSTIME As Byte
Dim SAMPLES As Byte
Dim OSS As Byte
OSS=0
OSSTIME=5
;========BASINC======

Dim PRES As Float
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 BX3 As Word

Dim UP As Dword
Dim UPMSB As Byte
Dim UPLSB As Byte
Dim UPXLSB As Byte

Dim YUKSEKLIK As Float
Dim FLOT1 As Float 
Dim FLOT2 As Float

Dim X As Dword
Dim Y As Dword
Dim Z As Dword

Dim A As Word
Dim B As Word
Dim C As Word

Dim D As Word
Dim E As Word
Dim F As Word

Dim G As Word
Dim H As Word
Dim J As Word

Dim SAY As Byte
Dim SAY1 As Byte
Dim HESAPLA As Float
Dim HESAPLA1 As Float

Dim B5 As SDword
Dim YUK As Word
;================
Dim ORNEKLE As Byte
DelayMS 100
GoSub CALIBRATION
DelayMS 100
X=0
Y=0
Z=0

For K=0 To 11
Print At 1,1," LUTFEN BEKLEYINIZ " 
Print At 2,1," SICAKLIK OLCULUYOR" 
Print At 3,1," BASINC OLCULUYOR  " 
Print At 4,1," --///--///--//--  " 
GoSub SICAKLIK
GoSub  BASINC
Next
 I=0

;===========================================
BASLA:
;==========OSS DEGERI AYARLAMA=============
If BUTON1=1 Then OSS=OSS+1,OSSTIME+1
If OSS=4 Then OSS=0
Print At 1,20,Dec OSS
;===================================
GoSub SICAKLIK
GoSub BASINC
LCD:
Print At 1,1,"SICAKLIK: ",Dec T
Print At 2,1,"BASINC:",Dec PRES,".Pascl"
Print At 3,1,"ALTITUDE:",Dec HESAPLA,"m"
Print At 4,1,"BASINC:",Dec BASINC1,"mb"

DelayMS 120
;Print At 3,1,"ALTITUDE: ",DEC ALTITUDE
;Print At 4,1,"B7:",Dec B7                                   
Print At 1,1,"                    "
Print At 2,1,"                    "
Print At 3,1,"                    "
Print At 4,1,"                    "
GoTo BASLA
;=============KALIBRASYON============
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)*AC5/32768 
X2=X1+MD
X2=(MC*2048)/X2
B5=X1+X2 
T = (B5+ 8)/160;18.5; ortam sıcaklıgı bu bolum ıle aynanarak degıstırılebılır 
Return
;================= SICAKLIK HESAP SON ============================
;00000000000000000000000000000000000000000000000000000000 
;================BASINC OLCUM BOLUMU======================
BASINC:
SAMPLES=$34+(OSS<<6)
For SAY=0 To 5
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)>>(8-OSS);
Next
;UP=2978

;==============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 =B5-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 ;WORD TPI DEGISKEN OLACAK
  BX3=XX1+XX2
  B3=(((AC1*4+BX3)<<OSS)+2)/4 ;65551 BULUNDU OSS DEGERI 1 VERILDI ;WORD TIPI DEGISKN
;============================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=AC4*(XX3+32768)/32768  ;33077 BULUNDU
;===========================END===============================================
             B7=(UP-B3)*(50000>>0);/2 ;B7 DEGERI 2 YE BOLUNDU
             ;B7=1518518750

    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 ;3791 GERCEK DEGER
 PRES=PRES/100
  
;==================ALTITUDE YUKSEKLIK HESABI============
ALTITUDE=44330.0*(1-Pow(PRES/1013.25,0.190294957836346))

HESAPLA1=HESAPLA
I=I+1

If I=1 Then X=ALTITUDE
If I=2 Then Y=ALTITUDE
If I=3 Then Z=ALTITUDE
If I=4 Then A=ALTITUDE
If I=5 Then B=ALTITUDE
If I=6 Then C=ALTITUDE

If I=7 Then D=ALTITUDE
If I=8 Then E=ALTITUDE
If I=9 Then F=ALTITUDE
If I=10 Then G=ALTITUDE
If I=11 Then H=ALTITUDE
If I=12 Then J=ALTITUDE


HESAPLA=(X+Y+Z+A+B+C+D+E+F+G+H+J)/12 ;ORTALAMA USULU ILE FILTRELEME
HESAPLA=HESAPLA+15
If HESAPLA>HESAPLA1 Then HESAPLA=HESAPLA-1  ;anı zıplamalar ıcın FILTERELEME
If HESAPLA<HESAPLA1 Then HESAPLA=HESAPLA+1.5 ;anı zıplamalar ıcın FILTERELEME
If I>12 Then I=0

If BUTON2=1 Then SEALEVEL_ALTITUDE=HESAPLA : Print At 4,20,"Ö:";ALTITUDE DEGERI YUKLE
If BUTON3=1 Then SEALEVEL_ALTITUDE=1095 : Print At 4,20,"S:";850;ALTITUDE ;1095  BUTON 2 YE BASILIRSA  ;SEALEVEL_ALTITUDE=1095

BASINC1=pow(1-SEALEVEL_ALTITUDE/44330.0,5.255);
BASINC1=(PRES/BASINC1)
Return
;================= E   N   D ============================
;00000000000000000000000000000000000000000000000000000000  

Powered by EzPortal