snaiks
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Vorhergehende Überarbeitung | |||
— | snaiks [2024/09/19 12:14] (aktuell) – dokuwikiadmin | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Snaiks ====== | ||
+ | **Signals and Systems from KiCad to Cpp** | ||
+ | March 2017 | ||
+ | |||
+ | This page is a successor of the [[Snaiks-Study]] | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Introduction ===== | ||
+ | {{ :: | ||
+ | |||
+ | |||
+ | **Snaiks** provides a tool chain to get from a signal plan, drawn in **KiCad**s schematic editor to a generated standard **Cpp** code, runnable on **any platform**. | ||
+ | |||
+ | This tool chain consists of following parts: | ||
+ | * **Snaiks KiCad Library**, providing all the symbols | ||
+ | * **Snaiks Compiler**, generating Cpp code out of KiCads netlist | ||
+ | * **Snaiks Cpp Library**, defining the functionality of the KiCad symbols | ||
+ | |||
+ | It's purpose is to create complex systems by drawing them in KiCad' | ||
+ | |||
+ | It can be used to implement PLCs or digital signal processing like filtering. | ||
+ | |||
+ | ===== Goals ===== | ||
+ | * Generate beautiful Cpp code from a KiCad schematic | ||
+ | * Compiles without dynamic memory allocation (embedded, safety) | ||
+ | * Read and write system states during runtime (e.g. with a simple terminal) | ||
+ | * Simple custom system creation (KiCad component editor + sub-class implementation) | ||
+ | * Hierarchical design (sub-systems) | ||
+ | * full documentation within the schematic | ||
+ | |||
+ | ===== Status ===== | ||
+ | ==== Implemented ==== | ||
+ | * A set of basic blocks in KiCad and Cpp | ||
+ | * Snaiks Compiler, in alpha state | ||
+ | * auto arrangement of block-execution to provide transparent behavior | ||
+ | |||
+ | |||
+ | |||
+ | ==== Open Tasks ==== | ||
+ | * communication with the system in runtime | ||
+ | * unit tests of all Snaiks Objects | ||
+ | |||
+ | ===== Mini-Demo ===== | ||
+ | [[https:// | ||
+ | |||
+ | |||
+ | ===== Installer ===== | ||
+ | TODO: make an installer repo, which clones all the sub-repos, compiles and installs the snaiks compiler, installs kicad and a demo project. | ||
+ | |||
+ | # using git clone --recursive to check out all submodules | ||
+ | git clone --recursive https:// | ||
+ | ===== Source Code ===== | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ===== Library Presentation ===== | ||
+ | * https:// | ||
+ | * {{ :: | ||
+ | ===== Blue Prints ===== | ||
+ | |||
+ | |||
+ | ==== Properties ==== | ||
+ | A Snaiks component can have properties. For example: | ||
+ | * monoflop period | ||
+ | * schmitt trigger limits | ||
+ | * saturation limits | ||
+ | * corner frequency or filter-type of a digital filter | ||
+ | * filter coefficients | ||
+ | * gain value | ||
+ | * value of constants | ||
+ | |||
+ | A property consists of | ||
+ | * a value | ||
+ | * a name | ||
+ | * a persistent initial value | ||
+ | * a setter method | ||
+ | * a getter method | ||
+ | * a method to store a changed value into the persistent memory | ||
+ | ==== Info-System ==== | ||
+ | A system generated by Snaiks should be fully discoverable and manipulatable during runtime. | ||
+ | |||
+ | === Use cases === | ||
+ | * change filter characteristics | ||
+ | * change regulator parameters | ||
+ | * adjust offset or gain | ||
+ | * change system constants | ||
+ | * change enable/ | ||
+ | * reset a component or the whole system | ||
+ | * start/stop recording | ||
+ | |||
+ | === Needed Features === | ||
+ | * list inputs and outputs of an object | ||
+ | * list properties of an object | ||
+ | * change property values permanently | ||
+ | |||
+ | |||
+ | ==== Any-Type Inputs/ | ||
+ | Perhaps it would be useful, that not all inputs must have the same type. For example a mute gate, where the enable is bool and the signal is double. | ||
+ | |||
+ | Pros: | ||
+ | * more flexible systems | ||
+ | |||
+ | Cons: | ||
+ | * every pin must have a type specified in KiCad (could be done with net-annotators, | ||
+ | * we cannot use a simple template-interface class any more | ||
+ | |||
+ | === Proposal === | ||
+ | * in cases, where this is really needed, a specific Cpp class could be implemented | ||
+ | * mixture of numbers and bool shouldn' | ||
+ | |||
+ | {{tag> |