انجمن تخصصی مکاترونیک ( ربویار )

میکروکنترلها => میکروکنترلر XMEGA ، AVR و ARM => نويسنده: mz64 در سپتامبر 05, 2016, 09:53:12 pm

عنوان: نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: mz64 در سپتامبر 05, 2016, 09:53:12 pm
سلام
مهندس با اجازتون این.تاپیک رو ایجاد میکنم .من توی سایت های مختلف راجع به این ماژول nrfمطالعه کردم اما هیچ کحا یک آموزش جامع و پله پله ندیدم که بشه ازش چیز کاملی یاد گرفت همه جا به صورت کلی توضیح داده شده.
میخواستم ازتون خواهش کنم که اگه واستون مقدوره نحوه راه اندازی این ماژول رو.از صفر توضیح بدید و هم بنده هم دوستان دیگه در طول آموزش اگه سوالی واسشون پیش اومد مطرح کنن و انشالا جواب بگیرن
خدا خیرتون بده :) ;)
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در سپتامبر 05, 2016, 10:19:50 pm
البته برای ساخت تاپیک که اجازه ای که نیاز نداره

اما اینکه بخوام مطلب آموزشی داخل انجمن قرار بدم باید بگم هدف ساخت این قسمت بیشتر پرسش و پاسخ بوده و مطالب آموزشی هم بصورت پرسش و پاسخ ارائه می شن و اینکه بنده بخوام مطلب آموزشیی رو قرار بدم به علت مشکلاتی نمی تونم خیلی وقت بذارم اما برای اینکه حرف شما زمین نمونه سعی می کنم یه آشنایی کلی راجب nrf قرار بدم اما فقط یک آشنایی کلی
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: mz64 در سپتامبر 05, 2016, 10:40:18 pm
ممنون مهندس جان.
شما آموزش رو.قرار بدید ما سوالاتمون رو همینجا مطرح میکنیم که زحمت جواب دادنش با شما باشه  :)
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در سپتامبر 05, 2016, 10:46:48 pm
خلاصه تجربیاتم از nrf

این ماژول گیرنده فرستنده دیتا می باشد که برای برقرار ارتباط با آن شما باید از پروتکل SPI استفاده کنید.

این ماژول به طور کلی دارای دو مدل با تقویت کننده و بدون تقویت کننده در بازار موجود می باشد و قیمتی بسیار ارزان دارد.

