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





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









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





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

نمایش نتایج: از 1 به 4 از 4
  1. #1
    2016/10/09
    4
    0

    سوال : نحوه راه اندازی TSL2561 در کدویژن

    سلام دوستان عزیز
    من دارم یه سنسور لوکس متر رو راه میندازم TSL2561 هست
    اینا کدهاش هست . ولی ارور داره . میتونید راهنماییم کنید ؟ ممنون
    این کد برنامه اصلی :


    /*****************************************************
    Chip type : ATmega16A
    Program type : Application
    AVR Core Clock frequency: 8.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    *****************************************************/


    #include <mega16a.h>
    #include <i2c.h>
    #include <alcd.h>
    #include <math.h>
    #include <stdlib.h>
    #include <tsl2561.h>
    #include <delay.h>
    #include <stdio.h>




    double Lux = 0;
    char str[50];
    float LUX;


    void main(void)
    {




    tsl2561_init();
    TSL2561_config();




    // I2C Bus initialization
    // I2C Port: PORTC
    // I2C SDA bit: 1
    // I2C SCL bit: 0
    // Bit Rate: 100 kHz
    // Note: I2C settings are specified in the
    // Project|Configure|C Compiler|Libraries|I2C menu.
    i2c_init();


    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTD Bit 0
    // RD - PORTD Bit 1
    // EN - PORTD Bit 2
    // D4 - PORTD Bit 4
    // D5 - PORTD Bit 5
    // D6 - PORTD Bit 6
    // D7 - PORTD Bit 7
    // Characters/line: 20
    lcd_init(20);



    while (1)
    {
    LUX=ReadLuxes();
    lcd_clear();
    sprintf(str,"LUX=%0.1f ",LUX);
    lcd_puts(str);
    delay_ms(1000);


    }
    }





    و اینم کد کتابخونش :



    #define ControlRegister 0x80
    #define TurnOnBits 0x03
    #define TimingRegister 0x02 // 0x00 = 13.7ms / 0x01 = 101ms / 0x02 = 402ms (default)
    #define IntegrationTimeGain 0x10 // 0x00 = 1x Gain (default) / 0x10 = 16x Gain


    #define Data0LowByteMode 0x8C //Address the Ch0 lower data register
    #define Data0HighByteMode 0x8D //Address the Ch0 upper data register
    #define Data1LowByteMode 0x8E //Address the Ch1 lower data register
    #define Data1HighByteMode 0x8F //Address the Ch1 upper data register


    #define addr 0x52


    void tsl2561_init(void)
    {
    int TSL2561AddressWrite_Float = 0x39<<1;
    i2c_start();
    i2c_write(addr);
    i2c_write(ControlRegister);
    i2c_write(TurnOnBits);
    i2c_stop();
    }




    //-------------------------------------
    // Configuration TSL2561
    //-------------------------------------
    void TSL2561_config(void)
    {
    i2c_start();
    i2c_write(addr);
    i2c_write(0x81);
    i2c_write(TimingRegister);
    //i2c_stop();
    //i2c_start();
    //i2c_write(0x39);
    //i2c_write(0x81);
    i2c_write(IntegrationTimeGain);
    i2c_stop();
    }


    //-------------------------------------
    // Read one byte from TSL2561
    //-------------------------------------
    unsigned char ReadByteTSL2561(unsigned char RegisterAddress)
    {
    unsigned char Data;
    i2c_start();
    i2c_write(addr);
    i2c_write(RegisterAddress);
    i2c_start(); // restart I2c
    i2c_write(addr+1);// address + 1 is the read mode
    Data = i2c_read(0); // read one byte from EEPROM
    i2c_stop();


    return Data;
    }
    void Power_On()
    {
    i2c_start();
    i2c_write(addr);
    i2c_write(0x80);
    i2c_write(0x03);
    i2c_stop();
    }


    //-------------------------------------
    // Read lux value from TSL2561
    //-------------------------------------


    double Calculate(unsigned char,unsigned char,unsigned char,unsigned char);
    void ReadLuxes()
    {
    char tmp[20];
    unsigned char Data0Low_uchar=0;
    unsigned char Data0High_uchar=0;
    unsigned char Data1Low_uchar=0;
    unsigned char Data1High_uchar=0;

    Data0Low_uchar = ReadByteTSL2561(Data0LowByteMode);
    Data0High_uchar = ReadByteTSL2561(Data0HighByteMode);
    Data1Low_uchar = ReadByteTSL2561(Data1LowByteMode);
    Data1High_uchar = ReadByteTSL2561(Data1HighByteMode);

    Lux = Calculate(Data0Low_uchar,Data0High_uchar,Data1Low_uchar,Data1High_uchar); //Lux as a double value
    }
    //-------------------------------------
    // Calculate luxes from TSL2561
    //-------------------------------------
    double Calculate(unsigned char Data0Low_uchar,unsigned char Data0High_uchar,unsigned char Data1Low_uchar,unsigned char Data1High_uchar)
    {
    unsigned int Channel0_uint;
    unsigned int Channel1_uint;
    unsigned int Data0Low_uint;
    unsigned int Data0High_uint;
    unsigned int Data1Low_uint;
    unsigned int Data1High_uint;
    float Channel0_float;
    float Channel1_float;
    float ChannelsRatio_float;
    double Channel0_double;
    double Channel1_double;
    double ChannelsRatio_double;
    double Lux = 0;

    Data0Low_uint = (unsigned int)Data0Low_uchar;
    Data0High_uint = (unsigned int)Data0High_uchar;
    Data1Low_uint = (unsigned int)Data1Low_uchar;
    Data1High_uint = (unsigned int)Data1High_uchar;

    Channel0_uint = (unsigned int)256 * Data0High_uint + Data0Low_uint; //Shift Data0High to upper byte
    Channel1_uint = (unsigned int)256 * Data1High_uint + Data1Low_uint; //Shift Data1High to upper byte

    Channel0_float = (float)Channel0_uint;
    Channel1_float = (float)Channel1_uint;
    ChannelsRatio_float = Channel1_float / Channel0_float;

    ChannelsRatio_double = (double)ChannelsRatio_float;
    Channel0_double = (double)Channel0_float;
    Channel1_double = (double)Channel1_float;





    if ((ChannelsRatio_double <= (double)0.50) && (ChannelsRatio_double > (double)0))
    {
    Lux = (double)0.0304 * Channel0_double - (double)0.062 * Channel0_double * (pow(ChannelsRatio_double, 1.4));
    }
    else if((ChannelsRatio_double <= (double)0.61) && (ChannelsRatio_double > (double)0.50))
    {
    Lux = (double)0.0224 * Channel0_double - (double)0.031 * Channel1_double;
    }
    else if((ChannelsRatio_double <= (double)0.80) && (ChannelsRatio_double > (double)0.61))
    {
    Lux = (double)0.0128 * Channel0_double -(double) 0.0153 * Channel1_double;
    }
    else if((ChannelsRatio_double <= (double)1.30) && (ChannelsRatio_double > (double)0.80))
    {
    Lux = (double)0.00146 * Channel0_double - (double)0.00112 * Channel1_double;
    }
    else if(ChannelsRatio_double > (double)1.30)
    {
    Lux = 0;
    }
    return Lux;
    }
    //-------------------------------------
    // End of TSL2561 support
    //------------------------------------
    ویرایش توسط shadi7092 : 2017/02/25 در ساعت 17:35
  2. #2
    2016/11/15
    535
    365

    پاسخ : سوال : نحوه راه اندازی TSL2561 در کدویژن

    متن خطا کو ؟؟
  3. #3
    2016/10/09
    4
    0

    پاسخ : سوال : نحوه راه اندازی TSL2561 در کدویژن

    نقل قول نوشته اصلی توسط Amirlopez

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    متن خطا کو ؟؟
    سلام.نتونستم.بزارمش
  4. #4
    2016/10/09
    4
    0

    پاسخ : سوال : نحوه راه اندازی TSL2561 در کدویژن

    من اون خطا رو حل کردم اما مشکلی که دارم الان اینه که یه عدد ثابت رو روی LCD میبینم
    ینی برنامه درسته . ولی نحوه محاسبه فک میکنم اشتباهه . کد کتابخونه هم خوندم ولی راستش متوجه نشدم
    کدش رو اینجا میزارم . دوستان اگه امکانش هست راهنمایی بفرمایید
    مچکرم


    این قسمت برای خوندن شدت نور یا همون LUX هست :


    //-------------------------------------
    // Read lux value from TSL2561
    //-------------------------------------


    double Calculate(unsigned char,unsigned char,unsigned char,unsigned char);
    double ReadLuxes()
    {
    double Lux;
    char tmp[20];
    unsigned char Data0Low_uchar=0;
    unsigned char Data0High_uchar=0;
    unsigned char Data1Low_uchar=0;
    unsigned char Data1High_uchar=0;

    Data0Low_uchar = ReadByteTSL2561(Data0LowByteMode);
    Data0High_uchar = ReadByteTSL2561(Data0HighByteMode);
    Data1Low_uchar = ReadByteTSL2561(Data1LowByteMode);
    Data1High_uchar = ReadByteTSL2561(Data1HighByteMode);

    Lux = Calculate(Data0Low_uchar,Data0High_uchar,Data1Low_uchar,Data1High_uchar); //Lux as a double value
    return Lux;
    }
    [SIZE=5][/SIZE]


    این هم قسمت محاسبه LUX توسط سنسور TSL2561 هست :


    //-------------------------------------
    // Calculate luxes from TSL2561
    //-------------------------------------
    double Calculate(unsigned char Data0Low_uchar,unsigned char Data0High_uchar,unsigned char Data1Low_uchar,unsigned char Data1High_uchar)
    {
    unsigned int Channel0_uint;
    unsigned int Channel1_uint;
    unsigned int Data0Low_uint;
    unsigned int Data0High_uint;
    unsigned int Data1Low_uint;
    unsigned int Data1High_uint;
    float Channel0_float;
    float Channel1_float;
    float ChannelsRatio_float;
    double Channel0_double;
    double Channel1_double;
    double ChannelsRatio_double;
    double Lux = 0;

    Data0Low_uint = (unsigned int)Data0Low_uchar;
    Data0High_uint = (unsigned int)Data0High_uchar;
    Data1Low_uint = (unsigned int)Data1Low_uchar;
    Data1High_uint = (unsigned int)Data1High_uchar;

    Channel0_uint = (unsigned int)256 * Data0High_uint + Data0Low_uint; //Shift Data0High to upper byte
    Channel1_uint = (unsigned int)256 * Data1High_uint + Data1Low_uint; //Shift Data1High to upper byte

    Channel0_float = (float)Channel0_uint;
    Channel1_float = (float)Channel1_uint;
    ChannelsRatio_float = Channel1_float / Channel0_float;

    ChannelsRatio_double = (double)ChannelsRatio_float;
    Channel0_double = (double)Channel0_float;
    Channel1_double = (double)Channel1_float;





    if ((ChannelsRatio_double <= (double)0.50) && (ChannelsRatio_double > (double)0))
    {
    Lux = (double)0.0304 * Channel0_double - (double)0.062 * Channel0_double * (pow(ChannelsRatio_double, 1.4));
    }
    else if((ChannelsRatio_double <= (double)0.61) && (ChannelsRatio_double > (double)0.50))
    {
    Lux = (double)0.0224 * Channel0_double - (double)0.031 * Channel1_double;
    }
    else if((ChannelsRatio_double <= (double)0.80) && (ChannelsRatio_double > (double)0.61))
    {
    Lux = (double)0.0128 * Channel0_double -(double) 0.0153 * Channel1_double;
    }
    else if((ChannelsRatio_double <= (double)1.30) && (ChannelsRatio_double > (double)0.80))
    {
    Lux = (double)0.00146 * Channel0_double - (double)0.00112 * Channel1_double;
    }
    else if(ChannelsRatio_double > (double)1.30)
    {
    Lux = 0;
    }
    return Lux;
    }
    [SIZE=5][/SIZE]


    یک دنیا ممنون از راهنماییتون


    دلیل: ادغام دو پست برای جلوگیری از اسپم

    نقل قول نوشته اصلی توسط shadi7092

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    من اون خطا رو حل کردم اما مشکلی که دارم الان اینه که یه عدد ثابت رو روی LCD میبینم
    ینی برنامه درسته . ولی نحوه محاسبه فک میکنم اشتباهه . کد کتابخونه هم خوندم ولی راستش متوجه نشدم
    کدش رو اینجا میزارم . دوستان اگه امکانش هست راهنمایی بفرمایید
    مچکرم


    این قسمت برای خوندن شدت نور یا همون LUX هست :


    //-------------------------------------
    // Read lux value from TSL2561
    //-------------------------------------


    double Calculate(unsigned char,unsigned char,unsigned char,unsigned char);
    double ReadLuxes()
    {
    double Lux;
    char tmp[20];
    unsigned char Data0Low_uchar=0;
    unsigned char Data0High_uchar=0;
    unsigned char Data1Low_uchar=0;
    unsigned char Data1High_uchar=0;

    Data0Low_uchar = ReadByteTSL2561(Data0LowByteMode);
    Data0High_uchar = ReadByteTSL2561(Data0HighByteMode);
    Data1Low_uchar = ReadByteTSL2561(Data1LowByteMode);
    Data1High_uchar = ReadByteTSL2561(Data1HighByteMode);

    Lux = Calculate(Data0Low_uchar,Data0High_uchar,Data1Low_uchar,Data1High_uchar); //Lux as a double value
    return Lux;
    }
    [SIZE=5][/SIZE]


    این هم قسمت محاسبه LUX توسط سنسور TSL2561 هست :


    //-------------------------------------
    // Calculate luxes from TSL2561
    //-------------------------------------
    double Calculate(unsigned char Data0Low_uchar,unsigned char Data0High_uchar,unsigned char Data1Low_uchar,unsigned char Data1High_uchar)
    {
    unsigned int Channel0_uint;
    unsigned int Channel1_uint;
    unsigned int Data0Low_uint;
    unsigned int Data0High_uint;
    unsigned int Data1Low_uint;
    unsigned int Data1High_uint;
    float Channel0_float;
    float Channel1_float;
    float ChannelsRatio_float;
    double Channel0_double;
    double Channel1_double;
    double ChannelsRatio_double;
    double Lux = 0;

    Data0Low_uint = (unsigned int)Data0Low_uchar;
    Data0High_uint = (unsigned int)Data0High_uchar;
    Data1Low_uint = (unsigned int)Data1Low_uchar;
    Data1High_uint = (unsigned int)Data1High_uchar;

    Channel0_uint = (unsigned int)256 * Data0High_uint + Data0Low_uint; //Shift Data0High to upper byte
    Channel1_uint = (unsigned int)256 * Data1High_uint + Data1Low_uint; //Shift Data1High to upper byte

    Channel0_float = (float)Channel0_uint;
    Channel1_float = (float)Channel1_uint;
    ChannelsRatio_float = Channel1_float / Channel0_float;

    ChannelsRatio_double = (double)ChannelsRatio_float;
    Channel0_double = (double)Channel0_float;
    Channel1_double = (double)Channel1_float;





    if ((ChannelsRatio_double <= (double)0.50) && (ChannelsRatio_double > (double)0))
    {
    Lux = (double)0.0304 * Channel0_double - (double)0.062 * Channel0_double * (pow(ChannelsRatio_double, 1.4));
    }
    else if((ChannelsRatio_double <= (double)0.61) && (ChannelsRatio_double > (double)0.50))
    {
    Lux = (double)0.0224 * Channel0_double - (double)0.031 * Channel1_double;
    }
    else if((ChannelsRatio_double <= (double)0.80) && (ChannelsRatio_double > (double)0.61))
    {
    Lux = (double)0.0128 * Channel0_double -(double) 0.0153 * Channel1_double;
    }
    else if((ChannelsRatio_double <= (double)1.30) && (ChannelsRatio_double > (double)0.80))
    {
    Lux = (double)0.00146 * Channel0_double - (double)0.00112 * Channel1_double;
    }
    else if(ChannelsRatio_double > (double)1.30)
    {
    Lux = 0;
    }
    return Lux;
    }
    [SIZE=5][/SIZE]


    یک دنیا ممنون از راهنماییتون

    این کد فقط عدد 22.3 رو بمن نشون میده . هرچقدر هم میزان نور تغییر میکنه همچنان 22.3 ثابت هست
نمایش نتایج: از 1 به 4 از 4

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

  1. نحوه استفاده از سنسور PIR در کدویژن
    توسط intel_amd در انجمن میکروکنترلرهای AVR
    پاسخ: 20
    آخرين نوشته: 2016/10/04, 14:02
  2. راه اندازی کانتر با کدویژن
    توسط hamid1991reza در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2013/07/04, 19:13
  3. سوال در مورد نحوه ایجاد کد هگز در کدویژن
    توسط پویاوار در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2012/12/28, 23:32
  4. نحوه قفل میکرو در کدویژن
    توسط microjo در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2011/10/09, 09:30
  5. سوال در مورد نحوه ی ساخت گیرنده اینفرارد (با کدویژن)
    توسط neoanderson در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 2
    آخرين نوشته: 2011/01/17, 15:06

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

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

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

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

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