]>
www.fi.muni.cz Git - bike-lights.git/log
Jan "Yenya" Kasprzak [Tue, 28 May 2013 20:45:56 +0000 (22:45 +0200)]
buttons.c: handle brake sensor failure gracefully
A common failure mode is that the magnet slips and does not provide
the signal, so it appears as if constantly braking. Avoid this situation
by allowing continuous braking of at most 16 seconds. After that, report
brake off, and wait for the real "brake off" signall from the Hall sensor.
Jan "Yenya" Kasprzak [Tue, 28 May 2013 20:29:06 +0000 (22:29 +0200)]
tmr.c: combine watchdog IRQ and watchdog reset
Fortunately, WDT reset can be combined with WDT interrupt. The procedure
is to reenable WDIE each time, or the next WDT timeout will be reset.
Jan "Yenya" Kasprzak [Mon, 20 May 2013 22:34:06 +0000 (00:34 +0200)]
Watchdog-based timing
TODO: remove the sub-LSB PWM scaling, add deeper sleep states.
Jan "Yenya" Kasprzak [Mon, 20 May 2013 21:47:05 +0000 (23:47 +0200)]
ambient: log minima and maxima
In order to be able to tune the ambient light sensor better, I made
it to log the minimum and maximum values read for every three minutes
or so. When the log buffer fills, start over only after the next
off/on cycle.
Jan "Yenya" Kasprzak [Thu, 11 Apr 2013 19:49:42 +0000 (21:49 +0200)]
ambient.c: adjust the day/dawn values
Jan "Yenya" Kasprzak [Thu, 11 Apr 2013 19:49:12 +0000 (21:49 +0200)]
ambient.c: make the sensor react faster
Jan "Yenya" Kasprzak [Wed, 10 Apr 2013 21:48:27 +0000 (23:48 +0200)]
pattern+current adjustments
Jan "Yenya" Kasprzak [Wed, 10 Apr 2013 21:16:45 +0000 (23:16 +0200)]
control.c: braking pattern for pwmled0
Jan "Yenya" Kasprzak [Thu, 28 Mar 2013 22:55:02 +0000 (23:55 +0100)]
pwmled.c: slower response in order to gain stability
Jan "Yenya" Kasprzak [Thu, 28 Mar 2013 22:40:33 +0000 (23:40 +0100)]
pwmled.c: I only have one 350mA spot LED now in production mode
Jan "Yenya" Kasprzak [Thu, 28 Mar 2013 22:36:26 +0000 (23:36 +0100)]
pwmleds: less measurements per run
With low-pass filters at the input of PWMLED ADC pins, it is now
relatively stable and noise-free, so we can lower the number of readings
to two. Hopefully this will not cause instability.
Jan "Yenya" Kasprzak [Thu, 28 Mar 2013 22:33:25 +0000 (23:33 +0100)]
slow ADC inputs
The fastest-repeated measurements are needed for PWM LEDs. OTOH,
things like buttons, battery voltage, ambient lights, etc. can be
read less frequently, and should be read in a deterministic time frame.
So we will measure PWMLED current in the free-running mode (as fast
as possible), and the other "slow" ADC inputs with each PATTERN_DIV-th
timer tick.
Jan "Yenya" Kasprzak [Thu, 28 Mar 2013 21:13:58 +0000 (22:13 +0100)]
ambient light sensor: configurable # of readings
Set the # of readings to 1, and decrease the shift value
for running average in order to get faster reaction.
Jan "Yenya" Kasprzak [Thu, 28 Mar 2013 18:48:01 +0000 (19:48 +0100)]
Timer-initiated ADC
Run ADC synchronously with timer IRQ. This partially reverts
commit
210916486d18b3dc976c65c7b01b44bca446d856 in order to
prepare for selectively enabling and disabling ADC channels.
Jan "Yenya" Kasprzak [Sun, 17 Mar 2013 16:59:23 +0000 (17:59 +0100)]
adc.c: configurable number of pre-readings
When there is a supposed ADC noise problem, it is handful to drop
several first readings, and even discharge the ADC capacitor
by reading the single-ended wire connected to zero. This commit
rewrites the ADC handling to allow exactly this, for each ADC input.
Jan "Yenya" Kasprzak [Thu, 14 Mar 2013 21:12:33 +0000 (22:12 +0100)]
buttons.c: magnet for the Hall probe not present?
Handle the case when the Hall probe magnet is not present.
Jan "Yenya" Kasprzak [Thu, 14 Mar 2013 21:12:13 +0000 (22:12 +0100)]
control.c: reset the braking variable
Jan "Yenya" Kasprzak [Thu, 14 Mar 2013 19:20:48 +0000 (20:20 +0100)]
adc: fix the button adc number
... and use symbolic constants in the switch statement to avoid
this kind of bugs in the future.
Jan "Yenya" Kasprzak [Thu, 14 Mar 2013 18:07:02 +0000 (19:07 +0100)]
adc: missing break statement
oh well.
Jan "Yenya" Kasprzak [Fri, 8 Mar 2013 21:52:16 +0000 (22:52 +0100)]
firmware: buttons + hall probe via ADC
Jan "Yenya" Kasprzak [Wed, 6 Mar 2013 23:19:43 +0000 (00:19 +0100)]
battery.c: adjustment for 1.1V internal reference
Jan "Yenya" Kasprzak [Wed, 6 Mar 2013 21:54:02 +0000 (22:54 +0100)]
pattern.c: shorten the final delay
Shorten tne final delay in number patterns and off_pattern.
Jan "Yenya" Kasprzak [Wed, 6 Mar 2013 21:51:55 +0000 (22:51 +0100)]
pattern.c: synchronized patterns
- status LEDs should not blink together
- PWM LEDs should start synchronized, in order to allow for compensation
of battery voltage variations when one output is on
compared to when more outputs are on
Jan "Yenya" Kasprzak [Wed, 6 Mar 2013 10:41:19 +0000 (11:41 +0100)]
Remove unused PATTERN_FOREVER
This is not used by any pattern anymore - remove it.
Jan "Yenya" Kasprzak [Tue, 5 Mar 2013 13:09:49 +0000 (14:09 +0100)]
Makefile: handlebar schematics for the web pages
Jan "Yenya" Kasprzak [Wed, 6 Mar 2013 15:05:10 +0000 (16:05 +0100)]
ambient zones adjusted
Jan "Yenya" Kasprzak [Tue, 5 Mar 2013 12:54:34 +0000 (13:54 +0100)]
Handlebar switches
I have decided to implement a brake light, which I want to trigger using
Hall-effect sensor mounted in the brake lever. Unfortunately I still
have only three wires for two switches and a Hall-effect sensor, so I
would have to change the digital switch readings (on/off) to ADC
readings (voltages selected using voltage split on resistors).
Here is the schematics for the whole handlebar electronics, and the
symbol file and datasheet for the Honeywell SS341RT Hall-effect sensor.
Jan "Yenya" Kasprzak [Thu, 28 Feb 2013 00:11:46 +0000 (01:11 +0100)]
lights.h: fix prototype name
Jan "Yenya" Kasprzak [Thu, 28 Feb 2013 00:00:57 +0000 (01:00 +0100)]
control.c: handle "battery critical" state
Jan "Yenya" Kasprzak [Wed, 27 Feb 2013 23:58:04 +0000 (00:58 +0100)]
control.c: display battery status on status led by default
Jan "Yenya" Kasprzak [Wed, 27 Feb 2013 23:57:35 +0000 (00:57 +0100)]
pattern.c: num_pattern(10) is also allowed
Jan "Yenya" Kasprzak [Wed, 27 Feb 2013 23:56:55 +0000 (00:56 +0100)]
battery.c: rework
We can use values in mV instead of 100 mV. We can also provide
the battery level on scale from 1 to 10.
Jan "Yenya" Kasprzak [Wed, 27 Feb 2013 22:28:35 +0000 (23:28 +0100)]
adc.c: more measurements of ambient light
Jan "Yenya" Kasprzak [Wed, 27 Feb 2013 22:28:16 +0000 (23:28 +0100)]
ambient.c: zone adjustments
Jan "Yenya" Kasprzak [Wed, 27 Feb 2013 22:27:46 +0000 (23:27 +0100)]
battery.c: priority of operations
... in order to fit to an 8-bit value.
Jan "Yenya" Kasprzak [Wed, 27 Feb 2013 21:49:42 +0000 (22:49 +0100)]
Revert "adc.c: make the ADC handlers non-atomic"
This reverts commit
eb2f91ea7806fd8f5b9a5597fcf5c13855911d71 .
We will probably not need non-atomic handlers.
Jan "Yenya" Kasprzak [Wed, 20 Feb 2013 21:49:36 +0000 (22:49 +0100)]
pattern: laser diodes as gpio 4
Jan "Yenya" Kasprzak [Wed, 20 Feb 2013 21:47:24 +0000 (22:47 +0100)]
pwmled.c: shut down the boost converter later
Jan "Yenya" Kasprzak [Fri, 18 Jan 2013 21:52:35 +0000 (22:52 +0100)]
pins.txt: converter response times
Jan "Yenya" Kasprzak [Fri, 18 Jan 2013 21:51:40 +0000 (22:51 +0100)]
ambient.c: zones adjusted for photoresistor
Jan "Yenya" Kasprzak [Fri, 18 Jan 2013 21:50:50 +0000 (22:50 +0100)]
Merge branch 'master' of ssh://anxur.fi.muni.cz/~kas/html/git/bike-lights
Conflicts:
firmware/adc.c
Jan "Yenya" Kasprzak [Fri, 4 Jan 2013 16:26:08 +0000 (17:26 +0100)]
adc.c: make the ADC handlers non-atomic
will it work?
Jan "Yenya" Kasprzak [Fri, 4 Jan 2013 14:50:14 +0000 (15:50 +0100)]
adc.c: routine for synchronous conversion
Jan "Yenya" Kasprzak [Sun, 16 Dec 2012 16:32:32 +0000 (17:32 +0100)]
control.c: blinking modes update
Jan "Yenya" Kasprzak [Sun, 16 Dec 2012 16:31:18 +0000 (17:31 +0100)]
control.c: on_patterns should not last forever
Jan "Yenya" Kasprzak [Sun, 16 Dec 2012 16:29:53 +0000 (17:29 +0100)]
ambient light: make three measurements
Jan "Yenya" Kasprzak [Sun, 16 Dec 2012 16:28:39 +0000 (17:28 +0100)]
pwmled.c: do not regulate just after mode change
Jan "Yenya" Kasprzak [Sun, 16 Dec 2012 16:26:50 +0000 (17:26 +0100)]
pwmled.c: disable the disconnected step-up earlier
Jan "Yenya" Kasprzak [Sun, 16 Dec 2012 16:22:26 +0000 (17:22 +0100)]
pattern.c: off_pattern should not last forever
Jan "Yenya" Kasprzak [Sat, 15 Dec 2012 21:22:02 +0000 (22:22 +0100)]
buttons.c: longer keypress
... after we have increased the clock frequency
Jan "Yenya" Kasprzak [Sat, 15 Dec 2012 21:21:25 +0000 (22:21 +0100)]
ambient.c: ambient light hysteresis
Jan "Yenya" Kasprzak [Sat, 15 Dec 2012 20:51:23 +0000 (21:51 +0100)]
schematics: more low-pass filters, fuse removed
Jan "Yenya" Kasprzak [Wed, 12 Dec 2012 04:03:59 +0000 (05:03 +0100)]
Merge branch 'master' of ssh://anxur.fi.muni.cz/~kas/html/git/bike-lights
Jan "Yenya" Kasprzak [Tue, 11 Dec 2012 16:16:29 +0000 (17:16 +0100)]
schematics: bug fixes
- low-pass filters added to the ADC pins measuring LED current
- prog_ena jumper changed to disconnect pwm0 only, as this is what makes
problem during in-system programming
- labels for LED and battery connectors moved outside the footprint
Jan "Yenya" Kasprzak [Mon, 10 Dec 2012 21:00:28 +0000 (22:00 +0100)]
pwm.c: maximum TOP value of T/C 1 is 0x3FF.
Jan "Yenya" Kasprzak [Sat, 8 Dec 2012 21:32:40 +0000 (22:32 +0100)]
buttons.c - the correct IRQ is PCIE1
Jan "Yenya" Kasprzak [Sat, 8 Dec 2012 19:36:27 +0000 (20:36 +0100)]
Ability to quickly build testing firmware
Testing is actually development,
and non-testing is "safe" for production use, even with some
features disabled. At least for now :-)
Jan "Yenya" Kasprzak [Sat, 8 Dec 2012 19:27:41 +0000 (20:27 +0100)]
ADC measurements in mA
Jan "Yenya" Kasprzak [Fri, 7 Dec 2012 22:03:55 +0000 (23:03 +0100)]
pwm.c: publish only PWM_MAX as non-internal value
The TOP value of Timer/Counter 1 is computed inside pwm.c and it is
purely internal to this module.
Jan "Yenya" Kasprzak [Fri, 7 Dec 2012 21:51:20 +0000 (22:51 +0100)]
pwmled.c: factored out probing to a separate function
Jan "Yenya" Kasprzak [Fri, 7 Dec 2012 21:03:49 +0000 (22:03 +0100)]
pwmled.c: save error sum between mode switches
otherwise it leads to instability when during short blink the error
sum does not manage to increase the stride.
Also, use 32-bit ints to simplify the code and save some branches.
Jan "Yenya" Kasprzak [Thu, 6 Dec 2012 23:10:20 +0000 (00:10 +0100)]
pwm.c: make it usable from non-atomic blocks
Jan "Yenya" Kasprzak [Thu, 6 Dec 2012 20:38:03 +0000 (21:38 +0100)]
pwm.c - remove unused code
Jan "Yenya" Kasprzak [Thu, 6 Dec 2012 20:34:00 +0000 (21:34 +0100)]
pwm.c: PLL clock enabling code
- factored out from init_pwm() in order to be able to suspend PLL also
during normal operation
- use _delay_us(100) instead of _delay_ms(1) as recommended by datasheet
- disable PLL in susp_pwm()
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 16:37:53 +0000 (17:37 +0100)]
firmware: control logic moved to a separate module
- buttons.c now controls status LEDs only when setting parameters
- pattern.c:
can use NULL instead of off_pattern
has number_pattern() than can also set up inverted patterns
contains only number and boot patterns as static variables
can reload all patterns if some state changes
- ambient.c resets all patterns when ambient zone changes
- control.c:
- now contains almost all pattern strings, only those needed by
other modules are exported
- status LED and illumination LED can be controlled by buttons.c
- separate _pattern_select() function for each LED
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 10:23:27 +0000 (11:23 +0100)]
adc: always-running ADC
Don't rely on the timer IRQ to start next round of ADC measurements,
start it immediately after the previous one finishes.
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 10:13:15 +0000 (11:13 +0100)]
logging: consistent init function naming
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 10:10:04 +0000 (11:10 +0100)]
patterns: consistent init function naming
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 10:09:11 +0000 (11:09 +0100)]
ambient light: consistent init function naming
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 10:08:33 +0000 (11:08 +0100)]
gpio: consistent init function naming
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 10:07:02 +0000 (11:07 +0100)]
pwmled: consistent init function naming
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 10:05:36 +0000 (11:05 +0100)]
gpio: rework
use correct swtiching between pin input and output
(as per the datasheet, section 10.1.2),
remove old logic of wakeup LED notifications
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 09:58:31 +0000 (10:58 +0100)]
buttons, wakeup rework
Set up all the pin-change interrupts even for shutdown,
fix the old pins used in the code (main.c),
factor out waiting for button release from main.c to buttons.c,
fix the status LED notification during wake-up.
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 01:23:45 +0000 (02:23 +0100)]
pwmled.c: rework
Probing and time-averaging works, but several corner cases need to be
polished.
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 01:22:58 +0000 (02:22 +0100)]
make timer faster, sub-1 LSB PWM values need it
otherwise, the step-up blinks with low pwm settings
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 01:14:57 +0000 (02:14 +0100)]
pattern.c: call pwmled.c unconditionally
- no not query whether the LED is alive - pwmled.c will handle this
in that case.
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 01:14:30 +0000 (02:14 +0100)]
pattern.c: mode1_pattern out of modes 1 and 2 instead of 1 and 4
Jan "Yenya" Kasprzak [Fri, 30 Nov 2012 01:12:05 +0000 (02:12 +0100)]
adc: measure gain stage offset _slowly_
use running sum of 1<<6 measurements, and do only one measurement
per loop in order to not disturb other measurements. Also, do not log
timer overruns for ADC, as we do most of the processing in ADC IRQs now.
Jan "Yenya" Kasprzak [Thu, 29 Nov 2012 20:07:51 +0000 (21:07 +0100)]
pwm.c: typo fixes
Jan "Yenya" Kasprzak [Thu, 29 Nov 2012 13:36:45 +0000 (14:36 +0100)]
firmware: emulate higher resolution of PWM
Emulate the sub-1 LSB resolution of PWM by updating the PWM values
in the timer interrupt routine
Jan "Yenya" Kasprzak [Thu, 29 Nov 2012 13:05:08 +0000 (14:05 +0100)]
adc.c: keep ADC enabled
Jan "Yenya" Kasprzak [Thu, 22 Nov 2012 22:00:00 +0000 (23:00 +0100)]
pwmled: more logging
Jan "Yenya" Kasprzak [Thu, 22 Nov 2012 21:26:08 +0000 (22:26 +0100)]
pwmled: remove old unused function
Jan "Yenya" Kasprzak [Thu, 22 Nov 2012 00:11:31 +0000 (01:11 +0100)]
ambient: new zones
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 23:58:01 +0000 (00:58 +0100)]
buttons.c: param setup fixes
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 23:57:03 +0000 (00:57 +0100)]
patterns: zero pattern
similar to off, but does not last forever
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 23:34:48 +0000 (00:34 +0100)]
pwmled: regulation using sum of differences
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 23:28:29 +0000 (00:28 +0100)]
adc: log missed timer interrupts
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 22:15:36 +0000 (23:15 +0100)]
pattern.c: remove unused function
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 22:14:26 +0000 (23:14 +0100)]
patterns: use mode1_pattern for all PWM LEDs for now
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 22:12:31 +0000 (23:12 +0100)]
buttons.c: fix for setup timeout
we need to test whether the timeout is reached only when the setup
is in progress ;-)
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 22:08:22 +0000 (23:08 +0100)]
lights.h: PWM_MAX for better measurements
The PWM frequency should be different than the ADC frequency (125 kHz)
in order to measure in different parts of the PWM cycle (I should have
added a low-pass filter to the ADC inputs, but whatever :-)
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 22:07:17 +0000 (23:07 +0100)]
adc: measure the offset of the gain-20 stage
We measure the offset of the ADC1:ADC1 gain 20 stage and subtract it
from ADC0:ADC1 and ADC2:ADC1 differential readings.
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 22:06:04 +0000 (23:06 +0100)]
adc: only 4 measurements for single-ended pwm
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 20:12:26 +0000 (21:12 +0100)]
buttons: init state when suspended during user params setup
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 17:14:09 +0000 (18:14 +0100)]
main.c: disable also the analog comparator
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 17:10:40 +0000 (18:10 +0100)]
adc: average several measurements
Also do not define the MUX values in the table in order to be able
to set also GSEL and ADMUX5 if needed.
Disable the ADC between the conversions.
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 16:06:20 +0000 (17:06 +0100)]
firmware: button/status LEDs
(maybe the status led handling should be done in a separate module?)
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 15:30:08 +0000 (16:30 +0100)]
patterns: PATTERN_FOREVER
Jan "Yenya" Kasprzak [Wed, 21 Nov 2012 15:05:37 +0000 (16:05 +0100)]
firmware: buttons-press and pwrdown rework
Reworked short and long button presses. The long press is now also
reported only _after_ release, which allows us to simplify the power-down
case in buttons.c, and even in main.c.