1. В сообществе нашего форума Вконтакте создан раздел по продаже электронных компонентов.
    Каждый может продать в нем свои залежавшиеся детали. Подробности здесь.

Решено Stm32F103c8t6 + Bmp180 нужна Помощь (MikroBasic)

Тема в разделе "STM8/STM32", создана пользователем Дмитрий BASIC, 19 ноя 2017.

  1. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    Мужики помогите кто чем может несколько дней сижу не чего не понимаю ,
    Курю сейчас Новый редактор (MikroBasic PRO for ARM) и не могу ни как подружить с датчиком BMP180
    все подключил залил код но значения выдает не те !!!
    ПРобывал в коде подставлять значения из Даташита все считает правильно !!!
     
    : Stm32F103c8t6, bmp180
  2. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    PHP:
    module Bmp_180_mikroCC
    const I2C_BMP085 as byte 0x77
    const I2C_BMP085_w 0xEE
    const I2C_BMP085_r 0xEF

    dim _AC1
    _AC2_AC3_B1_B2_MB_MC_MD  as integer
    dim _AC4
    _AC5_AC6 as word
    dim _UT
    _UP_x1_x2_x3_b3_b5_b6_pbmp180_tempbmp180_pres as longint
    dim _b4
    _b7 as longword
    dim MMR
    TT  as float
    dim _oss 
    as byte

    dim result 
    as integer
    dim parameter 
    as short[24]
    dim date_ as byte[4]


    sub procedure bmp_180_init()
    sub procedure bmp_180_Temp()
    sub procedure bmp_180_Pres()

    implements

    sub procedure bmp_180_init()
    dim adress_index as integer
    ' for adress_index = 0 to 20 step 2
      date_[0] = 0xAA '
    adress_index
      I2C2_Start
    ()
      
    I2C2_Write(I2C_BMP085,@date_,1END_MODE_RESTART)
      
    I2C2_Read(I2C_BMP085,@parameter,22,END_MODE_STOP)
      
    _AC1 parameter[0]<<parameter[1]
      
    _AC2 parameter[2]<<parameter[3]
      
    _AC3 parameter[4]<<parameter[5]
      
    _AC4 parameter[6]<<parameter[7]
      
    _AC5 parameter[8]<<parameter[9]
      
    _AC6 parameter[10]<<parameter[11]
      
    _B1 parameter[12]<<parameter[13]
      
    _B2 parameter[14]<<parameter[15]
      
    _MB parameter[16]<<parameter[17]
      
    _MC parameter[18]<<parameter[19]
      
    _MD parameter[20]<<parameter[21]

      
    'result = parameter[0]<<8 + parameter[1]
       ' 
    select case adress_index
          
    'case 0
            '
    _AC1 result
         
    ' case 2
           ' 
    _AC2 result
         
    ' case 4
           ' 
    _AC3 result
          
    'case 6
          '  
    _AC4 result
          
    'case 8
          '  
    _AC5 result
          
    'case 10
          ' 
    _AC6 result
          
    'case 12
          ' 
    _B1 result
          
    'case 14
          ' 
    _B2 result
          
    'case 16
          ' 
    _MB result
          
    'case 18
           '
    _MC result
          
    'case 20
          ' 
    _MD result
          
    'end select
        '
    next adress_index
    end sub
    sub procedure bmp_180_Temp
    ()
      
    date_[0]=0xF4
      date_
    [1]=0x2E
      I2C2_Start
    ()
      
    I2C2_Write(I2C_BMP085,@date_,2,END_MODE_RESTART)
      
    Delay_ms(5)
      
    date_[0]=0xF6
      
    'I2C1_Start()
      I2C2_Write(I2C_BMP085,@date_,1,END_MODE_RESTART)
      I2C2_Read(I2C_BMP085,@parameter,2,END_MODE_STOP)
      _UT = parameter[0]<<8 + parameter[1]
      _x1=(_UT-_AC6)*_AC5>> 15
      _x2=_MC << 11/(_x1+_MD)
      _b5=_x1+_x2
      bmp180_temp=(_b5+8)>>4
    end sub


    sub procedure bmp_180_Pres()
    _oss=3
    date_[0] = 0xF4
    '
    date_[1] = 0x34
       select 
    case _oss
      
    case 0
       date_
    [1] = 0x34
      
    case 1
       date_
    [1] = 0x74
      
    case 2
       date_
    [1] = 0xB4
      
    case 3
       date_
    [1] = 0xF4
      end select
      I2C2_Start
    ()
      
    I2C2_Write(I2C_BMP085,@date_,2,END_MODE_STOP)
      
    select case _oss
      
    case 0
       Delay_ms
    (5)
      case 
    1
       Delay_ms
    (8)
      case 
    2
       Delay_ms
    (14)
      case 
    3
       Delay_ms
    (26)
       
    end select
      date_
    [0]=0xF6
      I2C2_Start
    ()
      
    I2C2_Write(I2C_BMP085,@date_,1,END_MODE_RESTART)
      
    I2C2_Read(I2C_BMP085,@parameter,3,END_MODE_STOP)
      
    _UP = (parameter[0]<<16+parameter[1]<<8+parameter[2])>>(8-_oss)
    _b6 _b5-4000
    _x1
    =(_b2*(_b6*_b6>>12))>>11
    _x2
    =_AC2*_b6>>11
    _x3 
    _x1+_x2
    _b3 
    = (((_AC1*4+_x3)<<_oss)+2)/4
    _x1 
    = (_AC3*_b6)>>13
    _x2 
    = (_b1*(_b6*_b6>>12))>>16
    _x3 
    = ((_x1+_x2)+2)>>2
    _b4 
    _AC4*(_x3+32768)>>15
    _b7 
    = (_UP-_b3)*(50000>>_oss)
    If 
    _b4 <= 0 Then
    _b4 
    _b4 * -1
    end 
    if
    if 
    _b7<0x80000000 then
    _p 
    = (_b7<<1)/_b4
    else
      
    _p = (_b7/_b4)<<1
    end 
    if
    _x1=(_p>>8)*(_p>>8)
    _x1 = (_x1*3038)>>16
    _x2 
    = (-7357*_p)>>16
    _p 
    _p+(_x1+_x2+3791)>>4
    bmp180_pres
    =_p
    end sub

    end
    .
  3. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.584
    Симпатии:
    357
    Адрес:
    Алматы
    Т.е. не правильно считываются значения по I2C? А какая схема подключения датчика к МК?
    Я в бейсике ничего не понимаю, но вот тут вопрос возник:
    PHP:
    const I2C_BMP085 as byte 0x77
    const I2C_BMP085_w 0xEE
    const I2C_BMP085_r 0xEF
    Одна константа прописана как as byte, а две другие нет, я так понимаю as определяет тип переменной/константы?
  4. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    подключен к PB10 PB11 это i2c2 , константы это я пробывал разные подставлять но работает только на 0x77 но значения неправильные считывает
  5. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.584
    Симпатии:
    357
    Адрес:
    Алматы
    А подтяжка к питанию на линиях присутствует?
  6. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    да подтяжка есть
    --- Сообщения объединены, 19 ноя 2017 ---
    bmp180.jpg
  7. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    на AVR датчики нормально кажут !
  8. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.584
    Симпатии:
    357
    Адрес:
    Алматы
    Эх, код для меня совсем не очевиден, что, например, означает апостроф в 'date_[1] = 0x34? Нашел вот такую статейку, здесь хорошее описание, но на Си.
  9. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    апостраф это тоже что // в си , тоесть коментарий
  10. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    я уже код туды сюды 100 раз проверял , повторюсь подставлял значения из даташита выводит результат правильно а вот с i2c читает что то не то
  11. UL7AAjr

    UL7AAjr В доску свой

    Сообщения:
    1.915
    Симпатии:
    317
    Род занятий:
    инженер-программист
    Адрес:
    Алма-Ата
    Там отладчик есть, нужно загрузить ответ от датчика в буфер и посмотреть, что пришло по I2C. Если приходит ерунда - копать I2C, иначе логику кода.

    BMP180 нормально с трехвольтовыми МК работает?
    Последнее редактирование: 20 ноя 2017
  12. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    Все парни спасибо нашел причину датчик бракованный попался что сверху на фото чуть замят , походу поэтому и приверает

    брачек.jpg
    --- Сообщения объединены, 20 ноя 2017 ---


    От 3.3 вольта нормально работает
  13. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.584
    Симпатии:
    357
    Адрес:
    Алматы
    Бывает же такоеo_O
  14. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    203
    Симпатии:
    107
    Интересно у него показания сдвинуты в большую сторону , отнял коэффициент и вроде как нормально показывает наверное изгиб крышки вносит свои поправки :) воощем посмотрю сильно расхождения будет молотком и в урну:wtf::D
    Buba_Chkhadze и radioengineer нравится это.
  15. _VN_

    _VN_ В доску свой

    Сообщения:
    492
    Симпатии:
    64
    Род занятий:
    Инженер
    Адрес:
    Алматы
    Интересная вещица... Как насчёт метрологии? Стабильность в диапазоне температур и линейность? Как-то пришлось ремонтировать измеритель артериального давления. Там стоит мембрана из бронзового сплава и ёмкостный датчик. Метрология на уровне индикаторов - есть такая категория измерительных приборов. Точнее, никаких цифр по части точности, стабильности или линейности в паспорте на прибор не приводится. Метрологической аттестации они не требуют, а пользователь и этим доволен.
    Впрочем, всё зависит от поставленной цели...
    Посмотрел описание на датчик - "...Не допускайте попадания на датчик влаги и прямых солнечных лучей..." - влага в воздухе есть всегда и, возможно, его эксплуатация не допускает её присутствие в воздухе.
    Последнее редактирование: 24 ноя 2017

Поделиться этой страницей