اطلاعیه

Collapse
No announcement yet.

برقراری ارتباط بین دو میکروکنترلر

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

    برقراری ارتباط بین دو میکروکنترلر

    سلام
    وقت همگی بخیر
    من دارم روی یه برنامه ای کار میکنم که بتونم بین میکرو AVR و میکرو picآ‌ ارتباط برقرار کنم. درواقع میکرو avr به عنوان masterآ‌ و میکرو pic به عنوان slave هستش.
    من avr را به زبان بیسیک مینویسم و توی محیط بسکام. آ‌pic را هم به زبان بیسیک توی محیط picbasic pro کار میکنم.
    ممنون میشم توی این زمینه من را راهنمایی کنید.این که به چه روشی و با چه دستورایی میتونم این کار را انجام بدم.

    #2
    پاسخ : برقراری ارتباط بین دو میکروکنترلر

    از ارتباط USART استفاده کنید .
    از نظر من ساده ترین ارتباط در AVR است.

    چرا هر دو میکرو را AVR انتخاب نکردید؟

    من کارای AVR رو بهت می گم.
    کارای PIC با خودت.
    سخت افزار:
    1. پایه RXD میکرو اول را به پایه TXD میکرو دوم وصل کنید.
    2. پایه TXD میکرو اول را هم به پایه RXD میکرو دوم وصل کنید.

    نرم افزار:
    در بسکام بعد از مقدار دهی کریستال بنویس:
    baud=4800 'sets baud rate $
    با این کار نرخ ارسال اطلاعات (باود ریت) رو تعیین کردی.
    حالا با دستور print می تونی رشته ارسال کنی و با input دریافت کنی.
    فقط موقع دریافت باید اینجوری بنویسی:

    do
    input a
    loop until a<>"" ' loop
    نکات:
    فرکانس هر دو میکرو باید یکی باشد.
    نرخ ارسال و دریافت اطلاعات در هر دو میکرو باید یکی باشد.
    موفق باشی .
    سوالی داشتی بپرس.
    [glow=green,2,300][b]بشر ممکن الخطاست
    درخت هرچه پربار تر سر به زیر تر[/glow]

    دیدگاه


      #3
      پاسخ : برقراری ارتباط بین دو میکروکنترلر

      [right]ممنون از راهنمأیتون.

      پیک 16f54 پایه RX/Txنداره.

      من تصمیم داشتم از ارتباط i2c استفاده کنم،ک فعلا برنامه جواب نمید.

      شما فرمودید "نرخ ارسال و دریافت اطلاعات در هر دو میکرو باید یکی باشد." این رو چطور میآ‌تونم تعیین کنم؟

      از طریقه ارتباط i2c چطور میآ‌تونم این کار رو بکنم؟

      مقاله دارید ک ارتباط چند میکرو مختلف رو توش گفت باشه؟

      ممنون میشم راهنمأیم کنید



      دیدگاه


        #4
        پاسخ : برقراری ارتباط بین دو میکروکنترلر

        نمونه برنامه هایی که نوشتم:

        برنامه مربوط به master
        کد:
        '''''''''''''''''''''''''''''''''''
        '''''''''''''''''''''''''''''''''''
        ''''''''''''''Master'''''''''''''''
        '''''''''''''''''''''''''''''''''''
        '''''''''''''''''''''''''''''''''''
        
        $regfile = "attiny26.dat"
        $crystal = 4000000
        'baud=4800    'sets baud rate $ 0
        Baud = 2400                         'sets baud rate $ 0
        
        
        Config Lcd = 16 * 2
        Config Lcdbus = 4
        Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
        
        
        Sda Alias Portb.1                      'ghablan ba dastoor alias baraye i2c javab gerefte boodam
        Scl Alias Portb.2
        
        
        
        
        Dim Ackk As Byte
        
        
        Ackk = &B0110010
        
        Do
        
          ' Set Sda                         ' I2C Start
          Set Scl
          Reset Sda
          Reset Scl
        
          Shiftout Sda , Scl , Ackk , 0 , 7
        
          Reset Scl
          Reset Sda
          Set Scl
          Set Sda
        
        
        
        
        Lcd "send=" ; Ackk ; "   "
        
        Waitms 500
        Loop


        برنامه مربط به slave
        کد:
        '*     : ''''' slave  '''''               *
        '*     : ''''''*     : ''''''*     : ''''''*   
        '****************************************************************
        include "modedefs.bas"
        DEFINE DEBUG_BAUD 2400 'Debug baud rate 
        define lcd_dreg portb
        define lcd_dbit 4
        define lcd_rsreg portb
        define lcd_rsbit 1
        define lcd_ereg portb
        define lcd_ebit 3
        define lcd_bits 4
        define lcd_lines 2
        
        
        b0 var bit
        
        ack var byte
        
        sda var porta.1
        Scl var porta.2
        
        
          
          loop:
         
           high sda                           ' I2C Start
           high scl
           low sda
           low scl
        
        
          sHIFTIN SDA,SCL,0,[ack\7]
          
          lcdout $fe,$c0
          lcdout "ack",dec ack 
          
          
         
          low sda            ' I2C Stop
          high scl
          high sda
        
         
        
          goto loop
         end
        ممنون میشم راهنماییم کنید

        دیدگاه


          #5
          پاسخ : برقراری ارتباط بین دو میکروکنترلر

          دستور باود رو به همون صورتی که می بینید باید تایپ کنید .
          من باود رو اونجوری نوشتم که درست دیده شه.

          من در زمینه PIC اطلاعاتی ندارم.
          از چپ به راست:
          اول باید $ رو تایپ کنی بعد کلمه ی baud را تایپ کنی. :smile:
          کد رو اصلاح کردم.
          فرستنده:
          کد:
          $regfile="attiny26".dat
          $crystal=8000000
          $baud=4800
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
          print "start"
          print "1010110"
          .
          .
          .
          تو دستور پرینت همه چی میتونی بذاری فقط باید رشته باشه.


          برای یکی کردن نرخ ارسال و دریافت هم فقط باید مقدار دستور Baud در هر دو میکرو یکی باشه و همچنین فرکانس های کاری هم یکی باشند.

          نه PDF و جزوه ای در این باره ندارم.
          خیلی آسونه که. :biggrin:
          [glow=green,2,300][b]بشر ممکن الخطاست
          درخت هرچه پربار تر سر به زیر تر[/glow]

          دیدگاه

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