Home
Microcontrollers
Abbreviations
Useful Tools
Hot Links
Gallery
Feedback

Abbreviations

A B C D
E F G H
I J K L
M N O P
Q R S T
U V W X
  Y Z  

Microcontrollers
Interfacing LED's
Interfacing 7 segment
Multiplexing 7 segments
PWM Basics
Interfacing Relays
Interfacing 4x4 keypad

    PWM or Pulse Width Modulation is an important and essential concept in embedded systems. We can control speed of a motor, brightness of a bulb or a LED etc by supplying a train of pulses. If the pulse has larger ON time i.e. duty cycle, the average voltage supplied will be more, thus if we have connected a motor to the output, its speed increases, if we reduce the pulse width, average voltage supplied is less, thus the speed of the motor decreases. Thus we can digitally control the speed of a motor without the need for an ADC.

    So now we will construct a pulse width modulator using 8051(89s52) to illustrate the concept of PWM I have constructed a simple circuit which is shown below, where a LED or small lamp is connected to the output of microcontroller (you can also connect a small motor or fan with an additional transistor). The microcontroller is programmed such that the brightness of the LED increases for some time, when it reaches maximum brightness, the LED's brightness starts to fade till its brightness is minimum and this continues.

    The program appears to be bigger but it is just replication of first main block with different values loaded in registers. The second program published in the second table uses a concept of lookup tables.

;*************************************************
;
;Program: PWM
;Author: Srikanth
;Website: http://shree-electronics.com/
;Description: Varies brightness of an LED
;connected to any pin of P2 continuously
;
;*************************************************

outp equ P2;
org 0h;

main:mov r4,#0ffh;
up0: mov r0,#100d;
     mov r1,#01d;
     acall out;
     djnz r4,up0;

     mov r4,#0ffh;
up1: mov r0,#90d;
     mov r1,#10d;
     acall out;
     djnz r4,up1;

     mov r4,#0ffh;
up2: mov r0,#80d;
     mov r1,#20d;
     acall out;
     djnz r4,up2;

     mov r4,#0ffh;
up3: mov r0,#70d;
     mov r1,#30d;
     acall out;
     djnz r4,up3;

     mov r4,#0ffh;
up4: mov r0,#60d;
     mov r1,#40d;
     acall out;
     djnz r4,up4;

     mov r4,#0ffh;
up5: mov r0,#50d;
     mov r1,#50d;
     acall out;
     djnz r4,up5;

     mov r4,#0ffh;
up6: mov r0,#40d;
     mov r1,#60d;
     acall out;
     djnz r4,up6;

     mov r4,#0ffh;
up7: mov r0,#30d;
     mov r1,#70d;
     acall out;
     djnz r4,up7;

     mov r4,#0ffh;
up8: mov r0,#20d;
     mov r1,#80d;
     acall out;
     djnz r4,up8;


     mov r4,#0ffh;
up9: mov r0,#10d;
     mov r1,#90d;
     acall out;
     djnz r4,up9;


      mov r4,#0ffh;
up11: mov r0,#10d;
      mov r1,#90d;
      acall out;
      djnz r4,up11;

      mov r4,#0ffh;
up12: mov r0,#20d;
      mov r1,#80d;
      acall out;
      djnz r4,up12;

      mov r4,#0ffh;
up13: mov r0,#30d;
      mov r1,#70d;
      acall out;
      djnz r4,up13;

      mov r4,#0ffh;
up14: mov r0,#40d;
      mov r1,#60d;
      acall out;
      djnz r4,up14;

      mov r4,#0ffh;
up15: mov r0,#50d;
      mov r1,#50d;
      acall out;
      djnz r4,up15;

      mov r4,#0ffh;
up16: mov r0,#60d;
      mov r1,#40d;
      acall out;
      djnz r4,up16;

      mov r4,#0ffh;
up17: mov r0,#70d;
      mov r1,#30d;
      acall out;
      djnz r4,up17;

      mov r4,#0ffh;
up18: mov r0,#80d;
      mov r1,#20d;
      acall out;
      djnz r4,up18;

      mov r4,#0ffh;
up19: mov r0,#90d;
      mov r1,#10d;
      acall out;
      djnz r4,up19;

      mov r4,#0ffh;
up20: mov r0,#100d;
      mov r1,#01d;
      acall out;
      djnz r4,up20;

      ajmp main;

**************************************************

out: mov outp,#0ffh;
     djnz r0,out;
out1:mov outp,#00h;
     djnz r1,out1;

ret;

**************************************************

end;

Program using lookup tables.

;*************************************************
;
;Program: PWM
;Author: Srikanth
;Website: http://shree-electronics.com/
;Description: Varies brightness of an LED
;connected to any pin of P2 continuously
;
;*************************************************

outp equ P0;
org 0h;

main:mov dptr,#pwm_data;
     clr a;
     movc a,@a+dptr;
     mov r2,a;
     inc dptr;
up:  clr a;
     movc a,@a+dptr;
     mov 40h,a;
     clr a;
     inc dptr;
     movc a,@a+dptr;
     mov 41h,a;
     inc dptr;
     acall out;
     djnz r2,up;
     sjmp main;

;*************************************************

out: mov r4,#02h
lp0: mov r3,#0ffh
lp:  mov r0,40h;
     mov r1,41h;
lp1: mov outp,#0ffh;
     djnz r0,lp1;
lp2: mov outp,#00h;
     djnz r1,lp2;
     djnz r3,lp;
     djnz r4,lp0;
     ret;

;*************************************************
;Lookup table
pwm_data: db 15h ;no of elements in the
     db 100d,001d;lookup table
     db 090d,010d;
     db 080d,020d;each element consisting
     db 070d,030d;of 2 bytes
     db 060d,040d;
     db 050d,050d;first byte is value
     db 040d,060d;for ON period
     db 030d,070d;second byte is value
     db 020d,080d;for OFF period
     db 010d,090d;
     db 001d,100d;
     db 010d,090d;
     db 020d,080d;
     db 030d,071d;
     db 040d,060d;
     db 050d,050d;
     db 060d,040d;
     db 070d,030d;
     db 080d,020d;
     db 090d,010d;
     db 100d,001d;

;*************************************************

end;
 

 

BACK

Custom Search

  

 

Home | Microcontrollers | Abbreviations | Useful Tools | Hot Links | Gallery | Feedback

Microcontrollers | Interfacing LED's | Interfacing 7 segment | Multiplexing 7 segments | PWM Basics | Interfacing Relays | Interfacing 4x4 keypad

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

Email: feedback@shree-electronics.com, Feel free to link to this site.

Disclaimer : I have taken utmost care while composing this site. But neither the author himself nor any of the linked sites can be held responsible for any missing or inaccurate information.

© copyright Srikanth 2008.