Advertisement
Guest User

compas5

a guest
May 24th, 2012
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. #include <stm32f10x.h>
  2. #include <math.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. #include "DWLOS_config.h"
  7. #include "DWLOS.h"
  8. #include "i2c_interrupt.h"
  9.  
  10.  
  11. #define  __zSHT
  12. #include "main.h"
  13. #include "z_SHT.h"
  14. #include "z_S65.h"
  15.  
  16.  
  17. //==============================================================================
  18. // SHT21 Init
  19. //==============================================================================
  20. void SHT_init (void)
  21.  {
  22.   LOG_ADD('s');
  23.  
  24.   if (I2C_IS_BLOCK())
  25.    {
  26.     Set_Timer (SHT_init, 100);
  27.    }
  28.   else
  29.    {
  30.     SHT_I2C -> M_OutFnc = SHT_init_end;
  31.     SHT_I2C -> S_adress = I2C_SHT_ADR;
  32.     I2C_MEM_ADR_NOT_TX(SHT_I2C);
  33.     I2C_DIRECTION_TX(SHT_I2C);
  34.     *(SHT_I2C -> M_Tx_Buffer + 0) = SHT_WRITE_REG;
  35.     *(SHT_I2C -> M_Tx_Buffer + 1) = 0x00;
  36.     SHT_I2C -> Tx_count = 2;
  37.     I2C_START(SHT_I2C);
  38.    }
  39.  }
  40.  
  41. void SHT_init_end (void)
  42.  {
  43.   I2C_STOP_WAIT(SHT_I2C);
  44.   LOG_ADD('t');
  45.  
  46.   SHT_I2C -> M_OutFnc = I2C_idle_out;
  47.   Set_Timer (SHT_read_begin, 500);
  48.  }
  49.  
  50.  
  51. //==============================================================================
  52. // SHT21 data read
  53. //==============================================================================
  54. void SHT_read_begin (void)
  55.  {
  56.   if (I2C_IS_BLOCK())
  57.    {
  58.     Set_Timer (SHT_read_begin, 100);
  59.    }
  60.   else
  61.    {
  62.     I2C_BLOCK;
  63.     LOG_ADD('\n');
  64.     LOG_ADD('c');
  65.     SHT_I2C -> M_OutFnc = &SHT_read_T;
  66.     SHT_I2C -> S_adress = I2C_SHT_ADR;
  67.     I2C_MEM_ADR_TX(SHT_I2C);
  68.     *(SHT_I2C -> I2C_MEM_ADRESS) = SHT_READ_T;
  69.     I2C_DIRECTION_TX(SHT_I2C);
  70.     SHT_I2C -> Tx_count = 0;
  71.     SHT_I2C -> Rx_count = 2;
  72.     I2C_START(SHT_I2C);// */
  73.    }
  74.  }
  75.  
  76. void SHT_read_T (void)
  77.  {
  78.   uint16_t temp;
  79.  
  80.   I2C_READ_END(SHT_I2C);
  81.   I2C_STOP_WAIT(SHT_I2C);
  82.   temp = SHT_I2C -> I2C -> DR;
  83.  
  84.   temp = ((*(SHT_I2C -> M_Rx_Buffer + 0) << 8) | *(SHT_I2C -> M_Rx_Buffer + 1)) & 0xFFFC;
  85.   T = -46.85 + (175.72 * temp) / (65536);
  86.  
  87.  
  88.   SHT_I2C -> M_OutFnc = &SHT_read_RH;
  89.   SHT_I2C -> S_adress = I2C_SHT_ADR;
  90.   I2C_MEM_ADR_TX(SHT_I2C);
  91.   *(SHT_I2C -> I2C_MEM_ADRESS) = SHT_READ_RH;
  92.   I2C_DIRECTION_TX(SHT_I2C);
  93.   SHT_I2C -> Tx_count = 0;
  94.   SHT_I2C -> Rx_count = 2;
  95.   I2C_START(SHT_I2C);
  96.  }
  97.  
  98. void SHT_read_RH (void)
  99.  {
  100.   uint16_t temp;
  101.  
  102.   LOG_ADD('C');
  103.   LOG_ADD('\n');
  104.  
  105.   I2C_READ_END(SHT_I2C);
  106.   I2C_STOP_WAIT(SHT_I2C);
  107.   I2C_UNBLOCK;
  108.   temp = SHT_I2C -> I2C -> DR;
  109.  
  110.   temp = ((*(SHT_I2C -> M_Rx_Buffer + 0) << 8) | *(SHT_I2C -> M_Rx_Buffer + 1)) & 0xFFFC;
  111.   RH = -6 + (125 * temp) / (65536);
  112.  
  113.  
  114.   S65 -> x = 3;
  115.   S65 -> y = 162;
  116. //  sprintf (S65 -> txt, "T:  RH: \n\n");
  117.   sprintf (S65 -> txt, "T: %4.1f RH: %4.1f", T, RH);
  118.   S65 -> len = strlen (S65 -> txt);
  119.   Set_Task (S65_puts_n);
  120.  
  121.   Set_Timer (SHT_read_begin, 3500);
  122.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement