Fork me on GitHub

Project Notes

#355 Snow Flake

The Snow Flake is an Atmel SAM D ARM Cortex-M0-controlled LED ornament produced by @LuckResistor and shared with the Boldport Club community as a special project.

Here’s a quick demo of my first Snow Flake running in solo mode…

Build

Notes

When @LuckResistor announced the Snow Flake to the Boldport Club community, I knew I had to join in! It was fascinating watching the design evolve and the production process get underway. And then one day my batch of 5 snow flake kits arrived!

I’ve just completed building the first, and it went without a hitch. Once I have built some more I will be able to experiment with co-ordinated operation, but even a single snowflake makes an impressive display.

Build

Parts

The Snow Flake is a custom 2-sided board with SMD components. The heart of the board is an Atmel SAM D ARM Cortex M0, which drives an array of 19 white LEDs.

Ref Item Qty
J1 Harwin M50-3600542R 2x5 SMD programming header 1
LED1-19 Rohm SCMP13WBC8W1 white 150mcd LED package 0402 19
IC1 Microchip ATSAMD20E17A-AUT Atmel SAM D20E 128kb flash 1
R1-19 KOA Speer RK73H2ATTD82R0F 82Ω (white) 19
R20 KOA Speer RK73H2ATTDD1002F 10kΩ (blue) 1
R21 KOA Speer RK73H2ATTDD1001F 1kΩ (green) 1
C1,3,6 Murata GRM21BR71H104JA01L 0.1µF (black) 3
C2,4,5 Murata GRM21BR71A105KA01L 1µF (no marking) 3

kit_arrival

kit_unboxed

pcb_front

pcb_rear

Circuit Schematic

Schematic

Power Board

The kit came with a bonus small white board that is an optional small power converter. It can be used to build a simple power adapter to convert USB 5V down to 3.3V for the snow flakes. I haven’t used this yet.

There’s a BOM for the Snow Flake Power Converter on octopart.

power_adapter

Construction

I followed the basic build procedure recommended by @LuckResistor:

  • Solder the 0402 LEDs onto the board.
  • Solder all of the other components the other side of the board.
  • Before you program the chip, power the board with 3.3V and test the LEDs. Use a wire to ground and touch the correct pins of the MCU with ground and check if all LEDs light up. If not, search for problematic solder joints.
  • Connect the wires to the snow-flake and chain them.
  • Program all snow-flakes with the firmware.

I picked up some construction hints along the way:

  • The polarisation of the LEDs: They always point inwards, and the pads have a very small marking visible in the solder mask.
  • The LEDs are very small! I used a procedure based on a technique described by @prof:
    • unwind 19 LEDs from the tape onto a white plate or saucer
    • organise the LEDs so they are all face up (I use a very fine paintbrush and toothpick for this)
    • use tweezers to transfer the LEDs to the board near their final position
    • apply solder paste to the LED pads
    • use multimeter diode tester to get the right orientation
    • push/move the LED onto the pasted pads with the probe leads or tweezers

@LuckResistor produced some videos to demonstrate construction:

Snow Flake Panel Assembly - LED Side

Snow Flake Panel Assembly - LED Side

Snow Flake Panel Assembly - Components

Snow Flake Panel Assembly - Components

Assembly

I don’t have a stencil but I decided to try hand-applied paste and hot air. This is fiddly, but worked fine.

The LED side is most challenging, as those suckers are mighty small!

snowflake_led_side

Component-side was more straight-forward, but it was important to test all component connections ( I had a few that were open after the first pass with hot-air).

snowflake_component_side

My final 4 Snow Flake’s coming off the line:

snowflake_build_batch

Programming

An SWD programmer is required to program the micro controller. Options inclde:

I have both a Black Magic Probe and STlinkV2 on hand, but only had the correct cable for the BMP, so I went with that.

I haven’t compiled the sources from scratch yet. My first tests were with the binaries from threebytesfull. Note: @luckyresistor subsequently added FirmwareBinaries to the GitHub project.

