اطلاعیه

Collapse
No announcement yet.

برنامه فرکانس مترم درست کار نمیکنه لطفا کمکم کنیدلطفففففا

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

    برنامه فرکانس مترم درست کار نمیکنه لطفا کمکم کنیدلطفففففا

    با سلام
    من یه برنامه تو کدویژن نوشتم واسه تشخیص فرکانس محیط که برای این کار از وقفه استفاده کردم و در تابع وقفه بدین ترتیب پیش رفتم:
    از یک لبه تا لبه ی بعدی تایمر را فعال کردم و مقدار TCNT0را در متغیر M ریختم
    و با فرمول زیر زمان را بدست اوردم و بعد هم فرکانس

    TIME=(N*(M+1))/F
    ولی مشکل اینجاست که تو پروتئوس با کلاکای مختلف یک فرکانس نشون میده
    لطفا به من کمک کنید و بگید اشتباهم کجاست؟
    اینم برنامه:
    /************************************************** ***

    Chip type : ATmega32
    Program type : Application
    Clock frequency : 8.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 512
    ************************************************** ***/

    #include <mega32.h>
    #include <stdlib.h>
    #include <delay.h>
    #asm
    .equ __lcd_port=0x18 ;PORTB
    #endasm
    #include <lcd.h>
    static int i=0;
    long int M;
    int F;
    char*str;
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    i=i+1;
    // Place your code here
    TCNT0=0x03;
    //TCNT0=0B10010011;
    if(i==2)
    {

    i=0;
    TCNT0=M;
    TCNT0=0X00;

    }
    }

    // Declare your global variables here

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

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0xFF;

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

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // 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
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=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
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Rising Edge
    // INT1: Off
    // INT2: Off
    GICR|=0x40;
    MCUCR=0x03;
    MCUCSR=0x00;
    GIFR=0x40;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    lcd_init(16);
    // Global enable interrupts
    #asm("sei&quot

    while (1)
    {
    F=125000/(1+M);
    itoa(F,str);
    lcd_clear();
    lcd_puts(str);
    //delay_ms(100);

    // Place your code here

    };
    }

    #2
    پاسخ : برنامه فرکانس مترم درست کار نمیکنه لطفا کمکم کنیدلطفففففا

    سلام

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



    کد:
    TCNT0=M;
    TCNT0=0X00;
    شما مقدار M رو در TCNT0 قرار دادید و بعد همونو صفر کردید

    کد شما باید به این صورت باشه

    کد:
    M=TCNT0;
    TCNT0=0;


    موفق باشید



    Work with what you have .Never limit yourself by things you could have had

    دیدگاه

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