اطلاعیه

Collapse
No announcement yet.

مشکل با تایمر یک

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

    مشکل با تایمر یک

    سلام

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

    مانند شکل پایین و اون زرده مثلا اوپتوکانتر ماست ولی هر چقدر کلید را فشار میدم هیچ تاثیری نداره


    وبرنامه اش هم این پایینه
    کد:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 9/7/2014
    Author : Techno-Electro
    Company : If You Like This Software,Buy It
    Comments: 
    
    
    Chip type        : ATmega8
    Program type      : Application
    AVR Core Clock frequency: 16.000000 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 256
    *****************************************************/
    #include <mega8.h>
     #include <delay.h>
    #include <ctype.h>
    // Standard Input/Output functions
    #include <stdio.h>
     int a;
    int b,c,d,set;
    int k=0;
    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
     a++ ;
    
    }
    
    // Timer1 output compare A interrupt service routine
    interrupt [TIM1_COMPA] void timer1_compa_isr(void)
    {
    // Place your code here
    b=TCNT0+a*256; 
     printf("Deept:%iCM", b);
         set=toascii(12);
        putchar(set);
    }
    
    // Declare your global variables here
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // 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=0x00;
    
    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // 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: T0 pin Rising Edge
    TCCR0=0x07;
    TCNT0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: On
    // 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: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x11;
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x67;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
       {
       printf("Deept:%iCM", b);
         set=toascii(12);
        putchar(set);
    
       }
    }

    #2
    پاسخ : مشکل با تایمر یک

    والا من هیچ ارتباطی بین شماتیک و برنامه و توضیحات شما ندیدم...
    دور موتور با PWM به قول شما تایمر کنترل میشه و خود PWM با رجیستر OCR .
    خلاصه اون کلید که گذاشتی باید یه جایی چک بشه و یه مقادیری بالا پایین بشن داخل OCR تا شکل موج خروجی تغییر پیدا کنه.
    پیشنهاد می کنم ابتدا منابع اموزشی موجود رو چک کنید.
    موفق باشید
    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : مشکل با تایمر یک

      سلام دوست عزیز.
      زمانی که شما کلید را می زنید پایه میکرو به زمین متصل می شود. یعنی شما یک لبه پایین رونده دارید.باید در نظر داشته باشید که این پایه در حالت عادی در سطح مثبت است.بنابراین شما باید تایمر /کانتر خود را در حالت کانتر تنظیم کنید.در این حالت کانتر به دو صورت است.1- حساس به لبه بالا رونده 2- حساس به لبه پایین رونده.طبق مدار شما باید به صور پایین رونده تنظیم شود .در این صورت با زدن کلید در برنامه یک مقدار به عدد کانتر شما اضافه می شود.اگر باز هم مشکل داشتید بنده هم پیشنهاد می کنم که به صورت اصولی و کامل مبحث تایمر / کانتر را مورد بررسی قرار دهید.این قسمت از میکرو در بسیاری از پروژه های حرفه ای مورد استفاده قرار می گیرد.

      دیدگاه

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