pouët.net

Go to bottom

Firefly Lantern

--------------------------------------------------------------------------------
  Firefly Lantern
  Lovebyte 2023
  Mecrisp

  Matthias Koch
  m-atthias@users.sf.net
  http://mecrisp.sourceforge.net/
--------------------------------------------------------------------------------

A firefly simulator running in 256 bytes on a RISC-V microcontroller,
using two DAC channels for vector graphics on an analog oscilloscope.

Firefly Lantern is designed for GD32VF103 microcontrollers and
draws vector graphics on an analog oscilloscope in XY mode
connected to

   GND and the two DAC channels on pins
   PA4 (vertical) and
   PA5 (horizontal).

--------------------------------------------------------------------------------
  Design ideas:
--------------------------------------------------------------------------------

Firefly Lantern paints filament like firefly traces controlled by
numerically integrating the differential equations of a chaotic oscillator
on scaled fixpoint integers.

The filament heads chase a destination, which is either a randomly choosen
and periodically updated coordinate for the first head or the coordinate of
the head of the previous filaments, and are also deflected by a function given
by a chaotic oscillator with smooth movements.

For every frame, the chaotic oscillator is updated from which both deflection
and randomness are derived. In the first frame, all coordinates are initialised
to zero, which is in the middle of the canvas.

The chaotic oscillator itself runs on 3D coordinates, and enters - depending
on start values - one of many possible closed cycles, so that the values are
bounded within a resonable range and repeat itself when calculated on integers.

The differential equations of the chaotic oscillator, "Sprott A", are given
in literature as:

  J. C. Sprott, Some simple chaotic flows, 1994

  x-dot = y
  y-dot = -x + yz
  z-dot = 1 - y^2

  (x0,y0,z0) = (0,5,0)

These equations are numerically integrated using the Euler method, with a
suitable set of start values for a nice transient response before entering
a closed cycle.

One can experiment with this interesting piece of math using the
standalone snipplet of code as included in sprott.c

--------------------------------------------------------------------------------
  How to run:
--------------------------------------------------------------------------------

If you have connected your

Longan Nano board to
             a USB-serial cable with 3.3V logic levels

3V3 or 5V -- VCC (measure the voltage present here)
R0        -- TXD
T0        -- RXD
GND       -- GND

you can flash it if you first

* Press and hold BOOT0 button
* Press and release Reset button
* Release BOOT0 button

and then execute

stm32loader -e -w -v -p /dev/ttyUSB0 firefly-lantern.bin

on your host machine.

Press and release Reset button to start demo.


PS: There is also a version for Linux with qemu-user-static
    that uses a mmap'ed 1920x1080x32bpp framebuffer through syscalls
    so that you can at least try the effects of Firefly Lantern
    on your desktop machine.

--------------------------------------------------------------------------------
  Credits:
--------------------------------------------------------------------------------

* Filament creatures inspiration for Firefly Lantern:

  Clash by Jin X, Lovebyte 2022
  https://www.pouet.net/prod.php?which=90980

* Chaotic oscillator differential equations:

  "Sprott A"
  J. C. Sprott, Some simple chaotic flows, 1994
  https://sprott.physics.wisc.edu/pubs/paper212.pdf
Go to top