LED toy details




Parts list

Description
Part number
qty
Unit cost
ATMega368P -16PU (32K 28pin)

1
3.95
74HC595 shift register

4
0.55
10mm red LED

16
0.16
10mm green LED

16
0.16
0.1" Pitch Single Row header strip (16 per module)

4
0.30
0.1" Pitch Single interconnect (8 per module)

4
0.30
2.2uf supply decoupling (1 per module)

4
0.07
100uF Main decoupling

1
0.18
FTDI USB-Serial converter 5V TTL level

1
11.00
16Mhz X-tal

1

100nf decoupling

2

10K ohm 250mw (cold-starter)

1





 

9600 8 n 1

All command are intended for use over a terminal with a person typing, and are human readable in ASCII. Hence a 10ms character delay is needed if pasting commands into Hyperterminal (Teraterm) or driving via application. A Windows Powershell sample test application to be attached. Commands are terminated by a carriage-return pair (CR-LF.) I.e. enter + ctrl-enter. All input is echoed back to the sender making verification of link easier. Additional information for debugging is attached to each activity, so command responses are not currently machine process-able. Commands generally follow a letter + value pair, all integer parameter values are in the range 0..255.
Example:
B:nnn
Set brightness 0=off, to 255 max (maximum brightness is actually around 90, and depends on the PWM configuration of the controller.)

prefix
Value1
Value2
Meaning
B
0..255
-
Set brightness from 0..90
L
0..4
0..255
Send value2 to shift register value1. Sets the bitmask in register
S
0..31
0,1,2,3
Set lamp to state . Sets an individual LED behavior.
0=led off
1=led on
2=blinking (on/off)
3=blinking (off-on)
R
0..255
-
Set blink rate , default=50 (50 is around 500ms)
Q
-
-
Query device state, prints out some debug counters and clears the internal debug counters:
1 – number of protocol errors???
2 - number of buffer overflows???
3 – buffer high-watermark


It is only possible to set LED behaviors with the S command, blinking mode 3 blinks an LED in opposing phase to mode2.
https://engxd.domain.com/lemons/DesktopExt/auth/login.aspx

Powershell Code

...
function Send-SerialMessage
{
[cmdletbinding()]
param($port, $msg)
       $msgCR = "$msg`r`n"
       $msgCR[0..$msgCR.length]| %{
              $port.Write($_)
       }
       write-verbose $msgCR
}

function Read-SerialTrace
{
       $string = $port.ReadExisting()
       while ($string -ne "") { $string| %{write-verbose "$portName: $_"};start-sleep -m 50 ;$string = $port.ReadExisting() }
}

 ...

# [System.IO.Ports.SerialPort]::getportnames()
      
       #$portName = "COM4"
       $port= new-Object System.IO.Ports.SerialPort $portName,9600,None,8,one
       write-verbose "Open port $portName"
       Write-Progress -activity "Job : $label" -status "Open Display serial port $portName" -percentcomplete 50
       $port.Open()
       $port.Handshake = "None"
       $port.ReadTimeout = 500

       # turn all leds off, from the back forwards
       Send-SerialMessage $port "B:3"    # lower brightness
       Send-SerialMessage $port "R:50"   # rate 50
       0..4 | % {
              Send-SerialMessage $port "L:$_,0"
       }
       Read-SerialTrace

...
And that's about it :-)


Comments