Вт сен 18, 2018 14:10:39
Вт сен 18, 2018 14:19:23
Вт сен 18, 2018 14:31:53
Вт сен 18, 2018 14:45:47
Конечно хочу. Логи с логического анализатора и подробное описание этих багов (включая фото железа и монтажа) в студию! Так же, не забудьте приложить "картинку что на шине" с осциллографа.AndTer писал(а):Хотите из личного? Попадались устройства которые отвечали на адреса не соответствующие даташиту. А так же попадались устройства которые слали мусор когда считывали не с них, а с других устройств.
Вт сен 18, 2018 14:56:12
Вт сен 18, 2018 15:07:33
Вт сен 18, 2018 15:21:58
Вт сен 18, 2018 15:22:41
Вт сен 18, 2018 16:20:34
char RDB (unsigned char addr)
{
char t = 0;
TWI_Start(0xEC);
TWI_WriteData(addr);
TWI_Stop();
TWI_Start(0xED);
t = TWI_ReadData();
TWI_Stop();
return t;
}
Вт сен 18, 2018 19:00:18
Ср ноя 21, 2018 14:28:16
Сб ноя 24, 2018 11:33:35
void Initial_BMP280()
{
while((id() != CHIP_ID) && !status());
BMP280_Start(WRITE);
TWI_WriteData(0x88); // начальный адрес для чтения калибровочных бит
BMP280_Start(READ);
for (uint8_t i = 0; i<26; i++)
{
if (i==25) dig[i] = TWI_ReadData(NACK);
else dig[i] = TWI_ReadData(ACK);
}
BMP280_Start(WRITE);
TWI_WriteData(0xF4); // ctrl_meas register
TWI_WriteData(0xB7);
BMP280_Start(WRITE);
TWI_WriteData(0xF5); // config register
TWI_WriteData(0x80);
TWI_Stop();
dig_T1 = (dig[1] << 8) | dig[0];
dig_T2 = (dig[3] << 8) | dig[2];
dig_T3 = (dig[5] << 8) | dig[4];
dig_P1 = (dig[7] << 8) | dig[6];
dig_P2 = (dig[9] << 8) | dig[8];
dig_P3 = (dig[11] << 8) | dig[10];
dig_P4 = (dig[13] << 8) | dig[12];
dig_P5 = (dig[15] << 8) | dig[14];
dig_P6 = (dig[17] << 8) | dig[16];
dig_P7 = (dig[19] << 8) | dig[18];
dig_P8 = (dig[21] << 8) | dig[20];
dig_P9 = (dig[23] << 8) | dig[22];
}
Ср ноя 28, 2018 16:37:21
temper_float = ((temper_int * 5 + 128) >> 8);
temper_float /= 100.0f;
if(temper_float>100) //если температура <0
{
temper_float =409 - temper_float;
temper_float = -temper_float; //Маркировка отрицательной температуры
}
return temper_float;
Ср ноя 28, 2018 16:53:37
bmp280_compensate_T(((int32_t)ptd[3]<<12) + ((int32_t)ptd[4]<<4) + ((int32_t)ptd[5]>>4));
bmp280_compensate_T(((int32_t)ptd[3]<<12) | ((int32_t)ptd[4]<<4) | ((int32_t)ptd[5]>>4));
Ср ноя 28, 2018 17:07:21
Ср ноя 28, 2018 17:14:36
// Returns temperature in DegC, double precision. Output value of “51.23” equals 51.23 DegC.
// t_fine carries fine temperature as global value
BME280_S32_t t_fine;
double BME280_compensate_T_double(BME280_S32_t adc_T)
{
double var1, var2, T;
var1 = (((double)adc_T)/16384.0 – ((double)dig_T1)/1024.0) * ((double)dig_T2);
var2 = ((((double)adc_T)/131072.0 – ((double)dig_T1)/8192.0) *
(((double)adc_T)/131072.0 – ((double) dig_T1)/8192.0)) * ((double)dig_T3);
t_fine = (BME280_S32_t)(var1 + var2);
T = (var1 + var2) / 5120.0;
return T;
}
// Returns pressure in Pa as double. Output value of “96386.2” equals 96386.2 Pa = 963.862 hPa
double BME280_compensate_P_double(BME280_S32_t adc_P)
{
double var1, var2, p;
var1 = ((double)t_fine/2.0) – 64000.0;
var2 = var1 * var1 * ((double)dig_P6) / 32768.0;
var2 = var2 + var1 * ((double)dig_P5) * 2.0;
var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);
var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;
var1 = (1.0 + var1 / 32768.0)*((double)dig_P1);
if (var1 == 0.0)
{
return 0; // avoid exception caused by division by zero
}
p = 1048576.0 – (double)adc_P;
p = (p – (var2 / 4096.0)) * 6250.0 / var1;
var1 = ((double)dig_P9) * p * p / 2147483648.0;
var2 = p * ((double)dig_P8) / 32768.0;
p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;
return p;
}
// Returns humidity in %rH as as double. Output value of “46.332” represents 46.332 %rH
double bme280_compensate_H_double(BME280_S32_t adc_H);
{
double var_H;
var_H = (((double)t_fine) – 76800.0);
var_H = (adc_H – (((double)dig_H4) * 64.0 + ((double)dig_H5) / 16384.0 * var_H)) *
(((double)dig_H2) / 65536.0 * (1.0 + ((double)dig_H6) / 67108864.0 * var_H *
(1.0 + ((double)dig_H3) / 67108864.0 * var_H)));
var_H = var_H * (1.0 – ((double)dig_H1) * var_H / 524288.0);
if (var_H > 100.0)
var_H = 100.0;
else if (var_H < 0.0)
var_H = 0.0;
return var_H;
}
Ср ноя 28, 2018 17:24:53
Ср ноя 28, 2018 21:05:55
Чт ноя 29, 2018 04:45:42
Чт ноя 29, 2018 07:06:46