ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





  1. #211
    تاریخ عضویت
    2009/07/29
    لابه لاي الکترون هاي مدارام
    1,306
    43

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    نقل قول نوشته اصلی توسط vishy71
    سلام.دوستان من این تراشه رو راه اندازی کردم با ولتاژ رفرنس 4.952 .کاملا درست کار می کنه اما تو بعضی از محدوده ها 20 میلی ولت کمتر از اهم متر نشون میده.اهم متر هم 16 بیتیه و دقت خوبی داره.البته تو محدوده های دیگه از اهم متر هم بهتر جواب میده.اما تو بعضی محدوده ها نه.
    فرکانس نمونه برداری رو از 4 و خرده ای هرتز تا 300 هرتز هم تغییر دادم نتیجه همونه.با فیلتر sinc4 , sinc3 هم نتیجه تفاوتی نمی کنه.chop خاموشه همچنین بافر و burn.گین 1 هستش.بایپولار.فیلتر notch هم فعاله.کالیبراسیون هم زیاد فرقی نمی کنه ( در محدوده ی نانو ولت یا میکرو ولت یه خرده تغییرات مشاهده میشه)

    ممنون
    سلام
    اگه بافر رو فعال کنی، مقادیم خیلی کم و مقادیر خیلی زیاد رو نشون نمی ده.
    برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
    Hidden Content
  2. #212
    تاریخ عضویت
    2014/04/01
    همدان
    48
    1

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    بافر خاموشه.burn هم خاموشه و SINC3 یا SINC4 هم تفاوتی نمی کنه در کل.کانال 1 و ولتاژ رفرنس 2.5 ولته
    بعضی جاها پرش داره اصلا هم کوتاه نمیاد :(
  3. #213
    تاریخ عضویت
    2014/04/01
    همدان
    48
    1

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    این کد برای خود AD7190:

    #define Mode 0x08
    #define Conf 0x10
    #define Data 0x18
    #define Offset 0x30
    #define FScale 0x38

    void ADWR(char reg){
    CS=0;
    spi_write(0x00 | reg);
    spi_write(DATA_REG[0]);
    spi_write(DATA_REG[1]);
    spi_write(DATA_REG[2]);
    CS=1;
    }
    void setparam(char p1,char p2,char p3){
    DATA_REG[0]=p1;
    DATA_REG[1]=p2;
    DATA_REG[2]=p3;
    }
    void ADRST(){
    CS=0;
    //adc reset
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    CS=1;
    __delay_ms(1);
    }
    void ADRD(char reg){
    CS=0;
    spi_write(0x40 | reg);
    DATA_REG[0]=spi_write(0x00);
    DATA_REG[1]=spi_write(0x00);
    DATA_REG[2]=spi_write(0x00);
    CS=1;
    __delay_ms(1);
    }
    void single_mode(){
    ADRD(Mode);
    DATA_REG[0] &=0x0F;
    DATA_REG[0] |=0X20;
    ADWR(Mode);
    }
    void cont_mode(){
    ADRD(Mode);
    DATA_REG[0] &=0x0F;
    ADWR(Mode);
    }
    void idle_mode(){
    ADRD(Mode);
    DATA_REG[0] &=0x0F;
    DATA_REG[0] |=0X40;
    ADWR(Mode);
    }
    char get_status(){
    char tmp;
    CS=0;
    spi_write(0x40);
    tmp=spi_write(0x00);
    CS=1;
    return tmp;
    }
    void AD7190_init(){
    ADRST();
    __delay_ms(10);
    setparam(0x00,0x01,0x00); //Chopisable,Refin1(+)&Refin1(-),CH1,No burn,No ref det,no BUF,Bipolar,Gain:1
    ADWR(Conf);
    setparam(0x8C,0x85,0x60); //Internal Zero-Scale,Internal 4.92 MHz,SINC3,No ENPAR,NO Single,REJ60:EN
    ADWR(Mode);
    while((get_status()&0x80)!=0x80); //wait to Calibraion
    cont_mode();
    }


    این هم کد برنامه:

    #include <htc.h>
    #include <stdio.h>
    #include <stdlib.h>

    #define _XTAL_FREQ 12000000
    #define RS LATD0
    #define EN LATD1
    #include "spi.c"
    #include "lcd.c"
    #define CS LATA5
    char DATA_REG[3];
    #include "ad7190.c"

    char temp;

    static void interrupt
    isr(){
    if(TMR2IF==1){
    TMR2IF=0;
    }
    else if(INT0IF==1){
    INT0IF=0;
    LATB3=~LATB3;
    }
    }

    void main(){
    unsigned long xc;
    double x1;
    __delay_ms(10);

    lcd_init();
    lcd_cmd4(0x01); //clear LCD

    spi_init();

    TRISB |=0x01;
    //Enable RB0/INT
    INTCON2=0x80;
    RCON=0x00;
    INTCON=0xD0;

    //tmr2
    TMR2=0;
    PR2=0xFF;
    T2CON=0x7F;
    TMR2IE=1;
    PEIE=1;

    GIE=0; //Disable Global Interrupt

    AD7190_init();
    LATB3=0;
    while(1){
    while(1){
    if((get_status() & 0x80)!=0x80)break; //wait to RDY
    }
    LATB3=1;
    ADRD(Data);
    xc=DATA_REG[0]*65536;
    xc+=(DATA_REG[1]*256);
    xc+=(DATA_REG[2] & 0xF0);

    //bipolar
    x1=xc*2.495; //2.495 Vref
    x1/=8388608; //2^N-1 where N=24
    x1-=2.495;

    //unipolar
    //x1=xc*2.495;
    //x1/=16777216;

    x1*=1000; //Convert to mV
    lcd_cmd4(0x01); //clear LCD
    printf("%4.5f mV",x1);
    LATB3=0;
    }
    }
  4. #214
    تاریخ عضویت
    2009/07/29
    لابه لاي الکترون هاي مدارام
    1,306
    43

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    نقل قول نوشته اصلی توسط vishy71
    بافر خاموشه.burn هم خاموشه و SINC3 یا SINC4 هم تفاوتی نمی کنه در کل.کانال 1 و ولتاژ رفرنس 2.5 ولته
    بعضی جاها پرش داره اصلا هم کوتاه نمیاد :(
    بنده که هیچی نفهمیدم.
    به زحمت دوستان، سایت امکانات خوبی داره. از قسمت مخصوص درج کد استفاده کنید تا خوانا باشه.
    برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
    Hidden Content
  5. #215
    تاریخ عضویت
    2014/04/01
    همدان
    48
    1

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    عذر می خوام حواسم نبود :دی .امیدوارم اینیکی خوب باشه.
    کد:
    #define Mode  0x08
    #define Conf  0x10
    #define Data  0x18
    #define Offset  0x30
    #define FScale 0x38
    
    void ADWR(char reg){
      CS=0;
      spi_write(0x00 | reg);
      spi_write(DATA_REG[0]);
      spi_write(DATA_REG[1]);
      spi_write(DATA_REG[2]);
      CS=1;
    }
    void setparam(char p1,char p2,char p3){
      DATA_REG[0]=p1;
      DATA_REG[1]=p2;
      DATA_REG[2]=p3;
    }
    void ADRST(){
      CS=0;
      //adc reset
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      spi_write(0xFF);
      CS=1;
      __delay_ms(1);
    }
    void ADRD(char reg){
      CS=0;
      spi_write(0x40 | reg);
      DATA_REG[0]=spi_write(0x00);
      DATA_REG[1]=spi_write(0x00);
      DATA_REG[2]=spi_write(0x00);
      CS=1;
      __delay_ms(1);
    }
    void single_mode(){
      ADRD(Mode);
      DATA_REG[0] &=0x0F;
      DATA_REG[0] |=0X20;
      ADWR(Mode);
    }
    void cont_mode(){
      ADRD(Mode);
      DATA_REG[0] &=0x0F;
      ADWR(Mode);
    }
    void idle_mode(){
      ADRD(Mode);
      DATA_REG[0] &=0x0F;
      DATA_REG[0] |=0X40;
      ADWR(Mode);
    }
    char get_status(){
      char tmp;
      CS=0;
      spi_write(0x40);
      tmp=spi_write(0x00);
      CS=1;
      return tmp;
    }
    void AD7190_init(){
      ADRST();
      __delay_ms(10);
      setparam(0x00,0x01,0x00);  //Chop:Disable,Refin1(+)&Refin1(-),CH1,No burn,No ref det,no BUF,Bipolar,Gain:1
      ADWR(Conf);
      setparam(0x8C,0x85,0x60);  //Internal Zero-Scale,Internal 4.92 MHz,SINC3,No ENPAR,NO Single,REJ60:EN
      ADWR(Mode);
      while((get_status()&0x80)!=0x80); //wait to Calibraion
      cont_mode();
    }
    
    
    این هم کد برنامه:
    
    #include <htc.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define _XTAL_FREQ 12000000
    #define RS  LATD0
    #define EN  LATD1
    #include "spi.c"
    #include "lcd.c"
    #define CS  LATA5
    char DATA_REG[3];
    #include "ad7190.c"
    
    char temp;
    
    static void interrupt
    isr(){
      if(TMR2IF==1){
       TMR2IF=0;
      }
      else if(INT0IF==1){
       INT0IF=0;
       LATB3=~LATB3;
      }
    }
    
    void main(){
      unsigned long xc;
      double x1;
      __delay_ms(10);
    
      lcd_init();
      lcd_cmd4(0x01);   //clear LCD
    
      spi_init();
    
      TRISB |=0x01;
      //Enable RB0/INT
      INTCON2=0x80;
      RCON=0x00;
      INTCON=0xD0;
    
      //tmr2
      TMR2=0;
      PR2=0xFF;
      T2CON=0x7F;
      TMR2IE=1;
      PEIE=1;
     
        GIE=0;   //Disable Global Interrupt
    
      AD7190_init();
      LATB3=0;
      while(1){
       while(1){
         if((get_status() & 0x80)!=0x80)break; //wait to RDY
       }
       LATB3=1;
       ADRD(Data);
       xc=DATA_REG[0]*65536;
       xc+=(DATA_REG[1]*256);
       xc+=(DATA_REG[2] & 0xF0);
    
       //bipolar
       x1=xc*2.495;   //2.495 Vref
       x1/=8388608;   //2^N-1 where N=24
       x1-=2.495;
    
       //unipolar
       //x1=xc*2.495;
       //x1/=16777216;
    
       x1*=1000;   //Convert to mV
       lcd_cmd4(0x01);   //clear LCD
       printf("%4.5f mV",x1);
       LATB3=0;
      }
    }
    ویرایش
  6. #216
    تاریخ عضویت
    2009/07/29
    لابه لاي الکترون هاي مدارام
    1,306
    43

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    سلام

    :angry: :angry: :angry:
    [code=c]#define Mode 0x08
    #define Conf 0x10
    #define Data 0x18
    #define Offset 0x30
    #define FScale 0x38

    void ADWR(char reg){
    CS=0;
    spi_write(0x00 | reg);
    spi_write(DATA_REG[0]);
    spi_write(DATA_REG[1]);
    spi_write(DATA_REG[2]);
    CS=1;
    }
    void setparam(char p1,char p2,char p3){
    DATA_REG[0]=p1;
    DATA_REG[1]=p2;
    DATA_REG[2]=p3;
    }
    void ADRST(){
    CS=0;
    //adc reset
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    spi_write(0xFF);
    CS=1;
    __delay_ms(1);
    }
    void ADRD(char reg){
    CS=0;
    spi_write(0x40 | reg);
    DATA_REG[0]=spi_write(0x00);
    DATA_REG[1]=spi_write(0x00);
    DATA_REG[2]=spi_write(0x00);
    CS=1;
    __delay_ms(1);
    }
    void single_mode(){
    ADRD(Mode);
    DATA_REG[0] &=0x0F;
    DATA_REG[0] |=0X20;
    ADWR(Mode);
    }
    void cont_mode(){
    ADRD(Mode);
    DATA_REG[0] &=0x0F;
    ADWR(Mode);
    }
    void idle_mode(){
    ADRD(Mode);
    DATA_REG[0] &=0x0F;
    DATA_REG[0] |=0X40;
    ADWR(Mode);
    }
    char get_status(){
    char tmp;
    CS=0;
    spi_write(0x40);
    tmp=spi_write(0x00);
    CS=1;
    return tmp;
    }
    void AD7190_init(){
    ADRST();
    __delay_ms(10);
    setparam(0x00,0x01,0x00); //Chopisable,Refin1(+)&Refin1(-),CH1,No burn,No ref det,no BUF,Bipolar,Gain:1
    ADWR(Conf);
    setparam(0x8C,0x85,0x60); //Internal Zero-Scale,Internal 4.92 MHz,SINC3,No ENPAR,NO Single,REJ60:EN
    ADWR(Mode);
    while((get_status()&0x80)!=0x80); //wait to Calibraion
    cont_mode();
    }


    این هم کد برنامه:

    #include <htc.h>
    #include <stdio.h>
    #include <stdlib.h>

    #define _XTAL_FREQ 12000000
    #define RS LATD0
    #define EN LATD1
    #include "spi.c"
    #include "lcd.c"
    #define CS LATA5
    char DATA_REG[3];
    #include "ad7190.c"

    char temp;

    static void interrupt
    isr(){
    if(TMR2IF==1){
    TMR2IF=0;
    }
    else if(INT0IF==1){
    INT0IF=0;
    LATB3=~LATB3;
    }
    }

    void main(){
    unsigned long xc;
    double x1;
    __delay_ms(10);

    lcd_init();
    lcd_cmd4(0x01); //clear LCD

    spi_init();

    TRISB |=0x01;
    //Enable RB0/INT
    INTCON2=0x80;
    RCON=0x00;
    INTCON=0xD0;

    //tmr2
    TMR2=0;
    PR2=0xFF;
    T2CON=0x7F;
    TMR2IE=1;
    PEIE=1;

    GIE=0; //Disable Global Interrupt

    AD7190_init();
    LATB3=0;
    while(1){
    while(1){
    if((get_status() & 0x80)!=0x80)break; //wait to RDY
    }
    LATB3=1;
    ADRD(Data);
    xc=DATA_REG[0]*65536;
    xc+=(DATA_REG[1]*256);
    xc+=(DATA_REG[2] & 0xF0);

    //bipolar
    x1=xc*2.495; //2.495 Vref
    x1/=8388608; //2^N-1 where N=24
    x1-=2.495;

    //unipolar
    //x1=xc*2.495;
    //x1/=16777216;

    x1*=1000; //Convert to mV
    lcd_cmd4(0x01); //clear LCD
    printf("%4.5f mV",x1);
    LATB3=0;
    }
    }[/code]


    این تکه کد تون مشکوک هستم
    [code=c]
    ADRD(Data);
    xc=DATA_REG[0]*65536;
    xc+=(DATA_REG[1]*256);
    xc+=(DATA_REG[2] & 0xF0);
    [/code]

    شما ضرب نکنید، دو بایت از AD7190 بخونید و خروجی اش رو نشون بدهید
    اعداد رو اینجا بذارید تا بصورت دستی ضرب کنیم و مطمئن بیشیم تو این تکه مشکلی نداری
    برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
    Hidden Content
  7. #217
    تاریخ عضویت
    2014/04/01
    همدان
    48
    1

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    معذرت می خوام :redface: زیاد وارد نیستم تو اینجور کامنت گذاشتن.

    خوب اون ضرب ینی همون شیفت دادن.ینی به جای اینکه 16 بار شیفت بدم داده ی MSB رو ضرب کرده در 2 به توان 16 که میشه همون 65536.
    بعدی هم به جای 8 بار شیفت دادن ضربدر 256 کردم.بایت آخری رو هم 4 بیت پایین رو صفر کردم تا دقت 20 بیتی بشه.
    اینی که شما میگین دقت 16 بیتیه قبلا هم تست کردم به صورت جداگونه ولی نتیجه همینطور بوده.
  8. #218
    تاریخ عضویت
    2009/07/29
    لابه لاي الکترون هاي مدارام
    1,306
    43

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    نقل قول نوشته اصلی توسط vishy71
    معذرت می خوام :redface: زیاد وارد نیستم تو اینجور کامنت گذاشتن.

    خوب اون ضرب ینی همون شیفت دادن.ینی به جای اینکه 16 بار شیفت بدم داده ی MSB رو ضرب کرده در 2 به توان 16 که میشه همون 65536.
    بعدی هم به جای 8 بار شیفت دادن ضربدر 256 کردم.بایت آخری رو هم 4 بیت پایین رو صفر کردم تا دقت 20 بیتی بشه.
    اینی که شما میگین دقت 16 بیتیه قبلا هم تست کردم به صورت جداگونه ولی نتیجه همینطور بوده.
    شما عدد ها رو دستی بذار اینجا

    روند پروژه های علمی از ساده به سخت هست
    هر وقت بهش مطمئن شدیم، می ریم مرحله بعدی
    برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
    Hidden Content
  9. #219
    تاریخ عضویت
    2014/04/01
    همدان
    48
    1

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    اکی
    با ولتاژ رفرنس 2.495 این مقادیر روی ولت متر (16 بیتی) و روی خروجی هستش:(8 بیت پایین پرش زیاد داره بعضا)

    ولتاژ روی ولت متر ، مقدار اندازه گیری شده

    210.59 8AD48C میلی وبت
    -49.62 7D747E میلی ولت
    1.1209 B9848F ولت
    8694 AC9C7B میلی ولت
    351.52 92121B میلی ولت
  10. #220
    تاریخ عضویت
    2014/04/01
    همدان
    48
    1

    پاسخ : مبدل آنالوگ به دیجیتال AD7190

    یه مشکل دیگه هم تو این مدلی هستش که نمونه ی به دست اومده رفته رفته زیاد میشه.ینی مثلا 8AD48C اولش اندازه گرفته میشه بعد رفته رفته میره بالا.
    فرکانس نمونه برداری هم 10 هرتز بوده.
    بازم ممنون
صفحه 22 از 32 نخست ... 12181920212223242526 ... آخرین
نمایش نتایج: از 211 به 220 از 314

موضوعات مشابه

  1. مبدل آنالوگ به دیجیتال با ورودی آنالوگ مثبت و منفی 12
    توسط g1g0g1g5 در انجمن مدار های ديجيتال
    پاسخ: 6
    آخرين نوشته: 2015/09/12, 15:03
  2. مبدل آنالوگ به دیجیتال
    توسط abbasm در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 3
    آخرين نوشته: 2013/09/27, 19:58
  3. مبدل آنالوگ به دیجیتال
    توسط zahradehfouli در انجمن مدار های ديجيتال
    پاسخ: 0
    آخرين نوشته: 2013/01/14, 21:30
  4. مبدل دیجیتال به آنالوگ
    توسط SILVER MAN در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 2
    آخرين نوشته: 2012/07/27, 10:07
  5. شبیه سازی مبدل های آنالوگ به دیجیتال و دیجیتال به آنالوگ(16 بیتی) با پروتئوس
    توسط s_66 در انجمن آموزش نرم افزارهاي آناليز و شبيه ساز
    پاسخ: 3
    آخرين نوشته: 2011/08/06, 16:43

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •