Difference between revisions of "Beacon3"

From Hackstrich
(Fixing part number, adding current timing details.)
 
(20 intermediate revisions by the same user not shown)
Line 1: Line 1:
Beacon3 will be a beacon for the top of our flag(less) pole for Burning Man 2011.  It will be simpler than [[Beacon2]] as time is limited to get it done, but we want a brighter beacon.
+
Beacon3 will be a beacon for the top of our flag(less?) pole for Burning Man 2011.  It will be simpler than [[Beacon2]] as time is limited to get it done, but we want a brighter beacon.
  
== Ideas ==
+
== Project Status ==
 +
* 2011-07-19: Initial design started.
 +
* 2011-07-23: Schematic for LED driver board started and almost completed.
 +
* 2011-07-24: Board layout for LED driver board completed pending final review.
 +
* 2011-07-25: Final review of board layout for LED driver board completed, order submitted to MyRO for manufacturing.
 +
* 2011-07-28: Completed schematic for planar board and began board layout.
 +
* 2011-07-29: 4 Cree MC-E LEDs (on star heatsink/boards) ordered.
 +
* 2011-07-30: Completed board layout for planar board, pending review tomorrow.  Started work on remote control interface.
 +
* 2011-07-31: Wrote libraries for the I2C mux (PCA9545) and LED driver (SSL3250).  Can't test as the hardware isn't here yet, but both compile.
 +
* 2011-08-01: Completed PCB review, submitted to MyRO for manufacturing.  Placed orders with Digikey and Mouser for all required parts.
 +
* 2011-08-03: Received LED driver boards from MyRO, all parts from Digikey and Mouser, and LEDs from LED Supply.
 +
