News:

;) This forum is the property of Proton software developers

Main Menu

BMP180 Pressure, Temperature and Altitude Sensor.

Started by Bob (G8GFA), Feb 01, 2021, 11:37 AM

Previous topic - Next topic

Bob (G8GFA)

Example code for the BMP180 Pressure, temperature and altitude Sensor.

'****************************************************************
'*  Name    : BMP180.BAS                                        *
'*  Author  : Bob Marshall                                      *
'*  Date    : 5/28/2016                                         *
'*  Version : 1.0                                               *
'*  Notes   : This program uses a BMP180 pressure sensor        *
'*          : to measure current pressure, temperature &        *
'*          : altitude.                                         *
'****************************************************************

  Device = 18F25K22
  Xtal = 64

  Declare All_Digital = true

 'Calculated Baudrate = 115108 @ Xtal 64MHz, Error = -0.08%
  Declare Hserial_RCSTA  = 144 ; Enable continuous receive
  Declare Hserial_TXSTA  = 36  ; Enable transmit, BRGH = 1
  Declare Hserial_Clear  = On  ; Clear overflow automatically
  Declare Hserial_SPBRG  = 138 ; Baud Rate Generator Low Byte Value
  SPBRGH                 = 0   ; Baud Rate Generator High Byte Value
  BAUDCON.3              = 1   ; Enable the 16 bit Baud Rate Generator
;-------------------------------------------------------------------------------

  Symbol BMP180 = $EE  'BMP180 I2C address
  Symbol CalDatStAd = $AA 'Start address for cal. data.
  Symbol InitConvReg = $F4
  Symbol PReadReg = $34
  Symbol TReadReg = $2E 

  Dim AC1 As SWord
  Dim AC2 As SWord
  Dim AC3 As SWord
  Dim AC4 As Word
  Dim AC5 As Word
  Dim AC6 As Word

  Dim B1 As SWord
  Dim B2 As SWord
  Dim B3 As SDword
  Dim B4 As Dword
  Dim B5 As SDword
  Dim B6 As SDword
  Dim B7 As Dword

  Dim MB As SWord
  Dim MC As SWord
  Dim MD As SWord

  Dim OSS As Byte
  Dim UP As  Word
  Dim UT As SWord
  Dim XLSB As Byte
  Dim UPLong As SDword

  Dim X1 As SDword
  Dim X2 As SDword
  Dim X3 As SDword

  Dim Temperature As SWord
  Dim TempOut As Float

  Dim P As SDword
  Dim POut As Float

  Dim Altitude As Float
  Dim Temp1 As Float

  Main:

  DelayMS 1000
  Clear
  OSS = 3 'Oversampling mode. Values of 0-3 acceptable.
  HSerOut [10,13,"Ready to Start",13,10]

' Read calibration data
  HBusIn BMP180,CalDatStAd,[AC1,AC2,AC3,AC4,AC5,AC6,B1,B2,MB,MC,MD]

  While

      HBusOut BMP180,InitConvReg,[TReadReg]  'Start temperature conversion.
      DelayMS 10   'wait for conversion to complete.
      HBusIn BMP180,$F6,[UT] 'UT has the uncompensated temperature value.

      X1 = ((UT-AC6)*AC5)/32768
      X2 = (MC * 2048)/(X1+MD)
      B5 = X1+X2
      Temperature = (B5+8)/16
      TempOut = Temperature/10
     
' $B0 is the hex value for the degree symbol.
      HSerOut ["Current temperature is: ",Dec1 TempOut,$B0,"C",13,10]

' Calculate the pressure in Pascals

      HBusOut BMP180,InitConvReg,[PReadReg]  'Start pressure conversion.
      DelayMS 100    'wait for conversion to complete.
      HBusIn BMP180,$F6,[UP,XLSB] 'UP+XLSB contain the uncompensated pressure value.

      UPLong =  ((UP * 256)+ XLSB) >> (8-OSS)
   
' Now lets have some fun with numbers!
      B6  = B5 - 4000
      X1  = (B2 * (B6 * B6 /4096))/2048
      X2  = (AC2 * B6)/2048
      X3  = X1+X2
      B3  = (((AC1 * 4 + X3) << OSS)+2)/4
      X1  = ( AC3 * B6 )/8192
      X2  = (B1 * (B6 * B6/4096))/65536
      X3  = ((X1 + X2 ) + 2)/4
      B4  = (AC4 * ( X3 + 32768))/32768
      B7  = (UPLong - B3) *(50000 >> OSS)
      If B7 <  $80000000 Then
          P=(B7 * 2)/B4
      Else
          P=(B7 / B4) * 2
      EndIf
      X1  = (P/256) * (P/256)
      X1  = (X1 * 3038)/65536
      X2  = (-7357 * P)
      X2 = X2/65536
      P   = P + ( ( X1 + X2 + 3791)/16 )
      POut = (P/100)

      HSerOut ["Current pressure: ",Dec2 POut,"hPa",13,10]

' Altitude = 44330*((1-(p/101325)) ^ (1/5.255))
' 101325 represents the 'standard' pressure at sea level. Adjust to suit.

      Temp1 = Pow((P/102400),0.190295)
      Altitude =  44330 *(1-Temp1)
      HSerOut ["Current altitude: ",Dec2 Altitude ,"m",13,10,13,10]
      DelayMS 2000

  Wend

' End of program


