|
Home
2001 2002 2003 2004
|
25/02/02 Was the PIC; PIC16C76 works as intended!
Tidied config screen.
Added 10ms timer so key debounce not too fast!
27/02/02 Fixed timer display.
Fixed temperature display.
Switched in conv2int for pressure.
Corrected MAXTAS - is a byte not a word!
Combined UART and DATALINK flag into MMIFLAGS.5
28/02/02 Initialised S2F to zero.
01/03/02 Reset TEN_MS_TICK, and initialise to zero.
Change MAXQFE to MAXALTITUDE
Added MAXALTITUDE and MAXTAS update
05/03/02 Corrected bug introduced into LONG_DEBOUNCE.
Corrected screen keypress handling (goes through correct set now)
07/03/02 Corrected vario calculation.
Added vario averaging buffer.
Initialised all vario variables.
Added new PEAK_VARIO_TICK second countdown.
Fixed lsb and missing 'm' for pressure
Fixed display of : on timer
Shuffled SND/TMR/DL right a space
Shuffled TAS left a space
Correct display of vario
Fixed display of barograph rate
Added peak and average vario code
Intialise nShutdown according to MMIFLAGS on boot-up
08/03/02 Fixed infinite loop bug introduced in vario yesterday
Wrote eeprom image download program
10/03/02 Fixed temperature display bug (had 26 and not d'26')
Fixed big altitude display, R1R0 corruption!
Fixed a bug found in the beep display, wrong bank
Fixed incorrect bank usage when initial reads from eeprom
Tweaks on display: TEMP renamed TMP, rate and max qfe shifted
Added code to skip leading zeros on big alti and vario
11/03/02 Discovered that incf and decf don't affect carry flag! Altered
btfsc status,c instructions relying on this to btfsc status,z.
Affected:
Vario rate
Altitude / pressure calculation
Signed number display
Eeprom read and write
UART interface
Not bad eh?
Corrected temperature use and now store as signed byte. Was in
fact 38 which was 0 degrees C, not 26 (which is the hex!).
12/03/02 Commented out service uart so works. Suspect need to take maxim
ic out of shutdown while interrupts disabled, clear them, then
re-enable.
Corrected big number skipping leading zero display.
Fixed bug in digitise (didn't do ten thou correct, simple mistake)
13/03/02 Clear any rx errors before start interrupts going.
Add pre-processing of received char to rx uart handler - throw
away character if not 10, 13 or in the range 32 to 122 inclusive.
Display just a large minus now for sign on big altitude and vario.
Correct display_signed_number; corrupted R1R0 before saved it!
Corrected display_vario. Similar corruption and the cause of the
rogue - signs being written across the screen! Didn't move to
position until after writin the sign. Obvious in hindsight - vario
is written after S2F!
Corrected display of large altitude, leading zero stripping was
incorrect.
14/03/02 Corrected position of vario display, now displays the sign!
Disable rx interrupts when service uart, could cause errors or
maybe even be the cause of crashing the code.
_engtbl section wasn't in linker file; but _engtable was. So
probably wasn't in its own section or not in at all! Probably
why was crashing rather than interrupt possibility. Sorted this.
Also removed _mmijump as didn't seem to be used any more and
needed extra bytes for rom_a.
15/03/02 Still resetting, found another reason - had initialised UART
buffer in wrong bank. Buffer also too long (16 in hex and not d'16').
Both fixed, fingers crossed ... WORKS!!! And have comms again!
16/03/02 Worked on MMI, added all actions and processes; including
18/03/02 barograph stuff.
19/03/02
Moved to 19200 baud as cannot get 9600 baud with 4MHz PIC.
Store barograph pointer on eeprom when finish trace,
restore on init.
20/03/02 Use of pagesel in mmi.asm causing problems (hence didn't work) so
changed to setpage. Which should of course have been using!
Also updated uart.asm which had some explicit setpagse code which
replaced with setpage.
Returned to 2400 baud, 19200 doesn't seem to like 4MHz PICs!
Didn't work with PIC16C73A either (earlier in the project).
Corrected testing of valid keys on entry to do_mmi code.
25/03/02 Replaced all spacing with tabs (set to 8) to reduce file sizes
and make all the same.
Added explicit display update to FLAGS. MMI code can now also
use this to give more responsive screen updates.
Added CURSORPOS and code so cursor displayed in correct
position now, and doesn't move with screen update!
26/03/02 Tweaked cursor move code, now toggles between : and =
Fixed couple of MMI bugs
27/03/02 Fixed display cursor (data not cmd!), put in correct positions
Fixed display number so left flushes properly
31/03/02 Correct rd and wr routines so address correct.
Coded fix for rapid-fire.
01/04/02 Were not sending device/upper address correct to eeprom. Sorted
this and tided up read/write routines. Also added necessary 10ms
routines to terminate_baro and so forth.
Swapped dec2word byte order so returns R1R0 in line with rest of
program. Adjusted calling code as required.
02/04/02 Quick and easy fixes:
calc_hex broken above when half-moved to R8
rapid-fire of minus key
timer toggle
Altered rd and wr commands so supply bytes rather than decimal dibits
Added ADC (adc) (channel) command for internal and external ADCs.
03/04/02 Found and fixed memory stomp into Rx buffer. Writing to R22
at one place in math.asm was bank 0 instead of bank 1 because of a
typo. Instead of writing to 0xC7 wrote to 0x47 - rx buffer!
Fixed bug in new adc command, didn't copy channel number to R2
correctly.
04/04/02 Fixed bug in external adc read_word routine; ended up going to
read_byte when waiting for interface to be ready.
Fixed storing of MMIFLAGS - loaded from wrong bank, again!
Altered temperature zero degrees point to that of LM335Z. Existing
TC02 sensor turned out to be 0 degrees at 0 volts and needed a
negative rail. The LM335Z device usefully has an offset of 2.73V.
Rewrote key handler so neater and can now use "waiting for release"
flag properly.
04/04/02b Fixed small bugs introduced above!
06/04/02 Corrected storing of QFE_OFF and QNH_OFF bug.
Altered write_eeprom_16 and write_eeprom_24 routines to write
individual bytes rather than use page write method. Do not know if
will be on an eeprom 32 byte boundary!
External adc read was one bit out, not that it will help much!
09/04/02 Renamed scheduler1b and scheduler1c - think MPASM only sees first
10 digits but MPSIM sees more. Hence sim OK but only does mmi update
every 250ms. Well, good theory anyway ... didn't work.
Subsequent look suggests that is just loading as a consequence of
something I've done. Try regressing out routines sometime (02/04/02 ok)
24/04/02 Altered calibration of external adc more like datasheet to try to
get working. Also poll for nADCREADY before commence read from
register. Added a NOP between read clocks in case was pipeline problem.
Added retries to eeprom read/write. Left 10ms delays in for now.
02/05/02 Changed from HS mode to XT mode for 1/10th current consumption!
Changed ADC update rate from 20Hz to 100Hz (FS from 00 to 10 for ADC).
Expect 1.7lsb noise for Vref=2.5V, Vdd=5V, gain=128
03/07/02 Removed datalink and nShutdown
Moved nADCCS to RC5
Moved ADCDATA to RA5
Made RA2 an analogue input for VARIO; also making RA5 analogue
in the process unfortunately. Need 10kohm input resistor on RA2 as
need to make output (so stable digital state) when select RA5/RA2
in digital mode.
Altered external adc gain from 128 to 4.
Moved PRS_C and PRS_M to bank 1
Renamed to ALT_C and ALT_M; added ASI_C and ASI_M and modified code
accordingly.
04/07/02 Rebuilt and relinked.
11/08/02 Corrected input/output direction of VARIO_ADC in external adc
write_byte and read_word routines. Had the incorrect sense.
12/08/02 Moved vario to start of measure routine for increased settling time
Corrected bug where was -128 and not -d'128' in measure.asm
Corrected vario peak detect
Changed alt/asi update rate from 100Hz to 20Hz
28/08/02 Added 16 word adc averaging buffers
Changed adc update rate back to 100Hz, actual output rate is thirs of this
as need to read both channels and have filter settle.
Change adc to unbuffered mode for lower current consumption; don't need as
high an impedance now working from op-amp / potential divider outputs. Need
to verify this with oscilloscope, may need buffer on potential dividers
setting -ve inputs for alt and asi. Cheap tl082 do the job?
29/08/02 Now call measure every time external adc has an update. Planned schedule
of measure activity based on this tick.
Next job to implement this in measure routine and modify altitude to read
into and use adc averaging buffers.
09/09/02 Changed to RC oscillator so can use OSC2 for 1/4clk output to AD7705
to overcome its noisy oscillator problem.
Switched off oscillator (ie. MCLK OUT) on AD7705 as now supplying it
with clock derived from PIC on MCLK IN.
Returned to buffered mode for now; need to switch to unbuffered after
everything else working.
11/09/02 Further work on modifying measure.asm routine.
12/09/02 Concluded measure.asm mods ready for compiling and simulate.
Remapped object codes in ROM so fitted in.
13/09/02 Minor twiddle and simulate.
Added decimal place precision to calibration.
14/09/02 Added cmd6 comment in uart.asm
Fixed bug in average buffer (fell for the incf carry trap again!)
Added now necessary wait for nADCREADY for adc command.
Extended DUMP into banks 2 and 3.
16/09/02 BIG CHANGE to sort adc problems. Result will be correct alt readings,
asi impact pressure directly, and accurate temperature:
Fixed read_ext_adc by adding wait-for-nDrdy; hopefully works again now!
Fixed uart adc command
Created gpio.inc to avoid equate duplication in files
Removed magic numbers from writes to AD7705, replacing with equates
Swapped calibration order so channel 0 left selected when exit
Changed temperature sensor to be on channel 1 of external ADC
(but not display code yet)
Changed asipressure to work from internal adc (formerly used for temperature)
Removed reads of asipressure from scheduler (wouldn't have worked as
only one conversion can happen at a time, hence need for this big
change).
Changed ASI_M use, and removed ASI_C
17/09/02 Made scheduler frame 33 ticks rather than 32 ticks long.
Added in temperature frame
Made external adc unbuffered
Added gain setting code and use by uart.asm and measure.asm
18/09/02 Finished coding for temperature frame
Modified temperature display for new format
23/09/02 Added couple of missing bank selects in measure.asm following simulation.
25/09/02 Test latest software and hardware:
Clock is 1.008MHz x 4
Temperature now calibrated (works well!)
Unbuffered drain into ADC is 3ua
Need to change scheduler and rate as does occur at full rate, just
misses two outputs when change channels.
26/09/02 Modified hardware in effort to reduce noise:
Moved R29 +ve connection from pin3 alt to pin9
Moved R30 -ve connection from pin1 alt to pin10
Capacitor (10nf and 1uF) across pins 9 and 10
Moved sensor ground connection join to pin 16 of ad7705 (dgnd)
Moved R27 +ve to IC2.4 supply directly
Moved R28 -ve to IC2.11 gnd directly
Shielded AD7705 on top (copper tape)
47uF between pins 9 (+ve side) and 10 of IC3 improves things
Still noisy but 47uF has biggest effect on vario. Waggly though,
need to improve final stage amplification I think.
27/09/02 am Re-jiggled scheduler to 25Hz, reading temperature every tenth frame
on ticks 13 to 18. Altered ADC reads so just wrap round a 16 word
buffer irrespective.
Found reason why altitude wasn't being updated - it wasn't being
called from the scheduler!
Now subtract 127 from ASI reading in readiness for my cunning
re-working of the vario circuit (need to nab an op-amp from the
asi circuit leaving it a single-ended reading from differential
output).
Fixed UART-not-working bug (forgot a bcf status,irp)
Updated default value for ASI muliplier.
27/09/02 pm Fixed bug introduced above, didn't set update screen on temperature
scheduler tick 13 (minor bug!). Fixed bug in that didn't read and
store pressure adc also, result was temperature reading incorrect as
taking FSYNC resulted in it waiting for a read. I think.
Changed ADC gain to unity, as moving back to differential scheme.
About to rework hardware for this and improved (hopefully) vario. Can't
get any worse!
Update coeffients in download.bas and default ones in main.asm.
Reprogrammed in eeprom.
Removed single ended fudge for asi introduced above, above hardware
change will leave us an op-amp to do diff to single conversion.
Testing: Temperature works again now, and pressure alters as
expected when muck about with coefficients. Hardware next
then! Still funny on power-on now which didn't used to
get. OK if type RESET though.
29/09/02 Got modified hardware (from yesterday) working. Altimeter works anyway!
In theory vario should but isn't and need to look at with scope.
Took reading for 1026mbar and (after altering some scaling in hardware)
coded into software for default value of m. Altered back to BUFFERED
mode and made altimeter a gain of two (hence the hardware twiddle).
Move to 19200 baud rate, noticed had completely wrong number for baud
rate generator previously!
01/10/02 Vario seems to work! Swapped round R and C of differentiator (so
can also use as integrator for altitude now as well!) in attempt
to reduce noise.
Then noticed an incorrect connection hanging off pin 1 of IC2 (ie
altitude output). Noise disappeared but ADC now over-range as not
so loaded any more! Also unsnipped very long resistor leg which
could have been causing problems. Forgot to snip when soldering
it in a while back now ;)
Need to twiddle scaling again, fix watchdog-ing out on startup, and
start investigating barograph.
Yipee!
02/10/02 Ermm, was only working because had disconnected feedback resistor from
pin 1. Shows is amplifying genuine signal rather than noise though.
Consequently I've altered the gains again.
Moved clrwdt for measure routine in scheduler to before check. Think
is watchdog-ing out when changing adc channels (ie. when reading
temperature for first time on startup after doing other stuff).
Fixed display of QNE, had the endian of the word bytes wrong in lcd.asm.
03/10/02 Found bug in scheduler on startup (lacking a setpage)
Merged in new barograph code.
Returned to unbuffered
Remapped where code is to allow for growth!
06/10/02 Tidied up scheduler
Added and implemented use of separate update flags for QFE and QNH to
allow for fast or rapid-fire setting of indicated height using keys.
Changed timer 1 use of prescaler 1:1, slightly more accurate now as well.
08/10/02 Finished work on SEND. Altered end of barograph enumeration to
a 5-byte boundary; when reach here have "gone too far".
09/10/02 Debugged SEND.
Now cease barograph storing when reach end of buffer.
No longer write ffffffffff if at end of buffer and user ends timer.
Added end of barograph variable to make life easier!
10/10/02 Added barograph entries remaining to screen 3 display.
18/10/02 Now initialise end of barograph variable!
Recalculated ALT_M based on previous reading.
Fixed bug in new SEND (did not copy to R0 before send_char).
Changed send_char so takes wreg and not R0, thus saving many bytes
of program space.
30/10/02 Corrected last digit of barograph remaining (had addwf instead of addlw)
Added missing ,f to decfsz BARO_LEN in ee.asm
Added missing ", " to SEND command output
Fixed initialisation of barograph end pointer variable
Added initialisation of BARO_P to download.bas
Corrected mmi screen 3 so now stops barograph, resets pointer, and
immediately writes to eeprom when change barograph in use.
2/11/02 Updated circuit diagram with latest vario circuit!
Changed back to buffered mode as noise on sampling reads (2x1MHz/64)
wreaking havoc with the differentiator.
To get in buffer limit (Vdd-1.5V) altered gains ao 1050mbar is
now 3.5V; and set Vref to be 3.5V instead of 5.00V.
Rescaled temperature adc processing as now 5V/3.5V greater. Don't
have to alter pressure adc as 1050mbar is still maximum adc reading.
Fixed bug noticed in measure.asm - hasn't been calibrating temperature
adc for correct gain as forgot to use new equate instead of fixed GAIN_x.
3/11/02 Altered op-amp gains, yet again! Forgot that although within ad7705
buffered in headroom spec was outside of op-amp output capability!
Can't go within 1.2V of rail so therefore altered back so 1050mbar is
2.5V. Vario circuit adjusted back accordingly.
Kept yesterday's modifications otherwise the same except now reduce
Vref from 3.5V to 2.5V. Also take Ain2- (temperature) to this instead
of ground to subtract 2.5V from the temperature output and bring
within range of adc again.
Modified temperature calculation in software accordingly.
Fixed vario reading, was putting into 1s complement rather than 2s
which display and everything else was expecting. Hence eratic
reading, not noise (completely) after all!
Found bug - had missed off ,f from barograph pointer compare in ee.asm;
so was altering it instead of doing its job.
Found a bug in barograph, got rid of that and had bit of a tidy as
well.
Found *real* reason barograph wasn't storing. It actually was,
just lots of TAS for the first five frames! Forgot that the
default case was return and didn't bother checking if it was the
tick for storing TAS.
Altered CAL command to use most pressure adc buffer average.
6/11/02 Fixed temperature output in SEND bug (forgot to load it into R1R0!)
Back to top ... |