|
Forum Index : Microcontroller and PC projects : DUINOMITE BME280
| Author | Message | ||||
| kiaandre Newbie Joined: 21/11/2017 Location: FrancePosts: 18 |
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 StatesPosts: 600 |
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: AustraliaPosts: 655 |
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: FrancePosts: 18 |
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: AustraliaPosts: 655 |
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: FrancePosts: 18 |
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 KingdomPosts: 10573 |
Have you tried converting this |
||||
| PeterB Guru Joined: 05/02/2015 Location: AustraliaPosts: 655 |
Kiaandre Do you only need humidity? Peter |
||||
| PeterB Guru Joined: 05/02/2015 Location: AustraliaPosts: 655 |
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: FrancePosts: 18 |
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: FrancePosts: 18 |
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: AustraliaPosts: 655 |
G'Day You might have a look at SENSIRION SHT 30-ARP-B. Peter |
||||
| PeterB Guru Joined: 05/02/2015 Location: AustraliaPosts: 655 |
OOOPS It's from Peter Mather. If I had read his post I'd have seen it. Peter |
||||
| The Back Shed's forum code is written, and hosted, in Australia. | © JAQ Software 2025 |