اطلاعیه

Collapse
No announcement yet.

usart در حالت mpcm

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    usart در حالت mpcm

    سلام
    usart در حالت چند پردازنده ای باید سنکرون باشه یا آسنکرون ؟
    تو این متن پایین که صفحه 128 کتاب اینترنتی آقای سپاس یار هست گفته که باید دیتا رو 9 بیتی تنظیم کنیم که بیت 9ام باید یک باشه وهشت بیت دیگه آدرس (چطور این کارو انجام بدم) و بعد اسلیو ها آدرس رو مقایسه میکنن در صورت درستی اسلیو مورد نظر بیت mpcm رو پاک میکنه وبه مستر میگه که بیت نهم رو صفر کنه و منتظر دیتا میشه بعد از دریافت دیتا بیت mpcm دو طرف دوباره یک میشه .این عملیات رو چطور انجام بدم ؟



    چه يافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را يافت.

    #2
    پاسخ : usart در حالت mpcm

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

    در رابطه با استفاده از خطوط usart به عنوان باس مشنرک بین چند MCU یا میکروکنترلر میتونید از ویدئوهای جناب کی نژاد استفاده کنید( من خودم ندیدم ولی اینطور که میگفتند ، قسمت 48 مربوط به همین مطلب میشه)

    knowledgeplus.ir

    ولی دیتاشیت هم خیلی کمک میکنه:
    For an MCU to act as a master MCU, it can use a 9-bit character frame format (UCSZ =
    7). The ninth bit (TXB8) must be set when an address frame (TXB8 = 1) or cleared when
    a data frame (TXB = 0) is being transmitted. The slave MCUs must in this case be set to
    use a 9-bit character frame format.
    The following procedure should be used to exchange data in Multi-processor Communication
    mode:
    1. All slave MCUs are in Multi-processor Communication mode (MPCM in UCSRA
    is set).
    2. The Master MCU sends an address frame, and all slaves receive and read this
    frame. In the Slave MCUs, the RXC Flag in UCSRA will be set as normal.
    3. Each Slave MCU reads the UDR Register and determines if it has been
    selected. If so, it clears the MPCM bit in UCSRA, otherwise it waits for the next
    address byte and keeps the MPCM setting.
    4. The addressed MCU will receive all data frames until a new address frame is
    received. The other slave MCUs, which still have the MPCM bit set, will ignore
    the data frames.
    5. When the last data frame is received by the addressed MCU, the addressed
    MCU sets the MPCM bit and waits for a new address frame from Master. The
    process then repeats from 2.
    Using any of the 5- to 8-bit character frame formats is possible, but impractical since the
    receiver must change between using n and n+1 character frame formats. This makes
    full-duplex operation difficult since the transmitter and receiver uses the same character
    size setting. If 5- to 8-bit character frames are used, the transmitter must be set to use
    two stop bit (USBS = 1) since the first stop bit is used for indicating the frame type.
    Do not use Read-Modify-Write instructions (SBI and CBI) to set or clear the MPCM bit.
    The MPCM bit shares the same I/O location as the
    راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
    کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
    نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
    انشالله به زودي تاپيک ها به روز رساني خواهد شد،

    دیدگاه


      #3
      پاسخ : usart در حالت mpcm

      با اینکه چپ چین کردم ولی قاطی پاتی شد:
      ولی اگر بخوام آدرس صفحه بدم: به عنوان مثال صفحه 155 از دیتاشیت مگا32


      در کل فقط باید چند مرحله را بلد باشید. تا بتونید از قابلیت سخت افزاری که میکرو در اختیارتون میزاره ، استفاده کنید.(میتونید استفاده نکنید و کلا نرم افزاری عمل کنید و خودتون پروتکل تعیین کنید)

      اگر به منابعی که گفتم سر بزنید ، حتما نتیجه میگیرید. فقط یک اصل مهم را اینجا باید بدونید:
      وقتی MPCM یک است ، بیت ماقبل آخرین stop bit تعیین کننده دریافت است ، اگر 1 باشه دریافت میشه و در رجیستر UDR قرار میگیره و اگر صفر باشه به اصطلاح فیلتر میشه. اینو اگه بدونید کل قضیه رو دیگه راحت درک میکنید.
      راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
      کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
      نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
      http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
      انشالله به زودي تاپيک ها به روز رساني خواهد شد،

      دیدگاه


        #4
        پاسخ : usart در حالت mpcm

        سلام به همه
        در مورد رجیستر های UBRRH-L بیت 15 که برای انتخاب نوع رجیستر L یا H هست این که هیچ 12تا14 هم که صفرن میمونه 0 تا 11 که برای بودریت هست،که از این 12 بیت چهارتاش مربوط به رجیستر H هست و مابقی مربوط به L خوب سوالم اینجاست که وقتی میخام مقدار بودریت رو بدم باید به کدوم رجیستر بدم L یا H ؟چون مشترک هستن!



        ---
        پ.ن
        فرمول های محاسبه رو میدونم
        این رو هم میدونم که تو دیتاشیت جدول بودریت برای فرکانس های مختلف هست
        من این مقدار 51 رو میخام وارد کنم
        فقط همین که اون عدد توی جدول رو آیا باید به هگز تبدیل کنم ؟ و داخل کدوم رجیستر L یا H بریزم؟، اگه باید تو L بریزم اون نیبل اول مربوط به H باید صفر بشه ؟
        پیشاپیش عید رو به همه بچه های ECA تبریک میگم
        چه يافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را يافت.

        دیدگاه


          #5
          پاسخ : usart در حالت mpcm

          رجیسترهای UBRRL و UBRRH مشترک نیستند. کی گفته مشترکند؟؟ ( ریجیستر های UBRRH و UCSRC چون توی یک فضای آدرس از sram باید مقدار دهی شوند ، مشترکند و بیت آخرشون مشخص کننده است)

          برای مقداردهی شما باید مقدار دسیمال را از جدول استخراج کنید:

          به عنوان مثال برای کلاک 8 مگاهرتز و بیت U2X=0 و BaudRate=9600bps عدد 51 بدست می آید.
          عدد 51 دسیمال است و مقدار هگزا دسیمال آن 0x33 می باشد.
          پس دوجور میشه نوشت:

          1- برحسب دسیمال:
          کد:
          UBRRH=0;
          UBRRL=51;
          2- بر حسب هگزادسیمال:
          کد:
          UBRRH=0x00;
          UBRRL=0x33;
          که در هر دوحالت اگر UBRRH را مقدار صفر ندیم هم مشکلی بوجود نمی آید ،چون پیش فرض صفر است.



          سوال : پس کی UBRRH را باید مقدار بدیم؟؟
          جواب: زمانی که عدد بدست آمده از 255 برحسب دسیمال یا 0xFF بر حسب هگزا دسیمال ، بیشتر باشد. که در 8بیت جا نشود.
          راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
          کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
          نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
          انشالله به زودي تاپيک ها به روز رساني خواهد شد،

          دیدگاه


            #6
            پاسخ : usart در حالت mpcm

            سلام
            این برنامه رو نوشتم اما جواب نمیده :biggrin:
            Master

            کد:
            /*
             * Net_Usart.c
             *
             * Created: 8/7/2013 7:44:08 PM
             * Author: sadeq
             */ 
            #ifdef F_CPU
            #define F_CPU 8000000
            #endif
            #include <avr/io.h>
            #include <util/delay.h>
            #define slave_add1 0X10
            #define slave_add2 0x20
            int main(void)
            {
            	int add;
            	char hello;
            	UCSRA=0X1;
            	UCSRB=0X1D;
            	UCSRC=0X86;
            	UBRRH=0;
            	UBRRL=51;
            	
              while(1)
              {
            		//**ninth bit set 1
            		UCSRB|=(1<<TXB8);
            		//**PID Send
            		UDR=slave_add1;
            		while(!(UCSRA & (1<<TXC)));
            		UCSRA=(1<<TXC);
            		//**receive ACK
            		add=UDR;
            		while(!(UCSRA & (1<<RXC)));
            		UCSRA=(1<<RXC);				//**clear RXC Flag
            		add=0;
            		//**checking request 
            		if (add==slave_add1)
            		{
            			UCSRA|=~(1<<MPCM);
            			UCSRB|=~(1<<TXB8);
            			add=0;
            		}
            		//**Send DATA
            		_delay_ms(100);
            		UDR=hello;			//**this is a data
            		while(!(UCSRA & (1<<TXC)));
            		UCSRA|=(1<<MPCM);
            		UCSRA=(1<<TXC);
            		
            		
                 
              }
            }

            Slave

            کد:
            /*
             * Slave.c
             *
             * Created: 8/8/2013 6:38:53 PM
             * Author: sadeq
             */ 
            
            #ifdef F_CPU
            #define F_CPU 8000000
            #endif
            #include <avr/io.h>
            #include <util/delay.h>
            #define slave_add1 0X10
            int main(void)
            {
            	int add;
            	char hello,data;
            	UCSRA=0X1;
            	UCSRB=0x1E;
            	UCSRC=0x86;
              while(1)
              {
            		//**receive PID
                add=UDR;
            		while(!(UCSRA & (1<<RXC)));
            		UCSRA=(1<<RXC);				//**clear RXC Flag
            		//**checking address
            		if (add==slave_add1)
            		{
            			UCSRA|=~(1<<MPCM);		//**this means i am ready to receive DATA 
            			UCSRB|=~(1<<RXB8);
            			//**sending ACK
            			UDR=slave_add1;
            			while(!(UCSRA & (1<<TXC)));
            			UCSRA=(1<<TXC);			//**clear TXC Flag
            			add=0;
            		}
            		//**receive DATA
            		data=UDR;
            		while(!(UCSRA & (1<<RXC)));
            		if (data==hello)
            		{
            			PORTC|=(1<<PD5);
            			_delay_ms(1000);
            			PORTC|=~(1<<PD5);
            			_delay_ms(1000);
            		}
            		
            		
            		
            		
            		
              }
            }

            فایل برنامه همراه با پروتئوس
            http://www.mediafire.com/?9989f7es597cbdw

            چه يافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را يافت.

            دیدگاه


              #7
              پاسخ : usart در حالت mpcm

              من راستش پروژه را دانلود نکردم، ولی همینجا که کدهای master را خوندم ، فکر میکنم هنوز کامل روش را درک نکردید:

              اول اینکه برای بار اول و تمرین اول شما یک ارتباط ساده را در نظر بگیرید.(می خواید handshaking عمل کنید؟ دریافت ack؟ )
              تمرین را به این صورت انجام بدید که مثلا یکبار مستر بایتی را به اسلیو 1 دهد و دفعه دیگه به اسیو 2 .

              خوب اول بگم که همون جمله که گفتم ،تو ارتباط چند میکروکنترلری(با استفاده از MPCM) یک جمله طلاییه:

              وقتی MPCM یک است ، بیت ماقبل آخرین stop bit تعیین کننده دریافت است ، اگر 1 باشه دریافت میشه و در رجیستر UDR قرار میگیره و اگر صفر باشه به اصطلاح فیلتر میشه.
              پس میبینیم که MPCM فقط تو دریافت دخالت داره و تو مستر اصلا نیاز نیست بیت MPCM را تغییر بدید(بزارید همون صفر باشه) . وفقط بایستی با استفاده از بیت نهم که بیت ماقبل آخر بیت پایان است، تعیین کنید که بایت خروجی فعلی آدرس است یا دیتا. پس تو مستر چیزی چک نمیشه ولی تو اسلیوها باید در حالت عادی کل اسلیوها بیت MPCMشون یک باشه. در این صورت بایتی که مستر با بیت نهم 1 (آدرس) ارسال میکند را کل اسلیو ها دریافت میکنند. اینجاست که اسلیوها باید تک تک بایت دریافتی(آدرس) را با آدرس خودشون مقایسه کنند و اگر برابر شد MPCM خودش را صفر میکند . خوب حالا از این به بعد در صورتی که اطلاعات روی باس با بیت نهم 0 باشد ، دیگه فقط اسلیوی که MPCMش صفره (همون اسلیو انتخاب شده) اون را دریافت میکنه و در اصلاح اطلاعات دریافت شده توسط بقیه ی اسلیوها فیلتر میشه.
              راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
              کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
              نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
              انشالله به زودي تاپيک ها به روز رساني خواهد شد،

              دیدگاه


                #8
                پاسخ : usart در حالت mpcm

                نوشته اصلی توسط RubeuS
                من راستش پروژه را دانلود نکردم، ولی همینجا که کدهای master را خوندم ، فکر میکنم هنوز کامل روش را درک نکردید:

                اول اینکه برای بار اول و تمرین اول شما یک ارتباط ساده را در نظر بگیرید.(می خواید handshaking عمل کنید؟ دریافت ack؟ )
                تمرین را به این صورت انجام بدید که مثلا یکبار مستر بایتی را به اسلیو 1 دهد و دفعه دیگه به اسیو 2 .

                خوب اول بگم که همون جمله که گفتم ،تو ارتباط چند میکروکنترلری(با استفاده از MPCM) یک جمله طلاییه:
                پس میبینیم که MPCM فقط تو دریافت دخالت داره و تو مستر اصلا نیاز نیست بیت MPCM را تغییر بدید(بزارید همون صفر باشه) . وفقط بایستی با استفاده از بیت نهم که بیت ماقبل آخر بیت پایان است، تعیین کنید که بایت خروجی فعلی آدرس است یا دیتا. پس تو مستر چیزی چک نمیشه ولی تو اسلیوها باید در حالت عادی کل اسلیوها بیت MPCMشون یک باشه. در این صورت بایتی که مستر با بیت نهم 1 (آدرس) ارسال میکند را کل اسلیو ها دریافت میکنند. اینجاست که اسلیوها باید تک تک بایت دریافتی(آدرس) را با آدرس خودشون مقایسه کنند و اگر برابر شد MPCM خودش را صفر میکند . خوب حالا از این به بعد در صورتی که اطلاعات روی باس با بیت نهم 0 باشد ، دیگه فقط اسلیوی که MPCMش صفره (همون اسلیو انتخاب شده) اون را دریافت میکنه و در اصلاح اطلاعات دریافت شده توسط بقیه ی اسلیوها فیلتر میشه.
                سلام
                من واسه یه شیکه rs485 راجب mpcm سرچ کردم ، راستش پیزه زیادی دستگیرم نشد ولی الان که شما توضیح دادین قشنگ روشن شد واسم :job: :applause:
                هرچند خودم یه پرتکلی نوشتم و دارم استفاده میکنم.ولی حالا که این توضیحات رو دیدم دلم میخواد تغییرش بدم... :redface:
                ---
                1-حالا وقتی ارسال داده تموم شد و مستر دوباه آدرس رو با بیت 9 یک فرستاد ، تکلیف اون اسلوی که بیت MPCM رو صفر کرده بود و داده رو دریافت میکرد، چطور متوجه میشه که باید یک کنه؟
                2-موقع پاسخ دادن اسلو به مستر چه طور؟
                وقتی MPCM یک است ، بیت ماقبل آخرین stop bit تعیین کننده دریافت است ، اگر 1 باشه دریافت میشه و در رجیستر UDR قرار میگیره و اگر صفر باشه به اصطلاح فیلتر میشه.
                من این جمله و درک نکردم.اگه صفر باشه فیلتر میشه....پس چطور اسلو آدرس رو دریافت میکنه وقتی دریافت نمیشه...که با id خودش چک کنه...

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

                دیدگاه


                  #9
                  پاسخ : usart در حالت mpcm

                  نوشته اصلی توسط کیوان قاسمی
                  سلام
                  من واسه یه شیکه rs485 راجب mpcm سرچ کردم ، راستش پیزه زیادی دستگیرم نشد ولی الان که شما توضیح دادین قشنگ روشن شد واسم :job: :applause:
                  هرچند خودم یه پرتکلی نوشتم و دارم استفاده میکنم.ولی حالا که این توضیحات رو دیدم دلم میخواد تغییرش بدم... :redface:
                  ---
                  1-حالا وقتی ارسال داده تموم شد و مستر دوباه آدرس رو با بیت 9 یک فرستاد ، تکلیف اون اسلوی که بیت MPCM رو صفر کرده بود و داده رو دریافت میکرد، چطور متوجه میشه که باید یک کنه؟
                  2-موقع پاسخ دادن اسلو به مستر چه طور؟من این جمله و درک نکردم.اگه صفر باشه فیلتر میشه....پس چطور اسلو آدرس رو دریافت میکنه وقتی دریافت نمیشه...که با id خودش چک کنه...

                  امکانش هست بزنین من برنامشو توسعه بدم ؟شرمنده...
                  سلام
                  1-خوب مشخصه وقتی فلگ دریافت یک بشه
                  2-وقتی فلگ ارسال یک بشه
                  3-منظور همون بیت نهم هست،بقیه اسلیو ها که انتخاب نشدن منتظر آدرس هستن که آدرس رو فقط با بیت نهم یک حالیشون میشه پس اگه بیت نهم صفر باشه دیتا رو قبول نمیکنن چون در مرحله اول باید آدرس رو دریافت کنن بعد از این که آدرس رو دریافت کردن اون وقت دیتا رو بابیت نهم صفر قبول و با بیت نهم یک فیلتر میکنن
                  چه يافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را يافت.

                  دیدگاه


                    #10
                    پاسخ : usart در حالت mpcm

                    نوشته اصلی توسط کیوان قاسمی
                    سلام
                    من واسه یه شیکه rs485 راجب mpcm سرچ کردم ، راستش پیزه زیادی دستگیرم نشد ولی الان که شما توضیح دادین قشنگ روشن شد واسم :job: :applause:
                    هرچند خودم یه پرتکلی نوشتم و دارم استفاده میکنم.ولی حالا که این توضیحات رو دیدم دلم میخواد تغییرش بدم... :redface:
                    ---
                    1-حالا وقتی ارسال داده تموم شد و مستر دوباه آدرس رو با بیت 9 یک فرستاد ، تکلیف اون اسلوی که بیت MPCM رو صفر کرده بود و داده رو دریافت میکرد، چطور متوجه میشه که باید یک کنه؟
                    2-موقع پاسخ دادن اسلو به مستر چه طور؟من این جمله و درک نکردم.اگه صفر باشه فیلتر میشه....پس چطور اسلو آدرس رو دریافت میکنه وقتی دریافت نمیشه...که با id خودش چک کنه...

                    امکانش هست بزنین من برنامشو توسعه بدم ؟شرمنده...
                    باز هم میگم :
                    اون جمله بسیار مهمه . بعد که اینکه درک کردید چی به چیه کاملا به اهمیتش پی میبرید.( شده صد بارم از روش بخونید ، اینکار را کنید تا کامل درکش کنید)

                    وقتی MPCM یک باشه و بیت ماقبل آخرین Stop bit (اینجا همون بیت نهم) دریافت شده صفر باشه کلا پکت از بین میره ( فیلتر میشه)

                    همیشه اول کار همه ی اسلیو ها MPCM شون یکه . و همیشه اول کار مستر برای شروع ارتباط پکت را با بیت نهم 1 میفرسته. پس همه ی اسلیوها ، پکت را دریافت میکنند. حالا باید هرکدوم پکت را با آدرسش مقایسه کنه ، اگر یکی بود MPCM خودش را صفر میکنه با اینکار دیگه هرچی براش بیاد بش میرسه و فیلتر و .. نداره. ولی بقیه که MPCM شون یک میمونه . خوب حالا اگه مستر پکت های بعدی (دیتا) را با بیت نهم 0 بفرسته ... چی میشه؟
                    اره آفرین .... فقط اسلیوی که در مرحله ی قبل MPCMش رو صفر کرده و محدودیت را از رو خودش برداشته ، دیتا ها را دریافت میکنه و دیتا در بقیه ی اسلیوها فیلتر میشه.(چون MPCMشون یکه و مستر داره دیتا را با بیت نهم 0 میفرسته)



                    جمله های بالا را مو به مو و کلمه به کلمه بخونید و تحلیل کنید. بعد اگه سوالی بازم بود ، مطرح کنید.
                    راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                    کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                    نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
                    انشالله به زودي تاپيک ها به روز رساني خواهد شد،

                    دیدگاه


                      #11
                      پاسخ : usart در حالت mpcm

                      نوشته اصلی توسط RubeuS
                      باز هم میگم :
                      اون جمله بسیار مهمه . بعد که اینکه درک کردید چی به چیه کاملا به اهمیتش پی میبرید.( شده صد بارم از روش بخونید ، اینکار را کنید تا کامل درکش کنید)

                      وقتی MPCM یک باشه و بیت ماقبل آخرین Stop bit (اینجا همون بیت نهم) دریافت شده صفر باشه کلا پکت از بین میره ( فیلتر میشه)

                      همیشه اول کار همه ی اسلیو ها MPCM شون یکه . و همیشه اول کار مستر برای شروع ارتباط پکت را با بیت نهم 1 میفرسته. پس همه ی اسلیوها ، پکت را دریافت میکنند. حالا باید هرکدوم پکت را با آدرسش مقایسه کنه ، اگر یکی بود MPCM خودش را صفر میکنه با اینکار دیگه هرچی براش بیاد بش میرسه و فیلتر و .. نداره. ولی بقیه که MPCM شون یک میمونه . خوب حالا اگه مستر پکت های بعدی (دیتا) را با بیت نهم 0 بفرسته ... چی میشه؟
                      اره آفرین .... فقط اسلیوی که در مرحله ی قبل MPCMش رو صفر کرده و محدودیت را از رو خودش برداشته ، دیتا ها را دریافت میکنه و دیتا در بقیه ی اسلیوها فیلتر میشه.(چون MPCMشون یکه و مستر داره دیتا را با بیت نهم 0 میفرسته)



                      جمله های بالا را مو به مو و کلمه به کلمه بخونید و تحلیل کنید. بعد اگه سوالی بازم بود ، مطرح کنید.
                      1-خوب مشخصه وقتی فلگ دریافت یک بشه
                      2-وقتی فلگ ارسال یک بشه
                      3-منظور همون بیت نهم هست،بقیه اسلیو ها که انتخاب نشدن منتظر آدرس هستن که آدرس رو فقط با بیت نهم یک حالیشون میشه پس اگه بیت نهم صفر باشه دیتا رو قبول نمیکنن چون در مرحله اول باید آدرس رو دریافت کنن بعد از این که آدرس رو دریافت کردن اون وقت دیتا رو بابیت نهم صفر قبول و با بیت نهم یک فیلتر میکنن
                      مرسی مرسی :job::applause:
                      پس اول باید usart رو روی 9 بیت تنطیم کنم ... همه اسلو ها و مستر . و MPCM مستر و اسلوها همه یک ...
                      مستر یک آدرس میفرسته...توی 8 بیت و بیت 9 رو کاراکتر 1 قرار میدیم...
                      اسلو ها که بیت 9 اشون 1 هست همه دریافت میکنن...
                      بعد از این که 9 بیت وارد rx اسلو ها شد(در وقته یک شمارنده بزارم که 9 بیت دریافت کرد بعد یک تابعی رو اجرا کنه،درسته ؟یا اشتباه) من تابعی که نوشتم واسه شناسایی ID فرستاده شده و اجرا میکنم...با آدرس ارسال شده مقایسه میکنم...اگه یکی بود MPCM اسلو 0 میشه...حالا مستر باید تاخیر داشته باشه توی ارسال آدرس با دستور هاش؟یا نیاز نیست ؟بزارم خیالم راحت تره :mrgreen: 2 میلی خوبه دگ؟
                      حالا مستر هرچی بفرسته اسلو اون رو به صورت داده میگیره....
                      من واسه اینکه بگم کارم با این مستر تموم شد یک کاراکنر مثلا ";" در انتهای داده هام میفرستم . ابعد از شناسایی این کاراکتر MPCM اسلو رو یک میکنم...

                      حالا واسه جواب دادن اسلو به مستر...
                      مستر وقتی درخواست رو فرستاد من میگم تو مثلا 2 ثانیه گوش کن ببین کسی جواب میده یا نه...اگه نداد در خواست بعدی ارسال بشه...
                      حالا اون اسلوه که میخواد جواب بده ID مستر رو با 1 بیت 9 (که یک هس) ارسال میکنه....حالا مستر مثل اسلو های دیگه چک میکنه...اگه مطابقت داشت MPCM خودش رو 0 میکنه و اطلاعات بعدی که ارسال میشه (بیت های 9 ضفر باید باشن) به عنوان پاسخ اسلو به مستر تلقی میشه...

                      درس گفتم؟ :read:

                      دیدگاه


                        #12
                        پاسخ : usart در حالت mpcm

                        :question:

                        دیدگاه

                        لطفا صبر کنید...
                        X