* 2011-08-04: Assembled first LED driver board, which works perfectly! [http://www.youtube.com/watch?v=68VHmlmQUAALED driver board test video]
 +
* 2011-08-11: Received planar boards from MyRO.
 +
* 2011-08-13: Finally un-sick, started assembling planar board but found that pinout had been mirrored on planar-driver connectors, causing power pins to be backwards (along with all other pins).  Likely destroyed driver board #1 finding this out.  Desoldered the 4 connectors, will re-solder them on the bottom, mirroring the mirroring which will work around the issue.
 +
* 2011-08-14: Soldered the 4 connectors on the bottom (desoldering the XBee connector first, will deal with that later).  Assembling wiring harnesses for all 4 LEDs and soldered the LEDs to them.  Power-up test shows 2 of the 4 channels on driver board #1 have failed due to the incident yesterday.  The other 3 boards work perfectly, and 3 LEDs are being driven successfully using the Beacon3 code!  Next step will be to replace the 2 failed chips on the driver board to get the fourth LED working, then start working on the radio functionality. [http://www.youtube.com/watch?v=cSM7gYqqWYM video of first single-LED Beacon3 test]
 +
* 2011-08-15: Replaced 3 of the 4 driver chips on driver board 0 (3 had failed, not 2 as I thought).  Wrote "health check" code (run each emitter one at a time at 200mA, checking the status register while it's on to see if there are any errors) and it runs successfully, no errors (after reworking one chip which had a short).  [http://www.youtube.com/watch?v=epDGdg3tFB8 video of first fully-working main LED test]
 +
* 2011-08-17: ???
 +
* 2011-08-18: Wrote a bunch of pattern code.
 +
* 2011-08-20: Flipped LED connectors to the bottom so the top can be clear for radio and other things.  Found out solar switch doesn't work properly (voltage swing from dark to light isn't nearly enough).  Build a voltage divider board that plugs into the jumper block for the solar switch and feeds 0-1.1V signal to an ADC channel.  Wrote initial code (needs cleanup) to put the beacon to sleep (at ~6mA) when it's light, and wake it up when it's dark.  Found that if serial is enabled and the 3.3v bus is shut down, the bus gets back-fed from the MCU.  Need to add code to sequence enabling/disabling serial and powering up/down the 3.3v bus to ensure that serial is never enabled when the bus is powered down.
 +
* 2011-08-21: Finished solar switch code so it properly scales the input to compensate for it being powered off an unregulated bus.  Failed solder joint on one of the SSL3250 chips caused an I2C bus hang whenever it was accessed.  This is the second time this has caused an issue, so wrote code that detects that a WDT happened during POST, figures out what chip caused it, and isolates it so it won't happen again until the issue is fixed and the system is reset.  Worked on implementing radio functionality, but didn't get it working.  Installed the heatsinks, screwed the LEDs to them, and installed (roughly) in the case for testing.  Tested/working on battery power.
 +
* BM2011 - Failed due to multiple SSL3250 failures, likely solder joint issues.  Need to revisit how to make these reliable before getting this going for another burn.
 +
** Decided to build [[Beacon4]] with a completely different idea, rather than re-doing this project.
 +
** Calling this project completed, if I want to revisit it later I'll reopen it.
 +
 
 +
== Design ==
 
* Beacon Unit
 
* Beacon Unit
 
** Same enclosure as [[Beacon2]] can be used to save time, just remove PCBs and replace with these
 
** Same enclosure as [[Beacon2]] can be used to save time, just remove PCBs and replace with these
Line 8: Line 32:
 
*** Same light sensor and (lack of) charging circuitry as [[Beacon2]] can also be used
 
*** Same light sensor and (lack of) charging circuitry as [[Beacon2]] can also be used
 
*** Regulator on planar will only be needed for wireless functionality, MCU can operate over whole battery range as can LED drivers
 
*** Regulator on planar will only be needed for wireless functionality, MCU can operate over whole battery range as can LED drivers
*** An ATmega328p might work if the pin count required is low enough, would make programming for it easy!
+
*** Will use an ATmega328p for the MCU, makes it Arduino-compatible
 
** 4 RGBW LED units on Star boards and heat sinks at 12, 3, 6, and 9
 
** 4 RGBW LED units on Star boards and heat sinks at 12, 3, 6, and 9
*** Current thought is Cree MC-E ~2.5W per component colour RGBW LEDs
+
*** Using Cree MC-E ~2.5W per component colour RGBW LEDs
 
** 4 RGBW LED driver boards (custom) at 1:30, 4:30, 7:30, and 10:30
 
** 4 RGBW LED driver boards (custom) at 1:30, 4:30, 7:30, and 10:30
 
*** 4x NXP SSL3250A chips on each board looks good to drive the RGBW LEDs
 
*** 4x NXP SSL3250A chips on each board looks good to drive the RGBW LEDs
 
**** Will drive them at 200mA per component colour constantly, and 500mA flashes of 820mS
 
**** Will drive them at 200mA per component colour constantly, and 500mA flashes of 820mS
**** This chip has a fixed I2C address though so an I2C mux would be needed on each LED board, plus one on the planar
+
**** This chip has a fixed I2C address though so an I2C mux would be needed on each LED board
***** The PCA9545 looks perfect for this, I2C controlled 4:1 I2C mux
+
***** The PCA9545 looks perfect for this, I2C controlled 4:1 I2C mux and can be "turned off" so that there's no need for a planar mux
 
* Remote Control Unit
 
* Remote Control Unit
 
** Having a remote that would make the beacon extra-noticeable when a button was pressed would be cool
 
** Having a remote that would make the beacon extra-noticeable when a button was pressed would be cool
Line 26: Line 50:
 
*** LiIon pack (plugs directly into Arduino Fio)
 
*** LiIon pack (plugs directly into Arduino Fio)
  
== Project Status ==
+
== Wireless Protocol ==
2011-07-19: Initial design started.
+
* Commands are one letter, followed by parameters that vary by function.
 +
* Newlines signal the end of a command
 +
* Beacon3 response has a single character severity code (e for error, i for informational/success), then the rest of the line is free-form text
 +
* Beacon3 response is terminated with a newline, unless otherwise specified
 +
* Command listing:
 +
** Identify: '''i'''
 +
*** Parameter: 3 character device ID followed by the 802.15.4 address of the remote device (i.e. RCU2 for the remote control unit at address 2)
 +
*** Identify to the beacon who the remote device is.
 +
** Flash: '''f'''
 +
*** No parameters
 +
*** Flash a unique pattern on the Beacon so it can be identified from a distance
 +
** Status: '''s'''
 +
*** No parameters
 +
*** Ask the Beacon to send back a bunch of status information.  Terminated by \0, not \n!
 +
** Debug: '''d'''
 +
*** No parameters
 +
*** Ask the Beacon to send debug information as it beacons, will stop when any character is received from the remote device
 +
** Run Program: '''r'''
 +
*** Parameter: One character, the number of the program to run
 +
*** Ask the beacon to stop what it's doing and run a specific program
 +
 
 +
== EEPROM Log Byte Format ==
 +
* Bit 0 - Subsystem (0 = core, 1 = mux, 2 = driver)
 +
* Bit 1-2 - Mux number
 +
* Bit 3-4 - Driver number
 +
* Bits 5-7 - Error code
 +
** Error codes for subsystem 'driver'
 +
*** 001 = LED open fault (switcher overvoltage)
 +
*** 010 = LED short fault
 +
*** 011 = Driver overheat
 +
*** 100 = Flash timeout
  
[[Category:Current Projects]]
+
[[Category:Completed Projects]]

Latest revision as of 03:26, 25 November 2012

Beacon3 will be a beacon for the top of our flag(less?) pole for Burning Man 2011. It will be simpler than Beacon2 as time is limited to get it done, but we want a brighter beacon.

Project Status

  • 2011-07-19: Initial design started.
  • 2011-07-23: Schematic for LED driver board started and almost completed.
  • 2011-07-24: Board layout for LED driver board completed pending final review.
  • 2011-07-25: Final review of board layout for LED driver board completed, order submitted to MyRO for manufacturing.
  • 2011-07-28: Completed schematic for planar board and began board layout.
  • 2011-07-29: 4 Cree MC-E LEDs (on star heatsink/boards) ordered.
  • 2011-07-30: Completed board layout for planar board, pending review tomorrow. Started work on remote control interface.
  • 2011-07-31: Wrote libraries for the I2C mux (PCA9545) and LED driver (SSL3250). Can't test as the hardware isn't here yet, but both compile.
  • 2011-08-01: Completed PCB review, submitted to MyRO for manufacturing. Placed orders with Digikey and Mouser for all required parts.
  • 2011-08-03: Received LED driver boards from MyRO, all parts from Digikey and Mouser, and LEDs from LED Supply.
  • 2011-08-04: Assembled first LED driver board, which works perfectly! driver board test video
  • 2011-08-11: Received planar boards from MyRO.
  • 2011-08-13: Finally un-sick, started assembling planar board but found that pinout had been mirrored on planar-driver connectors, causing power pins to be backwards (along with all other pins). Likely destroyed driver board #1 finding this out. Desoldered the 4 connectors, will re-solder them on the bottom, mirroring the mirroring which will work around the issue.
  • 2011-08-14: Soldered the 4 connectors on the bottom (desoldering the XBee connector first, will deal with that later). Assembling wiring harnesses for all 4 LEDs and soldered the LEDs to them. Power-up test shows 2 of the 4 channels on driver board #1 have failed due to the incident yesterday. The other 3 boards work perfectly, and 3 LEDs are being driven successfully using the Beacon3 code! Next step will be to replace the 2 failed chips on the driver board to get the fourth LED working, then start working on the radio functionality. video of first single-LED Beacon3 test
  • 2011-08-15: Replaced 3 of the 4 driver chips on driver board 0 (3 had failed, not 2 as I thought). Wrote "health check" code (run each emitter one at a time at 200mA, checking the status register while it's on to see if there are any errors) and it runs successfully, no errors (after reworking one chip which had a short). video of first fully-working main LED test
  • 2011-08-17: ???
  • 2011-08-18: Wrote a bunch of pattern code.
  • 2011-08-20: Flipped LED connectors to the bottom so the top can be clear for radio and other things. Found out solar switch doesn't work properly (voltage swing from dark to light isn't nearly enough). Build a voltage divider board that plugs into the jumper block for the solar switch and feeds 0-1.1V signal to an ADC channel. Wrote initial code (needs cleanup) to put the beacon to sleep (at ~6mA) when it's light, and wake it up when it's dark. Found that if serial is enabled and the 3.3v bus is shut down, the bus gets back-fed from the MCU. Need to add code to sequence enabling/disabling serial and powering up/down the 3.3v bus to ensure that serial is never enabled when the bus is powered down.
  • 2011-08-21: Finished solar switch code so it properly scales the input to compensate for it being powered off an unregulated bus. Failed solder joint on one of the SSL3250 chips caused an I2C bus hang whenever it was accessed. This is the second time this has caused an issue, so wrote code that detects that a WDT happened during POST, figures out what chip caused it, and isolates it so it won't happen again until the issue is fixed and the system is reset. Worked on implementing radio functionality, but didn't get it working. Installed the heatsinks, screwed the LEDs to them, and installed (roughly) in the case for testing. Tested/working on battery power.
  • BM2011 - Failed due to multiple SSL3250 failures, likely solder joint issues. Need to revisit how to make these reliable before getting this going for another burn.
    • Decided to build Beacon4 with a completely different idea, rather than re-doing this project.
    • Calling this project completed, if I want to revisit it later I'll reopen it.

Design

  • Beacon Unit
    • Same enclosure as Beacon2 can be used to save time, just remove PCBs and replace with these
    • Planar PCB that fits onto the spindle, which the other boards plug into vertically
      • Single MCU this time, as there are fewer LEDs
      • Same light sensor and (lack of) charging circuitry as Beacon2 can also be used
      • Regulator on planar will only be needed for wireless functionality, MCU can operate over whole battery range as can LED drivers
      • Will use an ATmega328p for the MCU, makes it Arduino-compatible
    • 4 RGBW LED units on Star boards and heat sinks at 12, 3, 6, and 9
      • Using Cree MC-E ~2.5W per component colour RGBW LEDs
    • 4 RGBW LED driver boards (custom) at 1:30, 4:30, 7:30, and 10:30
      • 4x NXP SSL3250A chips on each board looks good to drive the RGBW LEDs
        • Will drive them at 200mA per component colour constantly, and 500mA flashes of 820mS
        • This chip has a fixed I2C address though so an I2C mux would be needed on each LED board
          • The PCA9545 looks perfect for this, I2C controlled 4:1 I2C mux and can be "turned off" so that there's no need for a planar mux
  • Remote Control Unit
    • Having a remote that would make the beacon extra-noticeable when a button was pressed would be cool
    • To get long enough range to be useful, we'd want ~50mW
    • XBee is probably the best way to go, but need to look at power draw for the RX side and would have to custom-design a remote control unit
    • Remote Control Unit could just be:
      • Arduino Fio
      • XBee Series 1 RP-SMA (plugs directly into Arduino Fio)
      • Rubber-duck antenna
      • LiIon pack (plugs directly into Arduino Fio)

Wireless Protocol

  • Commands are one letter, followed by parameters that vary by function.
  • Newlines signal the end of a command
  • Beacon3 response has a single character severity code (e for error, i for informational/success), then the rest of the line is free-form text
  • Beacon3 response is terminated with a newline, unless otherwise specified
  • Command listing:
    • Identify: i
      • Parameter: 3 character device ID followed by the 802.15.4 address of the remote device (i.e. RCU2 for the remote control unit at address 2)
      • Identify to the beacon who the remote device is.
    • Flash: f
      • No parameters
      • Flash a unique pattern on the Beacon so it can be identified from a distance
    • Status: s
      • No parameters
      • Ask the Beacon to send back a bunch of status information. Terminated by \0, not \n!
    • Debug: d
      • No parameters
      • Ask the Beacon to send debug information as it beacons, will stop when any character is received from the remote device
    • Run Program: r
      • Parameter: One character, the number of the program to run
      • Ask the beacon to stop what it's doing and run a specific program

EEPROM Log Byte Format

  • Bit 0 - Subsystem (0 = core, 1 = mux, 2 = driver)
  • Bit 1-2 - Mux number
  • Bit 3-4 - Driver number
  • Bits 5-7 - Error code
    • Error codes for subsystem 'driver'
      • 001 = LED open fault (switcher overvoltage)
      • 010 = LED short fault
      • 011 = Driver overheat
      • 100 = Flash timeout