NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 5053 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 10 از 10

موضوع: راه اندازی adc خارجی

  1. #1
    مدیر باز نشسته REZA_KLNTR آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    مشهد مقدس
    نوشته ها
    366
    تشکر
    26
    تشکر شده 233 بار در 122 پست

    پیش فرض راه اندازی adc خارجی

    ""اونقدر قوی هست که نیازی به هیچ سلف و ... برای تغذیه نداره ""
    منظورتون از این جمله چیست؟؟ من پرسیدم که میونه این آی سی با نویزهای اطراف چجوریه چون من نویز زیادی در اطراف ایم مدارم دارم!ممکنه تو نویز و شار پراکنده محیط کار نکنه یا تداخل توش بیاد؟ تا چه حد؟

    پس اگر ممکنه در باره اتصال و استفادش توضیح بفرماییدممنون

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: ساخت منبع تغذیه ی صفر تا 30 ولت

    سلام
    ""اونقدر قوی هست که نیازی به هیچ سلف و ... برای تغذیه نداره ""
    منظورتون از این جمله چیست؟؟ من پرسیدم که میونه این آی سی با نویزهای اطراف چجوریه چون من نویز زیادی در اطراف ایم مدارم دارم!ممکنه تو نویز و شار پراکنده محیط کار نکنه یا تداخل توش بیاد؟ تا چه حد؟
    برای استفاده از adc های معمولی شما باید یک فیلتر رو سر راه تغذیه avcc قرار بدید ، چون ولتاژ ورودی با ولتاژ روی این پایه مقایسه میشه ، در صورتی که ولتاژ پایه avcc تغییر کنه کلیه محاسبات به هم میریزه .
    ولی توی این ایسی نیاز به هیچ گونه فیلتری نیست ، شما فقط ولتاز رو به ورودی اعمال میکنید و خروجی رو میخونید .
    این برنامه به زبان c :
    کد:
    #include <mega88.h>
    
    #asm
      .equ __lcd_port=0x0B ;PORTD
    #endasm
    /////////////////////
       #include <lcd.h>
       #include <delay.h>
       #include <stdio.h>
            #include <spi.h>  
            #include <stdlib.h>
    ////////////////////  
            #define ADC_RESET PORTB.1
            #define ADC_CS    PORTB.2
            #define ADC_DRDY  PINB.0
            #define high      1
            #define low       0
    //////////////////////
     void adc_init(void);       
    unsigned int read_spi();
    // Declare your global variables here
          char lcd[16];   
          unsigned char Watchdog; 
    // Watchdog Timer initialization
    // Watchdog Timer Prescaler: OSC/16
    
    void main(void)
    {
    
    
    // Crystal Oscillator division factor: 1
    CLKPR=0x80;
    CLKPR=0x00;
    
    // Port B initialization
    // Func0=In Func1=In Func2=In Func3=Out Func4=Out Func5=Out Func6=In Func7=Out 
    // State0=T State1=T State2=T State3=0 State4=0 State5=0 State6=T State7=0 
    PORTB=0x00;
    DDRB=0x2E;
    
    // Port C initialization
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
    // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
    // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
    PORTD=0x00;
    DDRD=0x00;
    
    // Port E initialization
    // Func0=In Func1=In Func2=In 
    // State0=T State1=T State2=T 
    
    // Crystal Oscillator division factor: 1
    CLKPR=0x80;
    CLKPR=0x00;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    // Interrupt on any change on pins PCINT0-7: Off
    // Interrupt on any change on pins PCINT8-15: Off
    
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    // Analog Comparator Output: Off
    ACSR=0x80;
    
    // 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);
    
    while (1)
          {
             adc_init();
            while(1)
                 {
                 float resultf;
                 char data[16];
                 lcd_clear();
                 lcd_gotoxy(5,0);
                 lcd_putsf("DATA:");
                 lcd_gotoxy(3,1);
                 resultf=read_spi(); 
                 //resultf=read_spi()/0.65535*0.01250;
                 ftoa(resultf,2,data);
                 sprintf(lcd," %s",data);
                 lcd_puts(lcd);
                delay_ms(500) ;
                Watchdog|=0x01;
                 }
          
          
          
          
           
          };
    }
    
    ////////SPI initializing         
    void adc_init(void)
    {
            lcd_clear();      
       lcd_gotoxy(3,0);
       lcd_putsf("Please wait");
       ADC_RESET=low;  
          
       ADC_CS=low;   
       ADC_RESET=high;   
       ADC_CS=high;
       delay_ms(3000);
            ADC_CS=low;
       spi( 0x20 );
       ADC_CS=high;   
       ADC_CS=low;         
       spi( 0x0c);         
       ADC_CS=high;         
       ADC_CS=low;         
       spi( 0x10);        
       ADC_CS=high;
       ADC_CS=low;         
       spi( 0x44);         
       ADC_CS=high;
            lcd_gotoxy(3,1);
            lcd_putsf("Calibrated");
            delay_ms(1000);
            lcd_clear();
    }
    /////////////////////
    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;
    و این هم برنامه به زبان شیرین بیسیک :
    کد:
    $regfile = "m88def.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Cls
    
    Dim Ch2 As Word
    Dim Ch3 As Word
    Dim Podatki_out As Byte
    Dout Alias Portb.4                                          'podatki AD7714 OUT
    Din Alias Pinb.3                                            'podatki AD7714 IN
    Sclk Alias Portb.5                                          'Clockad7714 Clk
    Drdy Alias Pind.2
    
    
    
    Podatki_out = &H20
    Shiftout Dout , Sclk , Podatki_out , 1 , 8
    
    Podatki_out = &H08
    Shiftout Dout , Sclk , Podatki_out , 1 , 8
    
    Podatki_out = &H10
    Shiftout Dout , Sclk , Podatki_out , 1 , 8
    
    Podatki_out = &H40                                          'LO filter vrednost nastavljen na 50Hz (384 110000000)
    Shiftout Dout , Sclk , Podatki_out , 1 , 8
    
    
    Do
    
    
    
    Bitwait Drdy , Reset
    Locate 2 , 1
     Lcd "drdy=0"
    
    Waitus 10
    Podatki_out = &H38
    Shiftout Dout , Sclk , Podatki_out , 1 , 8
    Waitus 10
    Shiftin Din , Sclk , Ch3 , 1 , 16
    Waitus 10
    
    
    
    Home
    Lcd "ch3: "
    Lcd Ch3
    Loop
    توی برنامه بالا از spi استفاده نشده ، در صورتی که خواستی با این ایسی کار کنی ، بگو تا من برنامه زبان c رو به زبان بیسیک بنویسم
    مدار هم توی دیتاشیت موجود هست

  4. تشکرها از این نوشته :


  5. #3
    مدیر باز نشسته REZA_KLNTR آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    مشهد مقدس
    نوشته ها
    366
    تشکر
    26
    تشکر شده 233 بار در 122 پست

    پیش فرض RE: ساخت منبع تغذیه ی صفر تا 30 ولت

    متشکر

    البته من فقط بیسیکشو متوجه میشم...

    منظور من از نویز ، میدانهای مغناطیسی اطراف هست مثل میدان مغناطیسی ترانس های ولتاژ و یا هر ترانس دیگری.... چون تو دستگاه ازین نویزهای مغناطیسی دارم! این نویزها روی این ADC زیاد تاثیر میزاره؟ راه حلی هست ؟

    ممکنه ی توضیحی برای برنامه بیسکامش بدین ی دستورات جدیدی واسه ما داره!!!

    در ضمن مدار این برنامه همون مداریه که من صفحه قبل گزاشتم؟

  6. تشکرها از این نوشته :


  7. #4
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: ساخت منبع تغذیه ی صفر تا 30 ولت

    سلام
    اگه این نویز خیلی زیاد باشه به عنوان اخرین راه میشه یه پوشش فلزی رو کل مدار کشید و حلش کرد
    این adc از طریق سه پایه با مدار ارتباط برقرار میکنه ، دو تا از پایه ها برای رد وبدل اطلاعات و پایه دیگه برای همزمان سازی به کار میره
    موقعی که ما adc رو به میکرو متصل میکنیم به دوتا از پایه ها بیشتر نیاز نداریم
    پایه dataout (خروجی داده adc ) و sclk (پایه کلاک یا پالس همزمانی )
    و...
    دستورات هم توی کتاب اموزش avr به زبان بیسک گفته شده
    دستور Shiftout یه متغییر رو از طریق یه پایه به ورت سریال به بیرون ارسال میکنه
    درتور Shiftin یه متغیر رو از بیرون میگیره
    کار های بالا رو میشه با ارتباط spi به ساگی انجام داد

  8. تشکرها از این نوشته :


  9. #5
    مدیر باز نشسته REZA_KLNTR آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    مشهد مقدس
    نوشته ها
    366
    تشکر
    26
    تشکر شده 233 بار در 122 پست

    پیش فرض RE: ساخت منبع تغذیه ی صفر تا 30 ولت

    مگه الان برنامه بالا چه روش ارتباطیه ؟ قبلا نگفتین!

    حالا من تو بازار دنبال چه نوع ADC باید باشم؟؟؟

  10. تشکرها از این نوشته :


  11. #6
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: ساخت منبع تغذیه ی صفر تا 30 ولت

    مگه الان برنامه بالا چه روش ارتباطیه ؟ قبلا نگفتین!
    ما با دستور Shiftout یه پالس ایجاد کردیم (همون پالس همزمانی یا کلاک )
    و توسط دستور Shiftin اطلاعات رو از adc به داخل میکرو هدایت میکنیم .
    (با این دوتا دستور میشه هر چیزی رو به بیرون فرستاد از بیرون گرفت )
    روش بالا دقیقا مثل روش spi هیت ، ما میتونیم از پایه کلاک و پایه mosi استفاده کنیم و با چند دستور ساده در زبان شیرین بیسیک همه چیز رو راه بندازیم .
    حالا من تو بازار دنبال چه نوع ADC باید باشم؟؟؟
    ad7715

  12. تشکرها از این نوشته :


  13. #7
    مدیر باز نشسته REZA_KLNTR آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    مشهد مقدس
    نوشته ها
    366
    تشکر
    26
    تشکر شده 233 بار در 122 پست

    پیش فرض RE: راه اندازی adc خارجی

    خوب تو شهر ما فقط دو مدل زیر پیدا میشه و تموم!:

    http://www.datasheetcatalog.org/datasheets2/71/710744_1.pdf

    http://www.datasheetcatalog.org/datasheet/analogdevices/AD574ALN.pdf

    که دومیهم از ظاهرش پیداست موازیه! و هیچ خبری از 16 بیتی هم نبود!! اگه میرفتم سراغ میکروی PIC احتیاجی به اینا نبود ولی الان که میخوام با AVR کار کنم مجبورم!

    آی سی اولی چطوره برای مدار؟ بگیرم؟( ADC804 )

  14. #8
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض RE: راه اندازی adc خارجی

    سلام
    زمان تبدیلش 17 میکرو ثانیه هست
    خروجی سریال
    توانش 500 میلی وات هست
    24 تا پایه داره
    تغذیش +-12 یا +-15 هست
    دارای دقت 12 بیت هست
    دقت 12 بیت یعنی حداکثر 4096 پله داریم و میشه 5 ولت رو با دقت 0.001220703125 اندازه گرفت .
    راه اندازیش کار راحتی هست و پروژه های زیادی هم داره
    http://www.google.com/search?hl=fa&q=ADC804+%D9%BE%D8%B1%D9%88%DA%98%D9% 87+&btnG=%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%D9%8A
    +Google&lr=lang_fa
    البته بعضی جاها با adc0804 اشتباه گرفته شده ، ولی در کل میشه راش انداخت

  15. #9
    مدیر باز نشسته REZA_KLNTR آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    مشهد مقدس
    نوشته ها
    366
    تشکر
    26
    تشکر شده 233 بار در 122 پست

    پیش فرض RE: راه اندازی adc خارجی

    عجیبه همه جا این آی سیرو با adc0804 اشتباه گرفتند و ظاهرا adc0804 موازی هست و این ADC804 ما سری چقدر تفاوت! چون یک صفر فقط کم داره تو سرچ هر دو میاد ولی نتیجتا همش adc0804 هست و خیلی کم از ADC804 استفاده شده!

    بهرحال تنها مورد موجود هست دیتاشیتشم که موجوده حالا برای ارتباطش چکنیم؟

  16. #10
    تازه وارد
    تاریخ عضویت
    Jul 2010
    نوشته ها
    1
    تشکر
    0
    تشکر شده 2 بار در 1 پست

    پیش فرض با سلام

    سلام دوستان ارجمند
    آقا منم در راه اندازی ad7714 مشکل دارم این برنامه که بالا با c هست رو میشه با Mega32 هم عملی کرد و اینکه شماتیک اتصال add7714 به میکرو Mega32 رو هم لطفاً بگذارید.هر کاری کردم نتونستم خودم به جواب برسم . در سایت eca در این تاپیک مراحل کار و سوالاتم هست.لطفاً راهنمایی بفرمایید.
    http://www.eca.ir/forum2/index.php?topic=42677.0
    خیلی ممنون
    ویرایش توسط farshchian : 22-08-2010 در ساعت 15:29

  17. کاربران : 2 تشکر کرده اند از شما farshchian برای ارسال این پست سودمند:


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

  1. ره اندازی smt160 با پورت موازی
    توسط M.ABDOLLAHI در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 27-04-2009, 21:34

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

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