اطلاعیه

Collapse
No announcement yet.

آی سی ضبط صدا ISD4004-8M - تست شده

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

    #31
    پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

    بابا برقی تشکر بابت این که وقت میذاری و جواب سوالات رو میدی :applause: :applause: :applause:

    باز هم یه سوال ، من یه صدا به کدت 60 ثانیه روی آیسی ضبط کردم حالا اگه بخام ثانیه 55 از این صدا رو بخونم باید چه مقداری رو واسه آیسی ارسال کنم (من مقدار 51 رو داخل SPCR ریختم)
    واسه ضبطش از این دستورات واسه شروع از آدرس 0 استفاده کردم
    کد:
    spi(0x00);
        spi(0x00);
        spi(SETREC);
    حالا میخام از ثانیه 55 شروع به پخش کنه چند باید بفرستم ؟ oo: oo: oo:
    طبق مشخصات دستگاه هر خونه حافظه 200 میلی ثانیه جا داره با این حساب باید از خونه 275 شروع کنه که کد هگزش میشه 113 ، حالا اگه باید به صورت زیر بفرستم که نشد و از آدرس 13 هگز شروع میکنه یعنی بایت دوم ارسالی رو یا در نظر نمیگیره یا به طور کل من در مورد آدرس دهی دارم اشتباه میکنم
    کد:
    spi(0x13);
        spi(0x01);
        spi(SETPLAY);
    حالا نظرتون چیه؟

    دیدگاه


      #32
      پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

      نوشته اصلی توسط hamidchi
      بابا برقی تشکر بابت این که وقت میذاری و جواب سوالات رو میدی :applause: :applause: :applause:

      باز هم یه سوال ، من یه صدا به کدت 60 ثانیه روی آیسی ضبط کردم حالا اگه بخام ثانیه 55 از این صدا رو بخونم باید چه مقداری رو واسه آیسی ارسال کنم (من مقدار 51 رو داخل SPCR ریختم)
      واسه ضبطش از این دستورات واسه شروع از آدرس 0 استفاده کردم
      کد:
      spi(0x00);
          spi(0x00);
          spi(SETREC);
      حالا میخام از ثانیه 55 شروع به پخش کنه چند باید بفرستم ؟ oo: oo: oo:
      طبق مشخصات دستگاه هر خونه حافظه 200 میلی ثانیه جا داره با این حساب باید از خونه 275 شروع کنه که کد هگزش میشه 113 ، حالا اگه باید به صورت زیر بفرستم که نشد و از آدرس 13 هگز شروع میکنه یعنی بایت دوم ارسالی رو یا در نظر نمیگیره یا به طور کل من در مورد آدرس دهی دارم اشتباه میکنم
      کد:
      spi(0x13);
          spi(0x01);
          spi(SETPLAY);
      حالا نظرتون چیه؟
      نظریه قبلی که دادم نقض شد الان 113 هگز رو به صورت
      کد:
      [code]spi(0x13);
          spi(0x01);
          spi(SETPLAY);
      [/code]

      وارد کردم ولی از ثانیه 40 شروع به خوندن کرد :eek: :eek: :eek:

      so what's your idea :question:

      دیدگاه


        #33
        پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

        کلا من با اون بایت دوم ارسالی مشکل دارم یا میشه گفت با اون آدرس هایی که بیشتر از دو بایت هستند
        خاهشا راهنمایی کنید :angry: :angry: :angry:

        دیدگاه


          #34
          پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

          :wow: :wow: :wow: :applause: :applause: :applause:

          واقعا جا داره از خودم تشکر کنم :redface: :redface: مشکل آدرس دهی حل شد
          در واقع مشکل اصلی این بود که مقدار SPCR برابر با 51 بود که باعث میشد در حالت MSB FIRST باشه و بیت پر ارزش رو اول بفرسته یعنی بیت پر ارزشی که من به عنوان آدرس قرار میدادم به عنوان کم ارزش ترین بیت ارسال میشد و به نوعی هر عددی (باینری در نظر بگیرید)میفرستادم به جای اینکه از راست به چپ خونده بشه از چپ به راست خونده میشد :agree:
          واسه این که این مشکل حل بشه هم مقدار SPCR رو 71 قرار دادم و دستورات آیسی رو هم دوباره به حالت معکوس درآوردم یعنی اولش این طوری بود

          کد:
          #define   POWERUP     0b00000100
          #define   SETPLAY     0b00000111
          #define   PLAY      0b00001111
          #define   SETREC     0b00000101
          #define   REC       0b00001101
          #define   STOPPWRDN    0b00001000
          #define   STOP      0b00001100
          که با توجه به مقدار SPCR=71 باید به صورت زیر در میومد

          کد:
          #define   POWERUP     0b00100000
          #define   SETPLAY     0b11100000
          #define   PLAY      0b11110000
          #define   SETREC     0b10100000
          #define   REC       0b10110000
          #define   STOPPWRDN    0b00010000
          #define   STOP      0b00110000
          و با این آدرس دهی اوکی شد :job: :job: :smile:
          البته در حالت قبل هم میشد کار کرد ولی هر عددی محاسبه میکردم باید از چپ به راست معکوس میکردم

          یه بار دیگه نحوه محاسبه رو که دوستمون هم تو یکی از صفحات گفته بودن میگم:

          مثلا شما میخاین از ثانیه 56 شروع به ضبط یا پخش کنید ،باید 56 رو در 5 ضرب کنید (چون هر خونه از حافظه آیسی 200 میلی ثانیه ( یک پنجم ثانیه )صدا ضبط میکنه ) با این حساب که 56*5=280 یعنی شما باید از خونه شماره 280 شروع به ضبط یا پخش کنید حالا باید 280 رو به کد هگز تبدیل کنید که میشه 0x0118 که جون بیشتر از یک بایت هست باید در قالب دو بایت ارسال بشه ،ابتدا 18 رو ارسال کنید سپس 01 رو به این صورت

          کد:
          spi(0x18);
              spi(0x01);
          that's it

          ببخشید توضیحات زیاد شد ولی فکر کنم به درد بخور باشه واسه اونایی که موقع کار با آیسی به این جور مشکلات بر میخورن :agree: :agree:

          دیدگاه


            #35
            پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

            یه مورد دیگه رو هم بگم که جا داره دوباره به خاطر اون از بابا برقی تشکر کنم :applause: :applause:

            طبق عکسی که ایشون گذاشته بودن من پایه ANA IN منفی رو با یه خازن زمین کردم و همین طور یکی از سیمهایی که از اسپیکر کامپیوتر داشتم رو به زمین مدار وصل کردم و اون یکی سیم رو با یه خازن و مقاومت به ANA IN مثبت وصل کردم که مقدار نویز کمتر شد :job:
            فکر کنم یه مقدار نویزی هم که داره به خاطر این بود که موقع ضبط ولوم صدا کمی بالا بوده چون وقتایی که صدا تون پایینی داشت تقریبا نویزی نداشتم :wow: :wow:

            تقریبا کارم با این آیسی داره تموم میشه البته اگه به مشکلی برنخورم... :read: :read:
            بعدش برنامه رو میذارم

            دیدگاه


              #36
              پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

              سلام ، برنامه رو که نوشته بودمو میذارم
              برنامه با atmega8 هست و برای ضبط و پخش از یک آدرس در نظر گرفته شده که میتونید خودتون گسترشش بدید

              کد:
              #include <mega8.h>
              #include <delay.h>
              #include <stdio.h>
              
              
              // SPI functions
              #include <spi.h>
              
              // Declare your global variables here
              #define   POWERUP     0b00100000
              #define   SETPLAY     0b11100000
              #define   PLAY      0b11110000
              #define   SETREC     0b10100000
              #define   REC       0b10110000
              #define   STOPPWRDN    0b00010000
              #define   STOP      0b00110000
              #define   LED_play    PORTD.7  
              #define   LED_rec     PORTD.6
              #define   stop_key    PINC.4
              #define   rec       PINC.5                   
              #define   play      PINC.3
              #define   slave_select  PORTB.2
              
              
              
               
               
              void ss_before(void);
              void ss_after (void);
              void stoppr (void);
              
              
              
              unsigned char adress_lsb;
              unsigned char adress_msb;
              int i;
              
              
              void main(void)
              {
              
              PORTB=0x00;
              DDRB=0x2C;
              
              
              PORTC=0x38;
              DDRC=0x01;
              
               
              PORTD=0x00;
              DDRD=0xC0;
              
              
              TCCR0=0x00;
              TCNT0=0x00;
              
              
              TCCR1A=0x00;
              TCCR1B=0x00;
              TCNT1H=0x00;
              TCNT1L=0x00;
              ICR1H=0x00;
              ICR1L=0x00;
              OCR1AH=0x00;
              OCR1AL=0x00;
              OCR1BH=0x00;
              OCR1BL=0x00;
              
              
              ASSR=0x00;
              TCCR2=0x00;
              TCNT2=0x00;
              OCR2=0x00;
              
              
              GICR|=0x40;
              MCUCR=0x02;
              GIFR=0x40;
              
              
              
              TIMSK=0x00;
              
              
              UCSRB=0x00;
              
              
              ADCSRA=0x00;
              
              
              ACSR=0x80;
              SFIOR=0x00;
              
              
              SPCR=0x71;
              SPSR=0x00;
              
              adress_lsb=0;
              adress_msb=0;
              while (1)
                 {
              
                  if(play==0)
                  {
                  if(stop_key==0) break; 
                   
                  LED_play=1;
                  LED_rec=0;
                   
                  ss_before();
                  spi(POWERUP); 
                  ss_after();
                  delay_ms(25);
                  
                  ss_before();
                  spi(0x00);
                  spi(0x00);
                  spi(SETPLAY);
                  ss_after();
                  
                  ss_before();
                  spi(PLAY);
                  ss_after();
                   
                  for(i=0;i<3290;i++)
                  {
                    if(stop_key==0) break;
                    delay_ms(10);
                  }
                  LED_play=0;
                  stoppr (); 
              
                  } 
                  if(rec==0) 
                  {
                   if(stop_key==0) break;
                   
                  LED_play=0;
                  LED_rec=1;
                   
                  ss_before();
                  spi(POWERUP); 
                  ss_after();
                  delay_ms(25);
                  
                  
                  ss_before();
                  spi(POWERUP);
                  ss_after();
                  delay_ms(50);
                  
                  ss_before();
                  spi(0x2C);
                  spi(0x01);
                  spi(SETREC);
                  ss_after();
                  
                  ss_before();
                  spi(REC);
                  ss_after();
                   
                  for(i=0;i<1643;i++) // record for 1 minute by i<1643 (1 second = 27 "i")
                  {
                    if(stop_key==0) break;
                    delay_ms(10);
                  }
                  LED_rec=0;
                  stoppr ();
                  
                  }
                  
              
              
                  delay_ms(1);
                 };
              }
              
              void ss_before(void)
              { 
                slave_select=1;
                delay_us(1000);
                slave_select=0;
                delay_us(1000);
                return;  
              }
              
              
              void ss_after(void)
              { 
                slave_select=0;
                delay_us(1000);
                slave_select=1;
                delay_us(1000);
                return;
              }
              
              
                 
              void stoppr (void)
              { 
                  ss_before();
                  spi(STOP); 
                  ss_after(); 
                  
                  delay_ms(80); 
                  return;    
              }
              داخل قسمت مربوط به پخش (play) با توجه به مقدار 0x0000 که ارسال شده پخش از خونه اول حافظه شروع میشه و در قسمت ضبط (REC) با توجه به مقدار 0x012C ;i که ارسال شده و معادل دهدهی 300 میباشد ، ضبط صدا از خونه 300 در حافظه آیسی isd شروع میشه یعنی از ثانیه 60 (هر خونه حافظه 200 میلی ثانیه)

              در قسمت پخش (PLAY) پخش صدا به مدت 2 دقیقه طول خواهد کشید ، شما میتونید این 2 دقیقه رو با کم یا زیاد کردن شمارش داخل حلقه تغییر بدید که برای 2 دقیقه طبق برنامه و تاخیرهای اعمال شده عددش میشه 3290
              تقریبا هر 1 ثانیه میشه 27 تا
              در قسمت ضیط هم 1643 قرار دادم که تقریبا معادل 60 ثانیه هس

              اگر هم خواستید در زمان پخش یا ضبط صدا این کار ها رو متوقف کنید و کل زمان حلقه رو منتظر نشید از کلید stop-key که روی pinc.4 (پایه 27 در ات مگا 8) هست استفاده کنید :applause: :applause:

              موفق باشید
              :job: :job:

              دیدگاه


                #37
                پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                سلام. :bye
                من می خوام با ISD4004 کار کنم ولی از نوع 16m و به زبان بیسیک.
                برنامه و نقشه در سایت یزدکیت اومده.توی انجمن هم که کارشده ولی اکثر از نوع 8m استفاده شده.
                انشاالله تا یکشنبه ic بدستم میرسه و شروع می کنم.
                نتیجه رو هم اکه برسم به عنوان یه پروژه آماده میزارم توی انجمن که همه استفاده کنن.
                از "بابا برقی"عزیز هم متشکرم.
                انا لله و انا الیه الراجعون

                دیدگاه


                  #38
                  پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                  نوشته اصلی توسط شاهین شرق
                  سلام. :bye
                  من می خوام با ISD4004 کار کنم ولی از نوع 16m و به زبان بیسیک.
                  برنامه و نقشه در سایت یزدکیت اومده.توی انجمن هم که کارشده ولی اکثر از نوع 8m استفاده شده.
                  انشاالله تا یکشنبه ic بدستم میرسه و شروع می کنم.
                  نتیجه رو هم اکه برسم به عنوان یه پروژه آماده میزارم توی انجمن که همه استفاده کنن.
                  از "بابا برقی"عزیز هم متشکرم.
                  سلام
                  خیلی خوبه
                  البته نوع 8M,16M از لحاظ راه اندازی هیچ فرق خاصی با هم ندارن
                  wink:
                  اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                  دیدگاه


                    #39
                    پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                    صدا پخش شده از مدار من بسیار با نویز است و البته دامنه صدای من بسیار پایین است و وقتیکه می خواهم صدا بهتری داشته باشم باید موقع ضبط صدا داد بزنم و موقع پخش این صدا همیشه یه نویز خیلی زیادی دارم
                    مدار رو مثل همون شماتیک گفته شده در صفحه قبل بستم
                    به نظر شماها مشکل از کجاست ؟

                    دیدگاه


                      #40
                      پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                      نوشته اصلی توسط داریوش عباسی
                      صدا پخش شده از مدار من بسیار با نویز است و البته دامنه صدای من بسیار پایین است و وقتیکه می خواهم صدا بهتری داشته باشم باید موقع ضبط صدا داد بزنم و موقع پخش این صدا همیشه یه نویز خیلی زیادی دارم
                      مدار رو مثل همون شماتیک گفته شده در صفحه قبل بستم
                      به نظر شماها مشکل از کجاست ؟
                      سلام
                      سخت افزارتون رو یکبار دیگه با دقت بیشتری چک کنید، ایرادتون توی سخت افزاره
                      اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                      دیدگاه


                        #41
                        پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                        البته سخت افزارم رو چک کردم و همه چیز درسته
                        مگر خارنی چیزی در باطنش مشکل داشته باشه !
                        در مورد ارتباط spi آیا اتصال مستیقیم پایه ها بین میکرو و isd4004 باتوجه به اینکه تغذیه های مثبت یکسانی ندارند مشکلی ایجاد نمی کنه ؟
                        همانطور که گفتم من مدار رو طبق همون نقشه صفحه قبل کشیدم ولی صدا اصلا کاملا ناواضح است و پ امپ و خود isd4004 را عوض کردم ولی مشکل حل نشده

                        دیدگاه


                          #42
                          پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                          نوشته اصلی توسط داریوش عباسی
                          البته سخت افزارم رو چک کردم و همه چیز درسته
                          مگر خارنی چیزی در باطنش مشکل داشته باشه !
                          در مورد ارتباط spi آیا اتصال مستیقیم پایه ها بین میکرو و isd4004 باتوجه به اینکه تغذیه های مثبت یکسانی ندارند مشکلی ایجاد نمی کنه ؟
                          همانطور که گفتم من مدار رو طبق همون نقشه صفحه قبل کشیدم ولی صدا اصلا کاملا ناواضح است و پ امپ و خود isd4004 را عوض کردم ولی مشکل حل نشده
                          سلام
                          نه، اختلاف ولتاژ مشکلی ایجاد نمیکنه، داخل دیتاشیت هم ذکر شده

                          من هم یادمه دفعه اولی که بستم همچین مشکلی بود، اما حقیقتش یادم نمیاد چجوری رفعش کردم :redface: اما یادم lm خیلی حساس بود و به خازن و ایناش که دست میزدی کلی نویز ایجاد میکرد، پتانسیومترش هم همینطور، البته اینایی که میگم روی برد برد بود، بعدش روی هزار سوراخ که بستم فکر میکنم مشکلاتش مرتفع شد.

                          اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                          دیدگاه


                            #43
                            پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                            مشکلم حل شد گفتم اینجا علتش رو بگم شاید برای کسی هم پیش اومد بعدا
                            تغذیه 3.3 ولت بود که خوب نبود و ریپلهای زیادی داشت با اسیلوسکوپ دیدمش و با گذاشتن خازن بزرگ 2200 میکروفاراد درست شد .

                            دیدگاه


                              #44
                              پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                              همانطور که گفتم مشکل من حل شد و من در آدرسهای مختلف فایلهای صوتی خودم رو ضبط کردم
                              البته اینکار برای من چند روز طول کشید و هر قسمت رو بعد از کنترل و پخش و اطمینان از کیفیت آن ظبط شده فرض می کردم و البته در آخر هم تمام صداها را تک تک چک کردم و هیچ مشکلی نداشت .
                              الان بعد از چند روز بعضی از این قسمتهایی که ذخیره کردم در حین پخش پایه int فعال می شه و اون قسمت صدا پخش نمیشه!
                              البته EOM یا OVF رو درست نمی دونم چی هستند ولی من این قسمتهای صوتی رو قبلا تست کرده بودم
                              پخش توسط تابع ذیل انجام می شود و ظبط هم مشابه همان است :
                              void play_sound(unsigned char low,unsigned char high,unsigned int dly)
                              {
                              PORTB.4=0;
                              spi(POWERUP);
                              PORTB.4=1;
                              delay_ms(50);
                              PORTB.4=0;
                              spi(low);
                              spi(high);
                              spi(SETPLAY);
                              PORTB.4=1;
                              delay_ms(dly);
                              PORTB.4=0;
                              spi(STOP);
                              PORTB.4=1;
                              delay_ms(50);
                              }
                              که dly زمان ظبط است .
                              لطفا به من بگید اشکال کار کجاست ؟

                              دیدگاه


                                #45
                                پاسخ : آی سی ضبط صدا ISD4004-8M - تست شده

                                بابا برقی خواهش می کنم کمکم کنید

                                دیدگاه

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