اطلاعیه

Collapse
No announcement yet.

کتابخانهآ‌ای برای چیپ AD7780-AD7730

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

    پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

    سلام
    من با این کد این آی سی رو درایو کردو و زمانی که به ورودیش صفر ولت میدم صفر رو ارسال میکنه اما زمانیکه ورودی بیش از صفر میدم خروجی های غلط ارسال میشه.
    کد:
    // AVR Core Clock frequency: 16.000000 MHz
    
    #include <mega16.h>
    #include <alcd.h>
    #include <stdio.h>
    #include <spi.h>
    #include <delay.h>
    #include <stdlib.h>
    
    #define ADC_RESET PORTB.3
    #define ADC_CS  PORTB.4
    #define ADC_DRDY PINB.2
    #define high   1
    #define low    0
    
    void adc_init(void); 
    unsigned int read_spi();
    
    void main(void)
    {
    float resultf;
    
    PORTB=0x00;
    DDRB=0xB8;
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x67;
    
    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 1000.000 kHz
    // SPI Clock Phase: Cycle Start
    // SPI Clock Polarity: High
    // SPI Data Order: MSB First
    SPCR=0x5D;             
    SPSR=0x00;
    
    lcd_init(16);
    adc_init();
    while (1)
       {          
        resultf = read_spi();  
        printf("Data: %d\r",resultf);
        delay_ms(500) ;
       }
    }
    
    void adc_init(void)
    {
    	printf("Please wait\r");
    	ADC_RESET=low; 
       
    	ADC_CS=low;	//Set low to AD7715 chip select low pin
    	ADC_RESET=high;	//Set high to AD7715 reset low pin
    	ADC_CS=high;
    	delay_ms(3000);
      
      ADC_CS=low;
    	spi( 0x10 );
    	ADC_CS=high;	
    	ADC_CS=low;			//Communications Register
    	spi( 0x7C);     //250Hz update rate
    	ADC_CS=high;		//Setup Register info here
        printf("Calibrated\r");
        delay_ms(1000);
    }
    
    unsigned int read_spi()
    {
     unsigned result;
     while ( ADC_DRDY);
     while (! ADC_DRDY );
     while ( ADC_DRDY );
     ADC_CS=low;
     spi(0x38);
     ADC_CS=high;
     ADC_CS=low;
     result=(unsigned) spi(0)<<8;
     ADC_CS=low;
     result|=spi(0);
     result=(unsigned) ((unsigned long) result);
     return result;
    
    }
    تقدیر تقویم انسانهای عادی ، تغییر تدبیر انسانهای عالیست.

    دیدگاه


      پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

      سلام
      من با این کد این آی سی رو درایو کردو و زمانی که به ورودیش صفر ولت میدم صفر رو ارسال میکنه اما زمانیکه ورودی بیش از صفر میدم خروجی های غلط ارسال میشه.
      کد:
      // AVR Core Clock frequency: 16.000000 MHz
      
      #include <mega16.h>
      #include <alcd.h>
      #include <stdio.h>
      #include <spi.h>
      #include <delay.h>
      #include <stdlib.h>
      
      #define ADC_RESET PORTB.3
      #define ADC_CS  PORTB.4
      #define ADC_DRDY PINB.2
      #define high   1
      #define low    0
      
      void adc_init(void); 
      unsigned int read_spi();
      
      void main(void)
      {
      float resultf;
      
      PORTB=0x00;
      DDRB=0xB8;
      
      // USART initialization
      // Communication Parameters: 8 Data, 1 Stop, No Parity
      // USART Receiver: Off
      // USART Transmitter: On
      // USART Mode: Asynchronous
      // USART Baud Rate: 9600
      UCSRA=0x00;
      UCSRB=0x08;
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=0x67;
      
      // SPI initialization
      // SPI Type: Master
      // SPI Clock Rate: 1000.000 kHz
      // SPI Clock Phase: Cycle Start
      // SPI Clock Polarity: High
      // SPI Data Order: MSB First
      SPCR=0x5D;             
      SPSR=0x00;
      
      lcd_init(16);
      adc_init();
      while (1)
         {          
          resultf = read_spi();  
          printf("Data: %d\r",resultf);
          delay_ms(500) ;
         }
      }
      
      void adc_init(void)
      {
      	printf("Please wait\r");
      	ADC_RESET=low; 
         
      	ADC_CS=low;	//Set low to AD7715 chip select low pin
      	ADC_RESET=high;	//Set high to AD7715 reset low pin
      	ADC_CS=high;
      	delay_ms(3000);
        
        ADC_CS=low;
      	spi( 0x10 );
      	ADC_CS=high;	
      	ADC_CS=low;			//Communications Register
      	spi( 0x7C);     //250Hz update rate
      	ADC_CS=high;		//Setup Register info here
          printf("Calibrated\r");
          delay_ms(1000);
      }
      
      unsigned int read_spi()
      {
       unsigned result;
       while ( ADC_DRDY);
       while (! ADC_DRDY );
       while ( ADC_DRDY );
       ADC_CS=low;
       spi(0x38);
       ADC_CS=high;
       ADC_CS=low;
       result=(unsigned) spi(0)<<8;
       ADC_CS=low;
       result|=spi(0);
       result=(unsigned) ((unsigned long) result);
       return result;
      
      }
      تقدیر تقویم انسانهای عادی ، تغییر تدبیر انسانهای عالیست.

      دیدگاه


        پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

        :biggrin: خوشبختانه مشکلم حل شد، بجای متغیر از نوع float > unsigned int تعریف کردم، فکر کنم تو کانفیگ کدویژن متغیر ورودی sprintf رو float تنظیم کنی هم درست شه.
        تقدیر تقویم انسانهای عادی ، تغییر تدبیر انسانهای عالیست.

        دیدگاه


          پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

          سلام دوستان یک مدار ترازو خریدم که آی سی کمیاب mic4425 را به همراه ad7730 داره می شه راجع به کارکرد آن و اینکه از کجا گیرم می آید توضیحی دهید. و گفتن مشابه آن.
          مرسی ممنون

          دیدگاه


            پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

            برای ad7190



            /************************************************** *************************//**
            * @file AD7190.c
            * @brief Implementation of AD7190 Driver.
            * @author DNechita (Dan.Nechita@analog.com)
            ************************************************** ******************************
            * Copyright 2012(c) Analog Devices, Inc.
            *
            * All rights reserved.
            *
            * Redistribution and use in source and binary forms, with or without
            * modification, are permitted provided that the following conditions are met:
            * - Redistributions of source code must retain the above copyright
            * notice, this list of conditions and the following disclaimer.
            * - Redistributions in binary form must reproduce the above copyright
            * notice, this list of conditions and the following disclaimer in
            * the documentation and/or other materials provided with the
            * distribution.
            * - Neither the name of Analog Devices, Inc. nor the names of its
            * contributors may be used to endorse or promote products derived
            * from this software without specific prior written permission.
            * - The use of this software may or may not infringe the patent rights
            * of one or more patent holders. This license does not release you
            * from the requirement that you obtain separate licenses from these
            * patent holders to use this software.
            * - Use of the software either in source or binary form, must be run
            * on or directly connected to an Analog Devices Inc. component.
            *
            * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
            * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
            * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
            * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
            * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
            * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
            * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
            * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
            * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
            * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            *
            ************************************************** ******************************
            * SVN Revision: 903
            ************************************************** *****************************/

            /************************************************** ****************************/
            /***************************** Include Files **********************************/
            /************************************************** ****************************/
            #include "AD7190.h" // AD7190 definitions.
            #include "TIME.h" // TIME definitions.

            /************************************************** *************************//**
            * @brief Writes data into a register.
            *
            * @param registerAddress - Address of the register.
            * @param registerValue - Data value to write.
            * @param bytesNumber - Number of bytes to be written.
            * @param modifyCS - Allows Chip Select to be modified.
            *
            * @return none.
            ************************************************** *****************************/
            void AD7190_SetRegisterValue(unsigned char registerAddress,
            unsigned long registerValue,
            unsigned char bytesNumber,
            unsigned char modifyCS)
            {
            unsigned char writeCommand[5] = {0, 0, 0, 0, 0};
            unsigned char* dataPointer = (unsigned char*)&registerValue;
            unsigned char bytesNr = bytesNumber;

            writeCommand[0] = AD7190_COMM_WRITE |
            AD7190_COMM_ADDR(registerAddress);
            while(bytesNr > 0)
            {
            writeCommand[bytesNr] = *dataPointer;
            dataPointer ++;
            bytesNr --;
            }
            SPI_Write(AD7190_SLAVE_ID * modifyCS, writeCommand, bytesNumber + 1);
            }

            /************************************************** *************************//**
            * @brief Reads the value of a register.
            *
            * @param registerAddress - Address of the register.
            * @param bytesNumber - Number of bytes that will be read.
            * @param modifyCS - Allows Chip Select to be modified.
            *
            * @return buffer - Value of the register.
            ************************************************** *****************************/
            unsigned long AD7190_GetRegisterValue(unsigned char registerAddress,
            unsigned char bytesNumber,
            unsigned char modifyCS)
            {
            unsigned char registerWord[5] = {0, 0, 0, 0, 0};
            unsigned long buffer = 0x0;
            unsigned char i = 0;

            registerWord[0] = AD7190_COMM_READ |
            AD7190_COMM_ADDR(registerAddress);
            SPI_Read(AD7190_SLAVE_ID * modifyCS, registerWord, bytesNumber + 1);
            for(i = 1; i < bytesNumber + 1; i++)
            {
            buffer = (buffer << 8) + registerWord[i];
            }

            return buffer;
            }

            /************************************************** *************************//**
            * @brief Checks if the AD7190 part is present.
            *
            * @return status - Indicates if the part is present or not.
            ************************************************** *****************************/
            unsigned char AD7190_Init(void)
            {
            unsigned char status = 1;
            unsigned char regVal = 0;

            SPI_Init(0, 1000000, 1, 0);
            AD7190_Reset();
            /* Allow at least 500 us before accessing any of the on-chip registers. */
            TIME_DelayMs(1);
            regVal = AD7190_GetRegisterValue(AD7190_REG_ID, 1, 1);
            if( (regVal & AD7190_ID_MASK) != ID_AD7190)
            {
            status = 0;
            }
            return status ;
            }

            /************************************************** *************************//**
            * @brief Resets the device.
            *
            * @return none.
            ************************************************** *****************************/
            void AD7190_Reset(void)
            {
            unsigned char registerWord[7];

            registerWord[0] = 0x01;
            registerWord[1] = 0xFF;
            registerWord[2] = 0xFF;
            registerWord[3] = 0xFF;
            registerWord[4] = 0xFF;
            registerWord[5] = 0xFF;
            registerWord[6] = 0xFF;
            SPI_Write(AD7190_SLAVE_ID, registerWord, 7);
            }

            /************************************************** *************************//**
            * @brief Set device to idle or power-down.
            *
            * @param pwrMode - Selects idle mode or power-down mode.
            * Example: 0 - power-down
            * 1 - idle
            *
            * @return none.
            ************************************************** *****************************/
            void AD7190_SetPower(unsigned char pwrMode)
            {
            unsigned long oldPwrMode = 0x0;
            unsigned long newPwrMode = 0x0;

            oldPwrMode = AD7190_GetRegisterValue(AD7190_REG_MODE, 3, 1);
            oldPwrMode &= ~(AD7190_MODE_SEL(0x7));
            newPwrMode = oldPwrMode |
            AD7190_MODE_SEL((pwrMode * (AD7190_MODE_IDLE)) |
            (!pwrMode * (AD7190_MODE_PWRDN)));
            AD7190_SetRegisterValue(AD7190_REG_MODE, newPwrMode, 3, 1);
            }

            /************************************************** *************************//**
            * @brief Waits for RDY pin to go low.
            *
            * @return none.
            ************************************************** *****************************/
            void AD7190_WaitRdyGoLow(void)
            {
            unsigned long timeOutCnt = 0xFFFFF;

            while(AD7190_RDY_STATE && timeOutCnt--)
            {
            ;
            }
            }

            /************************************************** *************************//**
            * @brief Selects the channel to be enabled.
            *
            * @param channel - Selects a channel.
            *
            * @return none.
            ************************************************** *****************************/
            void AD7190_ChannelSelect(unsigned short channel)
            {
            unsigned long oldRegValue = 0x0;
            unsigned long newRegValue = 0x0;

            oldRegValue = AD7190_GetRegisterValue(AD7190_REG_CONF, 3, 1);
            oldRegValue &= ~(AD7190_CONF_CHAN(0xFF));
            newRegValue = oldRegValue | AD7190_CONF_CHAN(1 << channel);
            AD7190_SetRegisterValue(AD7190_REG_CONF, newRegValue, 3, 1);
            }

            /************************************************** *************************//**
            * @brief Performs the given calibration to the specified channel.
            *
            * @param mode - Calibration type.
            * @param channel - Channel to be calibrated.
            *
            * @return none.
            ************************************************** *****************************/
            void AD7190_Calibrate(unsigned char mode, unsigned char channel)
            {
            unsigned long oldRegValue = 0x0;
            unsigned long newRegValue = 0x0;

            AD7190_ChannelSelect(channel);
            oldRegValue = AD7190_GetRegisterValue(AD7190_REG_MODE, 3, 1);
            oldRegValue &= ~AD7190_MODE_SEL(0x7);
            newRegValue = oldRegValue | AD7190_MODE_SEL(mode);
            ADI_PART_CS_LOW;
            AD7190_SetRegisterValue(AD7190_REG_MODE, newRegValue, 3, 0); // CS is not modified.
            AD7190_WaitRdyGoLow();
            ADI_PART_CS_HIGH;
            }

            /************************************************** *************************//**
            * @brief Selects the polarity of the conversion and the ADC input range.
            *
            * @param polarity - Polarity select bit.
            Example: 0 - bipolar operation is selected.
            1 - unipolar operation is selected.
            * @param range - Gain select bits. These bits are written by the user to select
            the ADC input range.
            *
            * @return none.
            ************************************************** *****************************/
            void AD7190_RangeSetup(unsigned char polarity, unsigned char range)
            {
            unsigned long oldRegValue = 0x0;
            unsigned long newRegValue = 0x0;

            oldRegValue = AD7190_GetRegisterValue(AD7190_REG_CONF,3, 1);
            oldRegValue &= ~(AD7190_CONF_UNIPOLAR |
            AD7190_CONF_GAIN(0x7));
            newRegValue = oldRegValue |
            (polarity * AD7190_CONF_UNIPOLAR) |
            AD7190_CONF_GAIN(range);
            AD7190_SetRegisterValue(AD7190_REG_CONF, newRegValue, 3, 1);
            }

            /************************************************** *************************//**
            * @brief Returns the result of a single conversion.
            *
            * @return regData - Result of a single analog-to-digital conversion.
            ************************************************** *****************************/
            unsigned long AD7190_SingleConversion(void)
            {
            unsigned long command = 0x0;
            unsigned long regData = 0x0;

            command = AD7190_MODE_SEL(AD7190_MODE_SINGLE) |
            AD7190_MODE_CLKSRC(AD7190_CLK_INT) |
            AD7190_MODE_RATE(0x060);
            ADI_PART_CS_LOW;
            AD7190_SetRegisterValue(AD7190_REG_MODE, command, 3, 0); // CS is not modified.
            AD7190_WaitRdyGoLow();
            regData = AD7190_GetRegisterValue(AD7190_REG_DATA, 3, 0);
            ADI_PART_CS_HIGH;

            return regData;
            }

            /************************************************** *************************//**
            * @brief Returns the average of several conversion results.
            *
            * @return samplesAverage - The average of the conversion results.
            ************************************************** *****************************/
            unsigned long AD7190_ContinuousReadAvg(unsigned char sampleNumber)
            {
            unsigned long samplesAverage = 0x0;
            unsigned char count = 0x0;
            unsigned long command = 0x0;

            command = AD7190_MODE_SEL(AD7190_MODE_CONT) |
            AD7190_MODE_CLKSRC(AD7190_CLK_INT) |
            AD7190_MODE_RATE(0x060);
            ADI_PART_CS_LOW;
            AD7190_SetRegisterValue(AD7190_REG_MODE, command, 3, 0); // CS is not modified.
            for(count = 0;count < sampleNumber;count ++)
            {
            AD7190_WaitRdyGoLow();
            samplesAverage += AD7190_GetRegisterValue(AD7190_REG_DATA, 3, 0); // CS is not modified.
            }
            ADI_PART_CS_HIGH;
            samplesAverage = samplesAverage / sampleNumber;

            return samplesAverage ;
            }

            /************************************************** *************************//**
            * @brief Read data from temperature sensor and converts it to Celsius degrees.
            *
            * @return temperature - Celsius degrees.
            ************************************************** *****************************/
            unsigned long AD7190_TemperatureRead(void)
            {
            unsigned char temperature = 0x0;
            unsigned long dataReg = 0x0;

            AD7190_RangeSetup(0, AD7190_CONF_GAIN_1);
            AD7190_ChannelSelect(AD7190_CH_TEMP_SENSOR);
            dataReg = AD7190_SingleConversion();
            dataReg -= 0x800000;
            dataReg /= 2815; // Kelvin Temperature
            dataReg -= 273; //Celsius Temperature
            temperature = (unsigned long) dataReg;

            return temperature;
            }

            دیدگاه


              پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

              سلام من آی سی Ad7780 گرفتم و پایه های dout/rdy را به miso میکرو و پایه sclk را به پایه sck میکرو وصل کردم تقریبا می دونم سخت افزار را درست طراحی کردم ولی یه مشکل تو نرم افزار دارم
              اینم برنامه

              Sub Ad7780()
              Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Noss = 1 , Clockrate = 128
              Spiinit
              Local Msb As Byte , Lsb As Byte , Status As Byte
              Local Sum As Word , Ad_answer(5) As String * 1 , Ad77 As String * 15

              Ad7780_miso Alias Pinb.6
              Config Ad7780_miso = Input
              Set Portb.6
              Cls
              Lcdat 1 , 35 , "ad7780"
              Waitms 100
              Do
              If Ad7780_miso = 0 Then

              Spiin Msb , 1
              Spiin Lsb , 1
              Spiin B , 1
              Spiin Status , 1
              Status = Not Status
              Msb = Not Msb
              Lsb = Not Lsb
              Sum = Makeint(lsb , Msb )

              Lcdat 3 , 1 , Sum
              Lcdat 4 , 1 , Status
              Lcdat 5 , 1 , Msb
              Lcdat 6 , 1 , Lsb

              Waitms 100
              'Home : Lcd Sum ; " "
              'Toggle Portg
              'Locate 1 , 8 : Lcd Bin(status) ; "<"
              'Locate 2 , 1 : Lcd Bin(msb) ; Bin(lsb)

              End If
              Loop

              تو خط Spiin Msb , 1 دیگه پایین نمیره و هون جا منتظر می مونه به نظرتون مشکل از کجاست؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
              چیزی باید به برنامه اظافه بشه؟؟؟؟؟؟؟
              لطفا کمک کنید
              هرکه دور ماند از اصل خویش باز جوید روزگار وصل خویش

              دیدگاه


                پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

                نوشته اصلی توسط pooramin@gmail.com
                سلام من آی سی Ad7780 گرفتم و پایه های dout/rdy را به miso میکرو و پایه sclk را به پایه sck میکرو وصل کردم تقریبا می دونم سخت افزار را درست طراحی کردم ولی یه مشکل تو نرم افزار دارم
                اینم برنامه

                Sub Ad7780()
                Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Noss = 1 , Clockrate = 128
                Spiinit
                Local Msb As Byte , Lsb As Byte , Status As Byte
                Local Sum As Word , Ad_answer(5) As String * 1 , Ad77 As String * 15

                Ad7780_miso Alias Pinb.6
                Config Ad7780_miso = Input
                Set Portb.6
                Cls
                Lcdat 1 , 35 , "ad7780"
                Waitms 100
                Do
                If Ad7780_miso = 0 Then

                Spiin Msb , 1
                Spiin Lsb , 1
                Spiin B , 1
                Spiin Status , 1
                Status = Not Status
                Msb = Not Msb
                Lsb = Not Lsb
                Sum = Makeint(lsb , Msb )

                Lcdat 3 , 1 , Sum
                Lcdat 4 , 1 , Status
                Lcdat 5 , 1 , Msb
                Lcdat 6 , 1 , Lsb

                Waitms 100
                'Home : Lcd Sum ; " "
                'Toggle Portg
                'Locate 1 , 8 : Lcd Bin(status) ; "<"
                'Locate 2 , 1 : Lcd Bin(msb) ; Bin(lsb)

                End If
                Loop

                تو خط Spiin Msb , 1 دیگه پایین نمیره و هون جا منتظر می مونه به نظرتون مشکل از کجاست؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                چیزی باید به برنامه اظافه بشه؟؟؟؟؟؟؟
                لطفا کمک کنید
                سلام
                عجب خاطره ای برام زنده کردی
                شما یه مقاومت ده کلیواهم وصل کن به خط MISO
                اگه راه افتاد که حالش رو ببر، اگه هم راه نیفتاد بیسیک رو از کامپیوترت پاک کن و خودت رو خیلی خسته نکن
                سر همین قضیه از بیسیک کوچ کردم به کدویژن :rolleyes:
                برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
                http://hosseinwalkingday.com

                دیدگاه


                  پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

                  سلام
                  ممنون از جوابتون
                  مقاومت 10 کیلواهم هم وصل کردم
                  کلی برنامه نوشتم الان نمیتونم برم کدویژن فکر نکنم بخاطر کامپایلر بسکام باشه
                  کسی برنامه تست شده بسکام نداره
                  یه زحمتی میکشین برنامه کدویژن را برام میفرستین شاید بتونم تبدیلش کنم
                  هرکه دور ماند از اصل خویش باز جوید روزگار وصل خویش

                  دیدگاه


                    پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

                    سلام از جوابت
                    برنامه را دوباره کامپایل کردم با سرعت پایین تر یه یه خورده اشکال هم داشت از برنامه حذف کردم تا کد بهینه تر بشته البته تابع را دست نزدم قبل تابع مشکل داشت.
                    خط Spiin Msb , 1
                    را رد می کنه عدد 255 را رو ال سی دی برام نشون میده بعد تو خط بعدی گیر میکنه
                    بعد از هر خط تابع ال سیدی را گذاشتم و مقدار را بهم نشون بده همون لحظه و ببینم تو کدوم خط گیر داره
                    هرکه دور ماند از اصل خویش باز جوید روزگار وصل خویش

                    دیدگاه


                      پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

                      دوست عزیز هیچ دلیلی برای عوض کردن کامپایلر نیست.بنده 10 سال کار صنعتی میکنم و همه جور برنامه ای هم با بسکام نوشتم و هیچ محدودیتی هم نداره.اتفاقا این کدویژن هست که مثلا اگه بخوای 8 تا خط سریال رو مگا 32 درست کنی اسفالتت میکنه!
                      بگزریم.برنامه 7780 رو برات میزارم.بیش از 1000 بار تست شده
                      ای سی 7780 هم اگه کسی تعداد بالای 10 تا خواست قیمت مناسب موجوده.


                      $regfile = "m8def.dat"
                      $crystal = 4000000
                      $baud = 9600


                      Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4
                      Enable Interrupts
                      Enable Spi
                      Spiinit
                      Dim R As Byte
                      Dim R2 As Byte
                      Dim R3 As Byte
                      Dim R4 As Byte



                      Dim K As Long
                      Dim K2 As Long
                      Dim K3 As Long


                      Do

                      Bitwait Pinb.4 , Reset

                      Spiin R , 1
                      Spiin R2 , 1
                      Spiin R3 , 1
                      Spiin R4 , 1
                      K = 0
                      K = R * 65535
                      K2 = R2 * 255
                      K = K + K2
                      K = K + R3
                      Print K
                      LoOP


                      البته اینجا ما متغیر رو سریال ارسال میکنیم شما میتونی رو LCD نشون بدی.متغیر K رو خط یکی مونده به اخر بزار رو LCD.همین

                      دیدگاه


                        پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730


                        :nerd: :nerd: :nerd: :nerd: :nerd: :nerd:
                        مشکل برنامت اینکه از IF برای MISO استفاده کردی بلکه باید از BITWAIT استفاده میکردی.اینجا می خوای منتظر بمونی تا این پایه صفر بشه ولی وقتی IF میزاری برنامه اگه MISO صفر نباشه رد میشه. :nice: :nice: :nice:

                        دیدگاه


                          پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

                          سلام مرسی خیلی ممنون از جوابتون
                          من دیگه خسته شده بودم از بس با کد ها بازی کردم :applause: :applause: :wow: :wow: :wow: :nice:
                          درست شد تنونستم عددشو رو ال سی دی نمایش بدم
                          می تونی بگی چرا با 65535 ظرب میکنی و 255 چرا؟
                          من برنامه خودم رو اینجوری نوشتم
                          Spiin Msb , 1
                          Spiin Lsb , 1
                          Spiin B , 1
                          Spiin Status , 1

                          Status = Not Status
                          Msb = Not Msb
                          Lsb = Not Lsb
                          Sum = Makeint(lsb , Msb )

                          عدد نشون داده شده حدودا 32768 هست که لودسل را بهش وصل کردم وقتی رو لودسل فشار میارم این عدد کم میشه (این درسته یعنی)
                          عدد خیلی پرش داره البته هنوز خازن ها را بهش وصل نکردم نمیدونم با وصل خازن ها طبق نثقشه پرش عدد از بین میره
                          یا باید کار دیگه ای بکنم.

                          هرکه دور ماند از اصل خویش باز جوید روزگار وصل خویش

                          دیدگاه


                            پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

                            جواب های بیسیک خیلی قابل اعتماد نیست، خصوصا وقتی بردت دو تکه باشه.
                            تو اولین فرصت برید سراغ سی. خیلی خیلی بهتر و سریع تر هست

                            خصوصا وقتی طول سیم اتصال به 7780 زیاد می شه بیسیک کم میاره


                            تابع spi نرم افزاری اش هم از فجایع بیسیک هست. سابقا از این تابع استفاده می کردم status تراشه 7780 مقدار 147 می اومد :eek:
                            برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
                            http://hosseinwalkingday.com

                            دیدگاه


                              پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

                              سلام خسته نباشید ممنونم که منو راهنمایی کردید.
                              من هنوز دارم با بسکام کار میکنم به نظرم داره دقیق کار میکنه با سی هم کارکردم ولی یه مشکل اساسی داره اونم اینه که پیدا کردن باگ ازش واقعا سخته ولی تو بسکام خیلی راحت باگ برنامه پیدا میشه.
                              بردمو کامل کردم خازن ها را هم وصل کردم الان فقط بین عدد 32531 تا 32534 عدد تغییر میکنه
                              آیا باید کاری بکنم که همین مقدار عدد هم دیگه تغییر نکنه و عدد دیگه ثابت بشه
                              یا باید نرم افزاری درستش کنم چه کدی بنویسم تا درست بشه و پرش نداشته باشد.

                              می خوام بدونم شما تونستین عدد ثابت بگیرین یا پرش اتفاق می افته؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                              هرکه دور ماند از اصل خویش باز جوید روزگار وصل خویش

                              دیدگاه


                                پاسخ : کتابخانهآ‌ای برای چیپ AD7780-AD7730

                                مبارکه
                                c واقعا بهتر جواب می ده.


                                پرش ات خیلی زیاد نیست.
                                دقت کن خطای شما از مرتبه 3 در 32534 رسیده، یا به عبارتی 0.01 درصد
                                از اینجا به بعد هرقدر هم تلاش کنی فایده ای نداره، چون مقاومت رفرنس/ولتاژ رفرنس/خود لودسل/سنسور معمولا به این دقت ها نمی رسه.
                                برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
                                http://hosseinwalkingday.com

                                دیدگاه

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