اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی ISD4004 - کمک ?!؟

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

    مشکل در راه اندازی ISD4004 - کمک ?!؟

    سلام دوستان
    (اینم یه تاپیک با نام مناسب!!! به به !!!)

    من تمام دیتا شیت ISD4004 رو خوندم و به صورت سطحی ترجمش کردم

    با توجه به آن یک برنامه هم نوشتم که متاسفانه هیچ جوابی نگرفتم

    فکر میآ‌کنم مشکل تو قسمت هایی باشه که تو دیتاشیت به روشنی گفته نشده یا با ISD25120 تفاوت داره

    میآ‌خواستم اگه ممکنه به سوالاتم جواب بدین تا مشکلم حل بشه
    چون به این برای پروژه فاینالم که آخرین فرصتش 1 ماه دیگه هست نیاز دارم

    دمتون گرم ... (سوال ها :NO: :NO: :NO:
    *********
    1 ) اولین سوال که خیلی باهاش سرو کله زدم اینه که تو دیتا شیت ISD4004 هیچ اشاره ای به نحوه اتصال میکروفن نشده.

    من مثل مدار توی دیتاشیت ISD25120 بستم. اما مگه VCC برای 4004 3 ولت نیست. پس برای پایه ی MIC در 25120 به 5 وصل میآ‌شد

    اینجا باید چه کنم

    اگه ممکنه یه شماتیک ازش بزارین
    *********
    2 ) من AUD OUT رو به یه تقویت کننده با LM368 دادم که تغذیه آن 5 ولته و 4004 ، 3 ولته
    آیا درسته؟
    *********
    3)آیا برای ارتباط SPI با ISD4004 باید از تقسیم کننده ولتاژ (دو مقاومت) برای رسیدن به 3 ولت استفاده کرد . (مثل SPI در MMC) ؟؟؟

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

    متشکرم ...


    #2
    پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

    اینم برنامه . . . :NO: :NO:

    #include <mega32.h>
    #include <delay.h>

    // SPI functions
    #include <spi.h>

    //************************************************** ************************
    void SPI_Initialization(void);
    void SPI_move(void);
    void Send_CMD(unsigned int,unsigned char);
    void POWER_UP(void);
    void RECORD(unsigned int);
    void PLAY(unsigned int);
    void STOP(void);
    //************************************************** ************************
    // Declare your global variables here
    unsigned char DataIn;
    unsigned char DataOut;

    //************************************************** ************************

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=Out Func6=In Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In
    // State7=0 State6=T State5=0 State4=0 State3=0 State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0xB8;

    PORTC=0x00;
    DDRC=0x00;

    PORTD=0x00;
    DDRD=0x00;

    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 250.000 kHz
    // SPI Clock Phase: Cycle Half
    // SPI Clock Polarity: Low
    // SPI Data Order: LSB First
    //
    // ||
    // ||
    // \/



    SPI_Initialization();
    delay_ms(100);
    RECORD(0x0000);
    PORTB.4=1;

    delay_ms(20000);

    STOP();

    delay_ms(50);

    delay_ms(2000);
    PLAY(0x0000);
    PORTB.4=1;

    delay_ms(20000);

    while (1);

    }

    //************************************************** ************************

    void SPI_Initialization(void)
    {
    PORTB=0x00;
    DDRB=0xB8;
    SPCR=0x71;
    SPSR=0x00;
    }

    //************************************************** ************************
    // can set DataOut as entrance of function
    void SPI_move(void)
    {
    SPDR=DataOut;
    while(!(SPSR.7));
    DataIn=SPDR;
    }
    //************************************************** ************************

    void Send_CMD(unsigned int address,unsigned char CMD)
    {
    unsigned char H,L;
    L=address;
    address>>=8;
    H=address;
    DataOut=L;
    SPI_move();
    DataOut=H;
    SPI_move();
    DataOut=CMD;
    SPI_move();
    }
    //************************************************** ************************

    void POWER_UP(void)
    {
    Send_CMD(0x0000,0x04);
    delay_ms(25);
    }

    //************************************************** ************************

    void RECORD(unsigned int address)
    {
    POWER_UP();
    POWER_UP();
    delay_ms(25);
    Send_CMD(address,0x05);
    Send_CMD(0x0000,0x0D);
    }

    //************************************************** ************************

    void PLAY(unsigned int address)
    {
    POWER_UP();
    Send_CMD(address,0x07);
    Send_CMD(0x0000,0x0F);
    }

    //************************************************** ************************

    void STOP(void)
    {
    Send_CMD(0x0000,0x0C);
    }
    //************************************************** ************************


    *** 4) آیا استفاده از delay برای مدت زمان دلخواه برای ثبت درست است؟؟؟؟


    **************

    4) آیا همانند MMC که در ارتباط با SPI پاسخ هایی را میفرستاد آیا ISD4004 نیز پیامی مبنی بر پذیرفته شده یا نشدن فرمان میدهد ؟؟؟
    **************
    5) اتصال پایه های RAC و INT در برنامه ساده ای که نوشتم لازمه؟؟؟ باید چه کار کنم؟؟؟

    احتمالا تا شب شماتیک مدارمو میزارم

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

      یعنی هیچ مسلمونی پیدا نمیشه کمک کنه؟؟؟

      بابا دستم خشک شد از بس ECA.IR تایپ کردم :biggrin:

      یه جا اشتباه کرده بودم، باید پایه های SPI میکرو و 4004 رو با مقاومت وصل می کردم(همون قضیه تبدیل 3ولت به 5ولت)

      اما بازم جواب نمیده :angry: :angry: :angry:
      کمک کنین دیگه :angry: :angry: :angry: :angry: :angry:

      چجوری میشه کاربر های فعال و ... رو خبر کرد

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

        اینم ورژن جدید برنامه ...

        تو قبلی SPI رو LSB تنظیم کرده بودم. تو این برنامه MSB هست ولی Opcode و آدرس را دستی از کوچیک به بزرگ بهش دادم.
        ایراد داره یا نه ؟؟؟؟

        در برنامه هم گفتم که پیام هایی که ISD برام میفرسته رو چاپ کنه که همش 0 میده

        :NO:

        #include <mega32.h>
        #include <delay.h>
        #include <stdlib.h>
        // Alphanumeric LCD Module functions
        #asm
        .equ __lcd_port=0x15 ;PORTC
        #endasm
        #include <lcd.h>

        // SPI functions
        #include <spi.h>

        //************************************************** ************************
        void SPI_Initialization(void);
        void SPI_move(void);
        void Send_CMD(unsigned int,unsigned char);
        void POWER_UP(void);
        void RECORD(unsigned int);
        void PLAY(unsigned int);
        void STOP(void);
        //************************************************** ************************
        // Declare your global variables here
        unsigned char DataIn;
        unsigned char DataOut;
        unsigned char *ch;
        //************************************************** ************************

        void main(void)
        {
        // Declare your local variables here



        // SPI initialization
        // SPI Type: Master
        // SPI Clock Rate: 250.000 kHz
        // SPI Clock Phase: Cycle Half
        // SPI Clock Polarity: Low
        // SPI Data Order: MSB First
        //
        // ||
        // ||
        // \/

        // LCD module initialization
        lcd_init(16);

        SPI_Initialization();
        PORTB.4=0;
        delay_ms(50);
        RECORD(0x0000);
        delay_ms(25);

        itoa(DataIn,ch);
        lcd_puts(ch);
        delay_ms(2000);

        lcd_clear();
        lcd_putsf(" Recording ..."
        PORTB.4=1;
        delay_ms(8000);

        PORTB.4=0;
        STOP();
        delay_ms(50);
        PORTB.4=1;
        delay_ms(1000);

        PORTB.4=0;
        PLAY(0x0000);
        delay_ms(25);
        PORTB.4=1;
        itoa(DataIn,ch);
        lcd_puts(ch);
        delay_ms(2000);

        lcd_clear();
        lcd_putsf(" Playing ..."
        delay_ms(8000);
        lcd_clear();
        lcd_putsf("stop"
        while (1);

        }

        //************************************************** ************************

        void SPI_Initialization(void)
        {
        PORTB=0x00;
        DDRB=0xB8;
        SPCR=0x51;
        SPSR=0x00;

        }

        //************************************************** ************************
        // can set DataOut as entrance of function
        void SPI_move(void)
        {
        SPDR=DataOut;
        while(!(SPSR.7));
        DataIn=SPDR;
        }

        //************************************************** ************************

        void Send_CMD(unsigned int address,unsigned char CMD)
        {
        unsigned char H,L;
        L=address;
        address>>=8;
        H=address;
        DataOut=L;
        SPI_move();
        DataOut=H;
        SPI_move();
        DataOut=CMD;
        SPI_move();
        }

        //************************************************** ************************

        void POWER_UP(void)
        {
        Send_CMD(0x0000,0b00100000);
        delay_ms(25);
        }

        //************************************************** ************************

        void RECORD(unsigned int address)
        {
        POWER_UP();
        POWER_UP();
        delay_ms(25);
        Send_CMD(address,0b10100000);
        Send_CMD(0x0000,0b10110000);

        }

        //************************************************** ************************

        void PLAY(unsigned int address)
        {
        POWER_UP();
        Send_CMD(address,0b11100000);
        Send_CMD(0x0000,0b11110000);

        }

        //************************************************** ************************

        void STOP(void)
        {
        Send_CMD(0x0000,0x00110000); }
        //************************************************** ************************


        به قسمت های مشکی که درشت نوشته شدن توجه کنید ...

        درست کار میکنه؟؟؟


        قسمت های زرشکی رنگ نیز تغییرات LSB به MSB

        دیدگاه


          #5
          پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

          نوشته اصلی توسط ehsan_akbari
          یعنی هیچ مسلمونی پیدا نمیشه کمک کنه؟؟؟
          بابا دستم خشک شد از بس ECA.IR تایپ کردم :biggrin:
          یه جا اشتباه کرده بودم، باید پایه های SPI میکرو و 4004 رو با مقاومت وصل می کردم(همون قضیه تبدیل 3ولت به 5ولت)
          اما بازم جواب نمیده :angry: :angry: :angry:
          کمک کنین دیگه :angry: :angry: :angry: :angry: :angry:
          چجوری میشه کاربر های فعال و ... رو خبر کرد
          جناب اکبری گرامی
          با سلام
          از اینکه تا بحال ، فرصتی و یا پروژه ای پیش نیامده که با isd4004 کار کنم ، متاسفم ! در اینترنت هم جستجو کردم ، ولی به غیر از دیتاشیت ، چیز بدرد بخوری پیدا نکردم ( که آدرس آن را هم در تاپیکی مرتبط با این قضیه قرار داده ام ) ، که حد اقل بتونه به شما کمک کنه !
          بهر حال برای راه اندازی این چیپ ، باید طبق اطلاعات دیتاشیت ، عمل نمود . توجه کامل به شکل موجهای مربوطه ، شماتیکها و ................
          و یه مورد مهم دیگه ، اینکه ، حد اقل انتخاب اینجانب به عنوان کاربر فعال بطور قطع ، دلیل بر علامه بودن این حقیر در هر زمینه مرتبط با موضوعات این فروم نیست .
          بهر حال ، باز هم نگاهی به دیتاشیت این چیپ میندازم ، انشا الله که بتونم ، کمک کنم .
          پاینده باشید .

          دیدگاه


            #6
            پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

            دوست عزیر .
            من هم متاسفانه با این آی سی قبلا کار نکردم.
            ولی با ISD17XX کار کردم که اونم از همین شرکته و SPI مشابهی داره .

            شاید من اشتباه میکنم ولی ندیدم جایی توی برنامتون SS رو صفر کرده باشید ...
            تا اونجایی که یادمه توی اینجور مواقع (فرستادن چند بایت پشت سر هم با SPI ) باید به صورت دستی SS رو صفر و یک کنید .

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


            void spi_transmitt3 (char isd_dt0,char isd_dt1, char isd_dt2)
            {
            PORTB.4=0; //ss=0
            delay_us(2);
            SPDR = isd_dt0;
            /* Wait for transmission complete */
            while(!(SPSR.7))
            ;
            SPDR= isd_dt1;
            while(!(SPSR.7))
            ;
            SPDR= isd_dt2;
            while(!(SPSR.7))
            ;
            PORTB.4=1; //ss=1 '
            delay_ms(10);
            }

            در ضمن دوست عزیر نیازی به پیغام خصوصی نیست . فروم برای همینه که هرکسی کمکی از دستش بر بیاد کمک کنه .
            That`s It ...I`m out of here

            دیدگاه


              #7
              پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

              1) توی صفحه ی 26 دیتاشیت نحوه ی وصل کردن میکروفن توضیح داده شده که تغذیه ایی نیاز نداره .

              2) اصولا که خازن کوپلاژ کار خودش رو میکنه و مشکلی پیش نمیاد

              3) تقسیم کننده آخرین راهه .. برای ارتباط دو طرفه درست جواب نمیده . شما بهتره از میکرو های سری L استفاده کنید و تغذیه ی 3.3 بهش وصل کنید و

              4)بله اطلاعاتی میفرسته . توی معمولا بیت های Status و .. (توی دیتاشیت کامل توضیح داده )

              5) خیر نیازی نیست

              موفق باشید
              That`s It ...I`m out of here

              دیدگاه


                #8
                پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

                من هم با این ای سی کار نکردم
                چرا با مموری mmc کار نمیکنی جاشم بسشتره.من این کار رو کردم
                ولی به هر حال دیتا شیت رو خوندم
                ببین تو صفحه 11 کاملا شکل رو کشیده
                میکروفن رو به پایه ana in+وصل کن و سر منفیو به پایه ana in-

                تنها نکتش اینه که بعد از کارت حتما یه مقاومت 4.7 کیلو رو به پایه + میکروفن وصل کن و از اون ور بده به vcc


                بازم مشکلی بود بگو
                علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

                دیدگاه


                  #9
                  پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

                  نوشته اصلی توسط ErfanEA
                  دوست عزیر .
                  من هم متاسفانه با این آی سی قبلا کار نکردم.
                  ولی با ISD17XX کار کردم که اونم از همین شرکته و SPI مشابهی داره .

                  شاید من اشتباه میکنم ولی ندیدم جایی توی برنامتون SS رو صفر کرده باشید ...
                  تا اونجایی که یادمه توی اینجور مواقع (فرستادن چند بایت پشت سر هم با SPI ) باید به صورت دستی SS رو صفر و یک کنید .

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


                  void spi_transmitt3 (char isd_dt0,char isd_dt1, char isd_dt2)
                  {
                  PORTB.4=0; //ss=0
                  delay_us(2);
                  SPDR = isd_dt0;
                  /* Wait for transmission complete */
                  while(!(SPSR.7))
                  ;
                  SPDR= isd_dt1;
                  while(!(SPSR.7))
                  ;
                  SPDR= isd_dt2;
                  while(!(SPSR.7))
                  ;
                  PORTB.4=1; //ss=1 '
                  delay_ms(10);
                  }

                  در ضمن دوست عزیر نیازی به پیغام خصوصی نیست . فروم برای همینه که هرکسی کمکی از دستش بر بیاد کمک کنه .

                  این کارو تو Main برنامه انجام دادم ...
                  همون PORTB.4 ... دقت کن ؟!!؟


                  SPI_Initialization();
                  PORTB.4=0;
                  delay_ms(50);
                  RECORD(0x0000);
                  delay_ms(25);

                  itoa(DataIn,ch);
                  lcd_puts(ch);
                  delay_ms(2000);

                  lcd_clear();
                  lcd_putsf(" Recording ..."
                  PORTB.4=1;
                  delay_ms(8000);

                  PORTB.4=0;
                  STOP();
                  delay_ms(50);
                  PORTB.4=1;
                  delay_ms(1000);

                  PORTB.4=0;
                  PLAY(0x0000);
                  delay_ms(25);
                  PORTB.4=1;
                  itoa(DataIn,ch);
                  lcd_puts(ch);
                  delay_ms(2000);

                  lcd_clear();
                  lcd_putsf(" Playing ..."
                  delay_ms(8000);

                  دیدگاه


                    #10
                    پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

                    نوشته اصلی توسط ErfanEA
                    1) توی صفحه ی 26 دیتاشیت نحوه ی وصل کردن میکروفن توضیح داده شده که تغذیه ایی نیاز نداره .

                    2) اصولا که خازن کوپلاژ کار خودش رو میکنه و مشکلی پیش نمیاد

                    3) تقسیم کننده آخرین راهه .. برای ارتباط دو طرفه درست جواب نمیده . شما بهتره از میکرو های سری L استفاده کنید و تغذیه ی 3.3 بهش وصل کنید و

                    4)بله اطلاعاتی میفرسته . توی معمولا بیت های Status و .. (توی دیتاشیت کامل توضیح داده )

                    5) خیر نیازی نیست

                    موفق باشید
                    1) من میکروفن رو مثل دیتاشیت ISD25120 بستم . با همون مقادیر المان ها... فقط چون 25120 تغذیش 5 ولته و 4004 ، 3ولته به اون 3 ولت دادم
                    حالا نمیدونم درسته یا نه

                    *** در مورد شکل صفحه 26 توضیح میدید؟؟؟ برای میکروفن نیست دوست من. برای MISO است (تقسیم کننده مقاومتیه ؟؟؟)


                    2) از خروجی AUD-OUT تا ورودی تقیوت کننده LM386 هیچ خازنی نزاشتم. ایراد داره؟ (مدار با Gain دویست رو از دیتاشیت LM386 بستم)

                    آخر تغذیه LM386 چند باشه ؟؟؟ 5 ولته میکرو یا 3 ولته ISD4004 ؟ کدوم بهتره؟

                    3) تقسیم کننده مقاومتی برای ارتباط دو طرفه چه ایرادی داره؟ برای MMC جواب میده؟ برای ATmega32 معمولی چه کنم؟؟؟
                    یه بار با تقسیم کننده ISD4004 یه چیزایی جواب داد. صدا ضبط نکردا!!! تو رجیستر SPI مقدار 16 رو مینویسه


                    4) تو Status Bits توضیح نداده که این بیتا چه معنایی داره یا حداقل من نمی فهمم
                    مثلا وقتی دستور RECORD رو میدم اگه قبول کنه چه پاسخی میده و اگه نکنه چی؟ و همچنین PLAY
                    مثلا بعد از ارسال دستور RECORD در حالت MSB (پاسخ #3) بهم جواب 16 رو میده . یعنی چی؟؟؟

                    *** :question: فکر کنم کامل مشکلات رو توضیح دادم :arrow: *** (چیچی همه مشکل :surprised: :surprised: :surprised حالا دست شما رو میآ‌بوسه

                    دیدگاه


                      #11
                      پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

                      توی این اپلیکیشن نوت راجع به وصل کردن میکروفون توضیح داده شده : :wow:
                      http://www.nuvoton-usa.com/products/...fs/apbr22a.pdf

                      و توی این یکی چند تا مثال کار با SPI اومده .
                      http://www.nuvoton-usa.com/products/...iefs/an_5a.pdf

                      این هم یه روش برای راه اندازی بلندگوی 8 اهمی با 2n2222 و تغذیه ی 3 ولت
                      http://www.nuvoton-usa.com/products/...fs/apbr21a.pdf

                      حل مشکل 3.3 و 5 ولت .
                      http://www.nuvoton-usa.com/products/...fs/apbr25a.pdf

                      منبع :
                      http://www.nuvoton-usa.com/en/content/view/156/286/

                      من این سایت رو با یه سرچ چند ثانیه ای پیدا کردم . شما هم اگه سرچ کنید مثال های spi هم پیدا میکنید
                      That`s It ...I`m out of here

                      دیدگاه


                        #12
                        پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

                        *** در مورد شکل صفحه 26 توضیح میدید؟؟؟ برای میکروفن نیست دوست من. برای MISO است (تقسیم کننده مقاومتیه ؟؟؟)
                        احتمالا صفحات دیتاشیتی که من دارم با مال شما فرق داره .

                        2) از خروجی AUD-OUT تا ورودی تقیوت کننده LM386 هیچ خازنی نزاشتم. ایراد داره؟ (مدار با Gain دویست رو از دیتاشیت LM386 بستم)

                        آخر تغذیه LM386 چند باشه ؟؟؟ 5 ولته میکرو یا 3 ولته ISD4004 ؟ کدوم بهتره؟
                        مگه ایرادی داره که خازن بزارید .. در هر صورت نباید مشکلی پیش بیاد حتی با تغذیه ی 5 ولت .

                        توی دیتاشیت استاتوس بیت ها توضیح داده شده .
                        That`s It ...I`m out of here

                        دیدگاه


                          #13
                          پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

                          جالبه
                          الان فهمیدم که ISD ها دیگه مال winbond نیست : :cry2:

                          Computer IC, Consumer Electronics IC and Logic Product Foundry of Winbond product lines
                          have been carved out as Nuvoton Technology Corporation on July 1st, 2008.
                          For more information about those products, please click HERE: www.nuvoton.com
                          That`s It ...I`m out of here

                          دیدگاه


                            #14
                            پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

                            از کجا میشه فهمید که ISD4004 سوخته؟؟؟

                            چون تغذیه 3 ولته میکرو رو با LM317 و یک ÷تانسومتر تنظیم کرده بودم که یه بار اندازه گرفتم دیدم 4.2 ولته.

                            با 4.2 ولت می سوزه؟؟؟

                            برای تغذیه چه کار کنم؟

                            دیدگاه


                              #15
                              پاسخ : مشکل در راه اندازی ISD4004 - کمک ?!؟

                              آخر نفهمیدم که گیر کاره من کجاست؟؟؟

                              تنها راهی که امتحان نکردم عوض کردن IC که ندارم

                              داره دیوونم میکنه

                              شیطونه میکه بیخیاله امتحانا بشم بیفتم سره این مداره تا شاخشو بشکونم

                              کسی هم که کمک نمیکنه

                              دیدگاه

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