اطلاعیه

Collapse
No announcement yet.

کار با AD8400 با AVR ؟؟

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

    کار با AD8400 با AVR ؟؟

    با سلام

    همون طور که می دونید AD8400 یک Digital Potentiometers با 4 pot هست و ارتباط spi داره ولی این ارتباط 10 bit می باشد که 8 بیت برای مقدار pot و 2 بیت برای انتخاب یکی از pot ها ارتباط میکرو 8 بیت هست احتمالا با روش نرم افزاری می شه کاری کرد من دقیقا نمی دونم چگونه میشه اگه کسی هست راهنمایی کنه ضمنا من با CodeVision کار می کنم اگه کدی هم دارید ممنون میشم .

    #2
    پاسخ : کار با AD8400 با AVR ؟؟

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

    همون طور که می دونید AD8400 یک Digital Potentiometers با 4 pot هست و ارتباط spi داره ولی این ارتباط 10 bit می باشد که 8 بیت برای مقدار pot و 2 بیت برای انتخاب یکی از pot ها ارتباط میکرو 8 بیت هست احتمالا با روش نرم افزاری می شه کاری کرد من دقیقا نمی دونم چگونه میشه اگه کسی هست راهنمایی کنه ضمنا من با CodeVision کار می کنم اگه کدی هم دارید ممنون میشم .
    با سلام،

    اشتباه نکن عزیز دل برادر! :surprised:
    اگر میکرویی دارای معماری هشت بیتی باشه، مفهومش این نیست که با اعداد و ارقام و متغیرها و ارتباطات و..... هشت بیتی مشکل داره! اصلا و ابدا ایطوری نیست، خیالت راحت تا 32 بیت هم توپ کار میکنه :mrgreen:

    پی نوشت : در ضمن، AD8400 یک پتانسیومتر داره، AD8402 دو تا داره و AD8403 چهار تا پتانسیومتر داره ....
    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

    Sh_Nourbakhsh@Yahoo.com

    http://s2.picofile.com/file/7170362468/_Wall_e_.jp

    دیدگاه


      #3
      پاسخ : کار با AD8400 با AVR ؟؟

      ممنونم .... یعنی الان من چجوری 10 بین رو به تابع 8 بیتی

      کد:
      unsigned char spi(unsigned char data)

      بدم ؟ متشکرم .

      دیدگاه


        #4
        پاسخ : کار با AD8400 با AVR ؟؟

        ضمنا این تابع 8 بیتی هست همون طور که می بینید ؟!!!

        دیدگاه


          #5
          پاسخ : کار با AD8400 با AVR ؟؟

          نوشته اصلی توسط yashar666
          ممنونم .... یعنی الان من چجوری 10 بین رو به تابع 8 بیتی

          کد:
          unsigned char spi(unsigned char data)

          بدم ؟ متشکرم .
          راستش سوالت اصلا مفهوم نیست! خوب معلومه که یک اطلاعات 10 بیتی رو نمیشه به یه تابع 8 بیتی پاس کرد! اینم محدودیت میکرو محسوب نمیشه...

          نمیدونم این تابع چیه، اگر خودت نوشتی، قاعدتا باید اینطوری باشه :
          کد:
          unsigned short spi(unsigned short data)
          مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

          Sh_Nourbakhsh@Yahoo.com

          http://s2.picofile.com/file/7170362468/_Wall_e_.jp

          دیدگاه


            #6
            پاسخ : کار با AD8400 با AVR ؟؟

            خوب منم میگم نمیشه که ؟ این تابع هم در codevision هشت بیت رو میفرسته !

            نه به همون صورت که من نوشتم

            اینم کتابخونش توی codevision

            کد:
            (C) 1998-2009 Pavel Haiduc, HP InfoTech S.R.L.
            
             SPI access function
            */
            
            #include <io.h>
            #include <stdbool.h>
            
            #ifdef _ATXMEGA_DEVICE_
            // ATxmega chips
            unsigned char spi(unsigned char data)
            {
            _ATXMEGA_SPI_.DATA=data;
            while ((_ATXMEGA_SPI_.STATUS & SPI_IF_bm)==0);
            return _ATXMEGA_SPI_.DATA;
            }
            
            void spi_init(bool master_mode,bool lsb_first,SPI_MODE_t mode,bool clk2x,SPI_PRESCALER_t clock_div, unsigned char ss_pin)
            {
            if (master_mode)
              {
              // Init SS pin as output with wired AND and pull-up
              _ATXMEGA_SPI_PORT_.DIRSET=ss_pin;
              _ATXMEGA_SPI_PORT_.PIN4CTRL=PORT_OPC_WIREDANDPULL_gc;
            
              // Set SS output to high
              _ATXMEGA_SPI_PORT_.OUTSET=ss_pin;
            
              // SPI master mode
              _ATXMEGA_SPI_.CTRL=clock_div |           // SPI prescaler.
                       (clk2x ? SPI_CLK2X_bm : 0) |   // SPI Clock double.
                       SPI_ENABLE_bm |         // Enable SPI module.
                       (lsb_first ? SPI_DORD_bm : 0) | // Data order.
                       SPI_MASTER_bm |         // SPI master.
                       mode;              // SPI mode.
            
              // MOSI and SCK as output
              _ATXMEGA_SPI_PORT_.DIRSET=SPI_MOSI_bm | SPI_SCK_bm;
              }
            else
              {
              // SPI slave mode
              _ATXMEGA_SPI_.CTRL=SPI_ENABLE_bm |         // Enable SPI module.
                       (lsb_first ? SPI_DORD_bm : 0) | // Data order.
            	         mode;              // SPI mode.
            
              // MISO as output
              _ATXMEGA_SPI_PORT_.DIRSET=SPI_MISO_bm;
              };
            
            // No interrupts, polled mode
            _ATXMEGA_SPI_.INTCTRL=SPI_INTLVL_OFF_gc;
            }
            
            #else
            
            #ifndef SPIF
            #define SPIF 7
            #endif
            
            #pragma optsize-
            unsigned char spi(unsigned char data)
            {
            SPDR=data;
            while ((SPSR & (1<<SPIF))==0);
            return SPDR;
            }
            
            #ifdef _OPTIMIZE_SIZE_
            #pragma optsize+
            #endif
            
            #endif

            دیدگاه


              #7
              پاسخ : کار با AD8400 با AVR ؟؟

              خوب یه جور دیگه می پرسم : یک AD8400 دارییم شما چجوری با میکرو تو codevision کنترلش می کنید یه کد برام بنویسید ؟!

              دیدگاه


                #8
                پاسخ : کار با AD8400 با AVR ؟؟

                نوشته اصلی توسط yashar666
                خوب یه جور دیگه می پرسم : یک AD8400 دارییم شما چجوری با میکرو تو codevision کنترلش می کنید یه کد برام بنویسید ؟!
                فعلا شما از این قطعه کد یه ایده ای بگیر تا کارت راه بیافته، البته با SPI نیست و با کدویژن هم نوشته نشده، ولی روال کار کاملا معلومه و میشه ازش ایده گرفت، تا بگردم ببینم چیزی برات پیدا میکنم یا نه.......
                کد:
                ///////////////////////////////////////////////////////////////////////////
                ////  Library for a AD8400                      ////
                ////                                  ////
                ////  init_pots ();  Sets all of the pots to 0           ////
                ////                                  ////
                ////  set_pot (pot_num, new_value); Sets pot pot_num to new_value  ////
                ////                                  ////
                ///////////////////////////////////////////////////////////////////////////
                ////    (C) Copyright 1996,2003 Custom Computer Services      ////
                //// This source code may only be used by licensed users of the CCS C ////
                //// compiler. This source code may only be distributed to other   ////
                //// licensed users of the CCS C compiler. No other use, reproduction ////
                //// or distribution is permitted without written permission.     ////
                //// Derivative programs created using this software in object code  ////
                //// form are not restricted in any way.                ////
                ///////////////////////////////////////////////////////////////////////////
                
                #define RST1 PIN_B0
                #define CLK PIN_B1
                #define DI PIN_B2
                #define NUM_POTS 1
                
                BYTE pots;
                
                set_pot (int pot_num, int new_value) {
                  BYTE i;
                  BYTE cmd[2];
                
                  pots = new_value;
                  cmd[0] = pots;
                  cmd[1] = 0;
                
                  for(i=1;i<=6;i++)
                   shift_left(cmd,2,0);
                
                  output_low(CLK);
                  output_low(RST1);
                
                  delay_us(2);
                  for(i=1;i<=10;++i) {
                   output_bit(DI, shift_left(cmd,2,0));
                   delay_us(2);
                   output_high(CLK);
                   delay_us(2);
                   output_low(CLK);
                   delay_us(2);
                  }
                  output_high(RST1);
                }
                
                void init_pots ()
                {
                  pots = 0;
                }
                مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                Sh_Nourbakhsh@Yahoo.com

                http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                دیدگاه


                  #9
                  پاسخ : کار با AD8400 با AVR ؟؟

                  [quote author=Nourbakhsh Rad link=topic=62948.msg356535#msg356535 date=1337230314]
                  با سلام،

                  اشتباه نکن عزیز دل برادر! :surprised:
                  اگر میکرویی دارای معماری هشت بیتی باشه، مفهومش این نیست که با اعداد و ارقام و متغیرها و ارتباطات و..... هشت بیتی مشکل داره! اصلا و ابدا ایطوری نیست، خیالت راحت تا 32 بیت هم توپ کار میکنه :mrgreen:

                  پی نوشت : در ضمن، AD8400 یک پتانسیومتر داره، AD8402 دو تا داره و AD8403 چهار تا پتانسیومتر داره ....
                  [/سلام میخواستم بدونم شما جواب گرفتید؟]

                  دیدگاه

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