• No results found

LED฀Indicators

In฀learning฀how฀to฀programming฀a฀PC฀in฀a฀high฀level฀lan-guage,฀the฀traditional฀first฀program฀writes฀“Hello฀World”฀to฀

the฀screen.฀Since฀PICs฀don’t฀have฀a฀screen,฀the฀first฀MBasic฀

program฀traditionally฀blinks฀an฀LED.฀We’ll฀do฀that฀idea฀one฀

better,฀building฀up฀to฀four฀states฀with฀one฀LED฀and฀one฀PIC฀

pin.฀But,฀first฀we’ll฀start฀with฀two฀LEDs฀and฀two฀pins฀as฀

shown฀in฀Figure฀3-7.

Figure฀3-6:฀Possible฀switching฀configurations.

Figure฀3-7:฀LED฀connections.

Program฀3-1

i฀ var฀ byte

For฀i฀=฀B0฀to฀B1฀ ;LEDs฀are฀on฀B0…B1

฀฀฀฀Output฀I฀ ;so฀we฀make฀them฀outputs Next

Main

For฀i฀=฀B0฀to฀B1฀ ;some฀will฀illuminate฀with฀a฀low

฀฀฀฀Low฀i

Next

Pause฀1000

For฀i฀=฀B0฀to฀B1฀ ;some฀will฀illuminate฀with฀a฀high

High฀i

Next

Pause฀1000 GoTo฀Main

End

The฀code฀is฀straightforward;฀After฀declaring฀our฀index฀variable฀i,฀we฀set฀pins฀RB0…RB1฀to฀be฀outputs฀with฀

the฀Output฀procedure฀inside฀a฀For…Next฀loop.฀The฀Output(i)฀ procedure฀takes฀the฀pin฀address฀as฀its฀argu-ment,฀with฀i฀ranging฀from฀B0฀to฀B1,฀pre-defined฀in฀MBasic฀as฀the฀numerical฀addresses฀of฀pins฀RB0…RB1.฀

We฀then฀set฀these฀pins฀to฀alternate฀between฀low฀and฀high,฀with฀1฀second฀(1,000฀milliseconds)฀in฀each฀state฀

using฀MBasic’s฀High฀and฀Low฀procedures฀inside฀two฀For…Next฀loops,฀each฀followed฀by฀a฀Pause(1000)฀ procedure.฀An฀endless฀loop฀(Main…GoTo฀Main)฀causes฀the฀alternating฀high/

low฀steps฀to฀be฀repeated.

D1฀illuminated฀when฀RB0฀low—When฀RB0฀goes฀low,฀current฀from฀the฀+5฀V฀

supply฀goes฀through฀series฀combination฀of฀LED฀D1,฀resistor฀R3฀and฀the฀

internal฀resistance฀of฀RB0.฀LEDs฀may฀be฀regarded฀as฀a฀device฀that฀have฀

approximately฀a฀constant฀voltage฀drop฀for฀typical฀operating฀currents฀in฀the฀

range฀from฀1฀mA฀to฀tens฀of฀mA.฀Figure฀3-8฀illustrates,฀for฀current฀levels฀

between฀1฀and฀50฀mA,฀the฀LED’s฀voltage฀drop฀is฀between฀1.7฀and฀2.2฀V.฀

With฀only฀a฀small฀error,฀we฀may฀regard฀the฀LED฀as฀a฀constant฀voltage฀de-vice,฀with฀about฀a฀2฀V฀drop.฀(There’s฀a฀slight฀difference฀in฀voltage฀drop฀for฀

different฀output฀colors,฀but฀for฀almost฀all฀red,฀green฀and฀yellow฀LEDs,฀we฀

may฀calculate฀the฀current฀limiting฀resistors฀assuming฀a฀2฀volts฀drop.)฀

We฀may฀now฀solve฀the฀current฀loop฀equation฀for฀the฀circuit฀involving฀D1,฀re-membering฀that฀a฀low฀pin฀is฀functionally฀equivalent฀to฀a฀25฀ohm฀resistor:

฀ ฀ 5V฀=฀2V฀+฀250I฀+฀25I฀

rearranging฀

฀ ฀ 5V฀–฀2V฀+฀250I฀+฀25I฀฀฀so฀฀฀3V฀=฀275I

or

฀ ฀ I= 3 = mA

275 10 9.

Where฀I฀is฀the฀current฀through฀the฀LED฀and฀series฀resistor.฀฀

More฀often,฀we฀wish฀to฀calculate฀the฀series฀current฀limiting฀resistor฀needed฀for฀a฀particular฀LED฀current฀I฀(in฀

mA)฀where฀the฀LED฀is฀on฀when฀the฀PIC฀driving฀pin฀is฀low:

฀ ฀

R3 ImA 3000 25

= −

Figure฀3-8:฀E/I฀curve฀trace฀of฀

red฀LED.฀Horiz:฀0.5V/div฀Vert:฀

5mA/div.

We฀fudged฀a฀bit฀by฀assuming฀the฀voltage฀drop฀across฀D1฀is฀constant฀regardless฀of฀current,฀but฀these฀simple฀

equations฀will฀be฀within฀10%฀of฀a฀more฀detailed฀calculation,฀more฀than฀accurate฀enough฀for฀determining฀the฀

current฀through฀an฀LED฀indicator.

D2฀Illuminated฀when฀RB1฀high—When฀RB1฀goes฀high,฀current฀from฀the฀VDD฀(the฀+5฀V฀supply฀in฀Basic฀

Micro’s฀development฀boards)฀goes฀through฀series฀combination฀of฀LED฀D2,฀resistor฀R4฀and฀the฀internal฀

