ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 3 از 3
  1. #1
    2011/06/13
    84
    0

    تبدیل کد اردینو سنسور bmp085 برای کد ویژن

    با سلام دوستان این کد برای ماژول bmp085 که فشار و دما وارتفاع از سطح دریا محاسبه میکند میخواهم انرا به کد ویژن تبدیل کنم اما ندانم چطوری؟
    کد:
    /****************************************************************************
    * BMP085.cpp - BMP085/I2C (Digital Pressure Sensor) library for Arduino   *
    * Copyright 2010-2012 Filipe Vieira & various contributors         *
    *                                      *
    * This file is part of BMP085 Arduino library.               *
    *                                      *
    * This library is free software: you can redistribute it and/or modify   *
    * it under the terms of the GNU Lesser General Public License as published *
    * by the Free Software Foundation, either version 3 of the License, or   *
    * (at your option) any later version.                    *
    *                                      *
    * This program is distributed in the hope that it will be useful,      *
    * but WITHOUT ANY WARRANTY; without even the implied warranty of      *
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the       *
    * GNU Lesser General Public License for more details.            *
    *                                      *
    * You should have received a copy of the GNU Lesser General Public License *
    * along with this program. If not, see <http://www.gnu.org/licenses/>.   *
    ****************************************************************************/
    /****************************************************************************
    * Tested on Arduino Mega with BMP085 Breakout                *
    * SDA  -> pin 20  (no pull up resistors)                 *
    * SCL  -> pin 21  (no pull up resistors)                 *
    * XCLR -> not connected                          *
    * EOC  -> not connected                          *
    * GND  -> pin GND                             *
    * VCC  -> pin 3.3V                             *
    * NOTE: SCL and SDA needs pull-up resistors for each I2C bus.        *
    * 2.2kOhm..10kOhm, typ. 4.7kOhm                      *
    *****************************************************************************/
    #include <Wire.h>
    #include <BMP085.h>
    
    BMP085::BMP085() {
     _dev_address = BMP085_ADDR;
     _pressure_waittime[0] = 5; // These are maximum convertion times.
     _pressure_waittime[1] = 8; // It is possible to use pin EOC (End Of Conversion)
     _pressure_waittime[2] = 14;// to check if conversion is finished (logic 1) 
     _pressure_waittime[3] = 26;// or running (logic 0) insted of waiting for convertion times.
     _cm_Offset = 0;
     _Pa_Offset = 0;        // 1hPa = 100Pa = 1mbar
     
     oldEMA = 0;
    }
    
    void BMP085::init() { 
     init(MODE_STANDARD, 0, true);
    }
    
    void BMP085::init(byte _BMPMode, int32_t _initVal, bool _Unitmeters){   
     getCalData();        // initialize cal data
     calcTrueTemperature();   // initialize b5
     setMode(_BMPMode);
     _Unitmeters ? setLocalAbsAlt(_initVal) : setLocalPressure(_initVal); 
    }
    
    byte BMP085::getDevAddr() {  
     return _dev_address;
    }
    
    byte BMP085::getMode(){
     return _oss;
    }
    
    void BMP085::setMode(byte _BMPMode){
     _oss = _BMPMode;
    }
    
    void BMP085::setLocalPressure(int32_t _Pa){  
     int32_t tmp_alt;
     
     _param_datum = _Pa;  
     getAltitude(&tmp_alt);  // calc altitude based on current pressure  
     _param_centimeters = tmp_alt;
    }
    
    void BMP085::setLocalAbsAlt(int32_t _centimeters){ 
     int32_t tmp_Pa;
     
     _param_centimeters = _centimeters;  
     getPressure(&tmp_Pa);  // calc pressure based on current altitude
     _param_datum = tmp_Pa;
    }
    
    void BMP085::setAltOffset(int32_t _centimeters){
     _cm_Offset = _centimeters;
    }
    
    void BMP085::sethPaOffset(int32_t _Pa){
     _Pa_Offset = _Pa;
    }
    
    void BMP085::zeroCal(int32_t _Pa, int32_t _centimeters){
     setAltOffset(_centimeters - _param_centimeters);  
     sethPaOffset(_Pa - _param_datum);  
    }
    
    void BMP085::getPressure(int32_t *_Pa){  
     long TruePressure;
    
     calcTruePressure(&TruePressure); 
     *_Pa = TruePressure / pow((1 - (float)_param_centimeters / 4433000), 5.255) + _Pa_Offset;
     // converting from float to int32_t truncates toward zero, 1010.999985 becomes 1010 resulting in 1 Pa error (max). 
     // Note that BMP085 abs accuracy from 700...1100hPa and 0..+65؛C is +-100Pa (typ.)
    }
    
    void BMP085::getAltitude(int32_t *_centimeters){
     long TruePressure;
    
     calcTruePressure(&TruePressure); 
     *_centimeters = 4433000 * (1 - pow((TruePressure / (float)_param_datum), 0.1903)) + _cm_Offset; 
     // converting from float to int32_t truncates toward zero, 100.999985 becomes 100 resulting in 1 cm error (max).
    }
    
    void BMP085::getTemperature(int32_t *_Temperature) {
     calcTrueTemperature();              // force b5 update
     *_Temperature = ((b5 + 8) >> 4);
    }
    
    void BMP085::calcTrueTemperature(){
     long ut,x1,x2;
    
     //read Raw Temperature
     writemem(CONTROL, READ_TEMPERATURE);
     delay(5);                     // min. 4.5ms read Temp delay
     readmem(CONTROL_OUTPUT, 2, _buff); 
     ut = ((long)_buff[0] << 8 | ((long)_buff[1]));  // uncompensated temperature value
     
     // calculate temperature
     x1 = ((long)ut - ac6) * ac5 >> 15;
     x2 = ((long)mc << 11) / (x1 + md);
     b5 = x1 + x2;
    }
    
    void BMP085::calcTruePressure(long *_TruePressure) {
     long up,x1,x2,x3,b3,b6,p;
     unsigned long b4,b7;
     int32_t tmp; 
    
     #if AUTO_UPDATE_TEMPERATURE
     calcTrueTemperature();    // b5 update 
     #endif 
     
     //read Raw Pressure
     writemem(CONTROL, READ_PRESSURE+(_oss << 6));
     delay(_pressure_waittime[_oss]);  
     readmem(CONTROL_OUTPUT, 3, _buff); 
     up = ((((long)_buff[0] <<16) | ((long)_buff[1] <<8) | ((long)_buff[2])) >> (8-_oss)); // uncompensated pressure value
     
     // calculate true pressure
     b6 = b5 - 4000;       // b5 is updated by calcTrueTemperature().
     x1 = (b2* (b6 * b6 >> 12)) >> 11;
     x2 = ac2 * b6 >> 11;
     x3 = x1 + x2;
     tmp = ac1;
     tmp = (tmp * 4 + x3) << _oss;
     b3 = (tmp + 2) >> 2;
     x1 = ac3 * b6 >> 13;
     x2 = (b1 * (b6 * b6 >> 12)) >> 16;
     x3 = ((x1 + x2) + 2) >> 2;
     b4 = (ac4 * (uint32_t) (x3 + 32768)) >> 15;
     b7 = ((uint32_t)up - b3) * (50000 >> _oss);
     p = b7 < 0x80000000 ? (b7 << 1) / b4 : (b7 / b4) << 1;
     x1 = (p >> 8) * (p >> 8);
     x1 = (x1 * 3038) >> 16;
     x2 = (-7357 * p) >> 16;
     *_TruePressure = p + ((x1 + x2 + 3791) >> 4);
    }
    
    void BMP085::dumpCalData() {
     Serial.println("---cal data start---");
     Serial.print("ac1:");
     Serial.println(ac1,DEC);
     Serial.print("ac2:");
     Serial.println(ac2,DEC);
     Serial.print("ac3:");
     Serial.println(ac3,DEC);
     Serial.print("ac4:");
     Serial.println(ac4,DEC);
     Serial.print("ac5:");
     Serial.println(ac5,DEC);
     Serial.print("ac6:");
     Serial.println(ac6,DEC); 
     Serial.print("b1:");
     Serial.println(b1,DEC);
     Serial.print("b2:");
     Serial.println(b2,DEC); 
     Serial.print("mb:");
     Serial.println(mb,DEC);
     Serial.print("mc:");
     Serial.println(mc,DEC);
     Serial.print("md:");
     Serial.println(md,DEC);
     Serial.println("---cal data end---");
    }
    
    //PRIVATE methods
    
    void BMP085::getCalData() {
     readmem(CAL_AC1, 2, _buff);
     ac1 = ((int)_buff[0] <<8 | ((int)_buff[1]));
     readmem(CAL_AC2, 2, _buff);
     ac2 = ((int)_buff[0] <<8 | ((int)_buff[1]));
     readmem(CAL_AC3, 2, _buff);
     ac3 = ((int)_buff[0] <<8 | ((int)_buff[1]));
     readmem(CAL_AC4, 2, _buff);
     ac4 = ((unsigned int)_buff[0] <<8 | ((unsigned int)_buff[1]));
     readmem(CAL_AC5, 2, _buff);
     ac5 = ((unsigned int)_buff[0] <<8 | ((unsigned int)_buff[1]));
     readmem(CAL_AC6, 2, _buff);
     ac6 = ((unsigned int)_buff[0] <<8 | ((unsigned int)_buff[1])); 
     readmem(CAL_B1, 2, _buff);
     b1 = ((int)_buff[0] <<8 | ((int)_buff[1])); 
     readmem(CAL_B2, 2, _buff);
     b2 = ((int)_buff[0] <<8 | ((int)_buff[1])); 
     readmem(CAL_MB, 2, _buff);
     mb = ((int)_buff[0] <<8 | ((int)_buff[1]));
     readmem(CAL_MC, 2, _buff);
     mc = ((int)_buff[0] <<8 | ((int)_buff[1]));
     readmem(CAL_MD, 2, _buff);
     md = ((int)_buff[0] <<8 | ((int)_buff[1])); 
    }
    
    
    void BMP085::writemem(uint8_t _addr, uint8_t _val) {
     Wire.beginTransmission(_dev_address);  // start transmission to device 
     Wire.write(_addr); // send register address
     Wire.write(_val); // send value to write 
     Wire.endTransmission(); // end transmission
    }
    
    void BMP085::readmem(uint8_t _addr, uint8_t _nbytes, uint8_t __buff[]) {
     Wire.beginTransmission(_dev_address); // start transmission to device 
     Wire.write(_addr); // sends register address to read from
     Wire.endTransmission(); // end transmission
     
     Wire.beginTransmission(_dev_address); // start transmission to device 
     Wire.requestFrom(_dev_address, _nbytes);// send data n-bytes read
     uint8_t i = 0; 
     while (Wire.available()) {
      __buff[i] = Wire.read(); // receive DATA
      i++;
     }
     Wire.endTransmission(); // end transmission
    }





    یا این کدها که جفتش یکی است


    /************************************************** **************************
    * BMP085.cpp - BMP085/I2C (Digital Pressure Sensor) library for Arduino *
    * Copyright 2010-2012 Filipe Vieira & various contributors *
    * *
    * This file is part of BMP085 Arduino library. *
    * *
    * This library is free software: you can redistribute it and/or modify *
    * it under the terms of the GNU Lesser General Public License as published *
    * by the Free Software Foundation, either version 3 of the License, or *
    * (at your option) any later version. *
    * *
    * This program is distributed in the hope that it will be useful, *
    * but WITHOUT ANY WARRANTY; without even the implied warranty of *
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
    * GNU Lesser General Public License for more details. *
    * *
    * You should have received a copy of the GNU Lesser General Public License *
    * along with this program. If not, see <http://www.gnu.org/licenses/>. *
    ************************************************** **************************/
    /************************************************** **************************
    * Tested on Arduino Mega with BMP085 Breakout *
    * SDA -> pin 20 (no pull up resistors) *
    * SCL -> pin 21 (no pull up resistors) *
    * XCLR -> not connected *
    * EOC -> not connected *
    * GND -> pin GND *
    * VCC -> pin 3.3V *
    * NOTE: SCL and SDA needs pull-up resistors for each I2C bus. *
    * 2.2kOhm..10kOhm, typ. 4.7kOhm *
    ************************************************** ***************************/
    #include <Wire.h>
    #include <BMP085.h>

    BMP085::BMP085() {
    _dev_address = BMP085_ADDR;
    _pressure_waittime[0] = 5; // These are maximum convertion times.
    _pressure_waittime[1] = 8; // It is possible to use pin EOC (End Of Conversion)
    _pressure_waittime[2] = 14;// to check if conversion is finished (logic 1)
    _pressure_waittime[3] = 26;// or running (logic 0) insted of waiting for convertion times.
    _cm_Offset = 0;
    _Pa_Offset = 0; // 1hPa = 100Pa = 1mbar

    oldEMA = 0;
    }

    void BMP085::init() {
    init(MODE_STANDARD, 0, true);
    }

    void BMP085::init(byte _BMPMode, int32_t _initVal, bool _Unitmeters){
    getCalData(); // initialize cal data
    calcTrueTemperature(); // initialize b5
    setMode(_BMPMode);
    _Unitmeters ? setLocalAbsAlt(_initVal) : setLocalPressure(_initVal);
    }

    byte BMP085::getDevAddr() {
    return _dev_address;
    }

    byte BMP085::getMode(){
    return _oss;
    }

    void BMP085::setMode(byte _BMPMode){
    _oss = _BMPMode;
    }

    void BMP085::setLocalPressure(int32_t _Pa){
    int32_t tmp_alt;

    _param_datum = _Pa;
    getAltitude(&tmp_alt); // calc altitude based on current pressure
    _param_centimeters = tmp_alt;
    }

    void BMP085::setLocalAbsAlt(int32_t _centimeters){
    int32_t tmp_Pa;

    _param_centimeters = _centimeters;
    getPressure(&tmp_Pa); // calc pressure based on current altitude
    _param_datum = tmp_Pa;
    }

    void BMP085::setAltOffset(int32_t _centimeters){
    _cm_Offset = _centimeters;
    }

    void BMP085::sethPaOffset(int32_t _Pa){
    _Pa_Offset = _Pa;
    }

    void BMP085::zeroCal(int32_t _Pa, int32_t _centimeters){
    setAltOffset(_centimeters - _param_centimeters);
    sethPaOffset(_Pa - _param_datum);
    }

    void BMP085::getPressure(int32_t *_Pa){
    long TruePressure;

    calcTruePressure(&TruePressure);
    *_Pa = TruePressure / pow((1 - (float)_param_centimeters / 4433000), 5.255) + _Pa_Offset;
    // converting from float to int32_t truncates toward zero, 1010.999985 becomes 1010 resulting in 1 Pa error (max).
    // Note that BMP085 abs accuracy from 700...1100hPa and 0..+65؛C is +-100Pa (typ.)
    }

    void BMP085::getAltitude(int32_t *_centimeters){
    long TruePressure;

    calcTruePressure(&TruePressure);
    *_centimeters = 4433000 * (1 - pow((TruePressure / (float)_param_datum), 0.1903)) + _cm_Offset;
    // converting from float to int32_t truncates toward zero, 100.999985 becomes 100 resulting in 1 cm error (max).
    }

    void BMP085::getTemperature(int32_t *_Temperature) {
    calcTrueTemperature(); // force b5 update
    *_Temperature = ((b5 + 8) >> 4);
    }

    void BMP085::calcTrueTemperature(){
    long ut,x1,x2;

    //read Raw Temperature
    writemem(CONTROL, READ_TEMPERATURE);
    delay(5); // min. 4.5ms read Temp delay
    readmem(CONTROL_OUTPUT, 2, _buff);
    ut = ((long)_buff[0] << 8 | ((long)_buff[1])); // uncompensated temperature value

    // calculate temperature
    x1 = ((long)ut - ac6) * ac5 >> 15;
    x2 = ((long)mc << 11) / (x1 + md);
    b5 = x1 + x2;
    }

    void BMP085::calcTruePressure(long *_TruePressure) {
    long up,x1,x2,x3,b3,b6,p;
    unsigned long b4,b7;
    int32_t tmp;

    #if AUTO_UPDATE_TEMPERATURE
    calcTrueTemperature(); // b5 update
    #endif

    //read Raw Pressure
    writemem(CONTROL, READ_PRESSURE+(_oss << 6));
    delay(_pressure_waittime[_oss]);
    readmem(CONTROL_OUTPUT, 3, _buff);
    up = ((((long)_buff[0] <<16) | ((long)_buff[1] <<8) | ((long)_buff[2])) >> (8-_oss)); // uncompensated pressure value

    // calculate true pressure
    b6 = b5 - 4000; // b5 is updated by calcTrueTemperature().
    x1 = (b2* (b6 * b6 >> 12)) >> 11;
    x2 = ac2 * b6 >> 11;
    x3 = x1 + x2;
    tmp = ac1;
    tmp = (tmp * 4 + x3) << _oss;
    b3 = (tmp + 2) >> 2;
    x1 = ac3 * b6 >> 13;
    x2 = (b1 * (b6 * b6 >> 12)) >> 16;
    x3 = ((x1 + x2) + 2) >> 2;
    b4 = (ac4 * (uint32_t) (x3 + 32768)) >> 15;
    b7 = ((uint32_t)up - b3) * (50000 >> _oss);
    p = b7 < 0x80000000 ? (b7 << 1) / b4 : (b7 / b4) << 1;
    x1 = (p >> 8) * (p >> 8);
    x1 = (x1 * 3038) >> 16;
    x2 = (-7357 * p) >> 16;
    *_TruePressure = p + ((x1 + x2 + 3791) >> 4);
    }

    void BMP085::dumpCalData() {
    Serial.println("---cal data start---"
    Serial.print("ac1:"
    Serial.println(ac1,DEC);
    Serial.print("ac2:"
    Serial.println(ac2,DEC);
    Serial.print("ac3:"
    Serial.println(ac3,DEC);
    Serial.print("ac4:"
    Serial.println(ac4,DEC);
    Serial.print("ac5:"
    Serial.println(ac5,DEC);
    Serial.print("ac6:"
    Serial.println(ac6,DEC);
    Serial.print("b1:"
    Serial.println(b1,DEC);
    Serial.print("b2:"
    Serial.println(b2,DEC);
    Serial.print("mb:"
    Serial.println(mb,DEC);
    Serial.print("mc:"
    Serial.println(mc,DEC);
    Serial.print("md:"
    Serial.println(md,DEC);
    Serial.println("---cal data end---"
    }

    //PRIVATE methods

    void BMP085::getCalData() {
    readmem(CAL_AC1, 2, _buff);
    ac1 = ((int)_buff[0] <<8 | ((int)_buff[1]));
    readmem(CAL_AC2, 2, _buff);
    ac2 = ((int)_buff[0] <<8 | ((int)_buff[1]));
    readmem(CAL_AC3, 2, _buff);
    ac3 = ((int)_buff[0] <<8 | ((int)_buff[1]));
    readmem(CAL_AC4, 2, _buff);
    ac4 = ((unsigned int)_buff[0] <<8 | ((unsigned int)_buff[1]));
    readmem(CAL_AC5, 2, _buff);
    ac5 = ((unsigned int)_buff[0] <<8 | ((unsigned int)_buff[1]));
    readmem(CAL_AC6, 2, _buff);
    ac6 = ((unsigned int)_buff[0] <<8 | ((unsigned int)_buff[1]));
    readmem(CAL_B1, 2, _buff);
    b1 = ((int)_buff[0] <<8 | ((int)_buff[1]));
    readmem(CAL_B2, 2, _buff);
    b2 = ((int)_buff[0] <<8 | ((int)_buff[1]));
    readmem(CAL_MB, 2, _buff);
    mb = ((int)_buff[0] <<8 | ((int)_buff[1]));
    readmem(CAL_MC, 2, _buff);
    mc = ((int)_buff[0] <<8 | ((int)_buff[1]));
    readmem(CAL_MD, 2, _buff);
    md = ((int)_buff[0] <<8 | ((int)_buff[1]));
    }


    void BMP085::writemem(uint8_t _addr, uint8_t _val) {
    Wire.beginTransmission(_dev_address); // start transmission to device
    Wire.write(_addr); // send register address
    Wire.write(_val); // send value to write
    Wire.endTransmission(); // end transmission
    }

    void BMP085::readmem(uint8_t _addr, uint8_t _nbytes, uint8_t __buff[]) {
    Wire.beginTransmission(_dev_address); // start transmission to device
    Wire.write(_addr); // sends register address to read from
    Wire.endTransmission(); // end transmission

    Wire.beginTransmission(_dev_address); // start transmission to device
    Wire.requestFrom(_dev_address, _nbytes);// send data n-bytes read
    uint8_t i = 0;
    while (Wire.available()) {
    __buff[i] = Wire.read(); // receive DATA
    i++;
    }
    Wire.endTransmission(); // end transmission
    }




    خواهش میکنم مرا راهنمایی بفرمایید
  2. #2
    2011/06/13
    84
    0

    پاسخ : تبدیل کد اردینو سنسور bmp085 برای کد ویژن

    من میخواهم با at mega16 یا atmega32
    بنویسمش
  3. #3
    2013/03/04
    199
    10

    پاسخ : تبدیل کد اردینو سنسور bmp085 برای کد ویژن

    سلام
    دوست عزیز نمیشه و امکانش نیست. چون کامپایلر آردوینو با کدویژن فرق داره و باید کل کد و کتابخونه ها از نو نوشته بشه که خیلی کار سختیه. یعنی از صفر شروع کنی با کد ویژن بهتر نتیجه میگیری.
نمایش نتایج: از 1 به 3 از 3

موضوعات مشابه

  1. پاسخ: 10
    آخرين نوشته: 2015/06/05, 23:34
  2. تبدیل کد اردینو سنسور bmp085 برای کد ویژن
    توسط imannejaty در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2015/06/04, 19:22
  3. هدر bmp085 برای کد ویژن
    توسط imannejaty در انجمن میکروکنترلرهای AVR
    پاسخ: 0
    آخرين نوشته: 2015/05/06, 09:14
  4. کمک برای راه اندازی سنسور دما و فشار BMP085
    توسط mjh389 در انجمن میکروکنترلرهای AVR
    پاسخ: 0
    آخرين نوشته: 2014/11/30, 22:06
  5. ماژول سنسور BOSCH BMP085
    توسط electronicnarm2010 در انجمن مدار هاي ديجيتال
    پاسخ: 1
    آخرين نوشته: 2014/01/22, 08:40

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •