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