' **** Added by Fuse Configurator ****
' Use the Fuse Configurator plug-in to change these settings


  Config_Start
      FOSC = HSMP    ;HS oscillator (medium power 4-16 MHz)
      PLLCFG = On    ;Oscillator multiplied by 4
      PRICLKEN = On    ;Primary clock enabled
      FCMEN = OFF    ;Fail-Safe Clock Monitor disabled
      IESO = OFF    ;Oscillator Switchover mode disabled
      PWRTEN = OFF    ;Power up timer disabled
      BOREN = SBORDIS    ;Brown-out Reset enabled in hardware only (SBOREN is disabled)
      BORV = 190    ;VBOR set to 1.90 V nominal
      WDTEN = Off    ;WDT is always enabled. SWDTEN bit has no effect
      WDTPS = 32768    ;1:32768
      CCP2MX = PORTC1    ;CCP2 input/output is multiplexed with RC1
      PBADEN = On    ;PORTB<5:0> pins are configured as analog input channels on Reset
      CCP3MX = PORTB5    ;P3A/CCP3 input/output is multiplexed with RB5
      HFOFST = On    ;HFINTOSC output and ready status are not delayed by the oscillator stable status
      T3CMX = PORTC0    ;T3CKI is on RC0
      P2BMX = PORTB5    ;P2B is on RB5
      MCLRE = EXTMCLR    ;MCLR pin enabled, RE3 input pin disabled
      STVREN = On    ;Stack full/underflow will cause Reset
      LVP = On    ;Single-Supply ICSP enabled if MCLRE is also 1
      XINST = OFF    ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
      Debug = OFF    ;Disabled
      Cp0 = OFF    ;Block 0 (000800-001FFFh) not code-protected
      CP1 = OFF    ;Block 1 (002000-003FFFh) not code-protected
      CP2 = OFF    ;Block 2 (004000-005FFFh) not code-protected
      CP3 = OFF    ;Block 3 (006000-007FFFh) not code-protected
      CPB = OFF    ;Boot block (000000-0007FFh) not code-protected
      CPD = OFF    ;Data EEPROM not code-protected
      WRT0 = OFF    ;Block 0 (000800-001FFFh) not write-protected
      WRT1 = OFF    ;Block 1 (002000-003FFFh) not write-protected
      WRT2 = OFF    ;Block 2 (004000-005FFFh) not write-protected
      WRT3 = OFF    ;Block 3 (006000-007FFFh) not write-protected
      WRTC = OFF    ;Configuration registers (300000-3000FFh) not write-protected
      WRTB = OFF    ;Boot Block (000000-0007FFh) not write-protected
      WRTD = OFF    ;Data EEPROM not write-protected
      EBTR0 = OFF    ;Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
      EBTR1 = OFF    ;Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
      EBTR2 = OFF    ;Block 2 (004000-005FFFh) not protected from table reads executed in other blocks
      EBTR3 = OFF    ;Block 3 (006000-007FFFh) not protected from table reads executed in other blocks
      EBTRB = OFF    ;Boot Block (000000-0007FFh) not protected from table reads executed in other blocks
  Config_End

;**** End of Fuse Configurator Settings ****

Bravo

Hi Bob,
I used your baud rate settings to get an 18F26K22 to send serial at 115200 to control a cheap FY6900 function generator to do Raymond Rife type healing.
My scope has has successfully decoded the strings, which means I have won, thanks to a bit of your code.  I am sending the output of the function gen into a 20 watt
amplifier, & then into a coil which is enclosed in a former & cover with handle printed on a 3D printer. Hopefully it will slow a couple of ailments. It has improved
my tinnitus & a bit of skin cancer so far.
Retired RF Tech

Pepe


Fanie

Quote from: Bravo on Dec 30, 2021, 10:17 AMHopefully it will slow a couple of ailments. It has improved my tinnitus & a bit of skin cancer so far.

My brother is a professor in this type of healing, if you administer the correct frequencies for the specific problem it will disappear.  Medical institutions only treat ailments, but do not cure, there is no money in curing.

At times I go completely deaf, especially if the wife...  ;)

ken_k

I'm going way off track here. I seem to remember the original Rife machine had a FM component as well as the AM component to the signal.
One of the original machines was recovered; here is the schematic. Sorry no PIC microcontroller.complete.pdf

Fanie

As far as I know certain frequencies have a specific effect on cells, depending on the properties. Imposing on carrier frequencies could have an undesired effect, and a very reduced desired frequency amplitude.
There is a library of frequencies for a specific treatment, try to obtain that first.  The audio amplifier is correct, you want to adjust the amplitude to where it is tolerant for the user, and not more than 30V.  Some frequencies are felt more than others and depend from person to person.
Remember, the body heals itself, the rife only activate the immune system to repair the problem area.
With this, the user should seriously look at his/her diet.  A bit like having blood poison from a rusted nail, if you treat the symptoms it won't heal, you have to remove the nail first.
Start using cayenne pepper, turmeric, cinnamon, dill and a few others, then determine what must be taken with them to be taken up.
For instance turmeric should be added after the rice was boiled, else if boiled it loses it's properties, and the body can only absorb it if black pepper and or oil (like olive oil) is added.  Avoid car oil (sunflower oil), which is actually diesel.  Use butter instead of margarine.
Don't try to heal all your descendants in one sitting, ie cayenne pepper, add to taste and increase as you get more used to it.
Stop eating lean meat, your body can only uptake the proteins when there is fat.  Fat does not make fat, if it does there is another problem.  Your brain needs fat to function properly.
Some foods can have a very negative effect and should be avoided, like white sugar, salts created an artificial way (use sea salt instead), bread (gluten), and so on.  This again depends from person to person.  Some can, some can't.
Be careful of the distorted disinformation on foods on the internet.  There are good sources, do your research.
You already accepted responsibility for your own health, well done, now just do the rest.  Question everything.