نمایش نتایج 1 تا 4 از 4

نام تاپیک: استفاده از تایمر1 برای تولید صدا

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    بابل
    پست
    281

    استفاده از تایمر1 برای تولید صدا

    با سلام

    کد زیر مربوط به برنامه تولید صدا هست که از تایمر1 مد مقایسه ایش استفاده می کنه ولی دقیقا نمی دونم چطوری؟ممکنه یه نفر توضیح بده؟(منظورم اینه که چه عاملی (متغیری) در تایمر باعث ایجاد صدا میشه با توجه به کد)

    با تشکر
      /* This header file declares the internal
    register addresses for Atmega 8535 */
    #include "io8535.h"

    #define OCIE1A TIMSK_Bit4
    #define I SREG_Bit7
    #define DDD5 DDRD_Bit5
    #define PD5 PORTD_Bit5

    // Declare variables
    unsigned char COUNT;
    // Timer1 Compare Match Handler
    #pragma vector = TIMER1_COMPA_vect
    __interrupt void COMP_A(void)
    {
    COUNT--; // COUNT-1
    }
    // Main
    void main(void)
    {
    unsigned char i;
    DDD5 = 1; // Set PD5 output
    PD5 = 1; // speaker off
    // TCNT1H = TCNT1L = 0
    TCNT1H = 0;
    TCNT1L = 0;
    TCCR1A = 0x40;; // Toggle OC1A on Compare match
    OCIE1A = 1; // Enable Timer 1 Compare match A
    I = 1; // Set global interrupt interrupt
    do{
    for (i=0; i < 20 ; i++){
    // 480[Hz]/2
    OCR1AH = 15360 >> 8;
    OCR1AL = 15360 & 0x00ff;
    TCCR1B = 0x09;
    COUNT = 24; // 480[Hz]
    while(COUNT != 0); // Wait for interrupt
    // 320[Hz]/2
    OCR1AH = 23040 >> 8;
    OCR1AL = 23040 & 0x00ff;
    COUNT = 16; // 320[Hz]
    while(COUNT != 0); // Wait for interrupt
    }
    // Wait 2 seconds
    OCR1AH = 0xff;
    OCR1AL = 0xff;
    TCCR1A = 0;
    COUNT = 113;
    while(COUNT != 0); // Wait for interrupt
    TCCR1A = 0x40; // Toggle OC1A on Compare match
    }while(1);
    }

  2. #2
    کاربر جدید آواتار sharin
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    ايران
    پست
    22

    نقل قول: استفاده از تایمر1 برای تولید صدا

    اينجا دارهه يه شكل موجي با فركانس هاي مختلف درست مي كنه .
    هر سيگنالي كه به اسپيكر و ... مي دي ، با تغيير فركانس صداش تغيير مي كنه .
    الان هم در حلقه ي اصلي برنامه ، با مقدار دهي به تايمر و ريجستر ها و نتظيم count در هر قسمت ، در واقع دارهه فركانس هاي مختلف براي توليد صدا هاي مختلف درست مي كنه و شكل موج حاصل از عملكرد تايمر به اسپيكر مي رسه ...
    در خود كد ها هم توضيحات هست و همه چيز واضح هست ديگه ...

    موفق باشيد.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    بابل
    پست
    281

    نقل قول: استفاده از تایمر1 برای تولید صدا

    پس اگر بخوام صداهای مختلفی تولید کنم فقط باید فرکانس مورد نظرم رو بریزم تو متغیر count؟مثلا اگر بخواهم یه صدایی مثل آژیر تولید کنم اگر یه حلقه for دیگه در حلقه اصلی main قرار بدم و به count هم یه مقدار دلخواه دیگه بدهم همچین صدایی تولید می شود؟

  4. #4
    کاربر جدید آواتار sharin
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    ايران
    پست
    22

    نقل قول: استفاده از تایمر1 برای تولید صدا

    فركانس مورد نظر رو در count نمي ريزيد !
    مثلا به سبكي كه بالا كد زده ، مقدار 16 براي count فركانس 320Hz رو مي سازهه ...

    به سبك خودش كد بزنيد و البته مقادير count رو خيلي ديمي نديد ، فركانسش رو حساب كنيد كه از حد توان شنوايي ما بيشتر نشه ...
    و ...
    كلا چند بار تست كنيد.

    موفق باشيد.

تاپیک های مشابه

  1. پاسخ: 1
    آخرین پست: پنج شنبه 06 اسفند 1388, 17:01 عصر
  2. چه کنترلی برای پخش صدا و فیلم استفاده کنم؟
    نوشته شده توسط soghra در بخش ASP.NET Web Forms
    پاسخ: 10
    آخرین پست: شنبه 20 بهمن 1386, 14:13 عصر
  3. استفاده از xml برای تولید صفحات html
    نوشته شده توسط worldsat در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: چهارشنبه 17 خرداد 1385, 16:11 عصر
  4. استفاده از توابع تولید صدا
    نوشته شده توسط مجتب&#1740; سلطان در بخش برنامه نویسی در 6 VB
    پاسخ: 11
    آخرین پست: پنج شنبه 13 اسفند 1383, 02:52 صبح

قوانین ایجاد تاپیک در تالار

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