F1 Gantry Race Start Lights Controller
How to modify the timing data
The timing data and mode parameters are
stored in the EEPROM data memory of the PIC microcontroller. This can be
edited and reprogrammed by the end-user to customise the parameters to
suit a specific application.
You will need a PIC programmer to read
and reprogram the PIC16F684 microcontroller. I recommend the
Microchip PICkit2 using the stand-alone application software. This
has been used in the guide shown below.
Since the PIC microcontroller used
in the F1 Gantry Race Start Lights project has the Program Memory code protected it
is important that you DO NOT write the program memory area when writing
data back to the EEPROM.
By default it will overwrite the program memory unless you uncheck the
Program Memory Enabled option.
Remove the PIC microcontroller from the
control board and place in the PICkit2 programming adapter, (
if you don't have one see here for details of
how to make one)
Click on the 'Read' button. When
it has finished reading the PIC you should see something similar to the
- Device is a PIC16F684
- 'Code Protect' is shown in red
- The Program Memory contains all
- Source shows 'Read from
PIC16F684' so we know the data has been read out of the PIC
- 'Program Memory' check box
is Enabled - This should be unchecked before writing back to the
Uncheck 'Program Memory' enabled check
It is important that this is disabled
otherwise when the modified EEPROM data is written back, it will erase
the Program Memory area. If this happens, you will need to return
the PIC to us for reprogramming as it will no longer work.
You can now edit the data in the EEPROM
Data window. From August 15th 2012 kits ship with V4. firmware
- The parameters that can be changed
are shown below. An example of edited timing data is show in
the next step.
- The values entered in the EEPROM
Data window must be in hexadecimal. (see Decimal /
Hexadecimal Numbers section below if you don't know what this means)
- If you mess up at this point you
can go back to Step 2 and read the EEPROM again to clear any
changes you have made.
Firmware V3. EEPROM example
Firmware V4. EEPROM example
Firmware V5. EEPROM example
Decimal / Hexadecimal Numbers
If you don't understand
hexadecimal, use Google to do the conversion for you. In the
example below we want to convert 160 to a hexadecimal. The
result is shown as 0xA0. You ignore the 0x part and use the
last two digits for the EEPROM Data, in this example it would be A0
The largest decimal number that
can be used in the timing data is decimal 255 (hexadecimal FF)
Parameters that can be modified
The table below is copied from the main
project page for continuty.
The outputs can operate in
either bar or dot mode.
The timing diagram shows
all the parameters that can be configured. These can
be set from 0 to 25.5 seconds in 100mS intervals
Default timings shown as
decimal and (hex)
supplied in the kit.
; light mode value, 00 bar | 01 dot
0 (00) ; pre-light hold time value x 100mS [TP]
10 (0A) ; light 1 on time value x 100mS [TL1]
10 (0A) ; light 2 on time value x 100mS [TL2]
10 (0A) ; light 3 on time value x 100mS [TL3]
10 (0A) ; light 4 on time value x 100mS [TL4]
10 (0A) ; light 5 on time value x 100mS [TL5]
40 (28) ; end hold delay value x 100mS (or maximum random time) [TH]
0 (00) ; end mode: 0 for random end delay | 01 for
fixed end delay
5 (05) ; start gate output time value x 100mS [TSTC]
This gives 5 lights
illuminating in bar mode at 1 second intervals with a 0-4
second random delay at the end. Start gate output is
active for 0.5S
The screen shot below shows the EEPROM
Data with two values changed. This is an example and you can of
course edit all the timing parameters to suit your application.
- the 'End hold delay' value from 28
16 equals 22 in decimal so the end hold value is now 22 x 100mS =
- the 'End hold mode' value from 00
This changes the mode from a random end delay to a fixed delay; in
this case it will be 2.2 seconds since we also changed the 'End hold
- Source is showing as 'Edited'
This is because the EEPROM data has been changed from that read back
from the PIC in Step 2.
- In the EEPROM Data section it
shows 'Write and Read EEPROM data only'.
This is showing because 'Program Memory enabled' has been
When you have edited the EEPROM data to
suit your application you can reprogram the PIC by selecting the Write
Make sure that the 'Program Memory enabled' check box is UNCHECKED before
clicking on the Write button - hopefully you're getting the message :-)
Once the PIC has been reprogrammed it
can be installed back in the control PCB and tested.