Commit Graph

564 Commits (9c9322d02f2f1b47d54986d3dbe8fd1beb6752dd)

Author SHA1 Message Date
Yuri D'Elia ed04bd02e2 PulseGen/speed_tables: cleanup constants 2021-07-07 16:59:04 +02:00
Yuri D'Elia 006dfd4abc PulseGen: remove all floating point calculations
Work in steps, steps/s, steps/s2 directly.
2021-07-07 16:59:04 +02:00
Yuri D'Elia cf5be5aade PulseGen: initial version of the ramp/pulse generator 2021-07-07 16:59:04 +02:00
Yuri D'Elia 7d2329cf85 Add src/cmath.h for <math.h> portability between platforms 2021-07-07 16:59:04 +02:00
Yuri D'Elia de88ed4c6b Add initial Axis configuration static structs 2021-07-07 16:59:04 +02:00
Yuri D'Elia ef7c776461 Update Motion for the new TMC2130/pins definitions 2021-07-07 16:59:04 +02:00
Yuri D'Elia 531f60ed27 Add modules::speed_table for acceleration lookup tables 2021-07-07 16:59:04 +02:00
Yuri D'Elia 1d6736cff6 Add modules::math for specialized math functions
Currently include reduced-precision 8x16 and 16x16 multiplication
functions used by the speed lookup tables.
2021-07-07 16:59:04 +02:00
Alan Dragomirecký 9448c04b36 Disable preprocessor code indentation 2021-07-07 16:33:03 +02:00
Yuri D'Elia f95c47638d CircularIndex: fight against type promotion in size checks
To generate optimal code, size itself needs to be of the same type as
the index to avoid promotion to the largest type.

In full(), wrap the subtraction explicity in another type cast to avoid
another automatic type promotion.
2021-07-06 12:51:56 +02:00
Yuri D'Elia f57a1c3b17 CircularIndex: add static checks for index/size limits
The empty/full distinction fails to work if size matches the number of
representable positions for the index type.

Add a static check to ensure this invariant is met where possible.
2021-07-06 12:51:56 +02:00
Yuri D'Elia 4362d77083 CircularIndex: alternate index management for full capacity
Comparing head/tail indexes cannot distinguish between empty/full cases,
so we end up wasting one item in the circular buffer. This also limits
the smallest and efficient size choice to be 4.

If the circular buffer is large, there's no issue, however for the
motion planner the block size is significant, and I was planning to use
exactly a ring buffer of two: one busy block, plus one planned.

Modify the indexer to store the internal "index" (aka cursor) pointer to
be one extra bit deeper than the final index. Comparing the underlying
cursor allow to distinguish the empty/full case due to the extra bit,
while producing the final index requires simple masking.

This is just as efficient if the size is a power of two with
2-complement wrap-around logic, which is the optimized case. However
the implementation also works for non-power-of-two sizes.

Add tests for more failure cases in the CircularBuffer which is built on
top.

(tecnique described in the Art of Computer Programming by Knuth)
2021-07-06 12:51:56 +02:00
Yuri D'Elia 477539c791 Split CircularBuffer into CircularIndex+CircularBuffer
Allow the lower-level index to be used without an actual container by
splitting off the index management into CircularIndex.

Rebuild CircularBuffer using CircularIndex itself.
2021-07-06 12:51:56 +02:00
D.R.racer 43a423f299 Change buttons' ADC limits into an array
as proposed by @vintagePC

cleaned-up some of the unit tests by this change
2021-07-05 18:07:54 +02:00
D.R.racer 552fec9abf Parametrize Idler and Selector in common config.h 2021-07-05 18:07:54 +02:00
D.R.racer ccda84df80 Make buttons' ADC decision levels "inclusive"
especially because of the zero level, which is very likely to be a valid button0 level
2021-07-05 18:07:54 +02:00
D.R.racer b484eeacb6 Start using config.h
Added some constexpr vars for buttons, finda, fsensor and
applied them in the FW and unit tests accordingly.
2021-07-05 18:07:54 +02:00
Yuri D'Elia dd5c036d38 GPIO: reformat affected files 2021-07-05 15:20:11 +02:00
Yuri D'Elia 3ccfc3adfb GPIO: correctly stub known ports
- Use the correct port name in the #define
- Fully qualify all references
2021-07-05 15:20:11 +02:00
Yuri D'Elia 32b2ec7f8d Remove GPIOI 2021-07-05 15:20:11 +02:00
Yuri D'Elia 067deb7e55 Completely remove PIN macros 2021-07-05 15:20:11 +02:00
Yuri D'Elia 7c7aa95445 Mock GPIO when building tests
Add some conditional statements in gpio.h so that we can mock the GPIO
registers when building tests.
2021-07-05 15:20:11 +02:00
Yuri D'Elia 169665331e Change the pin definitions in order to be valid types
Remove the constructor from GPIO_pin so that we can use brace
initialization at compile time.

Rewrite the contents of pins.h to construct GPIO_pin types directly by
the use of a simple preprocessor macro.

Makes the code type-check and easier to read/extend.
2021-07-05 15:20:11 +02:00
Yuri D'Elia e9627ad0d4 TMC2130: Reformat 2021-07-05 13:34:08 +02:00
Yuri D'Elia f491072614 TMC2130: Make stepping methods static
To keep these methods efficient no member should be accessed away.
That's the reason MotorParams is passed explicitly for each.

Mark all stepping methods as static.
2021-07-05 13:34:08 +02:00
Yuri D'Elia 28c9e55a79 Add vSense to MotorCurrents 2021-07-05 13:34:08 +02:00
Yuri D'Elia c78ed77ccc Revise the TMC2130 interface for stepping
Change the TMC2130 class after starting to review the Motion API.
Move motor mode handling and stepping to this module.

Create a new MotorParams class for compile-time settings (currently
pins, direction, microstepping).

Keep other settings separate, so that we can pass constexpr expressions
while stepping and still get 1 instruction without overhead.
2021-07-05 13:34:08 +02:00
Yuri D'Elia ea8b335f8d progmem: fix for AVR
- Fix header name
- Rename pgm_read_word to read_word since pgm_read_word is a macro
  and cannot be scoped
2021-07-05 13:33:49 +02:00
Yuri D'Elia a9937b94e2 Add initial AVR PROGMEM abstraction in hal::progmem 2021-07-05 13:33:49 +02:00
D.R.racer 9efb127acb Explain and fix the LED states while cutting filament
now the test is correct including LEDs
2021-07-01 08:12:47 +02:00
D.R.racer 974c1ba6db Verify Cut filament state machine + update unit tests 2021-07-01 07:03:39 +02:00
vintagepc e2ec745286
Simple config header with example (#39)
Simple config header with example
2021-07-01 06:47:40 +02:00
Yuri D'Elia ab01413116 Call LED::Step() correctly 2021-06-30 12:39:03 +02:00
D.R.racer 9122a33693 Rebase onto upstream/main, adapt to cleaned-up circular buffer interface 2021-06-30 07:39:31 +02:00
D.R.racer ffae941a28 Fix unit tests of load/unload filament 2021-06-30 07:39:31 +02:00
D.R.racer 9a8038ccb6 Add user_input module and use it instead of raw buttons
Encapsulates buttons and commands coming from the communication
2021-06-30 07:39:31 +02:00
D.R.racer af8c866f1a Update doxygen main page 2021-06-30 07:39:31 +02:00
D.R.racer 2c89b14de1 Add doxygen main page dox file 2021-06-30 07:39:31 +02:00
D.R.racer 4df4bf59b4 Update doxyfile + document modules namespace 2021-06-30 07:39:31 +02:00
D.R.racer 3f98ec03ca Fix doxygen documentation for the logic layer 2021-06-30 07:39:31 +02:00
D.R.racer c15b1d59c4 Introduce Doxyfile + fix modules documentation 2021-06-30 07:39:31 +02:00
D.R.racer f6e5d4ae76 Improve and verify Load filament alg and unit tests 2021-06-30 07:39:31 +02:00
D.R.racer 46a40f7488 Extend Unload filament unit tests
+ now error states are covered as well
+ greatly cleaned-up code
2021-06-30 07:39:31 +02:00
D.R.racer ce20f0b001 Greatly improve unload filament unit test
+ relevant changes for other unit tests -> prepare for improving
of the other unit tests as well
2021-06-30 07:39:31 +02:00
D.R.racer 5a4903a2ff Cleanup circular_buffer implementation
unit tests will follow
2021-06-29 12:17:10 +02:00
Yuri D'Elia 3ba072aea7 Define the global Timebase instance 2021-06-29 08:59:16 +02:00
Yuri D'Elia f097aecbaa Qualify leds::Mode in LED to fix build 2021-06-29 08:58:37 +02:00
D.R.racer 4d6d6fe0af Add more checks (esp. positions of idler and selector)
that resulted in finding several weak spots and now Cut and Eject filament
do not pass the test (which is correct, they really have logical issues)
2021-06-21 10:28:56 +02:00
D.R.racer 317a486d1e Logic layer Eject filament unit tests
initial setup, it compiles, but is blocked by Unload filament
2021-06-21 10:26:04 +02:00
D.R.racer 1f8934c2c1 Fix+verify Cut filament unit test
it now finished ok, but future tweaks and improvements are expected
2021-06-21 10:22:17 +02:00
D.R.racer ede475c5a6 Introduce Timebase module, refactor timing code + unit tests 2021-06-21 10:22:17 +02:00
D.R.racer 398181e26c Feed to FINDA unit tests : green 2021-06-21 10:22:17 +02:00
D.R.racer 85910497f7 Unify buttons' API with other modules
- accepts millis() instead of doing the timing internally (which has
been a temporary solution just for the tests until now)
2021-06-21 10:22:17 +02:00
D.R.racer 3cb3cebed9 Add forced reinit of all automata for the unit tests
+ added a few constexpr to constructors on the way
2021-06-21 10:22:17 +02:00
D.R.racer b8f6bc9a4e Tune Feed to FINDA state machine and its unit test
so that it works as expected

Still, there is a task of resetting all of the state machines just for
the next unit test to be run.
2021-06-21 10:22:17 +02:00
D.R.racer f0a042c1b6 Add unit tests for Feed to FINDA state machine
+ improve infrastructure
2021-06-21 10:22:17 +02:00
D.R.racer 925201d77a Basic unit test structure for the logic layer
It compiles the Cut Filament unit test with all the necessary components.
Still, the unit test does nothing.
2021-06-21 10:22:17 +02:00
Alex Voinea e5215c7b84 SHR16 tmc control 2021-06-21 06:14:01 +02:00
Alex Voinea 19bc26219b Fix usart not working 2021-06-18 06:43:55 +02:00
Alex Voinea 113f9d7664 Fix build 2021-06-18 06:42:28 +02:00
Alex Voinea 6bd4db2681 Functional SHR16 2021-06-18 06:42:28 +02:00
Alex Voinea 7845f9aad4 SHR16 gpio 2021-06-18 06:42:28 +02:00
D.R.racer 58fe013471 Fix compilation 2021-06-16 06:43:20 +02:00
D.R.racer d6c9e58e66 Add global state hive
+ solve many TODO's in the code (active slot/extruder and filament loaded flag)
2021-06-16 06:43:20 +02:00
D.R.racer 9e4bd97968 Add empty EEPROM HAL implementation 2021-06-14 07:34:59 +02:00
D.R.racer dfb57bcae5 Add Load filament state machine
+ printer's fsensor (external) module
+ state machine for loading to bondtech
2021-06-14 07:34:59 +02:00
D.R.racer 7cab9dc915 Add Tool change operation 2021-06-14 07:34:59 +02:00
D.R.racer ea65b75120 Add Eject filament operation
+ refactor other state machines a bit - Reset() now has the parameter which comes in the RequestMsg
2021-06-14 07:34:59 +02:00
D.R.racer 7bfc1bad97 Cut filament prototype state machine 2021-06-14 07:34:59 +02:00
D.R.racer 4a79b4b865 UnloadFilament - refactor for the new Idler API 2021-06-14 07:34:59 +02:00
D.R.racer 96be4b18a2 main - add Idler and Selector modules into main loop stepping 2021-06-14 07:34:59 +02:00
D.R.racer d0095a01aa Buttons - add AnyButtonPressed() 2021-06-14 07:34:59 +02:00
D.R.racer ade5f11fe2 Motion - remove dummy Idler functions 2021-06-14 07:34:59 +02:00
D.R.racer 9caf680633 Add Feed to FINDA state machine 2021-06-14 07:34:59 +02:00
D.R.racer 7555bbb906 Add Selector module 2021-06-14 07:34:59 +02:00
D.R.racer b4e8c3fa5d Add Idler module 2021-06-14 07:34:59 +02:00
D.R.racer 05ff998c01 Lay out the other high-level commands/operations
- cut, eject, load filament, toolchange
- uncomment them in main.cpp
- their implementation is still empty
2021-06-14 07:34:59 +02:00
D.R.racer 5b4eb0cee3 Extract Unload filament into a separate file
+ cleanup the object structure
+ add no_command as the starting "operation" to simplify the rest of the command handling at runtime
2021-06-14 07:34:59 +02:00
D.R.racer 271a2dd7df Minor tweaks after rebase onto main 2021-06-14 07:34:59 +02:00
D.R.racer 6f1624b718 Make logic prototype compilable 2021-06-14 07:34:59 +02:00
D.R.racer 2159558d88 Prototype of Unload Filament command/operation
+ related stuff:
- command decoding+processing+reporting in main.cpp
- slight refactoring of modules
2021-06-14 07:34:59 +02:00
D.R.racer ca6de101c3 Logic - first try 2021-06-14 07:34:59 +02:00
D.R.racer 019f74d6f2 Add debouncing for FINDA 2021-06-08 07:00:07 +02:00
D.R.racer 939b47d260 FINDA interface module 2021-06-08 07:00:07 +02:00
D.R.racer 3ef113cf6c Add basic motion API 2021-06-08 06:59:49 +02:00
D.R.racer 8e994c3b17 Take over permanent storage implementation from MM-control-01 2021-06-08 06:59:14 +02:00
D.R.racer 9f2b5e5ecb Add vscode configuration to allow easier switching among firmware and unit tests 2021-05-31 12:28:47 +02:00
D.R.racer bd335ec30d Unit test for LEDs interface + fixes 2021-05-26 11:39:24 +02:00
D.R.racer 004db59da0 Add shift register interface and improve LED integration with it 2021-05-26 09:29:32 +02:00
D.R.racer 9226230fd5 Reformat sources to fit the new namespace formatting rules 2021-05-25 12:24:19 +02:00
D.R.racer acc33bfacb Do not indent namespaces 2021-05-25 12:23:29 +02:00
D.R.racer 6cb072ce79 Rebase onto main + clean up the code a bit 2021-05-25 11:55:28 +02:00
D.R.racer fce2195558 Interface module for driving LEDs
+ start shaping up main.cpp
+ make the usage of namespaces and class names more consistent throughout the whole project
+ refactor related unit tests accordingly
2021-05-25 11:00:30 +02:00
D.R.racer 7611b98830 Add more unit tests and optimize (saved 1 byte per button on the AVR) 2021-05-25 10:02:02 +02:00
D.R.racer 7ece1fb28d Add missing buttons.h 2021-05-25 10:02:02 +02:00
D.R.racer ba8eacfe33 Buttons module implementation
A module representing a model of the 3 buttons
Includes a unit test project (empty at this stage)
2021-05-25 10:02:02 +02:00
Alex Voinea 47528c3bca USART hal prototype 2021-05-24 12:32:10 +02:00
D.R.racer fe0ac4f9f9 More unit tests for decoding of response messages
+ related changes in code
2021-05-18 08:18:11 +02:00
D.R.racer 30fbf6d870 Unit tests for decoding requests and responses
+errors on requests
2021-05-18 08:18:11 +02:00
D.R.racer 0633dea881 Protocol implementation
+ unit tests for encoding of messages

API still subject to minor changes
2021-05-18 08:18:11 +02:00
Alex Voinea c378e71018 SPI example 2021-05-17 19:11:35 +03:00
Alex Voinea 13ee425352 Configurable SPI CPHA and CPOL 2021-05-17 17:45:31 +03:00
Alex Voinea 57abb7ecc4 Example TMC2130 pinout 2021-05-17 17:10:02 +03:00
Alex Voinea 041d75012d Add all possible ports to the AVR GPIO hal 2021-05-17 17:09:00 +03:00
Alex Voinea 2cf1b8b523 __attribute__((always_inline)) comment 2021-05-17 12:08:20 +03:00
Alex Voinea d2d275da25 Explain why we set SS as output 2021-05-17 09:11:24 +03:00
Alex Voinea db98d0cf7b Add SPI TxRx function 2021-05-17 09:11:11 +03:00
Alex Voinea dc9528b4ea SPI hal: Winning combo 2021-05-17 09:01:22 +03:00
Alex Voinea ac4fdd30ad spi hal checkpoint 2021-05-17 08:42:21 +03:00
Alex Voinea 47400f16c6
GPIO hal prototype (#9)
* gpio hal prototype
* Example gpio hal usage
* Use uint8_t for GPIO enums
2021-05-14 15:42:41 +02:00
D.R.racer 57bc5a802b Add cpu.h/cpp, avr subdir
The idea is to have a separate implementation of the HAL interface for each CPU. So far we only have the AVR.
2021-04-19 07:03:47 +02:00
D.R.racer ec44ef5f23 Prepare main.cpp 2021-04-19 07:03:47 +02:00
D.R.racer f848c8d550 Create basic FW structure
- Design API's based on our discussion and block diagrams
- Set doxygen rules/preferred syntax
2021-04-19 07:03:47 +02:00
D.R.racer 257d0ec340 Prepare parts of the build system
extracted and slightly modified from Buddy-FW, still doesn't work
2021-04-19 07:03:47 +02:00