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

موضوع: سيگنال ژنراتور قابل برنامه ريزي با ميكرو ad9833

  1. #1
    همکار افتخاری
    تاریخ عضویت
    Jul 2007
    نام
    محمد هادی عبدی
    نوشته ها
    129
    تشکر
    82
    تشکر شده 294 بار در 73 پست

    پیش فرض سيگنال ژنراتور قابل برنامه ريزي با ميكرو ad9833

    سلام دوستان براي هر جووني مثل ماها يك سيگنال ژنراتور تو محيط كارگاه لازمه منم به اين فكر افتادم كه اين ايسي رو درايو كنم وقعا اين ايسي فوق العاده است باورتون نميشه چقدر عالي كار ميده تو هر رنج فركاسي از 1. هرتز تا 12.5 مگا هرتز جواب ميده مدل هاي بلاترش تا 40 مگه اميدوارم لذتش رو ببريد نوع شكل موج هايي رو كه با ايسي خودم گرفتم براتون ميزارم تا خيالتون از اين اي سي راحت بشه موفق مويد باشيد التماس دعا
    #include "main.h"
    #include <stdio.h>
    #include <math.h>
    #include <LCD.h>
    #ZERO_RAM
    #use spi(DI=PIN_C0, DO=PIN_D0, CLK=PIN_D1, BITS=16,CLOCK_LOW=150,IDLE=1)
    #define FSYNC PIN_C3
    #define RESEt_AD9833 0x0100 //0000 0001 0000 0000
    #define Sinusoid_0 0x0000 //0000 0000 0000 0000
    #define Sinusoid_1 0x0800 //0000 1000 0000 0000
    #define Triangle_0 0x0002 //0000 0000 0000 0010
    #define Triangle_1 0x0802 //0000 1000 0000 0010
    #define square_0_MSB_d_2 0x0020 //0000 0000 0010 0000
    #define square_1_MSB_d_2 0x0820 //0000 1000 0010 0000
    #define square_0 0x0028 //0000 0000 0010 1000
    #define square_1 0x0828 //0000 1000 0010 1000
    #define frequency_0 0
    #define frequency_1 1
    //************************************************** **********
    void init_FREQ0_AD9833();
    void init_FREQ1_AD9833();
    void write_command_AD9833(int16 c_o_m);
    void load_FREQ_AD9833(float fe,int1 cs);
    //************************************************** **********
    void main()
    {

    port_b_pullups(TRUE);
    setup_timer_0(RTCC_INTERNAL);
    setup_oscillator(OSC_NORMAL);
    cls();
    delay_ms(100);

    init_FREQ0_AD9833();
    delay_ms(5000);
    write_command_AD9833(Triangle_0);
    delay_ms(5000);
    write_command_AD9833(square_0);
    delay_ms(5000);
    write_command_AD9833(Sinusoid_0);
    delay_ms(5000);
    load_FREQ_AD9833(200.0,frequency_0);
    while(TRUE);
    }
    //************************************************** **************
    void init_FREQ0_AD9833(){
    output_low (FSYNC);
    spi_xfer(0x2100);// 0010 0001 0000 0000
    output_high(FSYNC);
    output_low (FSYNC);
    spi_xfer(0x4230);// 01 00 0010 0011 0000
    output_high(FSYNC);
    output_low (FSYNC);
    spi_xfer(0x4000);// 01 00 0000 0000 0000
    output_high(FSYNC);
    output_low (FSYNC);
    spi_xfer(0xC000);// 1100 0000 0000 0000
    output_high(FSYNC);
    output_low (FSYNC);
    spi_xfer(0x0000);// 0000 0000 0000 0000
    output_high(FSYNC);
    }
    //************************************************** *
    void init_FREQ1_AD9833(){
    output_low (FSYNC);
    spi_xfer(0x2900);// 0010 1001 0000 0000
    output_high(FSYNC);
    output_low (FSYNC);
    spi_xfer(0x8230);// 10 00 0010 0011 0000
    output_high(FSYNC);
    output_low (FSYNC);
    spi_xfer(0x8000);// 10 00 0000 0000 0000
    output_high(FSYNC);
    output_low (FSYNC);
    spi_xfer(0xC000);// 1100 0000 0000 0000
    output_high(FSYNC);
    output_low (FSYNC);
    spi_xfer(0x0800);// 0000 1000 0000 0000
    output_high(FSYNC);
    }

    //************************************************** ******
    void write_command_AD9833(int16 c_o_m){

    output_low (FSYNC);
    spi_xfer(c_o_m);
    output_high(FSYNC);
    }
    //************************************************** ******
    void load_FREQ_AD9833(float fe,int1 cs){

    float32 res;
    int32 res_f;
    int16 l_b=0,m_b=0,LSB=0,MSB=0;
    int8 i=0;
    int1 te_0[28];

    res=((fe*pow (2,28.0))/24E+6);
    res = floor (res);
    res_f=res;
    while(i<14){
    te_0[i]=bit_test(res_f,i);
    i++;
    }
    while(i<28){
    te_0[i]=bit_test(res_f,i);
    i++;
    }
    i=0;
    while(i<14){
    if(te_0[i]==1) bit_set(l_b,i);
    i++;
    }
    while(i<28){
    if(te_0[i]==1) bit_set(m_b,i-14);
    i++;
    }

    if(cs==0){
    LSB=0x4000;
    MSB=0x4000;
    LSB|=l_b;
    MSB|=m_b;
    write_command_AD9833(0x2100);
    write_command_AD9833(LSB);
    write_command_AD9833(MSB);
    write_command_AD9833(0xC000);
    write_command_AD9833(0x0000);
    }
    if(cs==1){
    LSB=0x8000;
    MSB=0x8000;
    LSB|=l_b;
    MSB|=m_b;
    write_command_AD9833(0x2900);
    write_command_AD9833(LSB);
    write_command_AD9833(MSB);
    write_command_AD9833(0x0800);
    }

    }

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


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

  4. #2
    همکار افتخاری
    تاریخ عضویت
    Jul 2007
    نام
    محمد هادی عبدی
    نوشته ها
    129
    تشکر
    82
    تشکر شده 294 بار در 73 پست

    پیش فرض




  5. #3
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

    سلام
    این ایسی جالبی بود اگر شماتیک و .. دارین بفرستین بذاریم صفحه اول سایت مطلب خوبی هست
    کویر ویدئو راه اندازی شد

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

  6. #4
    همکار افتخاری
    تاریخ عضویت
    Jul 2007
    نام
    محمد هادی عبدی
    نوشته ها
    129
    تشکر
    82
    تشکر شده 294 بار در 73 پست

    پیش فرض

    ویرایش توسط hadiabdi : 11-09-2011 در ساعت 16:51

  7. #5
    عضو جدید
    تاریخ عضویت
    Jul 2009
    نام
    مازندران - محموداباد
    نوشته ها
    6
    تشکر
    0
    تشکر شده 1 بار در 1 پست

    پیش فرض نوع کریستال اسیلاتور

    سلام :نوع کریستال اسیلاتور برای AD9833 چی باید باشد
    یک کریستال اسلاتور 25 مگ تهیه کردم که خروجیش سینوسی هست .
    خروجی کریستال اسیلاتور سینوسی باید باشد یا مربعی؟

    \/\hashemi911t/\/

  8. #6
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط hashemi911t نمایش پست ها
    خروجی کریستال اسیلاتور سینوسی باید باشد یا مربعی؟

    \/\/\/
    سلام مهندس
    خروجي اسيلاتور يه موج سينوسي هستش. با اوسيلوسكوپ موج خروجيشو ديدم.
    _____________________________________
    _____________________________________

  9. #7
    همکار hakimzadeh آواتار ها
    تاریخ عضویت
    Aug 2010
    نام
    غلامرضا حکیم زاده
    نوشته ها
    150
    تشکر
    147
    تشکر شده 418 بار در 118 پست

    پیش فرض

    مدل ad9835 دارای قابلیت 50 مگاهرتز است.

  10. #8
    عضو جدید
    تاریخ عضویت
    Jul 2009
    نام
    مازندران - محموداباد
    نوشته ها
    6
    تشکر
    0
    تشکر شده 1 بار در 1 پست

    پیش فرض نوع کریستال اسیلاتور

    سلام :شک داشتم چون من هم روی اسکوب دیدم سینوسی بود ولی دیتا شیت میگه ظریب نویز و کیفیت شکل موج های خروجی به کلاک ورودی mclk بستگی داره
    جون گفت کلاک فکر کردم خوب حتما خروجی کریستال اسیلاتور مربعی هست!
    شما با این اسیلاتور جواب گرفتید؟

  11. #9
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط hashemi911t نمایش پست ها
    شما با این اسیلاتور جواب گرفتید؟
    سلام مهندس
    بله جواب گرفتم.
    مثلا با اين اسيلاتور ميكروي AVR كه فيوزبيتاش مشكل دار شده رو دوباره زنده كردم.
    يا اينكه با همين اسيلاتور يه برد واسه XC9572 ساختم و بازم جواب گرفتم.
    يه اسلوسكوپ هم با اون ساختم و موج خروجي رو با همين اوسكوپ ديدم.
    _____________________________________
    _____________________________________

  12. #10
    کاربر فعال naatamam آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    حسن معماری
    نوشته ها
    283
    تشکر
    287
    تشکر شده 877 بار در 286 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    سلام مهندس
    بله جواب گرفتم.
    مثلا با اين اسيلاتور ميكروي avr كه فيوزبيتاش مشكل دار شده رو دوباره زنده كردم.
    يا اينكه با همين اسيلاتور يه برد واسه xc9572 ساختم و بازم جواب گرفتم.
    يه اسلوسكوپ هم با اون ساختم و موج خروجي رو با همين اوسكوپ ديدم.
    سلام
    با کدام اسیلانور ؟ چند مگ ؟ یا چه شماره ای ؟؟

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


  14. #11
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط naatamam نمایش پست ها
    سلام
    با کدام اسیلانور ؟ چند مگ ؟ یا چه شماره ای ؟؟
    سلام مهندس
    براي اولي از اوسيلاتور با فركانس 11.0592 يا 16 مگاهرتز
    براي دومي از اوسيلاتور با فركانس 50 مگاهرتز
    و براي سومي از اوسيلاتور با فركانس 40 مگاهرتز استفاده كردم.
    ضمنا اوسيلاتورا 4 تا پايه بيشتر ندارن.
    _____________________________________
    _____________________________________

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


  16. #12
    کاربر دائمی
    تاریخ عضویت
    Jul 2009
    نوشته ها
    415
    تشکر
    218
    تشکر شده 531 بار در 212 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    سلام مهندس
    بله جواب گرفتم.
    مثلا با اين اسيلاتور ميكروي avr كه فيوزبيتاش مشكل دار شده رو دوباره زنده كردم.
    يا اينكه با همين اسيلاتور يه برد واسه xc9572 ساختم و بازم جواب گرفتم.
    يه اسلوسكوپ هم با اون ساختم و موج خروجي رو با همين اوسكوپ ديدم.
    سلام
    اسيلاتور به زنده كردن ميكرو چطوري ربط پيدا ميكنه ؟

  17. #13
    عضو جدید
    تاریخ عضویت
    Jul 2009
    نام
    مازندران - محموداباد
    نوشته ها
    6
    تشکر
    0
    تشکر شده 1 بار در 1 پست

    پیش فرض

    سلام من کد زیل را برای درایو ad9833 به زبان c و کامپایلرmikroe با atmega16 نوشتم ولی جواب نمیگیرم و در خروجی هیچ ندارم لطفا راهنمایی کنید اگه کد اماده برای تست دارید لطفا برام ارسال نمایید یا لینک اش را قرار دهید
    توضیح کد: ابتدا ماژل spi راه اندازی و بعد پیکر بندی کی پد انجام شده و اماده خواندن میگرردد وبعد
    توسط تابع void initAD9833 چیپ اماده سازی اولیه میشود
    وبعد منتطر دریافت کد از کیپد میشود اگر کلید فشاری 4،8،12،16 بود شکل موج خروجی راتغییر میدهد اگر هم کلید 1 فشرده شد موج خروجی شینوسی با فرکانس 100k در خروجی باید ایجاد شود

    * this code write wait MikroC avr by aliasghar hashemi for Deriver AD9833 wait
    keypad input
    hashemi911t@gamil.com,
    09119109304*/
    // Keypad module connections
    char keypadPort at PORTD;
    char keypadPort_Direction at DDRD;
    // End Keypad module connections

    //**********************initialization AD9833 funtion********************
    void initAD9833 (void)
    {
    //CONT REG Reset=1&HLB=0 0b0010 0001 0000 0000
    PORTB.B4=0;
    SPI1_Write(0x21);
    SPI1_Write(0x00);
    PORTB.B4=1;
    // write LSB freq reg0 0b 01 101001 11100011 out 1k
    PORTB.B4=0;
    SPI1_Write(0x69);// D13 - D8 represents 14 LSBs
    SPI1_Write(0xE3); //D7 - D0
    PORTB.B4=1;
    // write MSB freq reg0 0b01 000000 00000000
    PORTB.B4=0;
    SPI1_Write(0x64);// D13 - D8 represents 14 LSBs
    SPI1_Write(0x00); //D7 - D0
    PORTB.B4=1;
    // phase reg 0b11000000 00000000
    PORTB.B4=0;
    SPI1_Write(0xC0); // D13 - D8 represents 14 MSBs
    SPI1_Write(0x00); // D7 - D0
    PORTB.B4=1;
    // CONT REG reset=0, select felect&Pselect 0b0010 0000 0000 0000
    PORTB.B4=0;
    SPI1_Write(0x20); // D15 - D8, Writing to Control Regsiter
    SPI1_Write(0x00); // Setting for Sine Wave Output
    PORTB.B4=1;
    }

    // *****************selective out put wave*********************
    void out(int kp)
    {
    if (kp==4)
    {
    PORTB.B4=0;
    SPI1_Write(0x20); // 0b0010 0000 0000 0000 sin
    SPI1_Write(0x00);
    PORTB.B4=1;
    Delay_us(100);
    }

    else if (kp==8)
    {
    PORTB.B4=0;
    SPI1_Write(0x20); // 0b0010 0000 0000 0010 Tri
    SPI1_Write(0x02);
    PORTB.B4=1;
    Delay_us(100);
    }
    else if (kp==12)
    {
    PORTB.B4=0;
    SPI1_Write(0x20); // 0b0010 0000 0010 1000 DAC DATA MSB
    SPI1_Write(0x28);
    PORTB.B4=1;
    Delay_us(100);
    }
    else if (kp==16)
    {
    PORTB.B4=0;
    SPI1_Write(0x20); // 0b0010 0000 0010 0000 DAC DATA MSB/2
    SPI1_Write(0x20);
    PORTB.B4=1;
    Delay_us(100);
    }
    }
    //*******************write frq AD9833******************************
    void write_freq(int kp )
    {
    if(kp==1)
    {
    PORTB.B4=0; // write to cort reg 0010 0000 0000 0000
    SPI_Write(0x02);
    SPI_Write(0x00);
    PORTB.B4=1;
    PORTB.B4=0;// write to FREQ REG fout=0.00931*freg
    SPI_Write(0x43); // 01000011 11101000
    SPI_Write(0xE8);
    PORTB.B4=1;
    PORTB.B4=0;
    SPI_Write(0x40);
    SPI_Write(0x00);
    PORTB.B4=1;
    PORTB.B4=0; // write to phasr reg
    SPI_Write(0xc0);
    SPI_Write(0x00);
    PORTB.B4=1;

    }
    Delay_us(100);
    }

    void main() {
    //char keybuf[5];
    int kp=0;
    DDRB.B4=1; //SS pin defide to outpot
    DDRB.B5=1; //MOSI pin defide to outpot
    DDRB.B7=1; //SCK pin defide to outpot
    PORTB.B4=1; //SS high
    SPI1_Init();
    Keypad_Init();
    initAD9833();
    Delay_us(100);
    while (1)
    {
    do
    {
    kp=Keypad_Key_Click();
    }while(!kp);
    write_freq(kp);
    out(kp);
    }
    }}

  18. #14
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام مهندس
    شماتيك+سورس كد براي راه اندازي آس.سي AD9833 با ميكروي M8.
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar AD9833.rar (259.9 کیلو بایت, 662 نمايش)
    _____________________________________
    _____________________________________

  19. کاربران : 3 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  20. #15
    عضو جدید
    تاریخ عضویت
    Jul 2009
    نام
    مازندران - محموداباد
    نوشته ها
    6
    تشکر
    0
    تشکر شده 1 بار در 1 پست

    پیش فرض

    سلام این کد تست شده است
    با کد خودم که در بالا هست تو پروتئوس جواب میده( باspi debugger)
    اما تو عمل هیچ
    خروجی این کریستال اسیلاتور سینوسی هست و با دامنه 50 میلی ولت پیک تا پیک

  21. #16
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط hashemi911t نمایش پست ها
    سلام این کد تست شده است
    با کد خودم که در بالا هست تو پروتئوس جواب میده( باspi debugger)
    اما تو عمل هیچ
    خروجی این کریستال اسیلاتور سینوسی هست و با دامنه 50 میلی ولت پیک تا پیک
    سلام مهندس جان
    خودم اين برنامه رو تست نكردم.
    بله خروجي كريستال اوسيلاتور سينوسي هستش.
    _____________________________________
    _____________________________________

  22. #17
    تازه وارد
    تاریخ عضویت
    Jul 2016
    نوشته ها
    1
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام دوستان این ای سی تو پروتئوس نیست
    از کجا می تونم پیدا کنم؟

  23. #18
    کاربر فعال jonbakhsh آواتار ها
    تاریخ عضویت
    Apr 2008
    نام
    H.J
    نوشته ها
    371
    تشکر
    192
    تشکر شده 225 بار در 101 پست

    پیش فرض

    امکان تغییر pwm هم داره ؟؟؟ مثلا pwm از 0 تا 100 تغییر بدیم

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

  1. برنامه ريزي وقفه در lpc1768
    توسط rah1450 در انجمن LPC series (NXP)
    پاسخ: 2
    آخرين نوشته: 08-07-2013, 19:27
  2. راه اندازی ad9833
    توسط balabe در انجمن AVR
    پاسخ: 0
    آخرين نوشته: 10-04-2013, 14:19
  3. ساخت اسيلاتور با avr
    توسط hetler در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 13-01-2013, 15:08
  4. سيگنال ژنراتور
    توسط lpln852 در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 2
    آخرين نوشته: 10-08-2012, 13:05
  5. درخواست فوت پرينت اسيلاتور
    توسط msmut7020 در انجمن آموزش نرم افزارهای برق و الکترونیک
    پاسخ: 16
    آخرين نوشته: 05-08-2011, 20:16

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

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