avatar_efeworld

mpx 10 dp basınç sensörü

Başlatan efeworld, 20 Kasım 2016, 19:52:50

Dtmf

Ete hocam yuksekligi ben neo6m gps modulu ile aliyorum ortamdaki basinc degisimlerini olcmek istiyorum

Dtmf

Ete hocam Mpl3115a2 incledim bmp180 e gore karmasik formuller vs gozukmuyor siz bu modulu kullanim kolayligi bakimindan tavsiye edermisiniz.

ete

I2C ile çalışan sensörleri her zaman tercih ederim. Ancak bu tercihinde bir dezavantajı var. Register mantığı ile bilgi alışverişi yapılıyor bu tip sensörlerde ve bir araba register koyuyorşar Sonuçta kimi nasıl okuycağım pek belli olmuyor. Tabiiki sensöre hakim değilseniz. Ama İngilizceniz iyi ise ve konuyada aşikarsanız data sheet deki açıklamalar yeterli oluyor.
Şöyle bir baktım data sheet'e . Bana fazlası ile karmaşık geldi. İki moddan bahsediliyor birisi fifo dan okuma modu diğeri sürekli okuma modu gibi bir şey pek anlayamadım doğrusu. Kısaca bana basit gelmedi. Bir sürü register var hangisi işime yarayacak kestirmek zor.
Haberleşme basit ama işi kıvırmak basit değil. O data sheet yüzlerce defa okunacak ve bir anlam çıkartılıp üzerinde çalışılacak.
Bence buna karar verirsen Lisanı iyi olan bir arkadaş bul ve bilgisinden yararlan. Yoksa kolay çözülecek gibi gözükmüyor.

Ete

Dtmf

ete hocam ıyı gunler bmp 180 datashet ınde formulle ugrasırken bıryerde takıldım yardımcı olurmusunuz.
oss=3
up=(msb<<16 + lsb<<8 + xlsb) >>(8-0) formulunu UP ye
up=msb<<16
up=<<8
up=(xlsb)>>(8-oss)
seklınde yazsam olurmu
proton basıc de up=(msb<<16 + lsb<<8 + xlsb) >>(8-0) seklınde yazdıgımda soyle yazıyor
[cannot compıle an expressıon contaınıng more than 3 operands when the assıgnment is a DWORD or FLOAT! (deneme bas)]

Dtmf

yada bu sekılde yazsam aynı sonucu alırmıyım hocam.
 PT=(PMSB<<16)  (PLSB<<8) (PXLSB) >>OSS-8

ete

#35
up=msb<<16
up=<<8
up=(xlsb)>>(8-oss)
Burada kullanamayacağın ifadeler var.
Birinci satıra bakalım. UP=MSB<<16  burada MSB isimli değişken 16 bit sola kaydırılıyor. Sen zaten 16 bitlik değişken kullanabilirsin (Long kullanmayacaksan) ve bunu 16 bit sola kaydırmak demek ilk bit de 1 sayısı var ise yani MSB=1 ise 16 bit sola kaydırınca değeri 32768 olur. Sıfır var ise değer sıfır olur. Up=<<8 şeklinde bir eşitlik olmaz. Up=up<<8 olabilir ki bu durumda sayıyı 8 bit daha sola kaydırıyorsun ki bu sefer değer 24 bit olacak. Bunu şimdilik göz ardı edelim. Elde ettiğin up sayısını hiç bir yerde kullanmayacakmısın? Görünüşe göre kullanmıyorsun. zira son ifade UP=(xlsb)>>(8-oss) şeklinde ki bu up değişkenine yeni bir değer vermek anlamına geliyor.
Bir şeyeri alıp buraya koymuşsun ama sanırım atlayarak koydun. Bu formüller bir şey ifade etmiyor.

Son mesajında verilen formül daha farklı;
PT=(PMSB<<16)  (PLSB<<8) (PXLSB) >>OSS-8
Parantezli işlemler var ama aralarında bir işlem işareti yok. Buda yanlış bence.

Ete

not: şimdi data sheet'e baktım. BU sensörün hesabını pic ile yamak gerçekten zor. C dilinden başkası ile hesabı yapmak imkansız gibi. Long değişkenleri yanında İşaretli (eksi) sayılarda kullanıyor. Signed ve LONG değişkenlere ihtiyaç var. Bunları sağlasak bile üslü işlemler varki bunların altından nasıl kalkılır bilemiyorum maalesef.


Dtmf

ete hocam sıcaklıgı bu sensorle olctum elımdekı dıgıtal termometre ıle bırebır gıdıyor ıste kodu
;====BMP 180 ============
Device =16F877A
Declare ALL_DIGITAL TRUE
XTAL = 20
 TRISA=0:PORTA=0
 TRISB=0:PORTB=0
 TRISC=0:PORTC=0
 TRISD=0:PORTD=0        
 TRISE=0:PORTE=0
