LED Bar Control
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.
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