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
8051 Serial port

    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     ;Set duty cycle
     mov r1,#01d
     acall out        ;light up LED
     djnz r4,up0      ;loop for dome time

     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        ;Loop

**************************************************
;Out subroutine
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 ;load pointer for lookup table
     clr a
     movc a,@a+dptr
     mov r2,a
     inc dptr
up:  clr a
     movc a,@a+dptr
     mov 40h,a          ;ON period
     clr a
     inc dptr
     movc a,@a+dptr
     mov 41h,a          ;OFF period
     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 | 8051 Serial port

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.