اطلاعیه

Collapse
No announcement yet.

twi ?!?

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

    twi ?!?

    سلام دوستان
    من یه هفته ای میشه که می خوام twi بین دو میکرو رو راه بندازم اما هیچ پیشرفتی نداشتم !
    می خواستم بدونم کسی تونسته راه بندازدش یا نه؟ آخه تو دوستام کسی نتونسته
    من اصول کار رو رعایت میکنم اما حتی slve آدرسش رو نمیشناسه که بره تو وقفه
    کلا هر مدلی میشد رو امتحان کردم
    اگه یه کدی راهنمایی چیزی هم واسه master هم واسه slave تو codevision داشته باشین ممنون میشم بذارین
    در ضمن بگم که توسایتم گشتم اما فایلا expire شده بودن
    هم اکنون نیازمند یاری سبزتان هستیم...


    #2
    پاسخ : twi ?!?

    اینو دانلود کن.مثال خوبیه. این برنامه رو از یکی از کتابا برداشتم.
    master وslave برنامه ی اتصال دو تا میکرو به همه و EEPROM برنامه اتصال یه میکرو به یه حافظه ی سریال.
    http://www.4shared.com/file/fclYIpGZ/TWI.html

    اگه جواب نمیده چرا از I2c استفاده نمیکنی؟
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    دیدگاه


      #3
      پاسخ : twi ?!?

      سلام
      ممنون
      ولی اینکه همش با ریجستراس... اینجوری خیلی سخت میشه (یعنی برنامه کلی که این یه بخششه خیلی پیچیده میشه)
      twi رو نمیشه با توابع کتابخانه i2c نوشت؟؟ :rolleyes:

      دیدگاه


        #4
        پاسخ : twi ?!?

        اصلا چرا بیخیال TWI نمیشی؟؟ توی کدویژن کتابخونه ی i2c.h رو به برنامت اضافه کن و راحت از توابعش استفاده کن.
        برای اینکه بتونی از TWI مثل تابع های آماده ی I2c استفاده کنی باید کتابخونش رو داشته باشی.من این کتابخونه رو دارم ولی برای Winavr .
        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

        دیدگاه


          #5
          پاسخ : twi ?!?

          هان!! oo:" راحت از توابعش استفاده کن"
          اگه راحت بود که من الان اینجا نبودم
          من طبق اصول برنامشو مینویسم ولی اصلا واکنشی رخ نمیده :icon_razz:
          مگه twi همون ارتباط I2C بین دو تا میکرو نیست؟ در حقیقت من میخوام یه میکرو MASTER و یه میکرو SLAVE ویه ماژول SLAVE دیگه رو شبکه کنم
          این ماژوله با I2C کار میکنه(ازش با توابع I2C.H جوابم گرفتم)
          خوب اینا همش همون I2C ان فقط بین دو میکرو اسمش شده TWI ؟!؟....
          کدی با توابع I2C نداری؟

          دیدگاه


            #6
            پاسخ : twi ?!?

            مگه twi همون ارتباط I2C بین دو تا میکرو نیست؟ در حقیقت من میخوام یه میکرو MASTER و یه میکرو SLAVE ویه ماژول SLAVE دیگه رو شبکه کنم
            این ماژوله با I2C کار میکنه(ازش با توابع I2C.H جوابم گرفتم)
            آخر با i2c کار میکنید یا با TWI ؟ من گیج شدم
            نوشته اصلی توسط arash_zp
            خوب اینا همش همون I2C ان فقط بین دو میکرو اسمش شده TWI ؟!؟....
            نه رفیق. بزار بیشتر توضیح بدم.
            TWI یه سخت افزاری که از طریق 2 تا سیم با دنیای بیرون ارتباط برقرار میکنه.([glow=red,2,300]t[/glow]wo [glow=red,2,300]w[/glow][glow=red,2,300]i[/glow]re[glow=red,2,300] i[/glow]nterface )
            حالا اگه ما از طریق نرم افزار اون سخت افزار رو شبیه سازی کنیم میشه i2c .
            i2c روی هر دوتا پایه ای که بخواید میشه راه انداخت ولی TWI رو باید حتما با دوتا پایه ی خودش راه بندازید.
            کتابخونه ی i2c.h هم همین شبیه سازی رو انجام میده.ولی برای راه انداختن TWI باید ریجستر های مربوط بهش رو مقدار دهی کنید.(TWBR-TWCR-TWSR-TWDR-TWAR) اگر خواستی هر ریجستر رو بیشتر توضیح میدم.
            حالا شما سخت افزاری کار میکنید یا نرم افزاری؟
            برنامه ای که نوشتید رو اینجا بزارید تا ببینیم میشه یه جوری درستش کرد؟
            [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

            دیدگاه


              #7
              پاسخ : twi ?!?

              سلام دوستان
              شرمنده من یه چند روزی کار واسم پیش اومد نتونستم تاپیک پیگیری کنم
              این تفاوت رو خودم هم احساس کرده بودم :agree:
              حالا نمیشه تنظیمات رو طوری کرد که بشه از توابع i2c هم استفاده کرد؟ یعنی من هم همزمان با i2c اون ماژول رو یه بار فراخوانی کنم و یه بارم slave رو ؟ :rolleyes:
              یعنی هم کدهای تعریف ریجستر ها رو داشته باشیم و هم به جای اینکه مستقیم ازشون استفاده بکنیم با توابع i2c کار کنیم؟

              دیدگاه


                #8
                پاسخ : twi ?!?

                برای این کار باید کتابخونه ی TWI رو داشته باشید.من برای کدویژن رو ندارم(مال winavr هست)
                یکم دنبال کتابخونش برای کد ویژن بگرد احتمالا پیدا میکنی.
                [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                دیدگاه


                  #9
                  پاسخ : twi ?!?

                  سلام

                  منم مشکل این دوستمون را دارم

                  با توابع I2C نمیتونم ارتباط بین دو میکرو برقرار کنم، با رجیستر هم نمیتونم، از توابع TWI هم اطلاع ندارم. :cry:

                  کتابخانه TWI را هم دارم. :smile:

                  لطفا راهنمایی کنید که من چطوری میتونم ارتباط دوتا میکرو را با این پروتکل برقرار کنم. :angry:
                  ممنونم از راهنمائیهای خوبتون :smile:

                  دیدگاه


                    #10
                    پاسخ : twi ?!?

                    یه نمونه از برنامه ای که نوشتی رو بذار. :smile:
                    ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

                    امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

                    دیدگاه


                      #11
                      پاسخ : twi ?!?

                      نوشته اصلی توسط ok20
                      سلام

                      منم مشکل این دوستمون را دارم

                      با توابع I2C نمیتونم ارتباط بین دو میکرو برقرار کنم، با رجیستر هم نمیتونم، از توابع TWI هم اطلاع ندارم. :cry:

                      کتابخانه TWI را هم دارم. :smile:

                      لطفا راهنمایی کنید که من چطوری میتونم ارتباط دوتا میکرو را با این پروتکل برقرار کنم. :angry:
                      ممنونم از راهنمائیهای خوبتون :smile:
                      سلام
                      با کدویژن کار میکنید؟
                      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                      معرفی نرم افزار Codewizard PWM
                      با من بیشتر آشنا شوید

                      دیدگاه


                        #12
                        پاسخ : twi ?!?

                        سلام دوستان

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

                        دو مدل برنامه است. ولی هیچ کدوم کار نمیده.

                        http://melecamp.persiangig.com/other/TWI.rar/download

                        چرا توی خود فروم نمیشه پلود کرد؟؟؟

                        دیدگاه


                          #13
                          پاسخ : twi ?!?

                          نوشته اصلی توسط ok20
                          بله با کدویژن کار میکنم.
                          دو مدل برنامه است. ولی هیچ کدوم کار نمیده.
                          http://melecamp.persiangig.com/other/TWI.rar/download
                          یه برنامه نوشتم که میتونه 3تا اسلیو رو فرماندهی کنه ...

                          برنامه Master :
                          کد:
                          #include <mega16.h>
                          #include <delay.h>
                          #include <twi.h>
                          
                          void main(void)
                          {
                            unsigned char Address,Data[5]={0,0,0,0,0};
                            PORTC = 0x03;
                            PORTA=255; // Address
                            PORTB=255; // Input Data1
                            PORTD=255; // Input Data2
                            // TWI initialization
                            // Mode: TWI Master
                            // Bit Rate: 10 kHz
                            twi_master_init(10);
                            // Global enable interrupts
                            #asm("sei")
                          
                            while (1)
                            {
                              Data[0] = PINB;
                              Data[1] = PIND;
                              Address = PINA & 127;
                              while(twi_master_trans(Address,Data,2,0,0) == 0);
                              delay_ms(10);
                            }
                          }
                          برنامه Slave با آدرس 0x01 :
                          کد:
                          /*****************************************************
                          This program was produced by the
                          CodeWizardAVR V2.05.3 Standard
                          Automatic Program Generator
                          © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                          http://www.hpinfotech.com
                          
                          Project :
                          Version :
                          Date  : 6/14/2014
                          Author : Saman
                          Company :
                          Comments:
                          
                          
                          Chip type        : ATmega16
                          Program type      : Application
                          AVR Core Clock frequency: 8.000000 MHz
                          Memory model      : Small
                          External RAM size    : 0
                          Data Stack size     : 256
                          *****************************************************/
                          
                          #include <mega16.h>
                          
                          // TWI functions
                          #include <twi.h>
                          
                          // TWI Slave receive buffer
                          #define TWI_RX_BUFFER_SIZE 5
                          unsigned char twi_rx_buffer[TWI_RX_BUFFER_SIZE];
                          
                          // TWI Slave transmit buffer
                          #define TWI_TX_BUFFER_SIZE 1
                          unsigned char twi_tx_buffer[TWI_TX_BUFFER_SIZE];
                          
                          // TWI Slave receive handler
                          // This handler is called everytime a byte
                          // is received by the TWI slave
                          bool twi_rx_handler(bool rx_complete)
                          {
                          if (twi_result==TWI_RES_OK)
                            {
                            // A data byte was received without error
                            // and it was stored at twi_rx_buffer[twi_rx_index]
                            // Place your code here to process the received byte
                            // Note: processing must be VERY FAST, otherwise
                            // it is better to process the received data when
                            // all communication with the master has finished
                          
                            }
                          else
                            {
                            // Receive error
                            // Place your code here to process the error
                          
                            return false; // Stop further reception
                            }
                          
                          // The TWI master has finished transmitting data?
                          if (rx_complete) return false; // Yes, no more bytes to receive
                          
                          // Signal to the TWI master that the TWI slave
                          // is ready to accept more data, as long as
                          // there is enough space in the receive buffer
                          return (twi_rx_index<sizeof(twi_rx_buffer));
                          }
                          
                          // TWI Slave transmission handler
                          // This handler is called for the first time when the
                          // transmission from the TWI slave to the master
                          // is about to begin, returning the number of bytes
                          // that need to be transmitted
                          // The second time the handler is called when the
                          // transmission has finished
                          // In this case it must return 0
                          unsigned char twi_tx_handler(bool tx_complete)
                          {
                          if (tx_complete==false)
                            {
                            // Transmission from slave to master is about to start
                            // Return the number of bytes to transmit
                            return sizeof(twi_tx_buffer);
                            }
                          
                          // Transmission from slave to master has finished
                          // Place code here to eventually process data from
                          // the twi_rx_buffer, if it wasn't yet processed
                          // in the twi_rx_handler
                          
                          // No more bytes to send in this transaction
                          return 0;
                          }
                          
                          // Declare your global variables here
                          
                          void main(void)
                          {
                            DDRA=0xFF;
                            DDRB=0xFF;
                            PORTC=0x03;
                            // TWI initialization
                            // Mode: TWI Slave
                            // Match Any Slave Address: Off
                            // I2C Bus Slave Address: 0x01
                            twi_slave_init(false,0x01,twi_rx_buffer,sizeof(twi_rx_buffer),twi_tx_buffer,twi_rx_handler,twi_tx_handler);
                            #asm("sei")
                          
                            while (1)
                            {
                              PORTA = twi_rx_buffer[0];
                              PORTB = twi_rx_buffer[1];
                            }
                          }

                          برنامه Slave با آدرس 0x02 :
                          کد:
                          /*****************************************************
                          This program was produced by the
                          CodeWizardAVR V2.05.3 Standard
                          Automatic Program Generator
                          © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                          http://www.hpinfotech.com
                          
                          Project :
                          Version :
                          Date  : 6/14/2014
                          Author : Saman
                          Company :
                          Comments:
                          
                          
                          Chip type        : ATmega16
                          Program type      : Application
                          AVR Core Clock frequency: 8.000000 MHz
                          Memory model      : Small
                          External RAM size    : 0
                          Data Stack size     : 256
                          *****************************************************/
                          
                          #include <mega16.h>
                          
                          // TWI functions
                          #include <twi.h>
                          
                          // TWI Slave receive buffer
                          #define TWI_RX_BUFFER_SIZE 5
                          unsigned char twi_rx_buffer[TWI_RX_BUFFER_SIZE];
                          
                          // TWI Slave transmit buffer
                          #define TWI_TX_BUFFER_SIZE 1
                          unsigned char twi_tx_buffer[TWI_TX_BUFFER_SIZE];
                          
                          // TWI Slave receive handler
                          // This handler is called everytime a byte
                          // is received by the TWI slave
                          bool twi_rx_handler(bool rx_complete)
                          {
                          if (twi_result==TWI_RES_OK)
                            {
                            // A data byte was received without error
                            // and it was stored at twi_rx_buffer[twi_rx_index]
                            // Place your code here to process the received byte
                            // Note: processing must be VERY FAST, otherwise
                            // it is better to process the received data when
                            // all communication with the master has finished
                          
                            }
                          else
                            {
                            // Receive error
                            // Place your code here to process the error
                          
                            return false; // Stop further reception
                            }
                          
                          // The TWI master has finished transmitting data?
                          if (rx_complete) return false; // Yes, no more bytes to receive
                          
                          // Signal to the TWI master that the TWI slave
                          // is ready to accept more data, as long as
                          // there is enough space in the receive buffer
                          return (twi_rx_index<sizeof(twi_rx_buffer));
                          }
                          
                          // TWI Slave transmission handler
                          // This handler is called for the first time when the
                          // transmission from the TWI slave to the master
                          // is about to begin, returning the number of bytes
                          // that need to be transmitted
                          // The second time the handler is called when the
                          // transmission has finished
                          // In this case it must return 0
                          unsigned char twi_tx_handler(bool tx_complete)
                          {
                          if (tx_complete==false)
                            {
                            // Transmission from slave to master is about to start
                            // Return the number of bytes to transmit
                            return sizeof(twi_tx_buffer);
                            }
                          
                          // Transmission from slave to master has finished
                          // Place code here to eventually process data from
                          // the twi_rx_buffer, if it wasn't yet processed
                          // in the twi_rx_handler
                          
                          // No more bytes to send in this transaction
                          return 0;
                          }
                          
                          // Declare your global variables here
                          
                          void main(void)
                          {
                            DDRA=0xFF;
                            DDRB=0xFF;
                            PORTC=0x03;
                            // TWI initialization
                            // Mode: TWI Slave
                            // Match Any Slave Address: Off
                            // I2C Bus Slave Address: 0x02
                            twi_slave_init(false,0x02,twi_rx_buffer,sizeof(twi_rx_buffer),twi_tx_buffer,twi_rx_handler,twi_tx_handler);
                            #asm("sei")
                          
                            while (1)
                            {
                              PORTA = twi_rx_buffer[0];
                              PORTB = twi_rx_buffer[1];
                            }
                          }
                          برنامه Slave با آدرس 0x03 :
                          کد:
                          /*****************************************************
                          This program was produced by the
                          CodeWizardAVR V2.05.3 Standard
                          Automatic Program Generator
                          © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                          http://www.hpinfotech.com
                          
                          Project :
                          Version :
                          Date  : 6/14/2014
                          Author : Saman
                          Company :
                          Comments:
                          
                          
                          Chip type        : ATmega16
                          Program type      : Application
                          AVR Core Clock frequency: 8.000000 MHz
                          Memory model      : Small
                          External RAM size    : 0
                          Data Stack size     : 256
                          *****************************************************/
                          
                          #include <mega16.h>
                          
                          // TWI functions
                          #include <twi.h>
                          
                          // TWI Slave receive buffer
                          #define TWI_RX_BUFFER_SIZE 5
                          unsigned char twi_rx_buffer[TWI_RX_BUFFER_SIZE];
                          
                          // TWI Slave transmit buffer
                          #define TWI_TX_BUFFER_SIZE 1
                          unsigned char twi_tx_buffer[TWI_TX_BUFFER_SIZE];
                          
                          // TWI Slave receive handler
                          // This handler is called everytime a byte
                          // is received by the TWI slave
                          bool twi_rx_handler(bool rx_complete)
                          {
                          if (twi_result==TWI_RES_OK)
                            {
                            // A data byte was received without error
                            // and it was stored at twi_rx_buffer[twi_rx_index]
                            // Place your code here to process the received byte
                            // Note: processing must be VERY FAST, otherwise
                            // it is better to process the received data when
                            // all communication with the master has finished
                          
                            }
                          else
                            {
                            // Receive error
                            // Place your code here to process the error
                          
                            return false; // Stop further reception
                            }
                          
                          // The TWI master has finished transmitting data?
                          if (rx_complete) return false; // Yes, no more bytes to receive
                          
                          // Signal to the TWI master that the TWI slave
                          // is ready to accept more data, as long as
                          // there is enough space in the receive buffer
                          return (twi_rx_index<sizeof(twi_rx_buffer));
                          }
                          
                          // TWI Slave transmission handler
                          // This handler is called for the first time when the
                          // transmission from the TWI slave to the master
                          // is about to begin, returning the number of bytes
                          // that need to be transmitted
                          // The second time the handler is called when the
                          // transmission has finished
                          // In this case it must return 0
                          unsigned char twi_tx_handler(bool tx_complete)
                          {
                          if (tx_complete==false)
                            {
                            // Transmission from slave to master is about to start
                            // Return the number of bytes to transmit
                            return sizeof(twi_tx_buffer);
                            }
                          
                          // Transmission from slave to master has finished
                          // Place code here to eventually process data from
                          // the twi_rx_buffer, if it wasn't yet processed
                          // in the twi_rx_handler
                          
                          // No more bytes to send in this transaction
                          return 0;
                          }
                          
                          // Declare your global variables here
                          
                          void main(void)
                          {
                            DDRA=0xFF;
                            DDRB=0xFF;
                            PORTC=0x03;
                            // TWI initialization
                            // Mode: TWI Slave
                            // Match Any Slave Address: Off
                            // I2C Bus Slave Address: 0x03
                            twi_slave_init(false,0x03,twi_rx_buffer,sizeof(twi_rx_buffer),twi_tx_buffer,twi_rx_handler,twi_tx_handler);
                            #asm("sei")
                          
                            while (1)
                            {
                              PORTA = twi_rx_buffer[0];
                              PORTB = twi_rx_buffer[1];
                            }
                          }


                          این هم فایلها :
                          http://s5.picofile.com/file/8126488700/Test_TWI.zip.html

                          امیدوارم که به دردتون بخوره
                          موفق باشید
                          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                          معرفی نرم افزار Codewizard PWM
                          با من بیشتر آشنا شوید

                          دیدگاه


                            #14
                            پاسخ : twi ?!?

                            سلام

                            ممنون از لطفتون

                            امتحان میکنم و نتیجه را میگم.

                            میشه لطف کنین و توابع موجود در فایل هیدر TWI.h به همراه نحوه استفاده اش را بهم بگین؟؟؟

                            با تشکر

                            دیدگاه


                              #15
                              پاسخ : twi ?!?


                              نوشته اصلی توسط ok20
                              میشه لطف کنین و توابع موجود در فایل هیدر TWI.h به همراه نحوه استفاده اش را بهم بگین؟؟؟
                              خوب اینها زیاد سخت نیست ولی همینا یکی دو هفته گیرش بودم تا تونستم باهاشون کار کنم ...
                              بریم سر اصل مطلب
                              برای تعیین فرکانس کاری TWI باید این تابع را به کار گیریم
                              کد:
                              twi_master_init(10);
                              البته این برای Master است (در اینجا فرکانس را 10 کیلو تعیین کردیم)

                              تابع void twi_slave_init برای پیکره بندی Slave به کار برده میشود ...
                              این تابع چند ورودی دارد
                              ورودی bool match_any_addr :
                              این ورودی اگر true باشد با هر آدرسی کار میکند ولی اگر false باشد با آن آدرسی که برایش تعیین میکنیم کار میکند
                              ورودی unsigned char addr :
                              این ورودی برای تعیین آدرس Slave به کار گرفته میشود
                              ورودی unsigned char *rx_buffer :
                              این ورودی برای تعیین کردن آن متغیری است که قراره از Master گرفته بشود ... در حقیقت این حافظه بافر برای نوشتن از سوی Slave است ...
                              ورودی unsigned char rx_buffer_size :
                              این ورودی برای تعیین این است که حداکثر بافری که قرار است به کار گرفته شود چه قدر باشد ... مثلا آرایه دوتایی میشه 2 ...
                              ورودی unsigned char *tx_buffer :
                              این ورودی برای آن متغیری است که قرار است از سمت Master خوانده شود ... در حقیقت این حافظه بافر برای خواندن از سوی Master است
                              دو ورودی بعدی نفهمیدم واسه چیه ...

                              تابع bool twi_master_trans :
                              این تابع برای نوشتن و خواندن در Master به کاربرده میشود ... بنابراین هرگاه خواستیم که از روی باس بخوانیم یا بنویسیم این تابع را باید به کار گیریم
                              ورودی unsigned char slave_addr :
                              آدرس Slave یا دستگاهی که میخواهیم داده را از روی آن بخوانیم یا بنویسیم ...
                              ورودی unsigned char *tx_data :
                              اشاره به آدرس آن متغیری میکند که میخواهیم داده ها را روی آدرس مورد نظر بنویسیم ...
                              ورودی unsigned char tx_count :
                              تعداد بایتهایی که میخواهیم ارسال کنیم ...
                              ورودی unsigned char *rx_data :
                              اشاره به آدرس آن متغیری میکند که میخواهیم داده ها را از روی آدرس مورد نظر بخوانیم و روی این متغیر ریخته شود ...
                              ورودی unsigned char rx_count :
                              تعداد بایتهایی که میخواهیم دریافت کنیم ...

                              ببخشید اگر دیر شد ...
                              دست و پا شکسته ... اما کار راه انداز ... :redface:
                              موفق باشید
                              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                              معرفی نرم افزار Codewizard PWM
                              با من بیشتر آشنا شوید

                              دیدگاه

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