resistance฀of฀RB1.฀This฀is฀only฀a฀slight฀rearrangement฀of฀our฀earlier฀analysis฀of฀D1,฀with฀the฀internal฀

equivalent฀resistance฀of฀the฀high฀pin฀being฀85฀ohms.฀Hence,฀

฀ ฀ 5V฀=฀2V฀+฀220I฀+฀85I฀

rearranging฀

฀ ฀ 5V฀–฀2V฀+฀220I฀+฀85I฀฀฀so฀฀฀3V฀=฀305I

or

I= 3 = mA

305 9 8.

Where฀I฀is฀the฀current฀through฀the฀LED฀and฀series฀resistor.฀

Or,฀to฀calculate฀the฀series฀current฀limiting฀resistor฀where฀the฀LED฀is฀on฀when฀the฀PIC฀driving฀pin฀is฀high฀(in฀mA):

฀ ฀

R4 ImA 3000 85

= −

In฀addition฀to฀the฀constant฀voltage฀drop฀fudge,฀this฀analysis฀

assumes฀a฀high฀pin฀is฀modeled฀accurately฀by฀as฀an฀85฀ohm฀

resistor฀in฀series฀with฀VDD .฀As฀Figure฀3-5฀shows,฀this฀assump-tion฀starts฀to฀fail฀as฀the฀sourced฀current฀exceeds฀15฀mA฀and฀

the฀plot฀of฀I฀versus฀E฀diverges฀from฀a฀straight฀line.฀

Two฀LED’s฀on฀one฀pin—We฀can฀connect฀two฀LEDs฀to฀one฀

pin฀using฀the฀circuits฀we฀just฀developed฀as฀shown฀in฀Fig-ure฀3-9.฀The฀current฀for฀each฀LED฀is฀calculated฀using฀the฀

same฀equations฀for฀individual฀pin฀connections.

Four฀states฀from฀one฀pin—Using฀the฀connection฀of฀Figure฀

3-10,฀it’s฀possible฀for฀one฀pin฀to฀produce฀four฀states฀in฀

a฀2-pin฀dual฀LED.฀(Most฀dual฀LEDs฀have฀two฀pins,฀but฀

some฀dual฀LEDs฀have฀three฀pins฀permitting฀the฀circuit฀of฀

Figure฀3-9฀to฀be฀used.)฀Fairchild’s฀MV5491A฀two-pin฀dual฀

LED฀is฀configured฀as฀a฀red฀and฀green฀LED฀in฀anti-parallel฀

whereby฀current฀flow฀in฀one฀direction฀provides฀red฀light฀

while฀the฀opposite฀direction฀provides฀green฀light.฀

In฀the฀circuit฀of฀Figure฀3-10฀when฀RB2฀is฀high,฀current฀flows฀

from฀RB2฀through฀D1฀and฀R2.฀When฀RB2฀is฀low,฀current฀

flows฀from฀the฀+5฀V฀supply฀through฀R1,฀D2฀and฀is฀sunk฀at฀

RB2.฀The฀suggested฀resistors฀yield฀6.9฀mA฀current฀for฀the฀

green฀LED฀(D1)฀and฀8.6฀mA฀for฀the฀red฀LED฀(D2).฀

It’s฀possible฀to฀get฀a฀third฀color฀out฀of฀this฀design฀as฀well.฀By฀

rapidly฀switching฀between฀the฀red฀and฀green฀LEDs,฀the฀eye฀perceives฀orange.฀The฀following฀code฀fragment฀

will฀accomplish฀this,฀switching฀at฀approximately฀100฀Hz.

Figure฀3-9:฀Two฀LEDs฀on฀one฀pin.

Figure฀3-10:฀One฀pin,฀four฀states.

Main

High฀B2

Pause฀5

Low฀B2

Pause฀5

GoTo฀Main

Finally฀if฀a฀fourth฀condition,฀LED฀off,฀is฀desired,฀switch฀RB2฀to฀input.฀As฀an฀input,฀RB2฀is฀essentially฀an฀

open฀circuit,฀and฀neither฀D1฀nor฀D2฀will฀be฀illuminated.฀This฀trick฀will฀not฀work฀with฀the฀configuration฀of฀

Figure฀3-9,฀as฀both฀diodes฀will฀illuminate฀in฀that฀state.

Program฀3-2฀exercises฀all฀four฀states฀of฀Figure฀3-10’s฀dual฀LED.

Program฀3-2

;Four฀states฀from฀one฀dual฀color฀LED฀and฀one฀PIC฀Pin

;Assumes฀bi-color฀LED฀on฀RB2

;With฀voltage฀divider฀circuit

i฀ Var฀ Byte

Main

High฀B2฀฀ ;Green

Pause฀1000

Low฀B2฀ ฀ ;Red

Pause฀1000฀

For฀i฀=฀0฀to฀255฀ ;Orange

High฀B2

Input฀B2฀ ;no฀illumination

Pause฀1000฀

GoTo฀Main End

Program฀3-2฀first฀illuminates฀the฀green฀LED฀for฀1฀second฀followed฀by฀red฀for฀1฀second,฀followed฀by฀2.5฀

seconds฀of฀orange฀when฀both฀the฀red฀and฀green฀diodes฀are฀sequentially฀active฀for฀5฀ms.฀Finally,฀the฀diode฀is฀

dark฀for฀1฀second.