Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 12:00 13 Nov 2025 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : DUINOMITE BME280

Author Message
kiaandre
Newbie

Joined: 21/11/2017
Location: France
Posts: 18
Posted: 01:47pm 31 Oct 2019
Copy link to clipboard 
Print this post

Bonjour
Je cherche le code (MMBASIC 4.5) pour faire fonctionner le BME280 sur un Duinomite Mega
J'ai recherché sur le net mais rien ......
Merci par avance
 
Quazee137

Guru

Joined: 07/08/2016
Location: United States
Posts: 600
Posted: 09:08pm 31 Oct 2019
Copy link to clipboard 
Print this post

Have a look here
Regardez ici

At Adafruit

More at Adafruit

and at randomnerdtutorials
Edited 2019-11-01 07:29 by Quazee137
 
PeterB
Guru

Joined: 05/02/2015
Location: Australia
Posts: 655
Posted: 08:25am 01 Nov 2019
Copy link to clipboard 
Print this post

G'Day (Bonjour) (Hi)

To my great shame I gave up and used Arduino.
1. I just wanted to see how well they work and
2. I figured I could pass my data over to a PIC or whatever if needed.

I know, I'm a coward

Peter
 
kiaandre
Newbie

Joined: 21/11/2017
Location: France
Posts: 18
Posted: 08:35am 01 Nov 2019
Copy link to clipboard 
Print this post

HELLO
HE YES, I AM STILL ON A DUINOMITY (PIC32MX and in MMBASIC 4.5)
, I find for the BMP180 but I hold on the BME280, if you could help me, I thank you in advance
(by GOOGLE Translation) - THANK YOU
 
PeterB
Guru

Joined: 05/02/2015
Location: Australia
Posts: 655
Posted: 09:50am 01 Nov 2019
Copy link to clipboard 
Print this post

I have been looking at the BME280 data.
I am now in a state of shock.
I remember when I looked at the thing some time ago I didn't like it.
I think use an Arduino to extract the data and than send it to the PIC. The Arduino nano is a nice little device. The alternative is insanity.
I could be wrong. Quarzee is a very clever bloke so he may come up with a clever idea.

Peter
 
kiaandre
Newbie

Joined: 21/11/2017
Location: France
Posts: 18
Posted: 10:02am 01 Nov 2019
Copy link to clipboard 
Print this post

I heard about the conversion of Arduino code to PIC, but I'm skeptical about the result, the other solution is to find the code an I2C humidity sensor that works on DUINOMITE MMBASIC 4.5
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 10573
Posted: 10:08am 01 Nov 2019
Copy link to clipboard 
Print this post

Have you tried converting this
 
PeterB
Guru

Joined: 05/02/2015
Location: Australia
Posts: 655
Posted: 10:24am 01 Nov 2019
Copy link to clipboard 
Print this post

Kiaandre

Do you only need humidity?

Peter
 
PeterB
Guru

Joined: 05/02/2015
Location: Australia
Posts: 655
Posted: 10:53am 01 Nov 2019
Copy link to clipboard 
Print this post

option explicit  
option default none  
'  
'  BME280 routines and test harness  
'  
const BME280_ADDRESS                    = &H77  
const BME280_REGISTER_T1                = &H88  
const BME280_REGISTER_P1                = &H8E  
const BME280_REGISTER_H1                = &HA1  
const BME280_REGISTER_H2                = &HE1  
const BME280_REGISTER_CHIPID            = &HD0  
const BME280_REGISTER_CONTROLHUMID      = &HF2  
const BME280_REGISTER_CONTROL           = &HF4  
const BME280_REGISTER_PRESSUREDATA      = &HF7  
const BME280_REGISTER_TEMPDATA          = &HFA  
const BME280_REGISTER_HUMIDDATA         = &HFD  
'  
dim integer s16=&HFFFFFFFFFFFF0000 , s16b=&H8000
dim integer s12=&HFFFFFFFFFFFFF000 , s12b=&H800
dim integer s8= &HFFFFFFFFFFFFFF00  , s8b=&H80
'        
DIM INTEGER T1,T2,T3     'uint16_t, int16_t, int16_t  
DIM INTEGER P1,P2,P3,P4,P5,P6,P7,P8,P9    'uint16_t, 8 x int16_t  
DIM INTEGER H1,H2,H3,H4,H5,H6     'uint8_t, int16_t , uint8_t, int16_t, int16_t, int8_t  
'
dim INTEGER t_fine  'used to store accurate temp reading from temp conversion for use in pressure and humidity conversions
'  
'  Test program  
'  
bme280_init  
do  
 print bme280_read_temp()  'must be run before pressure or humidity
 print bme280_read_pressure()  
 print bme280_read_humidity()  
 pause 2000  