Declare LCD_TYPE alpha  
Declare LCD_LINES 2
Declare LCD_INTERFACE 4
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.0
Declare LCD_ENPIN PORTB.1
Symbol SDA =PORTC.7
Symbol SCL =PORTC.6
Symbol BMP180=$EF;BMP180 I2C adres
  Symbol BMP180_R = $EFBMP180 I2C ADRES
  Symbol CalDatStAd =$AA 
  Symbol InitConvReg =$F4
  Symbol PReadReg =$34 
  Symbol TReadReg =$2E 
  Symbol BASINCOKU=$F6 
;_____________________TEMP DEGERLERI________________________________________
  Dim AC1 As DWord
  Dim AC2 As DWord
  Dim AC3 As DWord
  Dim AC4 As DWord
  Dim AC5 As DWord  ;ISI
  Dim AC6 As DWord ;ISI
  Dim B1 As DWord
  Dim B2 As DWord
  Dim PR As Word
  Dim MB As DWord
  Dim MC As DWord ;ISI
  Dim MD As DWord ;ISI
  Dim UT As Word    ;ISI
  Dim X1 As DWord     ;ISI 
  Dim X2 As DWord     ;ISI
  Dim X3 As DWord     ;ISI
  Dim TOPLA As Word  ;ISI
  Dim T As Float;ISI
;===================BASINC DEGERLERI===============

;==================================
 Dim TEMP As Word
  DelayMS 100
  GoSub KALIBRE
  DelayMS 100
  Cls
;=============================
START:
;=============================SICAKLIK HESAPLAMA BOLUMU================
                 I2COUT SDA,SCL,BMP180,InitConvReg,[TReadReg]  
                 DelayMS 5 
                 I2CIN SDA,SCL,BMP180,$F6,[UT] 
                 GoSub Thesap
                 Print At 1,1,"C: ",Dec T
;================================BASINC HESAPLAMA BOLUMU=======================================                 
DelayMS 500
GoTo START
;=======================================KALIBRASYON==========================================
KALIBRE:
    Print At  1,1,"START"
    I2CIn SDA,SCL,BMP180_R,$AA, [AC1]
    DelayMS 5
    I2CIn SDA,SCL,BMP180_R,$AC, [AC2]
    DelayMS 5
    I2CIn SDA,SCL,BMP180_R,$AE, [AC3]
    DelayMS 5
    I2CIn SDA,SCL,BMP180_R,$B0, [AC4]
    DelayMS 5
    I2CIn SDA,SCL,BMP180_R,$B2, [AC5]
    DelayMS 5
    I2CIn SDA,SCL,BMP180_R,$B4, [AC6]
     DelayMS 5
    I2CIn SDA,SCL,BMP180_R,$B6, [B1]
    DelayMS 5
    I2CIn SDA,SCL,BMP180_R,$B8, [B2]
                    DelayMS 5
                   I2CIn SDA,SCL,BMP180_R,$BA, [MB]
                   DelayMS 5
                   I2CIn SDA,SCL,BMP180_R,$BC, [MC]
                   DelayMS 5
                   I2CIn SDA,SCL,BMP180_R,$BE, [MD]
                   DelayMS 5
   AC1 = (AC1.HighByte<<8) + AC1.LowByte  
   AC2 = (AC2.HighByte<<8) + AC2.LowByte
    AC3 = (AC3.HighByte<<8) + AC3.LowByte  
    AC4 = (AC4.HighByte<<8) + AC4.LowByte         
    AC5 = (AC5.HighByte<<8) + AC5.LowByte
    AC6 = (AC6.HighByte<<8) + AC6.LowByte
    B1 = (B1.HighByte<<8) + B1.LowByte
    B2 = (B2.HighByte<<8) + B2.LowByte
   MB = (MB.HighByte<<8) + MB.LowByte
    MC = (MC.HighByte<<8) + MC.LowByte
   MD = (MD.HighByte<<8) + MD.LowByte
Return
;======sıcaklık hesap=======================
Thesap:
X1 = (UT - AC6)                
   X1 = (X1 *AC5)/32768              
    X2 = (MC * 2048)
    X3 = X2/(X1 + MD)
    TOPLA = X1 + X3
    T = (TOPLA + 8)/160  
Return

basınc olcme ısıde yapılabılır dıye dusunuyorum

ete

Ben basınç hesabından söz ediyorum.
Ete

Dtmf

ıyı gunler ETE hocam protonda (-) ısaretlı ıslemler yapmak zor demıstınız bmp180 baya ugrastırıdemıstınız benı baya ugrastırdı ama sonunda basardım.(-)ısaretlı ıslemlerı

