LED Bar Control

Top  Previous  Next

Five blue LEDs form an LED bar. They are intended primarily for the indication of the RF signal strength (i.e. of the Wi-Fi signal). These LEDs are controlled through three GPIO lines 46, 47, and 48.

GPIO46 is the reset line of the LED bar. Clearing this line sets all five outputs LOW and this turns all LEDs ON. GPIO47 is a clock line- a positive (LOW-to-HIGH) transition on this line "shifts in" the data on the data line. The LED control circuit is shown below.

 

tpp_led_barTPP_led_bar_control

 

If you want to switch an LED ON then set the corresponding data line LOW. In the following example we set the LEDs like this:

 

LED #5

LED #4

LED #3

LED #2

LED #1

OFF

ON

OFF

ON

ON

 

Assuming all the LEDs were off previously (shown in gray), these are our steps. Each step represents one cycle of the clock line (HIGH-LOW-HIGH):

 

Clock

Data

LED #5

LED #4

LED #3

LED #2

LED #1

1

LOW

ON

OFF

OFF

OFF

OFF

2

LOW

ON

ON

OFF

OFF

OFF

3

HIGH

OFF

ON

ON

OFF

OFF

4

LOW

ON

OFF

ON

ON

OFF

5

HIGH

OFF

ON

OFF

ON

ON

 

The reset line is not really necessary. You can be certain what pattern is displayed by the LEDs for as long as you generate five clock cycles every time you send new data into this circuit.

Here is our library code for controlling the LED bar:

 

Tibbo BASIC:

sub on_sys_init
...
  'enable the control lines (notice that the use of the RST line is not really necessary)  
  io.num=PL_IO_NUM_46
  io.enabled=YES
  io.num=PL_IO_NUM_47
  io.enabled=YES
  io.num=PL_IO_NUM_48
  io.enabled=YES
 
  signal_strength_set(0) 'this will turn all 5 LEDs OFF
...
end sub
 
sub signal_strength_set(strength as byte)
'Bits 0-5 of strength argument correspond to LEDs (bit5 is for the LED #5, bit0 -- for LED #0)  
 
  dim f,x as byte
  dim s as string(8)
 
  s=mid(bin(strength),3,8)
  s=strgen(8-len(s),"0")+s  
 
  'make 5 clocks
  io.num=PL_IO_NUM_47
  for f=0 to 4
     x=1-val(mid(s,f+4,1))
     io.lineset(PL_IO_NUM_48,x)
     io.state=LOW
     io.state=HIGH
  next f
end sub