loop  
'  
end  
'  
'***************************************************************************************************
'  
function  bme280_read_temp() as float  
 local integer var1,var2,adc_T  
 local adc%(2)  
 i2c write BME280_ADDRESS,1,1,BME280_REGISTER_TEMPDATA  
 i2c read BME280_ADDRESS,0,3,adc%()  
 adc_T=((adc%(0)<<16) OR (adc%(1)<<8) or adc%(2))>>4  
 var1  = ((((adc_T>>3) - (T1 <<1))) * T2) \ q(11)  
 var2  = (((((adc_T>>4) - (T1)) * ((adc_T\ q(4)) - (T1))) \ q(12)) * (T3)) \ q(14)  
 t_fine = var1 + var2  
 bme280_read_temp = ((t_fine * 5 + 128) \ q(8))/100.0  
end function  

function  bme280_read_pressure() as float  
 local integer var1, var2, adc_P, p  
 local adc%(2)  
 i2c write BME280_ADDRESS,1,1,BME280_REGISTER_PRESSUREDATA  
 i2c read BME280_ADDRESS,0,3,adc%()  
 adc_P=((adc%(0)<<16) OR (adc%(1)<<8) or adc%(2))>>4  
 var1 = t_fine - 128000  
 var2 = var1 * var1 * P6  
 var2 = var2 + ((var1 * P5)<<17)  
 var2 = var2 + (P4 << 35)  
 var1 = ((var1 * var1 * P3)\ q(8)) +    ((var1 * P2)<<12)  
 var1 = ((1<<47)+var1)*P1\ q(33)  
 if var1 = 0 THEN  
   bme280_read_pressure =  0' avoid exception caused by division by zero  
   exit function  
 endif  
 p = 1048576 - adc_P  
 p = (((p<<31) - var2)*3125) \ var1  
 var1 = (P9 * (p\ q(13)) * (p\ q(13))) \ q(25)  
 var2 = (P8 * p) \ q(19)  
 p = ((p + var1 + var2) \ q(8)) + (P7<<4)  
 bme280_read_pressure = p/25600.0  
end function  
'  
function  bme280_read_humidity() as float  
 local integer v_x1,adc_H  
 local adc%(1)  
 i2c write BME280_ADDRESS,1,1,BME280_REGISTER_HUMIDDATA  
 i2c read BME280_ADDRESS,0,2,adc%()  
 adc_H=(adc%(0)<<8) or adc%(1)  
 v_x1 = t_fine - 76800  
 v_x1=(((((adc_H<<14)-((H4)<<20)-(H5*v_x1))+16384)\ q(15))*(((((((v_x1*H6)\ q(10))*(((v_x1*H3)\ q(11))+32768))\ q(10))+2097152)*H2+8192)\ q(14)))  
 v_x1 = (v_x1 - (((((v_x1 \ q(15)) * (v_x1 \ q(15))) \ q(7)) * (H1)) \ q(4)))  
 if v_x1< 0 then v_x1 = 0  
 if v_x1 > 419430400 then v_x1= 419430400  
 bme280_read_humidity = (v_x1\ q(12)) / 1024.0  
end function  