The snow flakes have to be programmed individually using a SWD programmer. Perhaps someone will take up @luckyresistor’s challenge to write a boot loader to automatically write the firmware from the first snow flake over the data connection to all other snow flakes;-)

Flash with the Black Magic Probe

I knew the BMP should work fine, since threebytesfull had already documented the same.

With the ARM gcc toolchain installed, all that is required is:

  • find the port of the BMP - I’m on MacOSX, so it appeared for me as /dev/cu.usbmodem7BB19AA1
  • the compiled ELF binary

Plug in a Snow Flake and flash the chip:

$ arm-none-eabi-gdb -nx --batch \
  -ex 'target extended-remote /dev/cu.usbmodem7BB19AA1' \
  -ex 'set confirm off' \
  -ex 'monitor version' \
  -ex 'monitor tpwr enable' \
  -ex 'shell sleep 0.1' \
  -ex 'monitor swdp_scan' \
  -ex 'attach 1' \
  -ex 'load' \
  -ex 'compare-sections' \
  -ex 'kill' \
  assets/SnowFlake.elf

Black Magic Probe (Firmware v1.6.1) (Hardware Version 3)
Copyright (C) 2015  Black Sphere Technologies Ltd.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Target voltage: 3.3V
Available Targets:
No. Att Driver
 1      Atmel SAMD20E17A (rev E)
0xfffffffe in ?? ()
Loading section .text, size 0x33f4 lma 0x0
Loading section .relocate, size 0x68 lma 0x33f4
Start address 0x0, load size 13404
Transfer rate: 19 KB/sec, 893 bytes/write.
Section .text, range 0x0 -- 0x33f4: matched.
Section .relocate, range 0x33f4 -- 0x345c: matched.

snowflake_programming

Power and Wiring

For now with one Snow Flake, I’ve simply wired a 2xAAA battery pack to the VCC and GND with some “invivible” 30AWG. When I have a few more Snow Flakes I’ll have to figure out a better arrangement for power and data communications.

Build

The QRP Challenge!

How much power does a Snow Flake use? @LuckResistor estimates around 18mA, so approximately 100 hours running time with 2 x 900mAh.

My first Snow Flake was deployed to test the theory. Powered by 2 “almost new” Panasonic Evolta LR03EG AAA batteries, it ran continuously for 125 hours. The batteries were providing 2.35V (in circuit) at this point.

This Snow Flake just won’t quit! I finally pulled the plug before it died completely, as it was getting ridicuously dim. Here’s what it looked like:

qrp

A Four-Flake Mobile

I used four Snow Flake to make a little decoration for my Fretboard CI build status indicator. Just a little hack to give it some xmas cheer;-)

I mounted the four snowflakes from an improvised bit of wire art. The copper wire carries 3.3V and additional wire (just 30AWG) is ground. I didn’t wire up the data lines because I thought it would make the wiring too prominent, and synchronisation is not important.

The Fretboard is supplied with 5V/2A, so I tapped 3.3V with an AMS1117-3.3 in an Altoids tin to power the flakes.

Here’s the first bench test:

four_flake_mobile_wip

I haven’t really been able to capture the full effect in a photo. IRL it is much more impressive and glittery:

four_flake_mobile

Credits and References

About LEAP#355 CraftARMLED
Project Source on GitHub Return to the LEAP Catalog

This page is a web-friendly rendering of my project notes shared in the LEAP GitHub repository.

LEAP is my personal collection of electronics projects, usually involving an Arduino or other microprocessor in one way or another. Some are full-blown projects, while many are trivial breadboard experiments, intended to learn and explore something interesting (IMHO!).

The projects are usually inspired by things found wild on the net, or ideas from the sources such as:

Feel free to borrow liberally, and if you spot any issues do let me know. See the individual projects for credits where due. There are even now a few projects contributed by others - send your own over in a pull request if you would also like to add to this collection.