bexus_i2c_cis.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "bexus_i2c_cis.h"
  2. /**----------------variables---------------------------*/
  3. uint8_t i2c_adresse_druck_cis[] = {0x78,0x72,0x02};//Adresse vom Chip,Startbefehl,Ram
  4. uint8_t buff_druck_cis[4];//Buffer für reingehende Byte-Kette
  5. struct Dataset *data_cis;
  6. /**-----------------------------------------------------*/
  7. /**------------------functions--------------------------*/
  8. void Pressure_Cis_Init(){
  9. for(int i=0;i<sizeof(i2c_adresse_druck_cis);i++)
  10. i2c_adresse_druck_cis[i]=i2c_adresse_druck_cis[i]<<1;//Alle Registeradressen um 1 nach links shiften, sonst werden die nicht erkannt
  11. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET); //Sensor mit Flanke einschalten
  12. HAL_Delay(5);
  13. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET); //Sensor mit Flanke einschalten
  14. HAL_Delay(1); //1ms delay nach Anschalten, das ist bei diesem Chip sehr Charackteristisch und sorgt manchmal für Verwirrung
  15. //HAL_I2C_Master_Transmit(&hi2c2,i2c_adresse_druck_cis[0],&i2c_adresse_druck_cis[1],1,10); //Startbefehl für den Chip senden
  16. //HAL_I2C_Master_Transmit(&hi2c2,i2c_adresse_druck_cis[0],&i2c_adresse_druck_cis[2],1,10); //Ram auswählen
  17. HAL_I2C_Master_Transmit(&hi2c2,i2c_adresse_druck_cis[0],&i2c_adresse_druck_cis[1],2,10); //Startbefehl für den Chip senden und Ram auswählen
  18. }
  19. int Pressure_Cis_Read(){
  20. data_cis = &Dataset_Master[buff_sensor_data_index];
  21. HAL_I2C_Master_Receive(&hi2c2,i2c_adresse_druck_cis[0],buff_druck_cis,4,15); //Daten-Byte Kette einlesen (Reihenfolge:Druck,Temperatur)
  22. // Byte: 15...8 7...0
  23. data_cis->pressure_cis_raw = (buff_druck_cis[0]<<8)+ buff_druck_cis[1]; //Rohdaten-hälften von 2x8Bit zu 1x16Bit konvertieren
  24. data_cis->temperature_cis_raw = (buff_druck_cis[2]<<8)+ buff_druck_cis[3];
  25. data_cis->pressure_cis = ((data_cis->pressure_cis_raw-2097.)/23592)*100000;
  26. // data_cis->temperature_cis=(data_cis->temperature_cis_raw-14940.5)/256.89+10;
  27. data_cis->temperature_cis=(data_cis->temperature_cis_raw-25689./2+2096)/256.89+10;
  28. return HAL_OK;
  29. }
  30. /**-----------------------------------------------------*/