اطلاعیه

Collapse
No announcement yet.

ارتباط دو میکرو در بیسکام

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

    ارتباط دو میکرو در بیسکام

    باسلام
    من میخواستم 16 متغیر A1 تا.. A16 ازنوع Word را از میکرو1 به میکرو2 و با ارتباط SPi ارسال کرده و برروی یک LCD 4*4 نمایش دهم این ارسال اطلاعات در هرثانیه 100 بار انجا م میشود . حال سوال اینست که کدام میکرو درحالت Slave و کدام بصورت Master بایستی باشد و برنامه ارتباط از طریق Spi در بیسکام
    چیست؟ درضمن آیا میتوان از صحت اطلاعات ارسالی اطمینان پیدا کرد یا خیر؟

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

    سلام
    خوب کاملاً مشخص هست که میکروی 1 که قراره داده ها رو از طریق spi ارسال کنه master هست و میکروی دوم که قراره داده ها رو روی lcd نمایش بده slave.
    البته نمیدونم که خطا رو چطور میشه تشخیص داد چون تا حالا با spi کار نکردم اگه فهمیدی خوشحال میشیم به ما هم بگی
    در ضمن میتونی از پروژه ای که در آخر کتاب آموزش بیسکام نوشته علی کاهه اومده استفاده کنی ولی تو این پروژه از خطایابی صحبتی نشده. :sad:

    دیدگاه


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

      سلام
      من برای تست مدارآنرارادر پروتئوس بستم و برنامه آن رابرای هر دو میکرو نوشتم
      ولی هرکاری کردم نتونستم جواب بگیرم! :cry2:

      برنامه Master:

      $regfile = "m32def.dat
      $crystal = 1000000
      $hwstack = 40
      $swstack = 20
      $framesize = 40
      (Declare Sub W_register(byval C_bytes As Byte
      Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 1
      Config Pinb.4 = Output 'SS pin is output
      Ss Alias Portb.4
      Spiinit
      Waitms 10 'Wait a moment until all hardware is stable
      Enable Spi
      Reset Ss 'Set SS pin low
      Dim D_bytes(16) As Byte 'Dim the bytes use for SPI, D_bytes = outgoing
      D_bytes(1) = 8
      D_bytes(2) = 24
      D_bytes(3) = 32
      D_bytes(4) = 6
      D_bytes(5) = 5
      D_bytes(6) = 19
      Main:
      Call W_register(6) ' for example send 6 byte to spi
      Waitms 100
      End 'end program
      '=== Sub routine ===
      Sub W_register(byval C_bytes As Byte) 'Write register with SPI
      Reset Ss 'Manual control SS pin, set SS low before shifting out the bytes
      Spiout D_bytes(1) , C_bytes 'Shiftout the data bytes trough SPI , C_bytes is the amount bytes to be written
      Set Ss 'Set SS high
      End Sub
      ]برنامه Slave:
      $regfile = "m32def".dat
      $crystal = 1000000
      $hwstack = 40
      $swstack = 20
      $framesize = 40
      Dim Command As Byte : Command = 155
      Declare Sub R_register(byval C_bytes As Byte)
      Config Lcdpin = Pin , Db4 = Pind.0 , Db5 = Pind.1 , Db6 = Pind.2 , Db7 = Pind.3 _
      , E = Pind.6 , Rs = Pind.5
      Config Lcd = 16 * 2
      Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = No , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 1
      Config Pinb.4 = Output 'SS pin is output
      Ss Alias Portb.4
      Spiinit
      Waitms 10 'Wait a moment until all hardware is stable 'init the spi pins
      Enable Spi
      Reset Ss 'Set SS pin low
      Dim B_bytes(16) As Byte 'Dim the bytes use for SPI, B_bytes = Incoming
      Main:
      (Call R_register(6
      Cls
      Home
      (Lcd B_bytes(1
      Locate 1 , 4
      (Lcd B_bytes(2
      Locate 1 , 8
      ( Lcd B_bytes(3
      Lowerline
      (Lcd B_bytes(4
      Locate 2 , 4
      ( Lcd B_bytes(5
      Locate 2 , 8
      (Lcd B_bytes(6
      End 'end program

      Sub R_register(byval C_bytes As Byte) ' C_bytes = Number Of Bytes To Be Read
      Reset Ss 'Manual controle SS pin, set low before shifting in/out the bytes
      Spiout Command , 1 'First shiftout the register to be read
      Spiin B_bytes(1) , C_bytes 'Read back the bytes from SPI sended by Master
      Set Ss 'Set SS back to high level
      End Sub
      من از پروتئوس 7.2 SP2 و ازکمپایلر بیسک 1.11.8.3 استفاده کردم و فکر نمی کنم مشکلی داشته باشه
      برنامه بالا را دیگه آخر بار نوشتم و بنظرم درست می آید . ولی چرا جواب نمی دهد الله اعلم !!!
      باورکنید دراین چند روز گذشته هرکاری که به عقلم می رسید انجام دادم .تمام تنظیمات در Config Spi را تغییر دادم . فرکانس کلاک را عوض کردم . ازمثالهای که قبلا داخل سایت گفته شده بود استفاده کردم ولی هیچ فایده ای نداشت . :angry:
      شما بگید کجای کار من اشتباه بوده؟
      از دوستانی که تجربه اینکاررا دارند عاجزانه خواهش می کنم ! یکباربرای همیشه یه مثال عملی که تو پروتئوس هم جواب بده را اینجا قرار بدهند تا همه ازش استفاده کنند . خداوند شمارا دراین ماه مبارک رمضان ازدعای خیر روزه داران بی نصیب نگذارد.

      دیدگاه


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

        بیرون آزمایش کنید احتمال زیاد جواب می گیرید نمی دونم این پروتیوس مشکلش چیه احتمال میدم توی این قسمت گاف داده باشه من قبلا با AVRGCC حدود 2 هفته روش کا کردم جواب نگرفتم حلا بیرون آزمایش کنید اگه باز جواب نداد ما هم دست به گار می شیم.
        Difficult But possible
        به امید ایرانی آباد.
        http://art-net.ir

        دیدگاه

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