Dtmf

#39
ete hocam ıyı gunler bmp180 pascal degerını almayıbasardımdedıgınız gıbı matematık ılsemı baya ugrastırdı kalıbrasyon verılerı vs.sagolun hocam yardımlarınız olmasa basarmazdım.bu arada hocam (-) ısaretlı degerlerle ıslem yapmak ıcın degıskenın degerını DWORD yaparsak (-)  ısaretı ıle ıslem yapabılıyoruz örnegın PRINT AT 1,1,SDEC ılede bu ısaretlıdegerlerı okuyabılıyoruz.selamtle kalın
asagıdakı programın sonucu pascall dır.
Device =16F877A
  XTAL = 20
  ALL_DIGITAL TRUE
 TRISA=0:PORTA=0
 TRISB=0:PORTB=0
 TRISC=%11000000:PORTC=0
 TRISD=0:PORTD=0        
 TRISE=0:PORTE=0
;-------------------------------------------------------------------------------
Declare LCD_TYPE alpha  
Declare LCD_LINES 2
Declare LCD_INTERFACE 4
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.0
Declare LCD_ENPIN PORTB.1
Symbol SDA =PORTC.7
Symbol  SCL =PORTC.6

  Symbol BMP180 = $EE  'BMP180 I2C address
  Symbol CalDatStAd = $AA 'Start address for cal. data.
  Symbol InitConvReg = $F4
  Symbol PReadReg = $34 
  Symbol TReadReg = $2E 
  Symbol BASINCOKU=$F6 
  
  Dim wAC2 As Word
  Dim wAC3 As Word
  Dim wMB As Word
  Dim wMC As Word

;_______________________________
  Dim AC1 As Word
  Dim AC2 As Word;ISARETLI
  Dim AC3 As Word ;ISARETLI
  Dim AC4 As Word
  Dim AC5 As Word   ;WORD
  Dim AC6 As Word ;WORD

  Dim B1 As Word
  Dim B2 As Word
  Dim B6 As DWord  ;BU DEGISKENDEGRINI DWORD OLACAK OLMAZSA HESAPLAR FARKLI CIKAR (- )DEGERLI DEGISKENLER MUTLAKA DWORD OLARAK ALINMALI
  
  Dim B3 As Word
  Dim B4 As Word
  Dim B7 As DWord
  
  
  
  Dim MB As Word;ISARETLI
  Dim MC As Word;ISARETLI
  Dim MD As Word
;________________________________
  Dim OSS As Byte 
  OSS=3       ; OSS DEGERI BURADA AYARLANDI
  Dim UP As  Word
  Dim UPM As  Word
  Dim UPL As Word
  Dim UPX As Byte
  Dim UPLONG As DWord
  
  Dim UT As Word    ;WORD
  Dim UTXL As Word    ;WORD
  Dim PT As Word

  Dim X1 As DWord
  Dim X2 As DWord
  Dim X3 As DWord
  
  Dim XC As Word
  Dim XD As Word
;==================================
Dim XX1 As DWord
Dim XX2 As DWord
Dim XX3 As DWord
Dim PTOPLA As DWord
 Dim P As DWord
 Dim PR As DWord
 
  Dim YUK As DWord         ; YUK 
;==================================
       Dim T As Float
       DelayMS 1000
 ;GoSub KALIBRE
 ;AC1=126
 ;AC2=-77
 ;AC3=-14149
 ;AC4=32346
 ;AC5=25949
 ;AC6=16606
 ;B1=6515
 ;B2=4
 ;MB=-32768
 ;MC=-8711
 ;MD=2242
 
       DelayMS 500
 Cls      ;EKRANI TEMIZLE
 UPLONG=0
;===========================================
BASLA: 
;I2CIn SDA,SCL,$EE,$AA, [AC1,AC2,AC3,AC4,AC5,AC6,B1,B2,MB,MC,MD];BU BOLUMU KALIBRE DEGERLERINI ALDIKTAN SONRA BIR KOSEYE NOT EDIYORUZ VE KAPATIYORUZ BIDAHA KULLANMIYORUZ 
DelayMS 100
                 I2COUT SDA,SCL,BMP180,InitConvReg,[TReadReg] 
                  DelayMS 10  
                 I2CIN SDA,SCL,BMP180,$F6,[UT]
                 UT=(UT.HighByte<<8) + UT.LowByte
                 UT=UT+3000
                 
                 DelayMS 10
                GoSub Thesap
                 
                Print At 1,1,"C: ",Dec T
                 Print At 2,1,"UP:",Dec UP
                 Print At 3,1,"YUK:",SDEC YUK
                 Print At 4,1,"PASCAL:",Dec PR 
                 
