اطلاعیه

Collapse
No announcement yet.

SPI , 2Bit

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

    SPI , 2Bit

    سلام به همه
    تونستم یه ای سی AD8403 (مقاومت دیجیتالی که 4 تا مقاومت داره ) تهیه کنم که این ای سی با SPI کار میکنه که 10 بیت رو دریافت میکنه که دو بیت مربوط به ادرس مقاومت هاست و هشت بیت دیتا هست که من تو ارسال اون دو بیت گیر کردم چی کار کنم این شکل 10 بیتی دیتایی که ای سی دریافت میکنه

    اگه من دو تا 8 بیتی پشت سره هم ارسال کنم دو بیت اول از اون 8 بیت دوم ، بیت های ادرس میشه؟؟؟؟ oo: oo:

    ممنون


    #2
    پاسخ : SPI , 2Bit

    نه نمی شه که شما دو تا پکیج جدا بفرستید . در اصل شما نه با 8 bit و نه با 16 bit نمی تونید که بفرستید .تنها راهش این است که خودت برنامه spi 10 بیتی رو بنویسی که کار خیلی ساده ای است .
    اما اگه فکر می کنی که برات مشکله بگو که برات بزارم .

    دیدگاه


      #3
      پاسخ : SPI , 2Bit

      ممنون میشم اگه کمکم کنی من به زبان C مینویسم ....

      دیدگاه


        #4
        پاسخ : SPI , 2Bit

        من خودم هم c می نویسم و تویه پروژه از AD8402 استفاده میکنم اگه کمی صبر کنی برات میزارم . وگرنه می خواهی یه نمونه دیگه بزارم البته خیلی ساده است .

        دیدگاه


          #5
          پاسخ : SPI , 2Bit

          من فکر می کنم بهتره شما اون 2 بیت اضافی رو با spi نرم افزاری بفرستید بعد یه بایت هم از طریق spi سخت افزاری بفرستید.این طوری هم برنامه ساده تره و هم سرعت بیشتره.
          [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

          دیدگاه


            #6
            پاسخ : SPI , 2Bit

            نمی شه این کارو کرد چون بالاخره SPI یک سری بایت اضافه داره بعدم ابنکه اصل کار برای همون در اوردن دو بیت است .من برای خیلی از قطعات از کار استفاده کردم . وخیلی هم خوب کار میکنی .تازه خیلی سرعت توی این ای سی مهم نیست .

            دیدگاه


              #7
              پاسخ : SPI , 2Bit

              با lcd 6100 کار کردی؟؟
              این lcd نه بیتی کار می کنه و برای ارتباط با اون از همین روش استفاده می کنند.در ضمن spi یه شیفت ریجستره .بیت اضافی نمی فرسته.این نمونه کد رو یه نگاه بنداز ببین به کارت می یاد؟
              کد:
              void _Clcd_write_data_(unsigned char data)
               {
               SDA_1; 
               CS_0;							// Enable device CS
               CLK_0;							// Pull Clock LOW
               CLK_1;							// Pul Clock HIGH
               SPCR|=0x50;						// Enable Hardware SPI
               SPDR=data; 						// send data  
               while(!(SPSR&0x80));				// wait until send complete
               CS_1;							// disable device CS
               SPCR&=~0x50;						// Disable Hardware SPI, this releases the SPI pins
              										// for general I/O use. which is used to send the 1'st 
              										// bit out
               }
              
              void _Clcd_write_command_(unsigned char command)
               {
               SDA_0; 
               CS_0;							// Enable device CS
               CLK_0;							// Pull Clock LOW
               CLK_1;							// Pul Clock HIGH
               SPCR|=0x50;						// Enable Hardware SPI
               SPDR=command; 						// send data  
               while(!(SPSR&0x80));				// wait until send complete
               CS_1;							// disable device CS
               SPCR&=~0x50;						// Disable Hardware SPI, this releases the SPI pins
              										// for general I/O use. which is used to send the 1'st 
              										// bit out
               }
              این برنامه نوشته ی یکی از دوستان برای ارتباط با lcd بوده.برای این چیپ هم میشه همین کار رو کرد. :agree:
              [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

              دیدگاه


                #8
                پاسخ : SPI , 2Bit

                من خودم هم c می نویسم و تویه پروژه از AD8402 استفاده میکنم اگه کمی صبر کنی برات میزارم . وگرنه می خواهی یه نمونه دیگه بزارم البته خیلی ساده است .
                من فکر میکنم 10 بیت رو با SPI سخت افرازی بفرستیم بهتر باشه

                اگه روند این کار رو هم بگی شاید بتونم خودم یه کار هایی بکنم ، نمونه هم گذاشتی چه بهتر

                خیلی ممنون

                دیدگاه


                  #9
                  پاسخ : SPI , 2Bit

                  من تسلیمم در مقابل حرف حساب اقای shahinbahari .
                  اما من از این جور کد نویسی معمولا استفاده می کردم ولی دیگه سعیم به کد نویسی به روشی است که شما میگید که بهتر است .

                  void write_dac (unsigned char number)
                  {
                  char i=0;
                  char j=0;
                  //RST_N=1;
                  //CLK =0;
                  CS_N=0;
                  ldac_N=1;

                  //if (all_shut == 0) { SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;}
                  //else { SDI =1;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;}

                  //if (chanel_shut == 0) { SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;}
                  //else { SDI =1;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;}

                  SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                  SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                  SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                  SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;

                  j=0x80;

                  for (i=0;i<=7;i++)
                  {
                  if ((number & j) == 0) { SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;}
                  else { SDI =1;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;}
                  j=j>>1;
                  }
                  SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                  SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                  SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                  SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                  //CLK =0;
                  CS_N=1;
                  ldac_N=0;
                  }

                  دیدگاه


                    #10
                    پاسخ : SPI , 2Bit

                    این الان SPI نرم افزاریه؟

                    فکر میکنم شما 4 تا بیت 0 رو ارسال کردید بعد به j مقدار دادید بعد j رو با number اند کردین اگه شرط برقرار بود یک بیت 0 رو ارسال میکنید اگه نبود یک بیت 1 رو ارسل میکنید و در اخر هم 4 بیت صفر رو ارسال میکنید و... این برای چی بود نمیدونم ، این درست بود گفتم ؟ این برنامه برای چی بود ؟ برای یه DAC بود ؟

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

                    دیدگاه


                      #11
                      پاسخ : SPI , 2Bit

                      این برنامه برای AD7398 نوشته بودم .شما وقت کافی است که دوبیت بالا را مثلا با یک دستور SWITCH ارسال کنید و بعد هم که براحتی میزان مقاومتی که می خواهید .

                      دیدگاه


                        #12
                        پاسخ : SPI , 2Bit

                        SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                        SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                        SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                        SDI =0;/*CLK =0;delay_us(1);*/CLK =1;/*delay_us(1);*/CLK =0;
                        این چهار خط بالا ، 4 بیت رو که مقدارشون صفر هست رو ارسال میکنه...؟اگه اره کاری که دوستمون آقای shahinbahari گفت رو میکنم دوبیت ادرس رو نرمافزاری و 8 بیت دیتا با SPI سخت افزاری میفرستم فکر میکنم این بهتر باشه...

                        فقط اون سوالم رو جوابدین مشکلمو حل کردین....

                        ممنون

                        دیدگاه


                          #13
                          پاسخ : SPI , 2Bit

                          دوست عزیز ببخشید که دیر امدم
                          DAC من 16 بیت دیتا می گیرد و 4 کاناله و با دقت 12 بیت . من چون فقط از کانال اول استفاده می کردم به همین دلیل امدم و فقط هما 4 تا صفر را ارسال کردم . از طرفی دیتای که می خواستم بریزم در DAC هشت بیتی به همین خاطر دیتا 8 بیتی را 4 بار شیفت دادم به بالا یعنی در اصل به جای هشت بیت بالایی قرار دادم و پایین را صفر گذاشتم .
                          کار اقای shahinbahari هم بسیار از کار من اصولی تر و بهتر است پس بهتر از همان استفاده کنی ولی این روش ساده است .
                          موفق باشید .
                          اگه بازم کاری بود بگید . خوشحال می شم کمکتون کنم .
                          ببخشید که بیشتر و واضح تر نمی تونم بنویسیم چون دیرم شده و باید برم دانشگاه .

                          دیدگاه

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