Want to generate variable pwm

Discussion in 'Embedded Systems and Microcontrollers' started by archangel, Jul 23, 2012.

  1. archangel

    Thread Starter New Member

    Jul 21, 2012
    2
    0
    I am working on a simple circuit consisting of AT89S52 and two push buttons as input. The output is PWM wave to be fed to a load.

    I am stuck at the programing part.



    1. I want to generate PWM output of frequency 3KHz.
    2. When the circuit will be switched on the duty cycle of PWM will be 100%.
    3. If we press increase then the duty cycle of the PWM will increase by 10% of the previous value. (MAX Value of duty cycle is 100% i.e ON condition)
    4. If we press decrease then the duty cycle of the PWM will decrease by 10% of the previous value. (MIN value is 0% i.e OFF condition)
    5. The PWM output should be available at all the time even if we release the button.

    The hardware arrangement is as shown...
     
  2. DumboFixer

    Active Member

    Feb 10, 2009
    219
    34
    Show us what code you have so far, inside code tag, and we can then guide you from there.

    Saying "I am stuck at the programing part" does not give very much information as to what the problem is.
     
  3. archangel

    Thread Starter New Member

    Jul 21, 2012
    2
    0
    The Programing part i have done yet is using 4 push buttons to change d value of PWM output. Now this is the next step in my project design dat i want to do it using only two push buttons to either increase or decrease the duty cycle of the PWM.

    My present program is....

    Code ( (Unknown Language)):
    1.  
    2. #include <reg51.h>
    3. sbit ONE=P2^7;
    4. sbit TWO=P2^6;
    5. sbit THREE=P2^5;
    6. sbit FOUR=P2^4;
    7. sbit FIVE=P2^3;
    8. sbit SIX=P2^2;
    9. sbit SEVEN=P2^1;
    10. sbit EIGHT=P2^0;
    11. sbit MTR=P1^0;
    12. void MSDelay(int value);
    13. void main()
    14. {
    15. unsigned int on,off;
    16. ONE=1;
    17. TWO=1;
    18. THREE=1;
    19. FOUR=1;
    20. FIVE=1;
    21. SIX=1;
    22. SEVEN=1;
    23. EIGHT=1;
    24. while(1)
    25. {            
    26.                 if (ONE==0)
    27.                                 {
    28.                                  FIVE=0;
    29.                                  SIX=1;
    30.                                  SEVEN=1;
    31.                                  EIGHT=1;
    32.                                  while(FIVE==0 && TWO==1 && THREE==1 && FOUR==1)
    33.                                  {
    34.                                   on=2;
    35.                                   off=8;
    36.                                   MTR=1;
    37.                                   MSDelay(on);
    38.                                   MTR=0;
    39.                                   MSDelay(off);
    40.                                  }
    41.                                 }
    42.                 else if (TWO==0)
    43.                                 {
    44.                                  FIVE=1;
    45.                                  SIX=0;
    46.                                  SEVEN=1;
    47.                                  EIGHT=1;
    48.                                  while(SIX==0 && ONE==1 && THREE==1 && FOUR==1)
    49.                                  {
    50.                                   on=3;
    51.                                   off=7;
    52.                                   MTR=1;
    53.                                   MSDelay(on);
    54.                                   MTR=0;
    55.                                   MSDelay(off);
    56.                                  }
    57.                                 }
    58.                 else if (THREE==0)
    59.                                 {
    60.                                  FIVE=1;
    61.                                  SIX=1;
    62.                                  SEVEN=0;
    63.                                  EIGHT=1;
    64.                                  while(SEVEN==0 && ONE==1 && TWO==1 && FOUR==1)
    65.                                  {
    66.                                   on=5;
    67.                                   off=5;
    68.                                   MTR=1;
    69.                                   MSDelay(on);
    70.                                   MTR=0;
    71.                                   MSDelay(off);
    72.                                   }
    73.                                 }
    74.                 else if (FOUR==0)
    75.                                 {
    76.                                  FIVE=1;
    77.                                  SIX=1;
    78.                                  SEVEN=1;
    79.                                  EIGHT=0;
    80.                                  while(EIGHT==0 && ONE==1 && TWO==1 && THREE==1)
    81.                                  {
    82.                                  MTR=1;
    83.                                  }
    84.                  else
    85.                                 {
    86.                                  MTR=1;
    87.                                 }
    88.                 }
    89. }                                                
    90. void MSDelay(int value)
    91. {
    92. int x;
    93. for(x=0;x<=value;x++);
    94. }
    95.  
     
    Last edited by a moderator: Jul 24, 2012
Loading...