I2COUT SDA,SCL,BMP180,$F4,[$34+ (OSS << 6)]
DelayMS 100
I2CIN SDA,SCL,BMP180,$F6,[UPM,UPL,UPX]   ;UPL
UP=UPM-800    ;BU BOLUME KALIBRASYON YAPILDI -----------------------------KALIBRASYON YAPILDI------------------------------
GoSub BHESAP
DelayMS 500
Print At 2,1,"                    "                                                            
Print At 3,1,"                    "
Print At 4,1,"                    "
GoTo BASLA
;=====================sıcaklık hesap=======================
Thesap:
X1 = ((UT-22910)*32757)  ;X1 = ((UT-23153)*32757)
X1=X1/32768              
    X2 = (-11799*2048)   ;8711 OLABILIR
    X2 = X2/(X1 +5800)
    X3=X1+X2
    T =X3/16;18.5 
    T=X3/100  
Return
;=======================BASINC HESAPLAMA=============================
BHESAP:
B6 =X3-4000;3950                                    
    XX1 = (B6*B6)/4096 
    XX1 = (40 * XX1)/2048 ;B2  
                                      ; BU BOLUM TAMAM DEGERLER NORMAL
    XX2= -72*B6/2048 ;AC2
    XX3= XX1 + XX2 ;XX3
;_______________________________________    
    B3= (408 * 4)+ XX3)<<OSS ;AC1
    B3= (B3+2)/4   ;B3 DEGERI NORMAL DEGER 425
 
    XX1 = (-14149 * B6)/8192  ; XX1 AC3 DEGERR NORMAL 2765
 
    XX2= (B6 * B6)/4096   ;DEGER 625
   XX2 = 6200 * XX2/65536 ;XX1 B1 ; DEGER NORMAL 59 ..=YUK = 6200 * XX2/65536
 
    XX3 = XX1 + XX2 
    XX3 = (XX3 + 2)/4 ;DEGER NORMAL707
;________________________________________
 
    B4 = (XX3 + 32768)
    B4 = (B4/32768)*32323 ;AC4   DEGER NORMAL 33055
;__________________________________________ BURAYA KADAR DEGERLER NORMAL

   B7=(UP-B3)*50000 ;PDEGERI 23843
                      If B7<$80000000 Then
                      P=(B7*2)/4
                      Else
                      P=(B7/B4)*2
                      EndIf
;P=P-2440
 XX1=(P/256)
 XX1=XX1*(P/256) ;DEGER NORMAL
 XX1=XX1-5500; BU BOLUME KALIBRASYON YAPILDI------74589 SABITLENDI--------------------KALIBRASYON YAPILDI------------------------------
 XX1=(XX1*3038)/65536 ;DEGER NORMAL
   
   X2=(-7117*P)/65536 ; -7859
   PR=XX1+XX2+3791
   PR=P+PR/16
Return

kudretuzuner

Merhaba,
iş,güçlerden dolayı uzun bir aradan beri forumlara pek giremiyordum.Bu pandemi dolayısı ile evde mahsur kalınca biraz forumları dolaşayım dedim.Tabii ki öncelik de ETE hocayı ziyaret etmek olacaktı.Bu arada geçen yıl yanıt verdiğim bir yazıyı görünce katkıda bulunmak ve de videolarını vermek istedim. PIC tarafına "asm" ile yazmaktayım ama bildiğiniz gibi programa asm yazıp kodları yazıp end asm ile bitirirseniz program işlev görüyor diye hatırımda kaldı.Yanılıyorsam düzeltin lütfen.Aşağıda linklerini verdiğim çalışmalarım MPX...serisi bir basınç sensörü ile kompresör basıncını okumaktır.Geçen yıl yazdığım notta da kalibrasyon çok önemlidir.Videoların birinde Basınç sensörünün 0-5 volt arası verdiği değişimi ben ADC0804 entegresi ile 8 bite çevirip 00-FF arası değerleri PIC'e okutup yorumlattım.                                                                             https://www.youtube.com/watch?v=uxFWuR82EB0
https://www.youtube.com/watch?v=TW28yoTdjEw
https://www.youtube.com/watch?v=NbSZSXbPE3M
https://www.youtube.com/watch?v=kYM0XgX8ylY&t=15s
https://www.youtube.com/watch?v=rC29k9Q-8p8
https://www.youtube.com/channel/UC2Vc0XsWVImMevBNrqMOLVQ/videos?view_as=subscriber

Dtmf

Elinize saglik guzel bir calisma olmus bende en kisa zamanda deneyecegim sonuclari atarim 😊 bmp 180 atmosfetik basinc sensoru arkadasin kol satinde altude ve basinci paskal cinsinden olcebiliyordu ben bizzat karsilastirdim ondalik kisimda +/-2 veya 3 farkla gosteriyor.

Powered by EzPortal