Please Welcome the Crystal Focus(tm) V10 (CF-X)
(Pictures of the board pre-series, machine-assembled and produced at home. Minor labelling and silk-screening changes on the final version)
yes, it took a while :-)
If you are a newcomer to this, you might first have a read to this thread, details and dev. backstories, and discussion, about the CF-X :Crystal Focus X and some news from the Plecter house
Here's a PDF version of what's below, I though it might be great to have it to share aside of the forums and avoids tons of copy/paste.CF-X release notes / specs PDFhttps://www.plecterlabs.com/Media/Doc/CrystalFocusX-Specsheet.pdfFeature list (non-exhaustive)
• ARM32 based board with 3.2W digital amplifier (constant power / volume over runtime), with 128x32 OLED support, 4 channel (RGBW) on-board drivers, USB serial port, SD card, activator + auxiliary switch, 9DoF motion sensor with MotionFusion, on-board (red) diag LED, temperature measurement and alert, voltage measurement and alert (PLI).
• We use / kept as many as the former CF components, strong and reliable, easy and cheap to replace / service, less manufacturing issues, we try to avoid 0402 or smaller active parts which make them impossible to service by DIYers and would even make it even really hard for us (since we repair customer boards when drama happen), plus they increase / introduce manufacturing errors.
• Dimensions: 34.30 x 20.75 mm. Black and gold PCB
• SD card update with signed firmware. “Blind update” possible (on-going flashing process with the onboard diag LED) or with USB serial port monitoring (recommended). A firmware update takes about 1s or less.
• SD card in place sound editing / replacement
• 1 / 2 cell compatibility with no “voltage-hack” required, only a solder jumper to bridge, and only when using ledstrips with 2 cells (+5V buck regulation needed then for the strip)
• Auxiliary serial port (like the former RICE / TTL serial port). Fixed and Auxiliary 3.3V power supplies
• 3 additional GPIOs (1 currently used for Tangible interaction / blade detection)
• HB led or Ledstrip compatible (RGB / RGBW)
• Enhanced accent sequencer with 8 configurable accent LEDs (blade mirror, even in ledstrip mode, crystal pulsing, scalable PLI, sequenced accents, self-pulsing, audio flicker)
• 8 Accents resistors footprints (0603) allowing for top or bottom on-board bargraph (board can be installed facing up or down)
• Zero CPU Ledstrip driver with 2 outputs, with level shifters (compatible with 1 cell or 2 cell setups, or permanent +5V PSU for booth/demo mode).
• SD card benchmarking routine ported from CF9 and made accessible via remote message / hook (formerly a dev tool)
• 16 bits / 44.1 kHz sample rate multi-track, low latency motion to sound (4.6 to 6ms motion to clash sound) with backward compatibility with 22.050 kHz sounds (monophonic font main player should have at least hum and Fx with the same SR, otherwise, non-mixed sounds can mix SR)
• Polyphonic / monophonic font (backward) compatibility with existing fonts. Unlimited file numbers or font numbers.
• Automatic font number detection and diagnostic – Ordered Font names
• 100 ms boot time average with 12-15 fonts on the SD card
• Enhanced logging / debugging mode of all events of the board
• Omnisabers ready (like CF8-9)
• Software hooks to remotely control any aspect of the board (power on, power off, lockup, clash, blaster, on-the-fly font change, tracks playback etc) via the serial port(s) or external events (tangible, force sensing, user identification)
• Extended tangible interaction with 16 slots including blade detection (saber enabled, disable, blade insertion / removal interaction)
• AccuBolt / Multibolts engine
• 16 Color profiles and 16 blade profiles allowing mix and match, selection via Spectrum™ (angular) selection
• 10 bit color definition for more color accuracy in HB leds (and future ledstrips !) – [Legacy]
• Color dictionary to name (web) colors
• Hilt roll (twist) controlled lockup color (FoC / Lockup color blending). Think Qui-gon Ep 1 & Blast door.
• Extended use of User Interface (UI) sounds and graphics. Fully skin-able.
• SmoothSwing, implemented as described by Thexter with his public documentation, with a bunch of tweaks and heuristics to get it to my taste. Smoothswing font automatically detected, 3 Smoothswing mode legacy SS, hybrid font (using swings sounds) and (pseudo) pitch shifting mode. Per-font Smooth-swing configuration (doh)
• Vocal menu for font selection, iSaber and (soon) parameters adjustment, with use of the OLED display (if attached), animated or static graphical font description.
• Local tracks and iSaber tracks [description further] audio player(s) and double click play/pause
• Sleep mode (accent stop, partially reduced current) with automatic wake (aux, movement) - Deep sleep with 240uA (18 months of shelf-time with a 3200 mAh fully charged cell). Board revived with either AUX or ACT
• Support for NO and NC latching switch though some of the new features require ACT as momentary switch
• Motion sensing for font selection (in menu or when blade is off)
• Quick Ignite: automatically starts the saber when reviving from deep sleep (en./dis.)
• Power-on sound interrupt with motion sounds (en. / dis.)
• OLED Font graphic support (static or animated), or font name and number if no graphic provided.
• OLED animation diversity (signal analysis, vu-meter, screenAccents™, midi-chlorian scanner)
• OLED animated screen savers (currently 4), can be customized to taste.
• OLED 3D files support (custom spinning 3D object on the screen, OBJ file format)
• OLED PLI support (custom, examples provided)
• OLED orientation parameter and custom boot / info strings.
• OLED custom boot screen (static or scrolling) or font graphic
• OLED animated blade and color profiles transition
• OLED animated blade insertion, removal, tangible selection, saber disabling or low power
• Reduced idle quiescent current: 42mA with SD card and all peripheral activated (not playing sound)
• High temperature, low power, dead power, blade missing, blade inserted UI sounds & graphics.
• Disable lockup and blaster for heavy duelers (Use 0 for lockup delay)
• Font skipping for quicker selection in the vocal menu (when the SD card stores 1138 fonts but you don’t need all of them)
• Spectrum™ “filtered” selection (per font) to reduce the selection to a limited number of color or blade profiles
• Booth Mode (or mannequin / poser) with automatic ignition retraction with randomized blade & color profiles
• Magic activation and saber locking / unlocking using a magnet
• Easter eggs!
• 75€ price point (retail). Bulkers welcome. Price to evolve if quantities / bulks evolve.[Configuration system]
We kept a big part of the former configuration system but mostly reorganized and split it (most of the parameters keywords you knew were preserved). The configuration is made essentially of 3 files:
• A general config.txt file in the root directory. It contains all the general settings, motion sensing, sleep / deep sleep delay, volume etc. In addition, it contains up to 16 blade profiles which are the specific settings which used to be stored “per font”. Instead of limiting the use of specific settings (flicker speed / depth, pulsing, ledstrip effect etc) to that particular font it becomes part to a more general vocabulary, accessible to all fonts, and changeable in real-time
• To this vocabulary we add a separate glossary of colors (formerly the color profiles that were in override.txt) and store them in a specific color.txt. That file contains up to 16 color profiles that have all the color aspects separated from the blade profiles: blade & FoC color, bolt color, lockup color, FoC mixing, trident channels, crystal chamber color. Same as for the blade profiles, those are accessible to any fonts, and changeable via Spectrum™ just like the blade profiles.
• A font specific configuration file (font_config.txt) which now contains only the parameters that are specific to that font. That includes (mostly) the smoothswing settings (if it’s a smoothswing font), the bolt timing settings, font skipping in the menu, color and blade profile filtered selection, font glyph)
• In addition, you’ll find the former prefs.txt file that saves the last use of the saber (blade & color profiles used, last font used etc) and a special.txt file storing manual override or very specific parameters that you want to add / edit by hand. This is typically where you’d store some of the OLED preferences, enable tangible font selection, activate the booth mode etc.Timings & units:
Former HW allowed for a 2ms time base only hence the timings used to be defined in that unit. The new HW runs obviously faster and allows for a finer time base, now everything is metric: 1ms. Voltages (PLI) are stored in millivolts.
We also made a notable change with the bitfield notation we were using: defining FoC mixing was done previous with a natural binary representation, i.e. with the most significant bit being the left-most one. This goes against the natural numbering of the channel orders (e.g. for color definition, ch1, ch2, ch3 & ch4), so now the bitfields (FoC mixing, Trident delayed channels, accent leds states) are defined in natural order (my brain is now having a really hard time with this since it’s been hard wired for binary stuff for a long time but I’ll deal with it
The new accent sequencer gives more flexibility on the use of each accent. Also, we merged all the different led files into a single one with proper sections (single leds.txt file) stored in the font folder.
Here are the various attributes each accent can have. To be noted that pulsing type of accents (self-pulsing, crystal pulsing, blade mirror, audio flicker limited to accents #2-5-6-7-8 since not all the HW pins can have PWM. You can *still* define non-PWM pins to those function but they will only blink like a digital pin when passing half of the PWM range (512).
• 1, 2, 3 or 4: defines a mirroring, whatever the order is. This ways, accent #5 could mirror channel 1 or 4 (applies to current color profile, real time color changing leads to real time update of the accent mirroring; obvious but…). Blade mirroring on those accents works also while in pixel blade mode.
• p: accent is used for PLI
• @: accent is used for audio flicker (flickers on the audio beat)
• a: accent is used as regular sequenced accent
• r: accent is used as random sequenced accent
• ~: accent is pulsing on its own (between max and max - depth)
• O (letter upper case O): accent is static ON when the blade is ON
• o (letter lower case o): accent is static ON when not in deep sleep (identical to wiring it to the DS pad but configurable)
• C: Pulses between CRYSTAL chamber COLOR[CHANNEL1] and depth (current color profile)
• R: Pulses between CRYSTAL chamber COLOR[CHANNEL2] and depth (current color profile)
• Y: Pulses between CRYSTAL chamber COLOR[CHANNEL3] and depth (current color profile)
• S: Pulses between CRYSTAL chamber COLOR[CHANNEL4] and depth (current color profile)
The PLI is fully scalable and can take any LED, even non-contiguous ones. For instances, declaring accent 1, 4 and 5 as PLI accents will map the PLI range to those 3 leds (#1 being always the low end of the PLI, which blinks when you reach it).
The sequencer has now a simplified syntax and structure. It accepts repeat blocks and infinite loop blocks. A sequence (idle for instance, when blade is off) can be introduced with a repeat type of block with a particular pattern, followed by an infinite looped sequence. A block can have 32 stages and a sequence (blade on, blade off aka. Idle or lockup) can have a maximum of 16 blocks. We thought that 512 stages for an accent sequence is, if not slightly overkill, “enough & fair” for the least.
Blade ignition and retraction accent schemes are now part of the single leds.txt file in specific sections and can also have their own sequence, progression pace in the sequence being either manual (delays specified) or automatically computed based on the power-on sound duration or the quick-on parameter.
To simplify the accent animation writing / authoring, you don’t need to enter the stage duration for each stage anymore. If you plan a constant speed sequencing, just type the delay used at the beginning of the sequence and the whole sequence will use it. You can do partial updates as well, define one delay, use it for a couple of stages, update it, have a few more stages with that different pace etc.
Regarding accent types and priority: any specific mode has priority over the regular sequenced LEDs (‘a’). In other words, the state of a LED, even if defined in the sequence will be overridden by the PLI or the pulse or the blade mirror (etc) if the said LED is not a defined as a regular accent.[splitting this over several posts]