sub bme280_init  
 local i%,cal%(17)  
 i2c open 400,1000 '400KHz bus speed  
 i2c write BME280_ADDRESS,1,1,BME280_REGISTER_CHIPID  
 i2c read BME280_ADDRESS,0,1,i%  
 if i%<>&H60 then print "Error BME280 not found"  
 '  
 i2c write BME280_ADDRESS,1,1,BME280_REGISTER_T1  
 i2c read BME280_ADDRESS,0,6,cal%()  
 T1=cal%(0) OR (cal%(1)<< 8)  
 T2=cal%(2) OR (cal%(3)<< 8):   if T2 and s16b then T2=T2 OR s16 'sign extend if required  
 T3=cal%(4) OR (cal%(5)<< 8):   if T3 and s16b then T3=T3 OR s16
 '  
 i2c write BME280_ADDRESS,1,1,BME280_REGISTER_P1  
 i2c read BME280_ADDRESS,0,18,cal%()  
 P1=cal%(0) OR (cal%(1)<<8)  
 P2=cal%(2) OR (cal%(3)<<8):   if P2 and s16b then P2=P2 OR s16 'sign extend if required  
 P3=cal%(4) OR (cal%(5)<<8):   if P3 and s16b then P3=P3 OR s16
 P4=cal%(6) OR (cal%(7)<<8):   if P4 and s16b then P4=P4 OR s16
 P5=cal%(8) OR (cal%(9)<<8):   if P5 and s16b then P5=P5 OR s16
 P6=cal%(10) OR (cal%(11)<<8):   if P6 and s16b then P6=P6 OR s16
 P7=cal%(12) OR (cal%(13)<<8):   if P7 and s16b then P7=P7 OR s16
 P8=cal%(14) OR (cal%(15)<<8):   if P8 and s16b then P8=P8 OR s16
 P9=cal%(16) OR (cal%(17)<<8):   if P9 and s16b then P9=P9 OR s16
 '  
 i2c write BME280_ADDRESS,1,1,BME280_REGISTER_H1  
 i2c read BME280_ADDRESS,0,1,H1  
 i2c write BME280_ADDRESS,1,1,BME280_REGISTER_H2  
 i2c read BME280_ADDRESS,0,7,cal%()  
 H2=cal%(0) OR (cal%(1)<< 8):   if H2 and s16b then H2=H2 OR s16 'sign extend if required  
 H3=cal%(2)  
 H6=cal%(6):   if H6 and s8b then H6=H6 OR s8 'sign extend if required  
 H4=(cal%(3)<<4) OR (cal%(4) and &H0F): if H4 and s12b then H4=H4 OR s12 'sign extend if required  
 H5=(cal%(5)<<4) OR (cal%(4)>>4):  if H5 and s12b then H5=H5 OR s12
 '  
 i2c write BME280_ADDRESS,0,2,BME280_REGISTER_CONTROLHUMID,&H05 '16x oversampling humidity
 i2c write BME280_ADDRESS,0,2,BME280_REGISTER_CONTROL,&HB7      '16x oversampling pressure/temp, normal mode  
 '  
end sub  
'
function q(x as integer) as integer  'returns 2 raised to the power  
 q=(1<<x)  
End CFunction  

I found this. I have no idea where it came from.

Peter
 
kiaandre
Newbie

Joined: 21/11/2017
Location: France
Posts: 18
Posted: 03:53pm 01 Nov 2019
Copy link to clipboard 
Print this post

The DUINOMITE uses the MMBASIC 4.5, the problem for example the syntax "Const" does not exist in version 4.5 of the MMBAIC which is the latest version of the material DUINOMITE, I think PeterB is not far from the goal - Thank you  
 
kiaandre
Newbie

Joined: 21/11/2017
Location: France
Posts: 18
Posted: 03:54pm 01 Nov 2019
Copy link to clipboard 
Print this post

The DUINOMITE uses the MMBASIC 4.5, the problem for example the syntax "Const" does not exist in version 4.5 of the MMBAIC which is the latest version of the material DUINOMITE, I think PeterB is not far from the goal - Thank you
 
PeterB
Guru

Joined: 05/02/2015
Location: Australia
Posts: 655
Posted: 11:51pm 01 Nov 2019
Copy link to clipboard 
Print this post

G'Day

You might have a look at SENSIRION SHT 30-ARP-B.

Peter
 
PeterB
Guru

Joined: 05/02/2015
Location: Australia
Posts: 655
Posted: 01:16am 02 Nov 2019
Copy link to clipboard 
Print this post

OOOPS

It's from Peter Mather. If I had read his post I'd have seen it.

Peter
 
Print this page


To reply to this topic, you need to log in.

The Back Shed's forum code is written, and hosted, in Australia.
© JAQ Software 2025