EngineersGarage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise
You are here: Home / Topics / Servo Program Using TIMER0

Servo Program Using TIMER0

|

Microcontroller › AVR › Servo Program Using TIMER0

  • This topic has 7 replies, 3 voices, and was last updated 7 years, 5 months ago by Jithin David.
Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • March 28, 2013 at 4:52 am #2208
    BhanuKiran Chaluvadi
    Participant

    Hello sir , I have programmed servo using Timer0, Its not Working.I am unable to sort out mistake, Could u please Help me

     

     

    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
     
    volatile uint8_t tot_overflow;
     
    void timer0_init()
    {
    TCCR0  |= (1<<WGM01) | (1<<WGM00) | (1<<CS12) ; // Fast PWM CTC mode, Prescaling of 256.
     
    TCNT0 = 0 ;
    OCR0 = 249;     //This gives us a time period of 4ms.
    TIMSK  |= (1<<OCIE0) ;
    sei();
     
    }
    ISR (TIMER0_COMPA_vect)
    {
    tot_overflow++;
    if(tot_overflow==5)  //5 waves each of time period 4ms= 5*4=20ms
    {
    PORTA |= (1<<PA0) | (1<<PA1) | (1<<PA2) ;
    tot_overflow=0;
    }
     
    }
     
    int main (void)
    {
    DDRA |= (1<<PA0) | (1<<PA1) | (1<<PA2) ;
    timer0_init();
      tot_overflow=0;
    while(1)
    {
    if (TCNT0>=15 && TCNT0<=145 && tot_overflow==0 )
    {
     
     
    if (TCNT0 >= 23 && bit_is_set(PORTA, PINA0)  ) PORTA &= ~(1<<PINA0);
    if (TCNT0 >= 78 && bit_is_set(PORTA, PINA1)  ) PORTA &= ~(1<<PINA1);
    if (TCNT0 >= 133 && bit_is_set(PORTA, PINA2) ) PORTA&= ~(1<<PINA2);
     
    }
    }
     
    }
    March 28, 2013 at 8:02 am #9386
    zaib Akhter
    Participant

    where from this TCNT1 came?????????????

     

    initialized only timer0 and using tcnt1 in main ………

    March 28, 2013 at 8:05 am #9387
    zaib Akhter
    Participant

    TCNT1 is register of TIMER1

     

    so you should either initialize timer1

     

    OR

     

    use TCNT0……………………………….

    March 28, 2013 at 9:36 am #9388
    BhanuKiran Chaluvadi
    Participant

    Unfortunately, i posted it wrongly sir . In the actual program i  used TCNT0 every where. Now i corrected  the program posted above . Could u please help me in finding mistake sir .

    March 28, 2013 at 11:40 am #9391
    zaib Akhter
    Participant

    for Timer0 ……………… ISR (TIMER0_COMP_vect)

    if you are having problem with result then tell what you want… add some discription.

     

    as it is producing some output and able to rotate motor in one direction

    (i have not really work with servo so don’t know much)

    April 2, 2013 at 6:06 pm #9421
    BhanuKiran Chaluvadi
    Participant

     

    Thanks for u r  help sir …I made 2 mistakes

     

    1.Using CS12 for Prescaling which has to be CS02 ;

     

    2. It has to be  ISR(TIMER0_COMP_vect)   not  ISR(TIMER0_COMPA_vect) ;

    April 2, 2013 at 6:08 pm #9422
    BhanuKiran Chaluvadi
    Participant

    /* Here is the actual Working Progam, Controlling Servo Using TIMER0 . SO that we can  use Timer1 for other Purpose */

     

     

    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
     
    volatile uint8_t tot_overflow;
     
    void timer0_init()
    {
    TCCR0  |= (1<<WGM01) | (1<<WGM00) | (1<<CS02) ; // Fast PWM CTC mode, Prescaling of 256
     
    TCNT0 = 0 ;
    OCR0 = 249;
    TIMSK  |= (1<<OCIE0) ;
    sei();
    }
     
    ISR (TIMER0_COMP_vect)
    {
    tot_overflow++;
    if(tot_overflow==5)
    {
    PORTA |= (1<<PA0) | (1<<PA1) | (1<<PA2) ;
    tot_overflow=0;
    }
     
    }
     
    int main (void)
    {
    DDRA |= (1<<PA0) | (1<<PA1) | (1<<PA2) ;
    timer0_init();
      tot_overflow=0;
    while(1)
    {
    if (TCNT0>=15 && TCNT0<=145 && tot_overflow==0)
    {
    if (TCNT0 >= 23 && bit_is_set(PORTA, PINA0)  ) PORTA &= ~(1<<PINA0);
    if (TCNT0 >= 78 && bit_is_set(PORTA, PINA1)  ) PORTA &= ~(1<<PINA1);
    if (TCNT0 >= 133 && bit_is_set(PORTA, PINA2) ) PORTA &= ~(1<<PINA2);
     
    }
    }
     
    }
    November 10, 2018 at 7:46 am #14917
    Jithin David
    Participant

    Hi Bhanu

    In above Program you have used three pins among them which pin used  for servo motor.

  • Author
    Posts
Viewing 8 posts - 1 through 8 (of 8 total)
  • You must be logged in to reply to this topic.
Log In

RSS Recent Posts

  • timing delay code statements using Swordfish April 20, 2026
  • S1MJ ? April 20, 2026
  • Bot checks April 19, 2026
  • Getting into an LED bulb April 19, 2026
  • Understanding reversing polarity at astable multivibrator April 19, 2026

Stay Up To Date

Newsletter Signup
EngineersGarage

Copyright © 2026 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media
Privacy Policy | Advertising | About Us

Search Engineers Garage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise