- adc_wait_samples now returns the actual number of samples available at the
time it returns. this simplifies a pattern where one would wait on samples
if blocking and then subsequently check the number of available samples.
- adc.insertsamples(id, table, idx, count) function now available to take
samples and insert them into a table. this is slightly slower than
assignment for single values in a table, but can avoid having to use
getsamples (returning new tables) for certain situations
idx: starting index in table where values will be inserted
count: number of samples to get from channel id
of flash space.
NOTE: getsamples function is disabled since this is dependant on having a
buffer to get more than one sample.
Side note: single sampling without the buffer is faster by about 5-10
us/channel. It should be possible to sidestep the buffer in certain
situations for buffer enabled mode and get a similar benefit at the cost of
some additional complexity.
- ADC adjusted to work with sequenced acquisition setups. It should now
accomodate both sequenced and non-sequenced approaches on the backend.
A few more adjustments should be made to handle multiple sequencers
but right now neither LM3S or STM32 platforms use more than one sequencer.
- Added adcpoll.lua to demonstrate a simple approach for using clocked
acquisition and displaying results as they become available.
- ADC now works for STM32 (all 16 channels!). This should receive more
extensive testing, but everything should be working at this stage.
- the build system now pays attention to changes in header files meaning that
if any headers change or if the romfs changes (since it is generated as a
header) these changes will get recompiled without having to do a clean.
is full). Clock and sampling frequency have been moved to a separate function
from burst. There is now one function to initiate sampling called sample
which takes a channel and count. setclock takes a channel, clock_id, and
frequency. Adjustments should be made to make channel groupings somewhat
cleaner, but this is functional.
Suggestions are welcome for simplification :-)
I'll try and make some doc updates in the coming day or so to reflect
finalized adjustments.
buf.c.
The smoothing buffer is still kept separate from the main buffering system,
but as samples come in via interrupt, they are placed into a "standard" elua
buf. The size of this buf is configured according to whether one is grabbing
a bunch of samples rapidly (burst), or singly in order to accommodate the
expected number of incoming samples. If smoothing is enabled, incoming
samples are claimed until the smoothing buffer is full, and then remaining
samples are left in the main buffer until they are collected. This means that
whether one is collecting single samples or samples at burst rate, and
smoothing is enabled, the filter will only be providing samples that have
enough history.
Added a function to manually flush both smoothing and main buffers.
This would be useful if you know your state has changed and you only want
fresh samples that are going to be collected after a flush.
Also, a lot of functionality moved into elua_adc.c and common.c
(boundaries for what belongs where, might be evaluated), reducing the number
of platform.c specific functions dramatically.
Basic functionality seems to be working, but some more testing should be done.
Also, given that there's now a dynamic buffer behind everything, a shift in
the way sampling is handled could be done:
sample and burst functions could be made to be non-blocking, and to never
return anything except for errors.
a separate getsamples function could be used for removing samples collected by
either function from the buffer.
Suggestions are welcome as it would be nice to keep usage paradigms stable
after the 0.6 release.