اطلاعیه

Collapse
No announcement yet.

مشکل با ad7715

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

    مشکل با ad7715

    سلام نماز روزه هاتون قبول

    من یه مشکل با راه اندازی ad7715 دارم خواهش میکنم کسانی که قبلا از این اسی استفاده کردند راهنمایی کنند
    فرکانس کاری من 4MHZ است از ATMEGA32 استفاده کردم پایه های مربوط به ad7715 را به شکل زیر به مگا وصل کردم

    #define ADC_RESET PORTD.4
    #define ADC_CS PORTD.7
    #define ADC_DRDY PIND.3

    AD7715 initialization رابه شکل زیر انجام دادم

    void adc_init(void)
    { DDRB=0xBF;
    //lcd_clear();
    // lcd_gotoxy(3,0);
    // lcd_putsf("Please wait"
    ADC_RESET=low;
    delay_us(50);
    ADC_CS=low;
    delay_us(50);
    ADC_RESET=high;
    delay_us(50);
    ADC_CS=high;

    delay_ms(3000);
    ADC_CS=low;
    delay_us(50);
    spi( 0x20 );
    delay_us(50);
    ADC_CS=high;
    delay_us(50);
    ADC_CS=low;
    delay_us(50);
    spi( 0x0c);
    delay_us(50);
    ADC_CS=high;
    delay_us(50);
    ADC_CS=low;
    delay_us(50);
    spi( 0x10);
    delay_us(50);
    ADC_CS=high;
    delay_us(50);
    ADC_CS=low;
    delay_us(50);
    spi( 0x44);
    delay_us(50);
    ADC_CS=high;
    // lcd_gotoxy(3,1);
    // lcd_putsf("Calibrated"
    delay_ms(1000);
    // lcd_clear();
    }


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

    unsigned int read_spi()

    {
    unsigned result;

    while ( ADC_DRDY);


    while (! ADC_DRDY );


    while ( ADC_DRDY );

    delay_us(50);
    ADC_CS=low;
    delay_us(50);
    spi(0x38);
    delay_us(50);
    ADC_CS=high;
    delay_us(50);
    ADC_CS=low;
    delay_us(50);
    result=(unsigned) spi(0)<<8;
    delay_us(50);
    ADC_CS=low;
    delay_us(50);
    result|=spi(0);
    delay_us(50);
    result=(unsigned) ((unsigned long) result);
    delay_us(50);
    return result;

    }

    اما متوجه شدم از این خط عبور نمی کند while ( ADC_DRDY); یعنی ADC_DRDY هیچگاه صفر نمی شود پس دیتای آماده ندارد که ارسال کند
    از دوستان خواهش دارم راهنمایی کننند

    #2
    پاسخ : مشکل با ad7715

    با سلام خدمت دوستان

    منم مثل جناب seyedamir ، برای راه اندازی ad7715 یه کد نوشتم ولی جواب هایی که دریافت میکنم اکثرا 0 هستش و گاهی هم اعدادی مثل منفی 1 و 255 !

    من شماتیک و کدم رو باتوجه به مطلب جناب رضایی تنظیم کردم ، هر دو تا رو اینجا قرار میدم دوستانی که آشنایی کار با این IC رو دارند لطفا کمک کنن، با تشکر

    کد:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 2013-06-13
    Author : Eric
    Company : Techno-Electro
    Comments: 
    
    
    Chip type        : ATmega8
    Program type      : Application
    AVR Core Clock frequency: 8.000000 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega8.h>
    #include <delay.h>
    #include <stdlib.h>
    // Standard Input/Output functions
    #include <stdio.h>
    
    // SPI functions
    #include <spi.h>
    
    //micros
    #define Data_ready PORTB.1
    #define Chip_select PORTD.7
    #define Reset_chip PORTD.6
    #define ad7715 PORTB.2
    //#define num_sample 100
    // Declare your global variables here
    int result,result_sum,result_av,temp;
    char a,s[6]; 
    void ad7715_init()
      {
        spi(0x10);
        spi(0x6C);
      } 
      
    void reset()
      {
       Reset_chip=0;
       Reset_chip=1;
      }
      
    void main(void)
    {
    // Input/Output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In 
    // State7=T State6=T State5=0 State4=T State3=0 State2=0 State1=T State0=T 
    PORTB=0x00;
    DDRB=0x2C;
    
    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func7=Out Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=1 State6=1 State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTD=0xC0;
    DDRD=0xC0;
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 1200
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x01;
    UBRRL=0xA0;
    
    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 62.500 kHz
    // SPI Clock Phase: Cycle Start
    // SPI Clock Polarity: Low
    // SPI Data Order: MSB First
    SPCR=0x53;
    SPSR=0x00;
    
    Chip_select=0;
    reset();
    ad7715_init();
    Chip_select=1;
    while (1)
       { 
         
         
              
            while(Data_ready==1);
            Chip_select=0;
            reset(); 
            spi(0x38); 
            delay_ms(40);
              
            result=(spi(0)<<8);     //read MSB frist
            result|=spi(0);      //read LSB and combine with MSB
            delay_ms(30);
            Chip_select=1;
        
            itoa(result,s);
        
            puts(s); 
            
            delay_ms(500);
        
        }
       
          
    }


    به رویاهات فکر کن!!

    دیدگاه


      #3
      پاسخ : مشکل با ad7715

      سلام
      من نرسیدم کامل کد رو بخونم ولی چند نکته در مورد سخت افزار به نظرم رسید:
      1:زمین دیجیتال و آنالوگ باید از هم جدا باشند و فقط در یک نقطه اتصال داشته باشند
      2:برای کریستال ADC و میکرو باید دوتا خازن در حد 30pF بعد از کریستال قرار دهید
      3:برای ولتاژ مرجع نیز خازن قرار دهید

      دیدگاه


        #4
        پاسخ : مشکل با ad7715

        Reset رو پول پ کن. مقاومت پول پ CS رو بردار.نمیآ‌دونم جواب میده یا نه.

        دیدگاه

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