(http://www.lydiard.plus.com/images/nrf24l01_module_new.jpg)

در شکل بالا ماژول بدون تقویت کننده رو مشاهده می کنید.

تغذیه ی این ماژول 3.3 ولت می باشد و حتما روی تغذیه ی این ماژول از خازن های مناسبی استفاده کنید چون در انتقال صحیح دیتا خیلی تأثیر دارد.

(https://nathan.chantrell.net/blog/wp-content/uploads/2013/08/nrf24l01.jpg)

در شکل بالا هم پین های این ماژول رو مشاهده می کنید.

در اینترنت لایبری های زیادی برای این ماژول وجود دارد و هیمنطور داخل همین سایت وجود دارد.

توضیح آخر اینکه این ماژول می تواند به صورت بسته دیتا را انتقال بدهد و اینکه چه زمانی ما باید انتقال پک رو انجام بدیم و یا چه موقع باید دریافت کنیم بسته به IRQ می باشد که به اینتراپت خارجی میکرو می توان متصل کرد تا از وجود دیتا اطلاع پیدا کرد.

(البته این ماژول رو بنده خیلی وقت پیش راه اندازی کردم برای همین خیلی نتونستم بصورت مفصل درموردش بنویسم.پوزش

اما تو تاپیک بلی که انتقال صوت رو پیگیری می کردید لازم هست بگم اگرهنوز دیتایی نتوستید انتقال بدید که فعلا سراغ صوت نرید چون سر در گم می شید

اگرم که دیتا رو راه انداختید خودتون بی زحمت آموزشش رو داخل تاپیک قرار بدید تا بتوان از تجربیات شما هم استفاده کرد.

ممنون از اینکه پیگری می کنید و موضوعات رو دونبال می کنید.

عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: mz64 در سپتامبر 05, 2016, 11:57:55 pm
خلاصه تجربیاتم از nrf

این ماژول گیرنده فرستنده دیتا می باشد که برای برقرار ارتباط با آن شما باید از پروتکل SPI استفاده کنید.

این ماژول به طور کلی دارای دو مدل با تقویت کننده و بدون تقویت کننده در بازار موجود می باشد و قیمتی بسیار ارزان دارد.

(http://www.lydiard.plus.com/images/nrf24l01_module_new.jpg)

در شکل بالا ماژول بدون تقویت کننده رو مشاهده می کنید.

تغذیه ی این ماژول 3.3 ولت می باشد و حتما روی تغذیه ی این ماژول از خازن های مناسبی استفاده کنید چون در انتقال صحیح دیتا خیلی تأثیر دارد.

(https://nathan.chantrell.net/blog/wp-content/uploads/2013/08/nrf24l01.jpg)

در شکل بالا هم پین های این ماژول رو مشاهده می کنید.

در اینترنت لایبری های زیادی برای این ماژول وجود دارد و هیمنطور داخل همین سایت وجود دارد.

توضیح آخر اینکه این ماژول می تواند به صورت بسته دیتا را انتقال بدهد و اینکه چه زمانی ما باید انتقال پک رو انجام بدیم و یا چه موقع باید دریافت کنیم بسته به IRQ می باشد که به اینتراپت خارجی میکرو می توان متصل کرد تا از وجود دیتا اطلاع پیدا کرد.

(البته این ماژول رو بنده خیلی وقت پیش راه اندازی کردم برای همین خیلی نتونستم بصورت مفصل درموردش بنویسم.پوزش

اما تو تاپیک بلی که انتقال صوت رو پیگیری می کردید لازم هست بگم اگرهنوز دیتایی نتوستید انتقال بدید که فعلا سراغ صوت نرید چون سر در گم می شید

اگرم که دیتا رو راه انداختید خودتون بی زحمت آموزشش رو داخل تاپیک قرار بدید تا بتوان از تجربیات شما هم استفاده کرد.

ممنون از اینکه پیگری می کنید و موضوعات رو دونبال می کنید.
ممنون مهندس
راستش من تازه امروز ماژول رو تهیه کردم و قصد دارم استارت کار رو بزنم .واسه انجام این.کار صد در صد سوالاتی دارم که حتما مزاحم شما میشم .انشالا راه اندازی کردم آموزشش رو.خودم توی سایت میزارم که دوستان دیگه هم استفاده کنن
خوشحال میشم توی سایتتون فعالیت مفید داشته باشم
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در سپتامبر 07, 2016, 12:26:16 pm
پیشنهاد می کنم اگر دوست داشتید قدم قدم می بردیم جلو
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: mz64 در سپتامبر 14, 2016, 11:00:33 pm
سلام مهندس موافقم.متاسفانه چند روزه دسترسیم به اینترنت با مشکل مواجه شده
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در سپتامبر 16, 2016, 03:37:19 pm
سلام مهندس موافقم.متاسفانه چند روزه دسترسیم به اینترنت با مشکل مواجه شده
امیدوارم که هر چه سریع تر این بحث شروع بشه
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: sina086 در سپتامبر 17, 2017, 09:15:36 am
سلام
مهندس.... من سوال برام پیش اومد اگه من دو تا آی سی  atmega 8  مهم نیست آی سی  مثال گفتم به صورت  spi  ارتباط بدهم آیا این کد  میتونه برای ماژول  nrf  هم استفاده بشه ؟ یعنی امکان شبیه سازی  ارتباط ماژول هست داخل پروتیوس ممنون میشم جواب بدید
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در سپتامبر 17, 2017, 09:49:51 am
سلام
مهندس.... من سوال برام پیش اومد اگه من دو تا آی سی  atmega 8  مهم نیست آی سی  مثال گفتم به صورت  spi  ارتباط بدهم آیا این کد  میتونه برای ماژول  nrf  هم استفاده بشه ؟ یعنی امکان شبیه سازی  ارتباط ماژول هست داخل پروتیوس ممنون میشم جواب بدید

والا اطلاعات خاصی در مورد پروتئوس ندارم.
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: sina086 در سپتامبر 28, 2017, 03:52:17 pm
سلام...ی سوال داشتم در مود ماژول  nrf24l01  من الان هم زمان 4 تا ماژول را اندازی کنم 2 به 2 به هم وصل باشن... حالا برای جلوگیری از  تداخل غیر از این که کانال  این مازول عوض کنیم  آیا را حل دیگه هم هست...
روش اول : آیا امکانات خاصی دارد این ماژول ها ، که باهم ست بشن؟
روش دوم : ما 32 بایت میفرستیم دو بایت  اول بزاریم کد اگر این دو کد اول با گیرندش یکی بود ما بقی اطلاعاتو بگیری؟ اینجوری دوتا فرستنده داخل یک کانال تداخل ایجاد نمیشه؟ یا اینکه مشکل حل میشه
آیا شما پیشنهادی دارید برای این مشکل فرض که 4 تا دستگاه  2 ب 2 به هم وصل هستن برای جللوگیری از تداخل  راهی پیشنهاد کنید غیر از تغییر کانال؟
سوال بعدی من کتابخانه  nrf24l01  را اندازی کردم وفتی برنامه فرستنده عوض میکنم حتما باید یبار خاموش روشن کنم تا با هم کانکت بشن ؟ ایا داخل کتابخانه این قابلیت اضافه شده یا ماژول خودش این قابلیتو داره ولی با بسکام اینجوری نبود
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در سپتامبر 28, 2017, 04:53:21 pm
سلام...ی سوال داشتم در مود ماژول  nrf24l01  من الان هم زمان 4 تا ماژول را اندازی کنم 2 به 2 به هم وصل باشن... حالا برای جلوگیری از  تداخل غیر از این که کانال  این مازول عوض کنیم  آیا را حل دیگه هم هست...
روش اول : آیا امکانات خاصی دارد این ماژول ها ، که باهم ست بشن؟
روش دوم : ما 32 بایت میفرستیم دو بایت  اول بزاریم کد اگر این دو کد اول با گیرندش یکی بود ما بقی اطلاعاتو بگیری؟ اینجوری دوتا فرستنده داخل یک کانال تداخل ایجاد نمیشه؟ یا اینکه مشکل حل میشه
آیا شما پیشنهادی دارید برای این مشکل فرض که 4 تا دستگاه  2 ب 2 به هم وصل هستن برای جللوگیری از تداخل  راهی پیشنهاد کنید غیر از تغییر کانال؟
سوال بعدی من کتابخانه  nrf24l01  را اندازی کردم وفتی برنامه فرستنده عوض میکنم حتما باید یبار خاموش روشن کنم تا با هم کانکت بشن ؟ ایا داخل کتابخانه این قابلیت اضافه شده یا ماژول خودش این قابلیتو داره ولی با بسکام اینجوری نبود

برای اینکه تداخل ماژول ها کم بشه آدرس ماژول رو که گفتید مثلا با فصله 5-10 تا بدید مشکل تداخل تقریبا کامل حل می شه
راجب ارسال کدها خود ماژول دقیق هست خیلی نیاز نیست روی کدگزاری وقت بذارید مثلا برای انتقال صدا اصلا نیازی به این کار نیست بهتره همه ی 32 بایت برای انتقال فقط صدا باشه نه کار دیگه ای
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: sina086 در سپتامبر 28, 2017, 06:00:46 pm
اگر بخوام حالت ست شدن داشته باشه  مثلا الان فرستنده روشن میخوام با یک گیرنده ستش کنم اگه اینجوری بخوام باید روی کد کار کنم یا خود ماژول این قابلیت داره؟
مثل لرن کد ریموت ها هرکدومشون یک سریال مجزا دارن   
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در سپتامبر 29, 2017, 12:39:21 pm
اگر بخوام حالت ست شدن داشته باشه  مثلا الان فرستنده روشن میخوام با یک گیرنده ستش کنم اگه اینجوری بخوام باید روی کد کار کنم یا خود ماژول این قابلیت داره؟
مثل لرن کد ریموت ها هرکدومشون یک سریال مجزا دارن
هر کدوم یه سریال مجزا دارن دیتاشیتش رو نگاه کن فکر کنم تا 64 تا بشه درست کرد
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: sina086 در اكتبر 10, 2017, 11:28:14 am
با سلام... جناب مهندس...
من  تا اینجا تونستنم 32 بایت ارسال کنم... داخل دیتا شیت مطالعه کردم نوشته میشه 3 الی 5 بایت به آدرس دستگاه نسبت داد خواستم بدونم این پنج بایت جزو اون 32 بایت یا اینکه ما 32 بایت دیتا ارسال میشه و 5 بایت ادرس البته این آدرس داخل پروتکل  Isp  فک کنم پایه  sck  انجام میده؟
درکل خواستم بدونم 5 بایت ادرس جدا از این 32 بایت دیتا؟
سوال بعدی من اینه که  در کتابخانه این ماژول  این خط

flash unsigned char base_address[5]={0x00,0x01,0x03,0x07,0x00};
خودش نوشته ادرس ... که این باید داخل فرستنده و گیرنده یکی باشه... ولی دقیقا داخل کتابخانه متوجه نشدم کجا اینو با هم چک میکنه

/* Name: nrf24l01p.h
 * Coded by: Sayed Hassan Mortazavi
 * Creation Date:  2013-05-15
*/

#ifndef __nrf24l01p_h_included__
#define __nrf24l01p_h_included__

#define IRQ PORTB.2
#define DD_IRQ DDRB.2

#define CE PORTB.3
#define DD_CE DDRB.3

#define CSN PORTB.4
#define DD_CSN DDRB.4 

#define MOSI PORTB.5
#define DD_MOSI DDRB.5

#define MISO PORTB.6
#define DD_MISO DDRB.6

#define CLK PORTB.7
#define DD_CLK DDRB.7
 
flash unsigned char base_address[5]={0x00,0x01,0x03,0x07,0x00};
unsigned char temp_address[5]={0x00,0x01,0x03,0x07,0x00};
unsigned char payload[33];
unsigned char command_buff=0,status_buff=0,nrf_state=0;
char nrf_mode;
bit sent_actived=0;
unsigned char spi(unsigned char data)
{
    SPDR=data;
    while(!(SPSR & 0x80));
    data=SPSR;
    return SPDR;
}
void nrf_inst(unsigned char ins)
{
    int i;                             
    CSN=0;   
    status_buff=spi(ins);       
    switch(ins & 0xE0)
    {
        case 0x00:
        {                         
            if((ins & 0x1F)==0x0A || (ins & 0x1F)==0x0B || (ins & 0x1F)==0x10)
            {
                for(i=4;i>=0;i--)
                {
                    temp_address[i]=spi(0xFF);
                }
            }
            else
            {
                command_buff=spi(0xFF);   
            }
            break;
        }
        case 0x20: 
        {                         
            if((ins & 0x1F)==0x0A || (ins & 0x1F)==0x0B || (ins & 0x1F)==0x10)
            {
                for(i=4;i>=0;i--)
                {
                    spi(base_address[i]);
                }
            }
            else
            { 
                spi(command_buff);
            }
            break;
        }         
        case 0x60:
        {
            if((ins & 0x01)==1)
            {
                i=payload[0];
                while(i!=0)
                {
                    payload[i]=spi(0xFF);
                    i--;
                }   
            }
            else
            {
                command_buff=spi(0xFF);   
            }
            break;
        }
        case 0xA0:
        {   
            i=payload[0];
            while(i!=0)
            {
                spi(payload[i]);
                i--;
            }
            break;
        }
       
    }   
    CSN=1; 
    delay_us(10);
}

interrupt [EXT_INT2] void ext2_isr()
{
    if(nrf_mode==0)
    {
        nrf_inst(0xFF);
        if(status_buff & 0x20) 
        {
            nrf_state=2;
            nrf_inst(0x17);       
            if((command_buff & 0x01)==0)
            {
                nrf_inst(0x60); 
                if(command_buff<=32)
                {
                    payload[0]=command_buff;
                    nrf_inst(0x61);   
                    nrf_state=3;
                }
                else
                    nrf_inst(0xE2);
            }         
        }
        else
        {
            nrf_state=4;
        }
    }                                                     
    else
    {
        nrf_inst(0x60);
        if(command_buff>32)
        {
            nrf_inst(0xE2);
        }
        else
        {
            payload[0]=command_buff;
            nrf_inst(0x61);
            nrf_state=1;
        }
    }     
    command_buff=0x7E;
    nrf_inst(0x27);   
    nrf_inst(0xE1);                                                 
}
void sent()
{
    if(sent_actived)
    {
        sent_actived=0; 
        if((temp_address[4]==base_address[4]) && (temp_address[3]==base_address[3]) && (temp_address[2]==base_address[2]) && (temp_address[1]==base_address[1]) && (temp_address[0]==base_address[0]))
        {
            nrf_inst(0xE1);
            nrf_inst(0xA0);           
            delay_ms(10);
            CE=1;
            delay_us(20);
            CE=0;
            delay_ms(10);
        }
        else
            nrf_state=5;
    }                                     
}

void nrf_config(char mode)
{
    IRQ=1;
    CSN=1;
    DD_CSN=1;
    CLK=0;
    DD_CLK=1;
    CE=0;
    DD_CE=1;
    DD_MOSI=1;
    DD_MISO=0; 
    GIFR=0x20;
    GICR|=0x20;         
    #asm("sei")
    SPCR=0x50;       
    delay_ms(110);
   
    nrf_mode=mode;   
   
    command_buff=0x01;
    nrf_inst(0x21);   
   
    command_buff=0x01;
    nrf_inst(0x22);   
     
    command_buff=0x03;
    nrf_inst(0x23);   
   
    command_buff=0x0F;
    nrf_inst(0x24);   
                       
    command_buff=0x01;   
    nrf_inst(0x25);     
   
    command_buff=0x0E;   
    nrf_inst(0x26);     
   
    nrf_inst(0x2A);     
   
    nrf_inst(0x30);     
   
    command_buff=0x01;   
    nrf_inst(0x3C);     
       
    command_buff=0x07;   
    nrf_inst(0x3D);         
   
    if(mode==0)
    {
        command_buff=0x4E;
        nrf_inst(0x20);   
        delay_ms(100);
        sent_actived=1;
    }
    else
    {
        command_buff=0x3F;
        nrf_inst(0x20);   
        delay_ms(5);
        CE=1;
    }
}
#endif

عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در اكتبر 10, 2017, 11:47:28 am
با سلام... جناب مهندس...
من  تا اینجا تونستنم 32 بایت ارسال کنم... داخل دیتا شیت مطالعه کردم نوشته میشه 3 الی 5 بایت به آدرس دستگاه نسبت داد خواستم بدونم این پنج بایت جزو اون 32 بایت یا اینکه ما 32 بایت دیتا ارسال میشه و 5 بایت ادرس البته این آدرس داخل پروتکل  Isp  فک کنم پایه  sck  انجام میده؟
درکل خواستم بدونم 5 بایت ادرس جدا از این 32 بایت دیتا؟
سوال بعدی من اینه که  در کتابخانه این ماژول  این خط

flash unsigned char base_address[5]={0x00,0x01,0x03,0x07,0x00};
خودش نوشته ادرس ... که این باید داخل فرستنده و گیرنده یکی باشه... ولی دقیقا داخل کتابخانه متوجه نشدم کجا اینو با هم چک میکنه


والا من که خیلی یادم نیست اما تا جایی که یادمه اون 5 بیت بود نه 5 بایت
این 5 بیت هم موقعی که دارید ماژول رو اولش راه اندازی می کنید یه رجیستر داره که آدرسش تعیین می شه.
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: sina086 در اكتبر 11, 2017, 10:02:01 am
مهندس اگه امکانش هست  برای تغییر این 5 بیت آدرس  بیشتر توضیح بدید...کجای کتابخانه هست بعد این فک کنم از طریق پورت  sck  انتقال داده میشه؟
دوم اینکه این   کد :
flash unsigned char base_address[5]={1,2,3,4,5};
این خط که نوشته عکسشم فرستادم این 5 بایت حتما باید داخل فرستنده و گیرنده یکی باشه ؟ نمیدونم کجا این بایت های رو چک میکنه؟ که تغییر بدی کار نمیکنه ؟
عنوان: پاسخ : نحوه راه اندازی ماژول nrf(اموزش و طرح سوال)
رسال شده توسط: admin در اكتبر 12, 2017, 09:41:47 pm
مهندس اگه امکانش هست  برای تغییر این 5 بیت آدرس  بیشتر توضیح بدید...کجای کتابخانه هست بعد این فک کنم از طریق پورت  sck  انتقال داده میشه؟
دوم اینکه این   کد :
flash unsigned char base_address[5]={1,2,3,4,5};
این خط که نوشته عکسشم فرستادم این 5 بایت حتما باید داخل فرستنده و گیرنده یکی باشه ؟ نمیدونم کجا این بایت های رو چک میکنه؟ که تغییر بدی کار نمیکنه ؟
ببخشید یکم دیر شدش

خب اون که تغییر آدرس زده رو من واقعیت حوصلم نگرفت خیلی روش وقت بذارم.

اما ظاهر امر اینه که شما می خواید مثلا دو تا ماژول مثلا با هم در ارتباط باشن و ارتباطشون هم کاملا مجزا باشه و مثلا هم زمان دو تا ماژول دیگه هم به صورت مستقل دیتا بدن یا دریافت کنن.

خب برای اینکار تا جایی که بلد هستم دو تا راه وجود داره یکی اینکه سوئیچی باشه و هر کسی با توجه به کدی که داره دیتای خود رو دریفات کنه که البته زمان بر هست و سرعت رو یکم پایین میاره و یکم هم کد دهی پیچیده تر هست.
اما یک قابلیت دیگه اینکه ماژول ها هر کدوم بتونن در یک فرکانس خاصی دیتا بدهند.
مثلا یک ماژول تو فرکانس 2.54 کار کنه یکی دیگه مثلا در 2.56 کار کنه
خب اینجوری هر کدوم در فرکانس خاصی ارسال و دریافت دارن.
این ماژول نیز این قابلیت رو داره اگر دیتا شیت رو نگاه کنی قسمت فکر می کنم مولتی فرکونسی هست مطالعه کنی می بینی این قابلیت وجود داره که تقریبا 64 فرکانس مختلف رو می تونه ساپورت کنه.

خب همانطور که یه نگاه سطحی روی کتابخونه ی مورد نظرتون داشتم
برای ارتباط با ماژول ما یک دیتای دستوری داریم که ظاهرا دیتای دستور عدد 0x20 هست و اگر دیتا شیت رو هم نگاه کنی بحث فرکانس 0x05 هست که داخل جدول در دیتاشیت این اعداد می باشد.
حال برای ارسال 0x25 ارسال می شود و یک عدد بین 0-63 هم ارسال می شود که محدوده فرکانسی هست که در قسمتcommand_buff در کتابخانه ی مد نظر وجود داشت.
بنظرم شما برای تست
قسمتی که کد 0x25 را قرار است ارسال کند مقدار command_buff را تغییر بدهید تا ببینید عملکرد مناسب است یا خیر.

ممنون که پیگیر هستید.