اطلاعیه

Collapse
هیچ اطلاعیه ای هنوز ایجاد نشده است .

کار کردن با spi در pic

Collapse
X
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
new posts

  • کار کردن با spi در pic

    سلام

    من با راه اندازی spi تو pic مشکل دارم می خواهم بر روی یک eeprom اطلاعات رو بنویسم و موقعی که لازم بود بخونم اگه میشه راهنماییم کنید

  • #2
    سلام

    لطفا نوع کامپایلر و نوع eeprom را مشخص کن تا راهنماییت کنم

    یاحق

    نظر


    • #3
      سلام
      من از کامپایلر ccs استفاده میکنم

      میکرو 16f877a و eeprom 25C256

      پیشاپیش از راهنماییتان تشکر میکنم

      نظر


      • #4
        سلام

        من یک نمونه کد برات اینجا قرار میدم که داخلش کامل توضیح دادم

        البته من از spi سخت افزاری استفاده کردم و برای پایه cs هم پین D0

        کد:
        #include <16F877A.h>#device adc=16
        
        
        #FUSES NOWDT                    //No Watch Dog Timer
        #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
        #FUSES NOBROWNOUT               //No brownout reset
        #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
        
        
        #use delay(clock=20000000)
        
        
        
        
        #USE SPI (MASTER, SPI1, MODE=0, BITS=8, STREAM=SPI_1)
        
        
        
        
        void main()
        {
        
        
        //ميباشد eeprom اين قسمت براي باز کردن قفل نوشتن بر روي
        //output_low(pin_d0);
        
        
        spi_write(0x06);
        
        
        output_high(pin_d0);
        
        
        delay_ms(1);
        
        
        //ميباشد eeprom اين قسمت براي نوشتن بر روي 
        
        
        output_low(pin_d0);
        
        
        
        
        spi_write(0x02); //بنويسيد eeprom ارسال اين کد تعيين ميکند که شما ميخواهيد بر روي
        
        
        
        
        //داراي آدرس 16 بيتي ميباشد  براي ارسال آدرس از 2 بايت زير استفاده ميکنيم eeprom به دليل اينکه اين
        spi_write(0x00);
        
        
        spi_write(0x01);
        
        
        // بعد از ارسال آدرس مقداري که ميخواهيم داخل آن بايت قرار گيرد را مينويسيم که در اينجا مقدار 5 ميباشد
        spi_write(0x05);
        
        
        output_high(pin_d0);
        
        
        
        
        delay_ms(1);
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        //ميباشد eeprom اين قسمت براي خواندن از روي 
        
        
        
        
        //از مد نوشتني به خواندني ميباشد که فقط در حالت ي که قفل نوشت را قبلا در ابتداي برنامه باز کرده باشيد لازم است eeprom اين قسمت براي بردن 
        output_low(pin_d0);
        
        
        spi_write(0x05);
        
        
        output_high(pin_d0);
        
        
        delay_ms(1);
        
        
        
        
        
        
        
        
        
        
        output_low(pin_d0);
        
        
        
        
        spi_write(0x03); //بخوانيد eeprom ارسال اين کد تعيين ميکند که شما ميخواهيد از روي
        
        
        
        
        //داراي آدرس 16 بيتي ميباشد  براي ارسال آدرس از 2 بايت زير استفاده ميکنيم eeprom به دليل اينکه اين
        spi_write(0x00);
        
        
        spi_write(0x01);
        
        
        
        
        //ارسال کنيم که ما در اينجا مقدار 5 را قرار داده ايم eeprom ميباشد که براي اين کار بايد مقداري را به  eeprom  دستور پايين براي خواندن از 
        spi_read(0x05);
        
        
        output_high(pin_d0);
        
        
        }
        اگه سوالی بود بگو تا راهنمایی کنم

        یاحق

        نظر


        • #5
          سلام
          آقای یزدی ممنون از جوابتون تست کردم جواب داد

          فقط 2 تا سوال داشتم داشتم

          یکی اینکه اگه بخوام روی چند بایت بنویسم یا بخوانم چیکار باید بکنم

          و اینکه یک پروژه هم دارم که 2 تا مدار دارم که در یکیشون از avr atmega64 استفاده شده و دیگری همین 16f877a که میخوام از همین spi برای ارتباط بینشون استفاده بکنم البته اگه بشه

          میخواستم راهنماییم کنید

          نظر


          • #6
            سلام
            دوست عزیز

            برای نوشتن یا خواندن روی چند بایت شما تنها کاری که لازمه بکنی اینه که بعد از بایت دیتا ایی که ارسال میکنی بایت هاتو ارسال کنی چه برای خواندن چه نوشتن

            البته به این نکته هم توجه کن که eeprom ها دارای صفحه های مجزا هستند (page) و فقط شما در هر بار قادر به نوشتن بر روی یک صفحه هستید که در datasheet هر eeprom مشخص کرده برای مدل مورد نظر شما 64 بایت میباشد

            در مورد سوال دوم شما در حالت MASTER به غیر از سه پایه اصلی SPI به تعداد پایه های I/O میتوانید SLAVE داشته باشید و در مورد ارتباط SPI در AVR در قسمت میکروکنترلرهای AVR سوال خودتونو از دوستان بپرسید تا راهنمایی کنند

            یاحق

            نظر

            صبر کنید ..
            X