├── images
├── PICkit.jpg
├── MPLAB_X_IDE.png
├── MPLAB_X_IPE.png
├── ATU-100_EXT_YAF.jpg
└── Calibrate_setup.png
├── ATU-100_YAF.X
├── adc.h
├── disp.h
├── menu.h
├── uart.h
├── button.h
├── defines.h
├── eeprom.h
├── utili.c
├── utili.h
├── nbproject
│ ├── Makefile-variables.mk
│ ├── Makefile-genesis.properties
│ ├── project.xml
│ ├── Makefile-impl.mk
│ ├── Makefile-local-default.mk
│ ├── configurations.xml
│ └── Makefile-default.mk
├── tune.h
├── eeprom.c
├── adc.c
├── font5x8.h
├── Makefile
├── button.c
├── uart.c
├── main.c
├── disp.c
├── tune.c
└── menu.c
├── .gitignore
├── LICENSE
├── README.md
└── dist
└── ATU-100_YAF_0V68.hex
/images/PICkit.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/images/PICkit.jpg
--------------------------------------------------------------------------------
/ATU-100_YAF.X/adc.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/adc.h
--------------------------------------------------------------------------------
/ATU-100_YAF.X/disp.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/disp.h
--------------------------------------------------------------------------------
/ATU-100_YAF.X/menu.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/menu.h
--------------------------------------------------------------------------------
/ATU-100_YAF.X/uart.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/uart.h
--------------------------------------------------------------------------------
/ATU-100_YAF.X/button.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/button.h
--------------------------------------------------------------------------------
/ATU-100_YAF.X/defines.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/defines.h
--------------------------------------------------------------------------------
/ATU-100_YAF.X/eeprom.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/eeprom.h
--------------------------------------------------------------------------------
/ATU-100_YAF.X/utili.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/utili.c
--------------------------------------------------------------------------------
/ATU-100_YAF.X/utili.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/ATU-100_YAF.X/utili.h
--------------------------------------------------------------------------------
/images/MPLAB_X_IDE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/images/MPLAB_X_IDE.png
--------------------------------------------------------------------------------
/images/MPLAB_X_IPE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/images/MPLAB_X_IPE.png
--------------------------------------------------------------------------------
/images/ATU-100_EXT_YAF.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/images/ATU-100_EXT_YAF.jpg
--------------------------------------------------------------------------------
/images/Calibrate_setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DG4SN/ATU-100-EXT-YAF/HEAD/images/Calibrate_setup.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /ATU-100_YAF.X/build
2 | /ATU-100_YAF.X/debug
3 | /ATU-100_YAF.X/dist
4 | /ATU-100_YAF.X/nbproject/private
5 |
6 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/nbproject/Makefile-variables.mk:
--------------------------------------------------------------------------------
1 | #
2 | # Generated - do not edit!
3 | #
4 | # NOCDDL
5 | #
6 | CND_BASEDIR=`pwd`
7 | # default configuration
8 | CND_ARTIFACT_DIR_default=dist/default/production
9 | CND_ARTIFACT_NAME_default=ATU-100_YAF.X.production.hex
10 | CND_ARTIFACT_PATH_default=dist/default/production/ATU-100_YAF.X.production.hex
11 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/tune.h:
--------------------------------------------------------------------------------
1 | /*
2 | * File: tune.h
3 | * Author: sven
4 | *
5 | * Created on 30. Juni 2022, 19:50
6 | */
7 |
8 | #ifndef TUNE_H
9 | #define TUNE_H
10 |
11 | #include "defines.h"
12 |
13 |
14 | #ifdef __cplusplus
15 | extern "C"
16 | {
17 | #endif
18 |
19 |
20 | #define TUNE_MIN_PWR 10 //10 = 1W
21 |
22 |
23 |
24 |
25 | typedef enum
26 | {
27 | TUNE_IDLE=1,
28 | TUNE_RUN=2,
29 | TUNE_BREAK=3,
30 | TUNE_PWRLOW=4,
31 | TUNE_READY=5
32 | } tunestate_t;
33 |
34 |
35 |
36 |
37 |
38 | extern tunestate_t TUNE_state;
39 |
40 | void TUNE_Init(void);
41 | void TUNE_Run(void);
42 |
43 |
44 |
45 |
46 | #ifdef __cplusplus
47 | }
48 | #endif
49 |
50 | #endif /* TUNE_H */
51 |
52 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/nbproject/Makefile-genesis.properties:
--------------------------------------------------------------------------------
1 | #
2 | #Tue Dec 27 17:24:42 CET 2022
3 | default.languagetoolchain.version=2.36
4 | default.Pack.dfplocation=C\:\\Program Files\\Microchip\\MPLABX\\v6.00\\packs\\Microchip\\PIC12-16F1xxx_DFP\\1.3.90
5 | conf.ids=default
6 | default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc8\\v2.36\\bin
7 | host.id=2rua-ogxv-qq
8 | configurations-xml=4c4faae0ea3c7ac91e8c9c18002299a0
9 | default.com-microchip-mplab-mdbcore-PICKit3Tool-PICkit3DbgToolManager.md5=da762f67e85632f6b187619070210246
10 | com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6e02ca5e9f5042ffd365b42ab82d3a9b
11 | user-defined-mime-resolver-xml=none
12 | default.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=ab1e0737b447a24f7366e9fd8fe5a2f0
13 | proj.dir=C\:\\Users\\sven\\Documents\\GitHub\\ATU-100-EXT-YAF\\ATU-100_YAF.X
14 | host.platform=windows
15 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 DG4SN
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/nbproject/project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | com.microchip.mplab.nbide.embedded.makeproject
4 |
5 |
6 | ATU-100_YAF
7 | e1ae4b54-01c3-47b3-b6bb-d6b616154a62
8 | 0
9 | c
10 |
11 | h
12 |
13 | ISO-8859-1
14 |
15 |
16 | .
17 |
18 |
19 |
20 | default
21 | 2
22 |
23 |
24 |
25 | false
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/eeprom.c:
--------------------------------------------------------------------------------
1 | /**
2 | * Eeprom function
3 | */
4 |
5 | #include "defines.h"
6 |
7 |
8 | void EEPROM_Init(void)
9 | {
10 | EEPROM_Read((uint8_t)&ee_tune_stop_swr, &global.tune_stop_swr, sizeof(global.tune_stop_swr));
11 | EEPROM_Read((uint8_t)&ee_tune_auto_swr, &global.tune_auto_swr, sizeof(global.tune_auto_swr));
12 | EEPROM_Read((uint8_t)&ee_tune_auto_enable, &global.tune_auto_enable, sizeof(global.tune_auto_enable));
13 | EEPROM_Read((uint8_t)&ee_sleep_delay_sec, &global.sleep_delay_sec, sizeof(global.sleep_delay_sec));
14 | EEPROM_Read((uint8_t)&ee_sleep_enable, &global.sleep_enable, sizeof(global.sleep_enable));
15 | EEPROM_Read((uint8_t)&ee_cal_point_0, &global.cal_point[0], sizeof(global.cal_point[0]));
16 | EEPROM_Read((uint8_t)&ee_cal_point_1, &global.cal_point[1], sizeof(global.cal_point[1]));
17 | EEPROM_Read((uint8_t)&ee_cal_offset, &global.cal_offset, sizeof(global.cal_offset));
18 | EEPROM_Read((uint8_t)&ee_cal_gain, &global.cal_gain, sizeof(global.cal_gain));
19 | }
20 |
21 |
22 | void EEPROM_Write(uint8_t addr, void *ptrValue, uint8_t size)
23 | {
24 | uint8_t *ptr = ptrValue;
25 | while(size >0)
26 | {
27 | eeprom_write(addr, *ptr);
28 | size--;
29 | addr++;
30 | ptr++;
31 | }
32 | }
33 |
34 |
35 | void EEPROM_Read(uint8_t addr, void *ptrValue, uint8_t size)
36 | {
37 | uint8_t *ptr = ptrValue;
38 | while(size >0)
39 | {
40 | *ptr = eeprom_read(addr);
41 | size--;
42 | addr++;
43 | ptr++;
44 | }
45 | }
--------------------------------------------------------------------------------
/ATU-100_YAF.X/adc.c:
--------------------------------------------------------------------------------
1 | /**
2 | * ADC functions
3 | */
4 | #include "defines.h"
5 |
6 | #define mV_per_Digit 4
7 |
8 | #define AVERAGE_DEEP 10
9 |
10 | static int16_t f_buffer[AVERAGE_DEEP];
11 | static int16_t r_buffer[AVERAGE_DEEP];
12 |
13 |
14 | void ADC_Init(void)
15 | {
16 |
17 | //Set Ports
18 | //ANSELAbits.ANSELA = 0;
19 |
20 | ADC_REVERSE_DIR = DIR_INPUT;
21 | ADC_REVERSE_SEL = 1;
22 |
23 | ADC_FORWARD_DIR = DIR_INPUT;
24 | ADC_FORWARD_SEL = 1;
25 |
26 |
27 |
28 |
29 | FVRCON = 0b10000011; // ADC 4096 mV Vref
30 | //while (FVRCONbits.FVRRDY == 0);
31 |
32 | //ADCON1 settings
33 | ADCON1bits.ADFM = 1; //right justified format
34 | ADCON1bits.ADCS = 2; //Fosc/32
35 |
36 | ADCON1bits.ADNREF = 0; //negative Ref to Vss
37 | ADCON1bits.ADPREF = 3; //positive Ref to FVR module
38 |
39 |
40 | //ADCON0 settings
41 | ADCON0bits.ADON = 1;
42 | }
43 |
44 | int16_t ADC_GetSample(uint8_t ch)
45 | {
46 | ADCON0bits.CHS = ch;
47 | DELAY_5_us();
48 | ADCON0bits.ADGO = 1; /* start A/D */
49 | while (ADCON0bits.ADGO == 1);
50 | int16_t hi = ADRESH;
51 |
52 | return (((hi << 8) + ADRESL) * mV_per_Digit);
53 |
54 | }
55 |
56 |
57 | void ADC_Run(void)
58 | {
59 | // int16_t value;
60 | // int32_t average;
61 |
62 | int32_t f_sum =0;
63 | int32_t r_sum =0;
64 |
65 | uint8_t i;
66 | uint8_t s;
67 |
68 | //move buffer
69 | s=0;
70 | for(i=0; i < (AVERAGE_DEEP -1); i++)
71 | {
72 | s++;
73 | f_sum += f_buffer[i] = f_buffer[s];
74 | r_sum += r_buffer[i] = r_buffer[s];
75 | }
76 |
77 | f_sum += f_buffer[s] = ADC_GetSample(ADC_FORWARD_CH);
78 | r_sum += r_buffer[s] = ADC_GetSample(ADC_REVERSE_CH);
79 |
80 |
81 | //cal average
82 | global.adc_f_mV = (int16_t)(f_sum / AVERAGE_DEEP);
83 | global.adc_r_mV = (int16_t)(r_sum / AVERAGE_DEEP);
84 |
85 | }
86 |
87 |
88 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/nbproject/Makefile-impl.mk:
--------------------------------------------------------------------------------
1 | #
2 | # Generated Makefile - do not edit!
3 | #
4 | # Edit the Makefile in the project folder instead (../Makefile). Each target
5 | # has a pre- and a post- target defined where you can add customization code.
6 | #
7 | # This makefile implements macros and targets common to all configurations.
8 | #
9 | # NOCDDL
10 |
11 |
12 | # Building and Cleaning subprojects are done by default, but can be controlled with the SUB
13 | # macro. If SUB=no, subprojects will not be built or cleaned. The following macro
14 | # statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf
15 | # and .clean-reqprojects-conf unless SUB has the value 'no'
16 | SUB_no=NO
17 | SUBPROJECTS=${SUB_${SUB}}
18 | BUILD_SUBPROJECTS_=.build-subprojects
19 | BUILD_SUBPROJECTS_NO=
20 | BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}}
21 | CLEAN_SUBPROJECTS_=.clean-subprojects
22 | CLEAN_SUBPROJECTS_NO=
23 | CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}}
24 |
25 |
26 | # Project Name
27 | PROJECTNAME=ATU-100_YAF.X
28 |
29 | # Active Configuration
30 | DEFAULTCONF=default
31 | CONF=${DEFAULTCONF}
32 |
33 | # All Configurations
34 | ALLCONFS=default
35 |
36 |
37 | # build
38 | .build-impl: .build-pre
39 | ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf
40 |
41 |
42 | # clean
43 | .clean-impl: .clean-pre
44 | ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf
45 |
46 | # clobber
47 | .clobber-impl: .clobber-pre .depcheck-impl
48 | ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean
49 |
50 |
51 |
52 | # all
53 | .all-impl: .all-pre .depcheck-impl
54 | ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build
55 |
56 |
57 |
58 | # dependency checking support
59 | .depcheck-impl:
60 | # @echo "# This code depends on make tool being used" >.dep.inc
61 | # @if [ -n "${MAKE_VERSION}" ]; then \
62 | # echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \
63 | # echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \
64 | # echo "include \$${DEPFILES}" >>.dep.inc; \
65 | # echo "endif" >>.dep.inc; \
66 | # else \
67 | # echo ".KEEP_STATE:" >>.dep.inc; \
68 | # echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \
69 | # fi
70 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/nbproject/Makefile-local-default.mk:
--------------------------------------------------------------------------------
1 | #
2 | # Generated Makefile - do not edit!
3 | #
4 | #
5 | # This file contains information about the location of compilers and other tools.
6 | # If you commmit this file into your revision control server, you will be able to
7 | # to checkout the project and build it from the command line with make. However,
8 | # if more than one person works on the same project, then this file might show
9 | # conflicts since different users are bound to have compilers in different places.
10 | # In that case you might choose to not commit this file and let MPLAB X recreate this file
11 | # for each user. The disadvantage of not commiting this file is that you must run MPLAB X at
12 | # least once so the file gets created and the project can be built. Finally, you can also
13 | # avoid using this file at all if you are only building from the command line with make.
14 | # You can invoke make with the values of the macros:
15 | # $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ...
16 | #
17 | SHELL=cmd.exe
18 | PATH_TO_IDE_BIN=C:/Program Files/Microchip/MPLABX/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/
19 | # Adding MPLAB X bin directory to path.
20 | PATH:=C:/Program Files/Microchip/MPLABX/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH)
21 | # Path to java used to run MPLAB X when this makefile was created
22 | MP_JAVA_PATH="C:\Program Files\Microchip\MPLABX\v6.00\sys\java\zulu8.54.0.21-ca-fx-jre8.0.292-win_x64/bin/"
23 | OS_CURRENT="$(shell uname -s)"
24 | MP_CC="C:\Program Files\Microchip\xc8\v2.36\bin\xc8-cc.exe"
25 | # MP_CPPC is not defined
26 | # MP_BC is not defined
27 | MP_AS="C:\Program Files\Microchip\xc8\v2.36\bin\xc8-cc.exe"
28 | MP_LD="C:\Program Files\Microchip\xc8\v2.36\bin\xc8-cc.exe"
29 | MP_AR="C:\Program Files\Microchip\xc8\v2.36\bin\xc8-ar.exe"
30 | DEP_GEN=${MP_JAVA_PATH}java -jar "C:/Program Files/Microchip/MPLABX/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar"
31 | MP_CC_DIR="C:\Program Files\Microchip\xc8\v2.36\bin"
32 | # MP_CPPC_DIR is not defined
33 | # MP_BC_DIR is not defined
34 | MP_AS_DIR="C:\Program Files\Microchip\xc8\v2.36\bin"
35 | MP_LD_DIR="C:\Program Files\Microchip\xc8\v2.36\bin"
36 | MP_AR_DIR="C:\Program Files\Microchip\xc8\v2.36\bin"
37 | # MP_BC_DIR is not defined
38 | DFP_DIR=C:/Program Files/Microchip/MPLABX/v6.00/packs/Microchip/PIC12-16F1xxx_DFP/1.3.90
39 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Antenna tuner - ATU-100 EXT - Yet Another Firmware
2 | 
3 |
4 | ## Motivation
5 | After I have bought a Chinese clone of N7DDC Antenna tune ATU-100 EXT I wasn’t really satisfied.
6 | The tuner was not able to work with my QRP transmitter. Also the shown power was very inaccurate.
7 | I have seen some room for improvement in the firmware. Unfortunately the original firmware of N7DDC was written under the mikroC IDE that is not available for free. So I decided to start the project from scratch with the Microchip MPLAB X IDE.
8 |
9 | ## The original project by N7DDC
10 | https://github.com/Dfinitski/N7DDC-ATU-100-mini-and-extended-boards
11 |
12 | ## Imported Notes
13 | This firmware only works with the ATU-100_EXT (7x7) hardware, the PIC16F1938 MCU and the OLED Display 128x64px.
14 | Before you start please make a backup of the original firmware and be sure that you can restore it.
15 | ```diff
16 | - You act at your own risk!
17 | ```
18 | ## Features
19 | + Function menu on display – one button operation
20 | + 10 memory slots for tune-settings one of them as a startup setting
21 | + Calibration function for the integrated power meter
22 | + Configurable Auto-Tune function
23 | + Sleep function for battery saving
24 | + Temporary Bypass function
25 |
26 | ## Button functions
27 | **Button short pressed:** _____ *Start Tuning or select next item*
28 |
29 | **Button long pressed:** ______ *Enter Menu or change value*
30 |
31 | ## Menu-tree
32 | + Bypass ______*Temporary bypass the current tune settings*
33 | + Load Tune __ *Load tune setting from memory slots*
34 | + Save Tune __ *Save the current tune settings in 10 memory slots*
35 | + Reset ______ *Reset the current tune settings*
36 | + Setup
37 | - Tuning _____ *Set tune parameters (Auto tune on/off)*
38 | * Sleep ______ *Set sleep mode and time*
39 | * Calibrate __ *Calibrate the power measurement at two points*
40 | * Test _______ *Test function for each relay*
41 | + About ______ *Who did it*
42 |
43 | ## Calibration
44 | The firmware includes a two point calibration function for the integrated power meter.
45 | It is recommend to calibrate on the lowest (max 10W) and highest (max 100W) used power level.
46 | For calibration you need a transmitter with adjustable TX power and a dummy load.
47 | 
48 |
49 | ## Programmer
50 | For programming a PICkit3 programmer is used.
51 | When the ATU-100 is switched off, connect it in the shown way.
52 | After that switch on the ATU-100.
53 | 
54 |
55 | ## Programming Tool
56 | If you only like to flash the firmware you can use the Microchip Integrated Programming Environment
57 | **MPLAB X IPE**.
58 | The needed hex-file you find in the *dist* folder.
59 | 
60 |
61 | ## Development IDE
62 | For development the Microchip **MPLAB X IDE v6.00** was used.
63 | The IDE is available for free on the Microchip web side.
64 | 
65 |
66 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/font5x8.h:
--------------------------------------------------------------------------------
1 | static const char font5x8[] = {
2 | //
3 | 0x00, 0x00, 0x00, 0x00, 0x00,// (space)
4 | 0x00, 0x00, 0x5F, 0x00, 0x00,// !
5 | 0x00, 0x07, 0x00, 0x07, 0x00,// "
6 | 0x14, 0x7F, 0x14, 0x7F, 0x14,// #
7 | 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
8 | 0x23, 0x13, 0x08, 0x64, 0x62,// %
9 | 0x36, 0x49, 0x55, 0x22, 0x50,// &
10 | 0x00, 0x05, 0x03, 0x00, 0x00,// '
11 | 0x00, 0x1C, 0x22, 0x41, 0x00,// (
12 | 0x00, 0x41, 0x22, 0x1C, 0x00,// )
13 | 0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
14 | 0x08, 0x08, 0x3E, 0x08, 0x08,// +
15 | 0x00, 0x50, 0x30, 0x00, 0x00,// ,
16 | 0x08, 0x08, 0x08, 0x08, 0x08,// -
17 | 0x00, 0x30, 0x30, 0x00, 0x00,// .
18 | 0x20, 0x10, 0x08, 0x04, 0x02,// /
19 | 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
20 | 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
21 | 0x42, 0x61, 0x51, 0x49, 0x46,// 2
22 | 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
23 | 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
24 | 0x27, 0x45, 0x45, 0x45, 0x39,// 5
25 | 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
26 | 0x01, 0x71, 0x09, 0x05, 0x03,// 7
27 | 0x36, 0x49, 0x49, 0x49, 0x36,// 8
28 | 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
29 | 0x00, 0x36, 0x36, 0x00, 0x00,// :
30 | 0x00, 0x56, 0x36, 0x00, 0x00,// ;
31 | 0x00, 0x08, 0x14, 0x22, 0x41,// <
32 | 0x14, 0x14, 0x14, 0x14, 0x14,// =
33 | 0x41, 0x22, 0x14, 0x08, 0x00,// >
34 | 0x02, 0x01, 0x51, 0x09, 0x06,// ?
35 | 0x32, 0x49, 0x79, 0x41, 0x3E,// @
36 | 0x7E, 0x11, 0x11, 0x11, 0x7E,// A
37 | 0x7F, 0x49, 0x49, 0x49, 0x36,// B
38 | 0x3E, 0x41, 0x41, 0x41, 0x22,// C
39 | 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
40 | 0x7F, 0x49, 0x49, 0x49, 0x41,// E
41 | 0x7F, 0x09, 0x09, 0x01, 0x01,// F
42 | 0x3E, 0x41, 0x41, 0x51, 0x32,// G
43 | 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
44 | 0x00, 0x41, 0x7F, 0x41, 0x00,// I
45 | 0x20, 0x40, 0x41, 0x3F, 0x01,// J
46 | 0x7F, 0x08, 0x14, 0x22, 0x41,// K
47 | 0x7F, 0x40, 0x40, 0x40, 0x40,// L
48 | 0x7F, 0x02, 0x04, 0x02, 0x7F,// M
49 | 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
50 | 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
51 | 0x7F, 0x09, 0x09, 0x09, 0x06,// P
52 | 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
53 | 0x7F, 0x09, 0x19, 0x29, 0x46,// R
54 | 0x46, 0x49, 0x49, 0x49, 0x31,// S
55 | 0x01, 0x01, 0x7F, 0x01, 0x01,// T
56 | 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
57 | 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
58 | 0x7F, 0x20, 0x18, 0x20, 0x7F,// W
59 | 0x63, 0x14, 0x08, 0x14, 0x63,// X
60 | 0x03, 0x04, 0x78, 0x04, 0x03,// Y
61 | 0x61, 0x51, 0x49, 0x45, 0x43,// Z
62 | 0x00, 0x00, 0x7F, 0x41, 0x41,// [
63 | 0x02, 0x04, 0x08, 0x10, 0x20,// "\"
64 | 0x41, 0x41, 0x7F, 0x00, 0x00,// ]
65 | 0x04, 0x02, 0x01, 0x02, 0x04,// ^
66 | 0x40, 0x40, 0x40, 0x40, 0x40,// _
67 | 0x00, 0x01, 0x02, 0x04, 0x00,// `
68 | 0x20, 0x54, 0x54, 0x54, 0x78,// a
69 | 0x7F, 0x48, 0x44, 0x44, 0x38,// b
70 | 0x38, 0x44, 0x44, 0x44, 0x20,// c
71 | 0x38, 0x44, 0x44, 0x48, 0x7F,// d
72 | 0x38, 0x54, 0x54, 0x54, 0x18,// e
73 | 0x08, 0x7E, 0x09, 0x01, 0x02,// f
74 | 0x08, 0x14, 0x54, 0x54, 0x3C,// g
75 | 0x7F, 0x08, 0x04, 0x04, 0x78,// h
76 | 0x00, 0x44, 0x7D, 0x40, 0x00,// i
77 | 0x20, 0x40, 0x44, 0x3D, 0x00,// j
78 | 0x00, 0x7F, 0x10, 0x28, 0x44,// k
79 | 0x00, 0x41, 0x7F, 0x40, 0x00,// l
80 | 0x7C, 0x04, 0x18, 0x04, 0x78,// m
81 | 0x7C, 0x08, 0x04, 0x04, 0x78,// n
82 | 0x38, 0x44, 0x44, 0x44, 0x38,// o
83 | 0x7C, 0x14, 0x14, 0x14, 0x08,// p
84 | 0x08, 0x14, 0x14, 0x18, 0x7C,// q
85 | 0x7C, 0x08, 0x04, 0x04, 0x08,// r
86 | 0x48, 0x54, 0x54, 0x54, 0x20,// s
87 | 0x04, 0x3F, 0x44, 0x40, 0x20,// t
88 | 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
89 | 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
90 | 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
91 | 0x44, 0x28, 0x10, 0x28, 0x44,// x
92 | 0x0C, 0x50, 0x50, 0x50, 0x3C,// y
93 | 0x44, 0x64, 0x54, 0x4C, 0x44,// z
94 | 0x00, 0x08, 0x36, 0x41, 0x00,// {
95 | 0x00, 0x00, 0x7F, 0x00, 0x00,// |
96 | 0x00, 0x41, 0x36, 0x08, 0x00,// }
97 | 0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
98 | 0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
99 | };
100 | //
--------------------------------------------------------------------------------
/ATU-100_YAF.X/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # There exist several targets which are by default empty and which can be
3 | # used for execution of your targets. These targets are usually executed
4 | # before and after some main targets. They are:
5 | #
6 | # .build-pre: called before 'build' target
7 | # .build-post: called after 'build' target
8 | # .clean-pre: called before 'clean' target
9 | # .clean-post: called after 'clean' target
10 | # .clobber-pre: called before 'clobber' target
11 | # .clobber-post: called after 'clobber' target
12 | # .all-pre: called before 'all' target
13 | # .all-post: called after 'all' target
14 | # .help-pre: called before 'help' target
15 | # .help-post: called after 'help' target
16 | #
17 | # Targets beginning with '.' are not intended to be called on their own.
18 | #
19 | # Main targets can be executed directly, and they are:
20 | #
21 | # build build a specific configuration
22 | # clean remove built files from a configuration
23 | # clobber remove all built files
24 | # all build all configurations
25 | # help print help mesage
26 | #
27 | # Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
28 | # .help-impl are implemented in nbproject/makefile-impl.mk.
29 | #
30 | # Available make variables:
31 | #
32 | # CND_BASEDIR base directory for relative paths
33 | # CND_DISTDIR default top distribution directory (build artifacts)
34 | # CND_BUILDDIR default top build directory (object files, ...)
35 | # CONF name of current configuration
36 | # CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
37 | # CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
38 | # CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
39 | # CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
40 | # CND_PACKAGE_NAME_${CONF} name of package (current configuration)
41 | # CND_PACKAGE_PATH_${CONF} path to package (current configuration)
42 | #
43 | # NOCDDL
44 |
45 |
46 | # Environment
47 | MKDIR=mkdir
48 | CP=cp
49 | CCADMIN=CCadmin
50 | RANLIB=ranlib
51 |
52 |
53 | # build
54 | build: .build-post
55 |
56 | .build-pre:
57 | # Add your pre 'build' code here...
58 |
59 | .build-post: .build-impl
60 | # Add your post 'build' code here...
61 |
62 |
63 | # clean
64 | clean: .clean-post
65 |
66 | .clean-pre:
67 | # Add your pre 'clean' code here...
68 | # WARNING: the IDE does not call this target since it takes a long time to
69 | # simply run make. Instead, the IDE removes the configuration directories
70 | # under build and dist directly without calling make.
71 | # This target is left here so people can do a clean when running a clean
72 | # outside the IDE.
73 |
74 | .clean-post: .clean-impl
75 | # Add your post 'clean' code here...
76 |
77 |
78 | # clobber
79 | clobber: .clobber-post
80 |
81 | .clobber-pre:
82 | # Add your pre 'clobber' code here...
83 |
84 | .clobber-post: .clobber-impl
85 | # Add your post 'clobber' code here...
86 |
87 |
88 | # all
89 | all: .all-post
90 |
91 | .all-pre:
92 | # Add your pre 'all' code here...
93 |
94 | .all-post: .all-impl
95 | # Add your post 'all' code here...
96 |
97 |
98 | # help
99 | help: .help-post
100 |
101 | .help-pre:
102 | # Add your pre 'help' code here...
103 |
104 | .help-post: .help-impl
105 | # Add your post 'help' code here...
106 |
107 |
108 |
109 | # include project implementation makefile
110 | include nbproject/Makefile-impl.mk
111 |
112 | # include project make variables
113 | include nbproject/Makefile-variables.mk
114 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/button.c:
--------------------------------------------------------------------------------
1 | #include "defines.h"
2 |
3 | //button_state_t BUTTON_state;
4 |
5 | uint8_t BUTTON_count;
6 | uint8_t BUTTON_was_long_pressed;
7 | uint8_t BUTTON_Auto_count;
8 | uint8_t BUTTON_Bypass_count;
9 |
10 |
11 | void BUTTON_Init(void)
12 | {
13 | BUTTON_TUNE_DIR = DIR_INPUT;
14 | BUTTON_TUNE_PULLUP = 1;
15 |
16 | BUTTON_AUTO_DIR = DIR_INPUT;
17 | BUTTON_AUTO_PULLUP = 1;
18 |
19 | BUTTON_BYPASS_DIR = DIR_INPUT;
20 | BUTTON_BYPASS_PULLUP = 1;
21 |
22 | //BUTTON_state.byte = BUTTON_STATE_RESET;
23 | }
24 |
25 |
26 | void BUTTON_Reset(void)
27 | {
28 | BUTTON_count=BUTTON_RESET;
29 | BUTTON_was_long_pressed =0;
30 | }
31 |
32 | void BUTTON_Run(void)
33 | {
34 | //static uint8_t count;
35 |
36 |
37 | //Decouncing
38 | // static uint8_t last;
39 | // if (BUTTON_TUNE_R != last)
40 | // {
41 | // last = BUTTON_TUNE_R;
42 | // return;
43 | // }
44 |
45 | //-----------------------------------------------------------------------
46 | //if(BUTTON_count > BUTTON_MAX_COUNT)
47 | //{
48 | // BUTTON_count=BUTTON_IDLE;
49 | //}
50 |
51 | if (BUTTON_TUNE_R == 0) //Button pressed
52 | {
53 | if(BUTTON_count < BUTTON_MAX_COUNT)
54 | {
55 | BUTTON_count++;
56 | }
57 |
58 | if(BUTTON_count == BUTTON_LONG_PRESSED)
59 | {
60 | BUTTON_was_long_pressed =1;
61 | }
62 |
63 | }
64 | else
65 | {
66 | if((!BUTTON_was_long_pressed) && (BUTTON_count > 0) && (BUTTON_count <= BUTTON_MAX_COUNT))
67 | {
68 | BUTTON_count = BUTTON_RELEASED;
69 | }
70 | else
71 | {
72 | BUTTON_count =BUTTON_IDLE;
73 | }
74 |
75 | BUTTON_was_long_pressed =0;
76 | }
77 |
78 |
79 | //-----------------------------------------------------------------------
80 |
81 | // if (BUTTON_TUNE_R == 0) //Button pressed
82 | // {
83 | // if(BUTTON_state.bits.Reset ==0)
84 | // {
85 | //
86 | // BUTTON_state.bits.State_Released = 0;
87 | // BUTTON_state.bits.Trig_Released = 0;
88 | //
89 | //
90 | // if (BUTTON_state.bits.State_Pressed == 0)
91 | // {
92 | // BUTTON_state.bits.State_Pressed = 1;
93 | // BUTTON_state.bits.Trig_Pressed = 1;
94 | // BUTTON_state.bits.Enable_Released =1;
95 | // }
96 | //
97 | // count++;
98 | // if(count == BUTTON_LONG_PRESS_RE_TRIGGER)
99 | // {
100 | // count = BUTTON_LONG_PRESS_TRIGGER;
101 | // }
102 | //
103 | // //Long Pressed
104 | // if (count == BUTTON_LONG_PRESS_TRIGGER)
105 | // {
106 | // BUTTON_state.bits.State_LongPressed = 1;
107 | // BUTTON_state.bits.Trig_LongPressed = 1;
108 | // }
109 | //
110 | // }
111 | // }
112 | // else
113 | // {
114 | // if(BUTTON_state.bits.Enable_Released) //Only when pressed set released
115 | // {
116 | // if (BUTTON_state.bits.State_Released == 0)
117 | // {
118 | // BUTTON_state.bits.State_Released = 1;
119 | // BUTTON_state.bits.Trig_Released = 1;
120 | // }
121 | // }
122 | //
123 | // BUTTON_state.bits.State_Pressed = 0;
124 | // BUTTON_state.bits.Trig_Pressed = 0;
125 | // BUTTON_state.bits.State_LongPressed = 0;
126 | // BUTTON_state.bits.Trig_LongPressed = 0;
127 | // BUTTON_state.bits.Reset =0;
128 | // count = 0;
129 | //
130 | // }
131 |
132 | // Button Auto -------------------------------------------------
133 | if (BUTTON_AUTO_R == 0) //Button pressed
134 | {
135 | BUTTON_Auto_count++;
136 | if(BUTTON_Auto_count >= BUTTON_AUTO_RE_TRIGGER)
137 | {
138 | BUTTON_Auto_count=1;
139 | }
140 | }
141 | else
142 | {
143 | BUTTON_Auto_count =0;
144 | }
145 |
146 | // Button Bypass -------------------------------------------------
147 | if (BUTTON_BYPASS_R == 0) //Button pressed
148 | {
149 | BUTTON_Bypass_count++;
150 | if(BUTTON_Bypass_count >= BUTTON_AUTO_RE_TRIGGER)
151 | {
152 | BUTTON_Bypass_count=1;
153 | }
154 | }
155 | else
156 | {
157 | BUTTON_Bypass_count =0;
158 | }
159 |
160 | }
161 |
162 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/uart.c:
--------------------------------------------------------------------------------
1 | #include "defines.h"
2 |
3 | #ifdef DEBUG_UART
4 |
5 | // the CPU clock is 4 Mhz, so to convert to microseconds, there are
6 | // 4 clocks per usec
7 |
8 | #define BD9600 400
9 | #define BD38400 84
10 | #define BD115200 18
11 | #define BIT_DELAY() _delay((unsigned long)(BD115200))
12 |
13 |
14 |
15 | #define ESC_CLR_SCREEN "\033[2J"
16 | #define ESC_CURSOR_HOME "\033[H"
17 |
18 | static char uart_buffer[UART_BUFFER_SIZE];
19 | static uint8_t uart_write_pos;
20 | static uint8_t uart_read_pos;
21 | static uint8_t uart_step;
22 | static uint8_t uart_cap_sw;
23 | static uint8_t uart_coarse_cap;
24 | static uint8_t uart_coarse_ind;
25 |
26 | void UART_Init(void)
27 | {
28 | UART_PIN_W = 1;
29 | UART_PIN_DIR = DIR_OUTPUT;
30 | uart_read_pos=0;
31 | uart_write_pos=0;
32 | uart_step=0;
33 | }
34 |
35 | uint8_t UART_Busy(void)
36 | {
37 | return(uart_write_pos);
38 | }
39 |
40 |
41 | void UART_SendChar(char c)
42 | {
43 | unsigned char i;
44 | INTCONbits.GIE = 0; // Disable Global Interrupt
45 | UART_PIN_W = 0; // Start bit
46 | BIT_DELAY();
47 | for (i = 8; i != 0; --i)
48 | {
49 | if (c & 0x01)
50 | {
51 | UART_PIN_W = 1; // Begin with LSB
52 | } else
53 | {
54 | UART_PIN_W = 0;
55 | }
56 | c >>= 1;
57 | BIT_DELAY();
58 | }
59 | UART_PIN_W = 1; // Stop bit
60 | INTCONbits.GIE = 1; // Enable Global Interrupt
61 | BIT_DELAY();
62 | BIT_DELAY(); // add some extra delays after the stop bit
63 |
64 | }
65 |
66 | void UART_WriteChar(char c)
67 | {
68 | if (uart_write_pos < (UART_BUFFER_SIZE - 1))
69 | {
70 | uart_buffer[uart_write_pos++] = c;
71 | }
72 | }
73 |
74 | void UART_WriteStr(char *str)
75 | {
76 | while (*str != 0)
77 | {
78 | UART_WriteChar(*str++);
79 | }
80 | }
81 |
82 | void UART_WriteStrLn(char *str)
83 | {
84 | UART_WriteStr(str);
85 | UART_WriteChar(0x0d); // send a CR
86 | UART_WriteChar(0x0a); // send a LF
87 | }
88 |
89 |
90 |
91 | void UART_WriteLn(void)
92 | {
93 | UART_WriteChar(0x0d); // send a CR
94 | UART_WriteChar(0x0a); // send a LF
95 | }
96 |
97 |
98 | void UART_WriteInt(int16_t value)
99 | {
100 | char buffer[5];
101 | UTILI_Int2Str(value, buffer, sizeof(buffer));
102 | UART_WriteStr(buffer);
103 | }
104 |
105 |
106 |
107 | void UART_Run(void)
108 | {
109 | if (uart_read_pos != uart_write_pos)
110 | {
111 | UART_SendChar(uart_buffer[uart_read_pos++]);
112 | }
113 | else
114 | {
115 | uart_read_pos=0;
116 | uart_write_pos=0;
117 | }
118 | }
119 |
120 |
121 | //void UART_Run(void)
122 | //{
123 | // if (uart_read_pos != uart_write_pos)
124 | // {
125 | // UART_SendChar(uart_buffer[uart_read_pos++]);
126 | // }
127 | // else
128 | // {
129 | // uart_read_pos=0;
130 | // uart_write_pos=0;
131 | //
132 | // switch (uart_step) {
133 | //
134 | // case 0:
135 | // UART_WriteStr(ESC_CLR_SCREEN);
136 | // uart_step=1;
137 | // break;
138 | //
139 | // case 1:
140 | // uart_cap_sw =0;
141 | // uart_coarse_cap =0;
142 | // uart_coarse_ind =0;
143 | // UART_WriteStr(ESC_CURSOR_HOME);
144 | // uart_step=2;
145 | // break;
146 | //
147 | // case 2:
148 | // UTILI_Int2Str(TUNE_results[uart_cap_sw][uart_coarse_ind][uart_coarse_cap], uart_buffer, 5);
149 | // uart_write_pos=5;
150 | //
151 | // uart_coarse_cap++;
152 | // if (uart_coarse_cap >= COARSE_STEPS)
153 | // {
154 | // uart_coarse_cap=0;
155 | // uart_coarse_ind++;
156 | // UART_WriteChar(0x0d); // send a CR
157 | // UART_WriteChar(0x0a); // send a LF
158 | //
159 | // if (uart_coarse_ind >= COARSE_STEPS)
160 | // {
161 | // uart_coarse_ind=0;
162 | // UART_WriteChar(0x0d); // send a CR
163 | // UART_WriteChar(0x0a); // send a LF
164 | // if (uart_cap_sw == 0)
165 | // {
166 | // uart_cap_sw = 1;
167 | // } else
168 | // {
169 | // uart_step=1;
170 | // }
171 | //
172 | // }
173 | // }
174 | // break;
175 | //
176 | // default:
177 | // uart_step=0;
178 | // break;
179 | //
180 | // }
181 | // }
182 | //}
183 |
184 | #endif
--------------------------------------------------------------------------------
/ATU-100_YAF.X/main.c:
--------------------------------------------------------------------------------
1 | /**
2 | * ATU-100_EXT_YAF
3 | * Yet Another Firmware
4 | * by DG4SN
5 | */
6 |
7 | // PIC16F1938 Configuration Bit Settings
8 |
9 | // CONFIG1
10 | #pragma config FOSC = ECH // Oscillator Selection (ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin)
11 | #pragma config WDTE = ON // Watchdog Timer Enable (WDT enabled)
12 | #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
13 | #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
14 | #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
15 | #pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
16 | #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
17 | #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
18 | #pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled)
19 | #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
20 |
21 | // CONFIG2
22 | #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
23 | #pragma config VCAPEN = OFF // Voltage Regulator Capacitor Enable (All VCAP pin functionality is disabled)
24 | #pragma config PLLEN = ON // PLL Enable (4x PLL enabled)
25 | #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
26 | #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
27 | #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
28 |
29 |
30 | #include "defines.h"
31 |
32 | global_t global;
33 |
34 |
35 | static volatile uint8_t tick_count =0;
36 |
37 | void MAIN_Init(void)
38 | {
39 |
40 |
41 |
42 | //Clock
43 | OSCCON = 0b01111010; // 16 MHz oscillator, Internal
44 |
45 | //All Ports off
46 | LATA = 0;
47 | LATB = 0;
48 | LATC = 0;
49 |
50 |
51 |
52 |
53 |
54 | //Timer 2
55 | //set to 1ms = 1000Hz
56 | //Fosc/4 = 4Mhz, Prescaler 1:16, Comp value 250, Postscaler 1:1
57 |
58 | T2CONbits.T2CKPS = 2; //Prescaler 1:16
59 | T2CONbits.T2OUTPS = 0; //Postscaler 1:1
60 | PR2 = 250; //Periode Register
61 |
62 | PIE1bits.TMR2IE = 1; //Timer 2 interrupt enable
63 | INTCONbits.PEIE = 1; // Enable Perpherial Interrupt
64 |
65 | T2CONbits.TMR2ON = 1; //Timer on
66 | INTCONbits.GIE = 1; // Enable Global Interrupt
67 |
68 |
69 |
70 |
71 | // Set watchdog
72 | // CLRWDT();
73 | // WDTCONbits.WDTPS4 = 0;
74 | // WDTCONbits.WDTPS3 = 1;
75 | // WDTCONbits.WDTPS2 = 0; // 1 sec WDT
76 | // WDTCONbits.WDTPS1 = 1;
77 | // WDTCONbits.WDTPS0 = 0;
78 | // CLRWDT();
79 |
80 |
81 | ANSELBbits.ANSELB = 0; // all as digital
82 |
83 | CM1CON0bits.C1ON = 0; // Disable comparators
84 | CM2CON0bits.C2ON = 0;
85 |
86 |
87 |
88 |
89 | // // If we are using the auto button for an output for uart
90 | // // set B1 (auto) to an output
91 | //#ifdef DEBUG_UART
92 | // TRISB = 0b00000101;
93 | //#else
94 | // TRISB = 0b00000111;
95 | //#endif
96 | //
97 | //
98 | // TRISC = 0b00000000; //
99 | // //
100 | // //ADC_Init();
101 |
102 | //Init Relays
103 | REL_CAP_1_DIR = DIR_OUTPUT;
104 | REL_CAP_2_DIR = DIR_OUTPUT;
105 | REL_CAP_3_DIR = DIR_OUTPUT;
106 | REL_CAP_4_DIR = DIR_OUTPUT;
107 | REL_CAP_5_DIR = DIR_OUTPUT;
108 | REL_CAP_6_DIR = DIR_OUTPUT;
109 | REL_CAP_7_DIR = DIR_OUTPUT;
110 | REL_CAP_SW_DIR = DIR_OUTPUT;
111 |
112 | REL_IND_1_DIR = DIR_OUTPUT;
113 | REL_IND_2_DIR = DIR_OUTPUT;
114 | REL_IND_3_DIR = DIR_OUTPUT;
115 | REL_IND_4_DIR = DIR_OUTPUT;
116 | REL_IND_5_DIR = DIR_OUTPUT;
117 | REL_IND_6_DIR = DIR_OUTPUT;
118 | REL_IND_7_DIR = DIR_OUTPUT;
119 |
120 | global.ind_relays =0;
121 | global.cap_relays =0;
122 | global.cap_sw =0;
123 |
124 |
125 | global.tune_stop_swr = 100; // SWR 1.10
126 |
127 |
128 | //Global Enable of Weak PullUp
129 | OPTION_REGbits.nWPUEN = 0;
130 |
131 |
132 |
133 | // WPUBbits.WPUB1 = 1; // PORTB1 Pull-up resistor
134 | // WPUBbits.WPUB2 = 1; // PORTB2 Pull-up resistor
135 |
136 |
137 |
138 |
139 |
140 | }
141 |
142 |
143 | void __interrupt() myIsr(void)
144 | {
145 | //Timer 2 interrupt 1000Hz
146 | if(PIR1bits.TMR2IF)
147 | {
148 | PIR1bits.TMR2IF =0;
149 | tick_count++;
150 | }
151 |
152 |
153 | return;
154 |
155 | }
156 |
157 |
158 | void main(void)
159 | {
160 | static uint8_t tick_old=0;
161 | static uint8_t tick_10ms =0;
162 |
163 |
164 | //uint16_t count=0;
165 |
166 | //uint8_t c;
167 |
168 | MAIN_Init();
169 | EEPROM_Init();
170 | BUTTON_Init();
171 | ADC_Init();
172 |
173 |
174 |
175 | #ifdef DEBUG_UART
176 | UART_Init();
177 | UART_WriteChar(' ');
178 | #endif
179 |
180 |
181 |
182 | DELAY_ms(DISPLAY_INIT_DELAY);
183 | DISP_Init(DISPLAY_I2C_ADDR, DISPLAY_ROTATE);
184 | DISP_Str(DISP_COL_CENTER,0,str_ATU100EXT,0);
185 | DISP_Str(DISP_COL_CENTER,1,str_YAF,0);
186 | DISP_Str(DISP_COL_CENTER,2,str_Version,0);
187 |
188 | #ifdef DEBUG_UART
189 | UART_WriteStrLn("\n\rHello DG4SN");
190 | #endif
191 |
192 | DELAY_ms(1500);
193 |
194 |
195 | DISP_Clr();
196 | MENU_Init();
197 |
198 | //Load index 0 = startup value
199 | {
200 | tunemem_t tunemem;
201 | EEPROM_Read((uint8_t) & ee_tunemem , &tunemem, sizeof (tunemem_t));
202 | UTILI_Set_LC_Relays(tunemem.relays);
203 | }
204 |
205 |
206 | while(1)
207 | {
208 |
209 | if(tick_old != tick_count)
210 | {
211 | tick_old++;
212 | tick_10ms++;
213 | //1ms
214 | ADC_Run();
215 |
216 | #ifdef DEBUG_UART
217 | UART_Run();
218 | #endif
219 |
220 |
221 | }
222 |
223 |
224 | //10x 1ms = 10ms
225 | if(tick_10ms==10)
226 | {
227 | tick_10ms=0;
228 | //10ms
229 |
230 | BUTTON_Run();
231 | MENU_Run();
232 |
233 |
234 |
235 |
236 | CLRWDT();
237 | }
238 | }
239 | }
240 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/disp.c:
--------------------------------------------------------------------------------
1 | /**
2 | * Display functions
3 | */
4 |
5 | #include "defines.h"
6 | #include "font5x8.h"
7 |
8 |
9 | #define FONT_WIDTH 5 //5pixel (muliply by 2)
10 | #define FONT_SPACING (5+1) //5pixel font + 1 pixel space (muliply by 2)
11 | #define RES_X 128 //Display resolution
12 | #define RES_Y 64
13 |
14 |
15 | uint8_t DISP_i2_addr;
16 | uint8_t DISP_rotate;
17 |
18 | void I2C_Start(void)
19 | {
20 | I2C_SCL_DIR = 1; //SCL=1
21 | DELAY_5_us();
22 | I2C_SDA_DIR = 1; //SDA=1
23 | DELAY_5_us();
24 | I2C_SDA_DIR = 0; //SDA=0
25 | DELAY_5_us();
26 | I2C_SCL_DIR = 0; //SCL=0
27 | DELAY_5_us();
28 | }
29 |
30 | void I2C_Stop(void)
31 | {
32 | I2C_SDA_DIR = 0; //SDA=0
33 | DELAY_5_us();
34 | I2C_SCL_DIR = 1; //SCL=1
35 | DELAY_5_us();
36 | I2C_SDA_DIR = 1; //SDA=1
37 | DELAY_5_us();
38 |
39 | }
40 |
41 | void I2C_Write(uint8_t value)
42 | {
43 | for (uint8_t i = 0; i <= 7; i++)
44 | {
45 | if ((value & 0x80) == 0)
46 | {
47 | I2C_SDA_DIR = 0;
48 | }
49 | else
50 | {
51 | I2C_SDA_DIR = 1;
52 | }
53 |
54 | DELAY_5_us();
55 |
56 | I2C_SCL_DIR = 1;
57 | DELAY_5_us();
58 | I2C_SCL_DIR = 0;
59 | DELAY_5_us();
60 | value = (uint8_t) (value << 1);
61 | }
62 |
63 | I2C_SDA_DIR = 1; //ACK
64 | DELAY_5_us();
65 | I2C_SCL_DIR = 1;
66 | DELAY_5_us();
67 | I2C_SCL_DIR = 0;
68 | DELAY_5_us();
69 | }
70 |
71 | void DISP_Command(uint8_t command)
72 | {
73 | I2C_Start();
74 | I2C_Write(DISP_i2_addr);
75 | I2C_Write(128); // 128 - command, 192 - data
76 | I2C_Write(command);
77 | I2C_Stop();
78 | }
79 |
80 | void DISP_DataAddress(uint8_t page, uint8_t start)
81 | {
82 | I2C_Start();
83 | I2C_Write(DISP_i2_addr);
84 | I2C_Write(0); // 0 - continious mode, command; 64 - Co, data
85 | I2C_Write(0xB0 + page);
86 | I2C_Write(start & 0x0f); //low nibble of start
87 | I2C_Write(0x10 + (start >> 4)); //high nibbe of start
88 |
89 | I2C_Start(); //send start again
90 | I2C_Write(DISP_i2_addr);
91 | I2C_Write(64); // 0 - continious mode, command; 64 - Co, data
92 |
93 | }
94 |
95 | void DISP_Clr(void)
96 | {
97 | DISP_Off();
98 |
99 | for (uint8_t page = 0; page <= 7; page++)
100 | {
101 |
102 | DISP_DataAddress(page, 0);
103 | for (uint8_t i = 0; i < RES_X; i++) //clear pixels
104 | {
105 | I2C_Write(0x00);
106 | }
107 | }
108 | I2C_Stop();
109 |
110 | DISP_On();
111 | }
112 |
113 | void DISP_On(void)
114 | {
115 | DISP_Command(0xAF);
116 | }
117 |
118 | void DISP_Off(void)
119 | {
120 | DISP_Command(0xAE);
121 | }
122 |
123 | void DISP_Init(uint8_t i2_addr, uint8_t rotate)
124 | {
125 | DISP_i2_addr = i2_addr;
126 | DISP_rotate = rotate;
127 |
128 | I2C_SCL_DIR = DIR_INPUT; //1 = input / 0 = output
129 | I2C_SDA_DIR = DIR_INPUT; //note: external pull up resistors
130 | I2C_SCL_W = 0; //If output then 0
131 | I2C_SDA_W = 0;
132 |
133 | //DELAY_ms(1);
134 |
135 | //I2C_Stop();
136 |
137 | DELAY_5_us();
138 |
139 | I2C_Start();
140 | I2C_Write(DISP_i2_addr);
141 | I2C_Write(0); // 0 - continious mode, command; 64 - Co, data
142 | I2C_Write(0xAE); // display OFF
143 |
144 | // 128*64 OLED
145 | I2C_Write(0xD5); // clock division
146 | I2C_Write(0x80); // ratio
147 | //
148 | I2C_Write(0xA8); // multiplexer
149 | I2C_Write(63); //
150 | //
151 | I2C_Write(0xD3); // offset
152 | I2C_Write(0); // no offset for x64 !
153 | //
154 | I2C_Write(0x40); // set line, line = 0
155 | //
156 | I2C_Write(0x8D); // charge pump
157 | I2C_Write(0x14); // 0x10 - external, 0x14 - internal
158 | //
159 | I2C_Write(0x81); // contrast
160 | I2C_Write(255); // 0-255
161 | //
162 | I2C_Write(0xD9); // pre-charge
163 | I2C_Write(0xf1); // 0x22 - external, 0xF1 - internal
164 | //
165 | I2C_Write(0x20); // memory addressing mode
166 | I2C_Write(0x02); // page addressing mode 02
167 | //
168 | I2C_Write(0x21); // set column range
169 | I2C_Write(0); // column start
170 | I2C_Write(127); // column stop
171 | //
172 | I2C_Write(0x2E); // stop scrolling
173 | //
174 |
175 |
176 |
177 | if (DISP_rotate == TRUE)
178 | {
179 | I2C_Write(0xA0); // segment re-map, A0 - normal, A1 - remapped
180 | //
181 | I2C_Write(0xC0); // scan direction, C0 - normal, C8 - remapped
182 | }
183 | else
184 | {
185 | I2C_Write(0xA1); // segment re-map, A0 - normal, A1 - remapped
186 | //
187 | I2C_Write(0xC8); // scan direction, C0 - normal, C8 - remapped
188 | }
189 | //
190 | I2C_Write(0xDA); // COM pins configure
191 | I2C_Write(0x12); // 12 for x64
192 | //
193 | I2C_Write(0xDB); // V-COM detect
194 | I2C_Write(0x40); //
195 |
196 | I2C_Write(0xA4); // display entire ON
197 | //
198 | I2C_Write(0xA6); // 0xA6 - normal, 0xA7 - inverse
199 | //
200 | I2C_Stop();
201 |
202 | DISP_Clr();
203 |
204 | }
205 |
206 | void DISP_Char(uint8_t col, uint8_t row, char c, uint8_t invert)
207 | {
208 | char str[2];
209 | str[0] = c;
210 | str[1] =0;
211 | DISP_Str(col, row, str, invert);
212 | }
213 |
214 |
215 | void DISP_Str(uint8_t col, uint8_t row, const char *str, uint8_t invert)
216 | {
217 | const char *p;
218 | bitfield_t x, y;
219 | uint8_t page;
220 | uint8_t start;
221 | uint8_t empty;
222 | uint16_t fpos;
223 |
224 | if (invert) empty = 0xff;
225 | else empty = 0;
226 |
227 |
228 | page = row * 2;
229 |
230 | if (col == DISP_COL_CENTER)
231 | {
232 | uint8_t len = 0;
233 | //string length
234 | p = str;
235 | while (*p != 0)
236 | {
237 | len++;
238 | p++;
239 | }
240 |
241 | //pixel length
242 | len = len * (2 * FONT_SPACING);
243 | start = (RES_X - len) / 2;
244 |
245 | }
246 | else //Left aligned
247 | {
248 | start = col * (2 * FONT_SPACING);
249 | }
250 |
251 | //upper part of the string
252 | DISP_DataAddress(page, start);
253 |
254 | p = str;
255 | while (*p != 0)
256 | {
257 | fpos = (*p - 32) * FONT_WIDTH;
258 | for (uint8_t h = 0; h < FONT_WIDTH; h++)
259 | {
260 | x.byte = font5x8[fpos + h]; //get byte from font
261 |
262 | y.bits.B7 = x.bits.B3;
263 | y.bits.B6 = x.bits.B2;
264 | y.bits.B5 = x.bits.B2;
265 | y.bits.B4 = x.bits.B1;
266 | y.bits.B3 = x.bits.B1;
267 | y.bits.B2 = x.bits.B0;
268 | y.bits.B1 = x.bits.B0;
269 | y.bits.B0 = 0; //space line
270 |
271 | y.byte = y.byte ^ empty; //maybe invert
272 | I2C_Write(y.byte);
273 | I2C_Write(y.byte); //128x64 the same byte twice
274 | }
275 | I2C_Write(empty); //Space between two char
276 | I2C_Write(empty);
277 | p++;
278 | }
279 |
280 |
281 | //lower part of the string
282 | DISP_DataAddress(page + 1, start);
283 | p = str;
284 | while (*p != 0)
285 | {
286 | fpos = (*p - 32) * FONT_WIDTH;
287 | for (uint8_t h = 0; h < FONT_WIDTH; h++)
288 | {
289 | x.byte = font5x8[fpos + h]; //get byte from font
290 | y.bits.B7 = 0; //space line
291 | y.bits.B6 = x.bits.B6;
292 | y.bits.B5 = x.bits.B6;
293 | y.bits.B4 = x.bits.B5;
294 | y.bits.B3 = x.bits.B5;
295 | y.bits.B2 = x.bits.B4;
296 | y.bits.B1 = x.bits.B4;
297 | y.bits.B0 = x.bits.B3;
298 |
299 | y.byte = y.byte ^ empty; //maybe invert
300 | I2C_Write(y.byte);
301 | I2C_Write(y.byte); //128x64 the same byte twice
302 |
303 | }
304 | I2C_Write(empty); //Space between two char
305 | I2C_Write(empty);
306 | p++;
307 | }
308 |
309 | I2C_Stop();
310 |
311 | }
312 |
313 | /**
314 | * Show power as x.xW when < 10W and xxW or xxxW if higher
315 | */
316 | void DISP_PWR(uint8_t col, uint8_t row, int16_t deciWatt, uint8_t invert)
317 | {
318 | char str[5];
319 | uint8_t low_value =1;
320 |
321 | if(deciWatt >= 100)
322 | {
323 | deciWatt = deciWatt / 10;
324 | low_value=0;
325 | }
326 | UTILI_Int2Str(deciWatt, str, (sizeof(str)-1));
327 |
328 |
329 | if(low_value)
330 | {
331 | //Example: " 99" -> "9.9"
332 | str[0] = str[1];
333 | if(str[0] == ' ') str[0] = '0'; //leading zero
334 | str[1] = '.';
335 | }
336 |
337 | str[3] = 'W';
338 | str[4] = 0; //terminate string
339 |
340 |
341 | DISP_Str(col, row, str, invert);
342 |
343 | }
344 |
345 |
346 | void DISP_SWR(uint8_t col, uint8_t row, int16_t centiSWR, uint8_t invert)
347 | {
348 | char str[5] = "0.00";
349 | if(centiSWR >= 100)
350 | {
351 | UTILI_Int2Str(centiSWR , &str[1], (sizeof(str)-1));
352 | str[0] = str[1]; //first number
353 | str[1] = '.';
354 | }
355 | DISP_Str(col, row, str, invert);
356 | }
--------------------------------------------------------------------------------
/ATU-100_YAF.X/tune.c:
--------------------------------------------------------------------------------
1 | #include "defines.h"
2 |
3 | #ifdef DEBUG_UART
4 | #define TUNE_DEBUG
5 | #endif
6 |
7 |
8 | #define TUNE_COARSE_FAST
9 |
10 |
11 | #define RELAY_DELAY 2 //2=20ms
12 |
13 | #define AddTolerance(x) (x + (x/20)) //+5%
14 |
15 |
16 |
17 |
18 | #define COARSE_CAP_STEPS 11
19 | const uint8_t coarse_cap_value[COARSE_CAP_STEPS] ={
20 | 0b00000000,
21 | 0b00000001, //1
22 | 0b00000010, //2
23 | 0b00000100, //4
24 | 0b00001000, //8
25 | 0b00010000, //16
26 | 0b00100000, //32
27 | 0b01000000, //64
28 | 0b01100000, //96
29 | 0b01110000, //112
30 | 0b01111111 //127
31 | };
32 |
33 |
34 | #define COARSE_IND_STEPS 11
35 | const uint8_t coarse_ind_value[COARSE_IND_STEPS] ={
36 | 0b00000000,
37 | 0b00000001, //1
38 | 0b00000010, //2
39 | 0b00000100, //4
40 | 0b00001000, //8
41 | 0b00010000, //16
42 | 0b00100000, //32
43 | 0b01000000, //64
44 | 0b01100000, //96
45 | 0b01110000, //112
46 | 0b01111111 //127
47 | };
48 |
49 | enum
50 | {
51 | fine_low=0, fine_mid, fine_high
52 | } ;
53 |
54 |
55 | tunestate_t TUNE_state;
56 | static uint8_t TUNE_step;
57 | static uint8_t TUNE_delay;
58 |
59 | void TUNE_Init(void)
60 | {
61 | TUNE_state=TUNE_IDLE;
62 | TUNE_step=0;
63 | TUNE_delay=0;
64 | global.cap_sw=0;
65 | global.cap_relays=0;
66 | global.ind_relays=0;
67 | UTILI_SetRelays();
68 | TUNE_delay = RELAY_DELAY;
69 | }
70 |
71 | void TUNE_Run(void)
72 | {
73 |
74 | static uint8_t ind_step;
75 | static uint8_t cap_step;
76 | static int16_t best_swr;
77 |
78 | static uint8_t best_cap_step;
79 | static uint8_t best_ind_step;
80 | static uint8_t best_cap_sw;
81 |
82 | static int16_t best_row_swr;
83 | static int16_t best_last_row_swr;
84 |
85 | static uint8_t fine_cap_diff_low;
86 | static uint8_t fine_cap_diff_high;
87 | static uint8_t fine_ind_diff_low;
88 | static uint8_t fine_ind_diff_high;
89 |
90 | static uint8_t fine_cap[3];
91 | static uint8_t fine_ind[3];
92 |
93 | #ifdef TUNE_DEBUG
94 | char str[7];
95 | #endif
96 |
97 |
98 |
99 | //10ms interval
100 |
101 | if ((TUNE_state == TUNE_BREAK) || (TUNE_state == TUNE_READY)) return;
102 |
103 | //TUNE_delay
104 | if (TUNE_delay > 0)
105 | {
106 | TUNE_delay--;
107 | return;
108 | }
109 |
110 |
111 | #ifdef TUNE_DEBUG
112 | if (UART_Busy()) return;
113 | #endif
114 |
115 |
116 | UTILI_CalPWR();
117 | UTILI_CalSWR();
118 |
119 |
120 |
121 | //Check Min PWR
122 | if ((TUNE_step != 0) && (global.PWR < TUNE_MIN_PWR))
123 | {
124 | TUNE_state = TUNE_PWRLOW;
125 | return;
126 | }
127 |
128 |
129 | switch (TUNE_step) {
130 | case 0:
131 | if (global.PWR >= TUNE_MIN_PWR)
132 | {
133 | TUNE_step=10;
134 | TUNE_state=TUNE_RUN;
135 |
136 | best_swr = MAX_SWR;
137 | best_row_swr = MAX_SWR;
138 | best_last_row_swr=MAX_SWR;
139 | ind_step=0;
140 | cap_step=0;
141 | TUNE_delay = RELAY_DELAY;
142 |
143 | #ifdef TUNE_DEBUG
144 | UART_WriteLn();
145 | UART_WriteStrLn("Tune Start");
146 | UART_WriteStrLn("CAP_SW=0");
147 | #endif
148 |
149 | }
150 | break;
151 |
152 |
153 |
154 | //coarse tuning
155 | case 10:
156 |
157 | #ifdef TUNE_DEBUG
158 | UART_WriteInt(global.SWR);
159 | #endif
160 |
161 | if(global.SWR <= global.tune_stop_swr)
162 | {
163 | TUNE_state = TUNE_READY;
164 | break;
165 | }
166 |
167 |
168 | if (global.SWR < best_row_swr)
169 | {
170 | best_row_swr = global.SWR;
171 | }
172 |
173 | if (global.SWR < best_swr)
174 | {
175 | best_swr = global.SWR;
176 | best_cap_step = cap_step;
177 | best_ind_step = ind_step;
178 | best_cap_sw = global.cap_sw;
179 | }
180 |
181 |
182 |
183 |
184 |
185 | cap_step++;
186 | #ifdef TUNE_COARSE_FAST
187 | if ((cap_step >= COARSE_CAP_STEPS) || (global.SWR > AddTolerance(best_row_swr) ) )
188 | #else
189 | if (cap_step >= COARSE_CAP_STEPS)
190 | #endif
191 | {
192 | cap_step=0;
193 | ind_step++;
194 |
195 | #ifdef TUNE_DEBUG
196 | UART_WriteLn();
197 | #endif
198 |
199 | #ifdef TUNE_COARSE_FAST
200 |
201 | //Stop tuning when current row not better than last row
202 | if (AddTolerance(best_last_row_swr) < best_row_swr)
203 | {
204 | if (global.cap_sw == 1)
205 | {
206 | #ifdef TUNE_DEBUG
207 | UART_WriteLn();
208 | #endif
209 | TUNE_step=20; //-> go to fine tuning
210 | break;
211 |
212 | }
213 | else
214 | {
215 | //Start tuning again with cap_sw=1
216 | #ifdef TUNE_DEBUG
217 | UART_WriteLn();
218 | UART_WriteStrLn("CAP_SW=1");
219 | #endif
220 | global.cap_sw =1;
221 | cap_step=0;
222 | ind_step=0;
223 | best_row_swr = MAX_SWR;
224 | best_last_row_swr=MAX_SWR;
225 | }
226 | } else
227 | {
228 | best_last_row_swr = best_row_swr;
229 | }
230 |
231 | best_row_swr = MAX_SWR;
232 |
233 | #endif //TUNE_COARSE_FAST
234 |
235 |
236 | if (ind_step >= COARSE_IND_STEPS)
237 | {
238 | ind_step=0;
239 | best_row_swr = MAX_SWR;
240 | if (global.cap_sw == 1)
241 | {
242 | TUNE_step=20; //-> go to fine tuning
243 | break;
244 | } else
245 | {
246 | #ifdef TUNE_DEBUG
247 | UART_WriteLn();
248 | UART_WriteStrLn("CAP_SW=1");
249 | #endif
250 |
251 | global.cap_sw =1;
252 | }
253 |
254 | }
255 | }
256 |
257 | global.cap_relays = coarse_cap_value[cap_step];
258 | global.ind_relays = coarse_ind_value[ind_step];
259 | UTILI_SetRelays();
260 | TUNE_delay = RELAY_DELAY;
261 | break;
262 |
263 |
264 |
265 | //fine tuning
266 | case 20:
267 |
268 | global.cap_sw = best_cap_sw; //cap_sw is now final
269 | global.cap_relays = coarse_cap_value[best_cap_step];
270 | global.ind_relays = coarse_ind_value[best_ind_step];
271 |
272 | #ifdef TUNE_DEBUG
273 | UART_WriteLn();
274 | UART_WriteStrLn("Coarse-Tuning");
275 | UART_WriteStr("Cap: ");
276 | UTILI_GetCapValueStr(str, sizeof (str));
277 | UART_WriteStrLn(str);
278 | UART_WriteStr("Ind: ");
279 | UTILI_GetIndValueStr(str, sizeof (str));
280 | UART_WriteStrLn(str);
281 | UART_WriteStr("SWR: ");
282 | UART_WriteInt(best_swr);
283 | UART_WriteLn();
284 | #endif
285 |
286 | //Set best coarse tune in the middle of the fine tune matrix
287 | fine_cap[fine_mid] = coarse_cap_value[best_cap_step];
288 | fine_ind[fine_mid] = coarse_ind_value[best_ind_step];
289 |
290 | //Calculate differences to the next steps
291 | if (best_cap_step > 0)
292 | {
293 | fine_cap_diff_low = coarse_cap_value[best_cap_step] - coarse_cap_value[best_cap_step - 1];
294 | } else
295 | {
296 | fine_cap_diff_low =0;
297 | }
298 |
299 | if (best_cap_step < (COARSE_CAP_STEPS - 1))
300 | {
301 | fine_cap_diff_high = coarse_cap_value[best_cap_step + 1] - coarse_cap_value[best_cap_step];
302 | } else
303 | {
304 | fine_cap_diff_high =0;
305 | }
306 |
307 | if (best_ind_step > 0)
308 | {
309 | fine_ind_diff_low = coarse_ind_value[best_ind_step] - coarse_ind_value[best_ind_step - 1];
310 | } else
311 | {
312 | fine_ind_diff_low =0;
313 | }
314 |
315 | if (best_ind_step < (COARSE_IND_STEPS - 1))
316 | {
317 | fine_ind_diff_high = coarse_ind_value[best_ind_step + 1] - coarse_ind_value[best_ind_step];
318 | } else
319 | {
320 | fine_ind_diff_high =0;
321 | }
322 |
323 | //half the differences
324 | fine_cap_diff_low = fine_cap_diff_low / 2;
325 | fine_cap_diff_high = fine_cap_diff_high / 2;
326 | fine_ind_diff_low = fine_ind_diff_low / 2;
327 | fine_ind_diff_high = fine_ind_diff_high / 2;
328 |
329 | //set fine tune matrix values
330 | fine_cap[fine_low] = fine_cap[fine_mid] - fine_cap_diff_low;
331 | fine_cap[fine_high] = fine_cap[fine_mid] + fine_cap_diff_high;
332 | fine_ind[fine_low] = fine_ind[fine_mid] - fine_ind_diff_low;
333 | fine_ind[fine_high] = fine_ind[fine_mid] + fine_ind_diff_high;
334 |
335 |
336 | #ifdef TUNE_DEBUG
337 | UART_WriteLn();
338 | UART_WriteStrLn("Fine-Tuning");
339 | #endif
340 |
341 | best_swr = MAX_SWR; //Max Default
342 |
343 | //Start in the middle
344 | cap_step=fine_mid;
345 | ind_step=fine_mid;
346 |
347 | global.cap_relays = fine_cap[cap_step];
348 | global.ind_relays = fine_ind[ind_step];
349 | UTILI_SetRelays();
350 | TUNE_delay = RELAY_DELAY;
351 | TUNE_step=30;
352 |
353 | break;
354 |
355 |
356 | //fine tuning
357 | case 30:
358 | #ifdef TUNE_DEBUG
359 |
360 |
361 | UART_WriteInt(cap_step);
362 | UART_WriteStr("_C-Step ");
363 |
364 | UTILI_GetCapValueStr(str, sizeof (str));
365 | UART_WriteStr(str);
366 |
367 | UART_WriteInt(ind_step);
368 | UART_WriteStr("_I-Step ");
369 |
370 | UTILI_GetIndValueStr(str, sizeof (str));
371 | UART_WriteStr(str);
372 |
373 | UART_WriteInt(global.SWR);
374 | UART_WriteStrLn("_SWR");
375 |
376 | #endif
377 |
378 | if(global.SWR <= global.tune_stop_swr)
379 | {
380 | TUNE_state = TUNE_READY;
381 | break;
382 | }
383 |
384 |
385 | if (global.SWR < best_swr)
386 | {
387 | best_swr = global.SWR;
388 | best_cap_step = cap_step;
389 | best_ind_step = ind_step;
390 | }
391 |
392 | do
393 | {
394 |
395 | //cap-steps mid-> low -> high if different
396 | if (cap_step == fine_mid)
397 | {
398 | if (fine_cap[fine_low] != fine_cap[fine_mid])
399 | {
400 | cap_step=fine_low;
401 | break;
402 | } else
403 | {
404 | if (fine_cap[fine_high] != fine_cap[fine_mid])
405 | {
406 | cap_step=fine_high;
407 | break;
408 | }
409 | }
410 | }
411 |
412 | if (cap_step == fine_low)
413 | {
414 | if (fine_cap[fine_high] != fine_cap[fine_mid])
415 | {
416 | cap_step=fine_high;
417 | break;
418 | }
419 | }
420 | cap_step=fine_mid; // cap row done
421 |
422 |
423 | //ind_steps mid-> low -> high if different
424 | if (ind_step == fine_mid)
425 | {
426 | if (fine_ind[fine_low] != fine_ind[fine_mid])
427 | {
428 | ind_step=fine_low;
429 | break;
430 | } else
431 | {
432 | if (fine_ind[fine_high] != fine_ind[fine_mid])
433 | {
434 | cap_step=fine_high;
435 | break;
436 | }
437 | }
438 | }
439 |
440 | if (ind_step == fine_low)
441 | {
442 | if (fine_ind[fine_high] != fine_ind[fine_mid])
443 | {
444 | ind_step=fine_high;
445 | break;
446 | }
447 | }
448 |
449 | ind_step=fine_mid; //all done
450 | } while ((cap_step != fine_mid) || (ind_step != fine_mid));
451 |
452 |
453 | //Check if loop ready
454 | if ((cap_step == fine_mid) && (ind_step == fine_mid))
455 | {
456 |
457 | global.cap_relays = fine_cap[best_cap_step];
458 | global.ind_relays = fine_ind[best_ind_step];
459 | UTILI_SetRelays();
460 | TUNE_state = TUNE_READY;
461 | break;
462 | }
463 |
464 |
465 | global.cap_relays = fine_cap[cap_step];
466 | global.ind_relays = fine_ind[ind_step];
467 | UTILI_SetRelays();
468 | TUNE_delay = RELAY_DELAY;
469 | break;
470 |
471 |
472 |
473 |
474 |
475 |
476 | default:
477 | TUNE_state = TUNE_BREAK;
478 | break;
479 | }
480 |
481 | }
482 |
483 |
484 |
485 |
486 | //-----------------------------------------------------
487 | // //Calculate next differences
488 | // //Best value to the middle
489 | // fine_cap[fine_mid] = fine_cap[best_cap_step];
490 | // fine_ind[fine_mid] = fine_ind[best_ind_step];
491 | //
492 | // //Cal new cap differences
493 | // if (best_cap_step == fine_mid)
494 | // {
495 | // fine_cap_diff_low = fine_cap_diff_low / 2;
496 | // fine_cap_diff_high = fine_cap_diff_high / 2;
497 | // }
498 | // if (best_cap_step == fine_low)
499 | // {
500 | // fine_cap_diff_low = fine_cap_diff_low / 2;
501 | // fine_cap_diff_high = fine_cap_diff_low / 2;
502 | // }
503 | // if (best_cap_step == fine_high)
504 | // {
505 | // fine_cap_diff_low = fine_cap_diff_high / 2;
506 | // fine_cap_diff_high = fine_cap_diff_high / 2;
507 | // }
508 | //
509 | // //Cal new ind differences
510 | // if (best_ind_step == fine_mid)
511 | // {
512 | // fine_ind_diff_low = fine_ind_diff_low / 2;
513 | // fine_ind_diff_high = fine_ind_diff_high / 2;
514 | // }
515 | // if (best_ind_step == fine_low)
516 | // {
517 | // fine_ind_diff_low = fine_ind_diff_low / 2;
518 | // fine_ind_diff_high = fine_ind_diff_low / 2;
519 | // }
520 | // if (best_ind_step == fine_high)
521 | // {
522 | // fine_ind_diff_low = fine_ind_diff_high / 2;
523 | // fine_ind_diff_high = fine_ind_diff_high / 2;
524 | // }
525 | //
526 | //
527 | //
528 | //
529 | // //It ends when there are no differens
530 | // if ((fine_cap_diff_low <= 1) &&
531 | // (fine_cap_diff_high <= 1) &&
532 | // (fine_ind_diff_high <= 1) &&
533 | // (fine_ind_diff_high <= 1))
534 | // {
535 | // TUNE_state = TUNE_READY;
536 | // }
537 | // else
538 | // {
539 | // TUNE_step=35; //Call next round
540 | // }
541 |
542 |
543 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/nbproject/configurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 | uart.h
8 | utili.h
9 | disp.h
10 | defines.h
11 | font5x8.h
12 | button.h
13 | menu.h
14 | adc.h
15 | tune.h
16 | eeprom.h
17 |
18 |
21 |
22 |
25 | main.c
26 | uart.c
27 | utili.c
28 | disp.c
29 | button.c
30 | menu.c
31 | adc.c
32 | tune.c
33 | eeprom.c
34 |
35 |
38 | Makefile
39 |
40 |
41 |
42 | .
43 |
44 | Makefile
45 |
46 |
47 |
48 | localhost
49 | PIC16F1938
50 |
51 |
52 | PICkit3PlatformTool
53 | XC8
54 | 2.36
55 | 3
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | false
71 | false
72 |
73 |
74 |
75 |
76 |
77 |
78 | false
79 | false
80 |
81 | false
82 |
83 | false
84 | false
85 | false
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/nbproject/Makefile-default.mk:
--------------------------------------------------------------------------------
1 | #
2 | # Generated Makefile - do not edit!
3 | #
4 | # Edit the Makefile in the project folder instead (../Makefile). Each target
5 | # has a -pre and a -post target defined where you can add customized code.
6 | #
7 | # This makefile implements configuration specific macros and targets.
8 |
9 |
10 | # Include project Makefile
11 | ifeq "${IGNORE_LOCAL}" "TRUE"
12 | # do not include local makefile. User is passing all local related variables already
13 | else
14 | include Makefile
15 | # Include makefile containing local settings
16 | ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk"
17 | include nbproject/Makefile-local-default.mk
18 | endif
19 | endif
20 |
21 | # Environment
22 | MKDIR=gnumkdir -p
23 | RM=rm -f
24 | MV=mv
25 | CP=cp
26 |
27 | # Macros
28 | CND_CONF=default
29 | ifeq ($(TYPE_IMAGE), DEBUG_RUN)
30 | IMAGE_TYPE=debug
31 | OUTPUT_SUFFIX=elf
32 | DEBUGGABLE_SUFFIX=elf
33 | FINAL_IMAGE=${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
34 | else
35 | IMAGE_TYPE=production
36 | OUTPUT_SUFFIX=hex
37 | DEBUGGABLE_SUFFIX=elf
38 | FINAL_IMAGE=${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
39 | endif
40 |
41 | ifeq ($(COMPARE_BUILD), true)
42 | COMPARISON_BUILD=-mafrlcsj
43 | else
44 | COMPARISON_BUILD=
45 | endif
46 |
47 | ifdef SUB_IMAGE_ADDRESS
48 |
49 | else
50 | SUB_IMAGE_ADDRESS_COMMAND=
51 | endif
52 |
53 | # Object Directory
54 | OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE}
55 |
56 | # Distribution Directory
57 | DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE}
58 |
59 | # Source Files Quoted if spaced
60 | SOURCEFILES_QUOTED_IF_SPACED=main.c uart.c utili.c disp.c button.c menu.c adc.c tune.c eeprom.c
61 |
62 | # Object Files Quoted if spaced
63 | OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.p1 ${OBJECTDIR}/uart.p1 ${OBJECTDIR}/utili.p1 ${OBJECTDIR}/disp.p1 ${OBJECTDIR}/button.p1 ${OBJECTDIR}/menu.p1 ${OBJECTDIR}/adc.p1 ${OBJECTDIR}/tune.p1 ${OBJECTDIR}/eeprom.p1
64 | POSSIBLE_DEPFILES=${OBJECTDIR}/main.p1.d ${OBJECTDIR}/uart.p1.d ${OBJECTDIR}/utili.p1.d ${OBJECTDIR}/disp.p1.d ${OBJECTDIR}/button.p1.d ${OBJECTDIR}/menu.p1.d ${OBJECTDIR}/adc.p1.d ${OBJECTDIR}/tune.p1.d ${OBJECTDIR}/eeprom.p1.d
65 |
66 | # Object Files
67 | OBJECTFILES=${OBJECTDIR}/main.p1 ${OBJECTDIR}/uart.p1 ${OBJECTDIR}/utili.p1 ${OBJECTDIR}/disp.p1 ${OBJECTDIR}/button.p1 ${OBJECTDIR}/menu.p1 ${OBJECTDIR}/adc.p1 ${OBJECTDIR}/tune.p1 ${OBJECTDIR}/eeprom.p1
68 |
69 | # Source Files
70 | SOURCEFILES=main.c uart.c utili.c disp.c button.c menu.c adc.c tune.c eeprom.c
71 |
72 |
73 |
74 | CFLAGS=
75 | ASFLAGS=
76 | LDLIBSOPTIONS=
77 |
78 | ############# Tool locations ##########################################
79 | # If you copy a project from one host to another, the path where the #
80 | # compiler is installed may be different. #
81 | # If you open this project with MPLAB X in the new host, this #
82 | # makefile will be regenerated and the paths will be corrected. #
83 | #######################################################################
84 | # fixDeps replaces a bunch of sed/cat/printf statements that slow down the build
85 | FIXDEPS=fixDeps
86 |
87 | .build-conf: ${BUILD_SUBPROJECTS}
88 | ifneq ($(INFORMATION_MESSAGE), )
89 | @echo $(INFORMATION_MESSAGE)
90 | endif
91 | ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
92 |
93 | MP_PROCESSOR_OPTION=16F1938
94 | # ------------------------------------------------------------------------------------
95 | # Rules for buildStep: compile
96 | ifeq ($(TYPE_IMAGE), DEBUG_RUN)
97 | ${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk
98 | @${MKDIR} "${OBJECTDIR}"
99 | @${RM} ${OBJECTDIR}/main.p1.d
100 | @${RM} ${OBJECTDIR}/main.p1
101 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c
102 | @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d
103 | @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
104 |
105 | ${OBJECTDIR}/uart.p1: uart.c nbproject/Makefile-${CND_CONF}.mk
106 | @${MKDIR} "${OBJECTDIR}"
107 | @${RM} ${OBJECTDIR}/uart.p1.d
108 | @${RM} ${OBJECTDIR}/uart.p1
109 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/uart.p1 uart.c
110 | @-${MV} ${OBJECTDIR}/uart.d ${OBJECTDIR}/uart.p1.d
111 | @${FIXDEPS} ${OBJECTDIR}/uart.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
112 |
113 | ${OBJECTDIR}/utili.p1: utili.c nbproject/Makefile-${CND_CONF}.mk
114 | @${MKDIR} "${OBJECTDIR}"
115 | @${RM} ${OBJECTDIR}/utili.p1.d
116 | @${RM} ${OBJECTDIR}/utili.p1
117 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/utili.p1 utili.c
118 | @-${MV} ${OBJECTDIR}/utili.d ${OBJECTDIR}/utili.p1.d
119 | @${FIXDEPS} ${OBJECTDIR}/utili.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
120 |
121 | ${OBJECTDIR}/disp.p1: disp.c nbproject/Makefile-${CND_CONF}.mk
122 | @${MKDIR} "${OBJECTDIR}"
123 | @${RM} ${OBJECTDIR}/disp.p1.d
124 | @${RM} ${OBJECTDIR}/disp.p1
125 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/disp.p1 disp.c
126 | @-${MV} ${OBJECTDIR}/disp.d ${OBJECTDIR}/disp.p1.d
127 | @${FIXDEPS} ${OBJECTDIR}/disp.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
128 |
129 | ${OBJECTDIR}/button.p1: button.c nbproject/Makefile-${CND_CONF}.mk
130 | @${MKDIR} "${OBJECTDIR}"
131 | @${RM} ${OBJECTDIR}/button.p1.d
132 | @${RM} ${OBJECTDIR}/button.p1
133 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/button.p1 button.c
134 | @-${MV} ${OBJECTDIR}/button.d ${OBJECTDIR}/button.p1.d
135 | @${FIXDEPS} ${OBJECTDIR}/button.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
136 |
137 | ${OBJECTDIR}/menu.p1: menu.c nbproject/Makefile-${CND_CONF}.mk
138 | @${MKDIR} "${OBJECTDIR}"
139 | @${RM} ${OBJECTDIR}/menu.p1.d
140 | @${RM} ${OBJECTDIR}/menu.p1
141 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/menu.p1 menu.c
142 | @-${MV} ${OBJECTDIR}/menu.d ${OBJECTDIR}/menu.p1.d
143 | @${FIXDEPS} ${OBJECTDIR}/menu.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
144 |
145 | ${OBJECTDIR}/adc.p1: adc.c nbproject/Makefile-${CND_CONF}.mk
146 | @${MKDIR} "${OBJECTDIR}"
147 | @${RM} ${OBJECTDIR}/adc.p1.d
148 | @${RM} ${OBJECTDIR}/adc.p1
149 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/adc.p1 adc.c
150 | @-${MV} ${OBJECTDIR}/adc.d ${OBJECTDIR}/adc.p1.d
151 | @${FIXDEPS} ${OBJECTDIR}/adc.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
152 |
153 | ${OBJECTDIR}/tune.p1: tune.c nbproject/Makefile-${CND_CONF}.mk
154 | @${MKDIR} "${OBJECTDIR}"
155 | @${RM} ${OBJECTDIR}/tune.p1.d
156 | @${RM} ${OBJECTDIR}/tune.p1
157 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/tune.p1 tune.c
158 | @-${MV} ${OBJECTDIR}/tune.d ${OBJECTDIR}/tune.p1.d
159 | @${FIXDEPS} ${OBJECTDIR}/tune.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
160 |
161 | ${OBJECTDIR}/eeprom.p1: eeprom.c nbproject/Makefile-${CND_CONF}.mk
162 | @${MKDIR} "${OBJECTDIR}"
163 | @${RM} ${OBJECTDIR}/eeprom.p1.d
164 | @${RM} ${OBJECTDIR}/eeprom.p1
165 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -mdebugger=pickit3 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/eeprom.p1 eeprom.c
166 | @-${MV} ${OBJECTDIR}/eeprom.d ${OBJECTDIR}/eeprom.p1.d
167 | @${FIXDEPS} ${OBJECTDIR}/eeprom.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
168 |
169 | else
170 | ${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk
171 | @${MKDIR} "${OBJECTDIR}"
172 | @${RM} ${OBJECTDIR}/main.p1.d
173 | @${RM} ${OBJECTDIR}/main.p1
174 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/main.p1 main.c
175 | @-${MV} ${OBJECTDIR}/main.d ${OBJECTDIR}/main.p1.d
176 | @${FIXDEPS} ${OBJECTDIR}/main.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
177 |
178 | ${OBJECTDIR}/uart.p1: uart.c nbproject/Makefile-${CND_CONF}.mk
179 | @${MKDIR} "${OBJECTDIR}"
180 | @${RM} ${OBJECTDIR}/uart.p1.d
181 | @${RM} ${OBJECTDIR}/uart.p1
182 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/uart.p1 uart.c
183 | @-${MV} ${OBJECTDIR}/uart.d ${OBJECTDIR}/uart.p1.d
184 | @${FIXDEPS} ${OBJECTDIR}/uart.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
185 |
186 | ${OBJECTDIR}/utili.p1: utili.c nbproject/Makefile-${CND_CONF}.mk
187 | @${MKDIR} "${OBJECTDIR}"
188 | @${RM} ${OBJECTDIR}/utili.p1.d
189 | @${RM} ${OBJECTDIR}/utili.p1
190 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/utili.p1 utili.c
191 | @-${MV} ${OBJECTDIR}/utili.d ${OBJECTDIR}/utili.p1.d
192 | @${FIXDEPS} ${OBJECTDIR}/utili.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
193 |
194 | ${OBJECTDIR}/disp.p1: disp.c nbproject/Makefile-${CND_CONF}.mk
195 | @${MKDIR} "${OBJECTDIR}"
196 | @${RM} ${OBJECTDIR}/disp.p1.d
197 | @${RM} ${OBJECTDIR}/disp.p1
198 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/disp.p1 disp.c
199 | @-${MV} ${OBJECTDIR}/disp.d ${OBJECTDIR}/disp.p1.d
200 | @${FIXDEPS} ${OBJECTDIR}/disp.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
201 |
202 | ${OBJECTDIR}/button.p1: button.c nbproject/Makefile-${CND_CONF}.mk
203 | @${MKDIR} "${OBJECTDIR}"
204 | @${RM} ${OBJECTDIR}/button.p1.d
205 | @${RM} ${OBJECTDIR}/button.p1
206 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/button.p1 button.c
207 | @-${MV} ${OBJECTDIR}/button.d ${OBJECTDIR}/button.p1.d
208 | @${FIXDEPS} ${OBJECTDIR}/button.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
209 |
210 | ${OBJECTDIR}/menu.p1: menu.c nbproject/Makefile-${CND_CONF}.mk
211 | @${MKDIR} "${OBJECTDIR}"
212 | @${RM} ${OBJECTDIR}/menu.p1.d
213 | @${RM} ${OBJECTDIR}/menu.p1
214 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/menu.p1 menu.c
215 | @-${MV} ${OBJECTDIR}/menu.d ${OBJECTDIR}/menu.p1.d
216 | @${FIXDEPS} ${OBJECTDIR}/menu.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
217 |
218 | ${OBJECTDIR}/adc.p1: adc.c nbproject/Makefile-${CND_CONF}.mk
219 | @${MKDIR} "${OBJECTDIR}"
220 | @${RM} ${OBJECTDIR}/adc.p1.d
221 | @${RM} ${OBJECTDIR}/adc.p1
222 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/adc.p1 adc.c
223 | @-${MV} ${OBJECTDIR}/adc.d ${OBJECTDIR}/adc.p1.d
224 | @${FIXDEPS} ${OBJECTDIR}/adc.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
225 |
226 | ${OBJECTDIR}/tune.p1: tune.c nbproject/Makefile-${CND_CONF}.mk
227 | @${MKDIR} "${OBJECTDIR}"
228 | @${RM} ${OBJECTDIR}/tune.p1.d
229 | @${RM} ${OBJECTDIR}/tune.p1
230 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/tune.p1 tune.c
231 | @-${MV} ${OBJECTDIR}/tune.d ${OBJECTDIR}/tune.p1.d
232 | @${FIXDEPS} ${OBJECTDIR}/tune.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
233 |
234 | ${OBJECTDIR}/eeprom.p1: eeprom.c nbproject/Makefile-${CND_CONF}.mk
235 | @${MKDIR} "${OBJECTDIR}"
236 | @${RM} ${OBJECTDIR}/eeprom.p1.d
237 | @${RM} ${OBJECTDIR}/eeprom.p1
238 | ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=$(CND_CONF) -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits $(COMPARISON_BUILD) -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o ${OBJECTDIR}/eeprom.p1 eeprom.c
239 | @-${MV} ${OBJECTDIR}/eeprom.d ${OBJECTDIR}/eeprom.p1.d
240 | @${FIXDEPS} ${OBJECTDIR}/eeprom.p1.d $(SILENT) -rsi ${MP_CC_DIR}../
241 |
242 | endif
243 |
244 | # ------------------------------------------------------------------------------------
245 | # Rules for buildStep: assemble
246 | ifeq ($(TYPE_IMAGE), DEBUG_RUN)
247 | else
248 | endif
249 |
250 | # ------------------------------------------------------------------------------------
251 | # Rules for buildStep: assembleWithPreprocess
252 | ifeq ($(TYPE_IMAGE), DEBUG_RUN)
253 | else
254 | endif
255 |
256 | # ------------------------------------------------------------------------------------
257 | # Rules for buildStep: link
258 | ifeq ($(TYPE_IMAGE), DEBUG_RUN)
259 | ${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk
260 | @${MKDIR} ${DISTDIR}
261 | ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.map -D__DEBUG=1 -mdebugger=pickit3 -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED}
262 | @${RM} ${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.hex
263 |
264 | else
265 | ${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk
266 | @${MKDIR} ${DISTDIR}
267 | ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.map -DXPRJ_default=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx32 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mdefault-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/ATU-100_YAF.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED}
268 |
269 | endif
270 |
271 |
272 | # Subprojects
273 | .build-subprojects:
274 |
275 |
276 | # Subprojects
277 | .clean-subprojects:
278 |
279 | # Clean Targets
280 | .clean-conf: ${CLEAN_SUBPROJECTS}
281 | ${RM} -r ${OBJECTDIR}
282 | ${RM} -r ${DISTDIR}
283 |
284 | # Enable dependency checking
285 | .dep.inc: .depcheck-impl
286 |
287 | DEPFILES=$(shell mplabwildcard ${POSSIBLE_DEPFILES})
288 | ifneq (${DEPFILES},)
289 | include ${DEPFILES}
290 | endif
291 |
--------------------------------------------------------------------------------
/ATU-100_YAF.X/menu.c:
--------------------------------------------------------------------------------
1 | #include "defines.h"
2 |
3 | #define MENU_MEMORY_TIMEOUT 500 // x 10ms
4 |
5 | #define MENU_SUB_TIMEOUT 500 // x 10ms
6 |
7 | #define UPDATE_PERIODE 10 // x 10ms
8 | #define TUNE_UPDATE_PERIODE 50 // x 10ms
9 |
10 | #define CAL_STEP0_MAX 100 // x 0.1W = 10W
11 | #define CAL_STEP1_MAX 1000 // x 0.1W = 100W
12 |
13 | #define ADC_CAL_START 100 //mV
14 | #define ADC_CAL_STOP 5 //mV
15 |
16 | #define TUNE_AUTO_MIN_SWR 120
17 | #define TUNE_AUTO_MAX_SWR 200
18 |
19 | #define TUNE_STOP_MIN_SWR 100
20 | #define TUNE_STOP_MAX_SWR 150
21 |
22 | #define SLEEP_DELAY_MAX 300
23 | #define SLEEP_DELAY_STEP_SLOW 5
24 | #define SLEEP_DELAY_STEP_FAST 15
25 | #define SLEEP_DELAY_FAST_HIGHER 100
26 |
27 | typedef struct
28 | {
29 | const char* title;
30 | void (*Init)(void) ;
31 | void (*Run)(void) ;
32 | } menu_t;
33 |
34 |
35 | //variables
36 | const menu_t* current_menu;
37 |
38 |
39 | static union
40 | {
41 |
42 | struct
43 | {
44 | uint8_t cursor;
45 | uint16_t relais_backup;
46 | uint8_t update_cnt;
47 | } reltest;
48 |
49 | struct
50 | {
51 | uint8_t cursor;
52 | int16_t stop_swr;
53 | int16_t auto_swr;
54 | uint8_t auto_enable;
55 | } tparam;
56 |
57 | struct
58 | {
59 | uint8_t cursor;
60 | uint8_t enable;
61 | int16_t delay_sec;
62 | } sleep;
63 |
64 | struct
65 | {
66 | uint8_t update_cnt;
67 | int16_t old_pwr;
68 | int16_t sleep_timer;
69 | uint8_t counter_1sec;
70 | uint16_t relais_backup;
71 | } main;
72 |
73 | struct
74 | {
75 | uint8_t items;
76 | uint8_t cursor;
77 | uint8_t top;
78 | uint16_t timeout;
79 | const menu_t **ptrMenu;
80 | } sub;
81 |
82 |
83 | struct
84 | {
85 | uint8_t update_cnt;
86 | uint8_t blink;
87 | uint16_t relays_backup;
88 | } tune;
89 |
90 | struct
91 | {
92 | uint8_t cursor;
93 | uint8_t step;
94 | int16_t cal_point[2];
95 | int16_t adc_value[2];
96 | int16_t adc_value_old;
97 |
98 | } cal;
99 | struct
100 | {
101 | uint8_t step;
102 | } about;
103 |
104 | struct
105 | {
106 | uint16_t timeout;
107 | uint8_t cursor;
108 | uint8_t save_mode;
109 | uint8_t top;
110 | } memory;
111 |
112 | struct
113 | {
114 | uint8_t mem_index;
115 | uint8_t cursor;
116 | uint8_t button_repeat_delay;
117 | tunemem_t tunemem;
118 | }nameedit;
119 |
120 | struct
121 | {
122 | uint8_t mem_index;
123 | uint8_t cursor;
124 | tunemem_t tunemem;
125 | uint8_t str_terminate; //must stay direkt behind memory
126 | }startupsave;
127 |
128 |
129 | } MENU_var;
130 |
131 |
132 | static uint8_t MENU_cursor;
133 |
134 |
135 |
136 |
137 |
138 | //Prototypes
139 |
140 | static void MENU_Main_Init(void);
141 | static void MENU_Main_Run(void);
142 |
143 | static void MENU_SubSetup_Init(void);
144 | static void MENU_SubTop_Init(void);
145 |
146 | static void MENU_Sub_Run(void);
147 | static void MENU_Sub_Update(void);
148 |
149 |
150 | static void MENU_Reset_Init(void);
151 | static void MENU_Bypass_Init(void);
152 |
153 | static void MENU_TParam_Init(void);
154 | static void MENU_TParam_Run(void);
155 |
156 | static void MENU_TParam_Init(void);
157 | static void MENU_TParam_Run(void);
158 |
159 | static void MENU_Sleep_Init(void);
160 | static void MENU_Sleep_Run(void);
161 |
162 | static void MENU_CalPWR_Init(void);
163 | static void MENU_CalPWR_Run(void);
164 |
165 | static void MENU_RelTest_Init(void);
166 | static void MENU_RelTest_Run(void);
167 |
168 | static void MENU_Tune_Init(void);
169 | static void MENU_Tune_Run(void);
170 |
171 | static void MENU_MemorySave_Init(void);
172 | static void MENU_MemoryLoad_Init(void);
173 | static void MENU_Memory_Run(void);
174 |
175 |
176 | static void MENU_About_Init(void);
177 | static void MENU_About_Run(void);
178 |
179 | static void MENU_NameEdit_Init(void);
180 | static void MENU_NameEdit_Run(void);
181 |
182 | static void MENU_StartupSave_Init(void);
183 | static void MENU_StartupSave_Run(void);
184 |
185 | const menu_t menuMain ={NULL, MENU_Main_Init, MENU_Main_Run};
186 | const menu_t menuSubTop ={NULL, MENU_SubTop_Init, MENU_Sub_Run};
187 | const menu_t menuSubSetup ={str_MENU_Setup, MENU_SubSetup_Init, MENU_Sub_Run};
188 |
189 | const menu_t menuBypass ={str_MENU_Bypass, MENU_Bypass_Init, NULL};
190 | const menu_t menuReset ={str_MENU_Reset, MENU_Reset_Init, NULL};
191 |
192 | const menu_t menuSave ={str_MENU_Save, MENU_MemorySave_Init, MENU_Memory_Run};
193 | const menu_t menuLoad ={str_MENU_Load, MENU_MemoryLoad_Init, MENU_Memory_Run};
194 |
195 | const menu_t menuAbout ={str_MENU_About, MENU_About_Init, MENU_About_Run};
196 |
197 |
198 |
199 | const menu_t menuTParam ={str_MENU_TunePar, MENU_TParam_Init, MENU_TParam_Run};
200 |
201 | const menu_t menuSleep ={str_MENU_Sleep, MENU_Sleep_Init, MENU_Sleep_Run};
202 | const menu_t menuRelTest ={str_MENU_RelTest, MENU_RelTest_Init, MENU_RelTest_Run};
203 | const menu_t menuCal ={str_MENU_Cal, MENU_CalPWR_Init, MENU_CalPWR_Run};
204 |
205 |
206 | #define MENU_SUBTOP_ITEMS 6
207 | const menu_t* ptrSubTopMenu[MENU_SUBTOP_ITEMS] = { &menuBypass, &menuLoad, &menuSave, &menuReset, &menuSubSetup, &menuAbout};
208 |
209 | #define MENU_SUBSETUP_ITEMS 4
210 | const menu_t* ptrSubSetupMenu[MENU_SUBSETUP_ITEMS] = { &menuTParam, &menuSleep, &menuCal, &menuRelTest };
211 |
212 | const menu_t menuTune ={NULL, MENU_Tune_Init, MENU_Tune_Run};
213 | const menu_t menuNameEdit ={NULL, MENU_NameEdit_Init, MENU_NameEdit_Run};
214 | const menu_t menuStartupSave ={NULL, MENU_StartupSave_Init, MENU_StartupSave_Run};
215 |
216 |
217 | //-- MENU_MAIN -------------------------------------------------------------------------------------------------
218 |
219 | static void MENU_Main_Update(void)
220 | {
221 | uint8_t c_row = 2;
222 | uint8_t l_row = 3;
223 |
224 | const char *p_str = NULL;
225 | char str[7];
226 |
227 | DISP_PWR(4, 0, global.PWR, 0);
228 | DISP_SWR(4, 1, global.SWR, 0);
229 |
230 | if (global.cap_sw)
231 | {
232 | c_row = 3;
233 | l_row = 2;
234 | }
235 |
236 |
237 | if (global.bypass_enable == TRUE)
238 | {
239 | DISP_Str(0, 3, str_Bypass, 1);
240 | }
241 | else
242 | {
243 | DISP_Str(0, c_row,str_C_, 0);
244 | UTILI_GetCapValueStr(str, sizeof (str));
245 | DISP_Str(2, c_row, str, 0);
246 |
247 | DISP_Str(0, l_row,str_L_, 0);
248 | UTILI_GetIndValueStr(str, sizeof (str));
249 | DISP_Str(2, l_row, str, 0);
250 | }
251 |
252 | //Display AUTO
253 | if((global.tune_auto_enable == TRUE) && (global.bypass_enable != TRUE))
254 | {
255 | p_str = str_AUTO;
256 | for(uint8_t i=0; i<4; i++)
257 | {
258 | DISP_Char(9, i, p_str[i], 0);
259 | }
260 | }
261 |
262 |
263 |
264 |
265 |
266 | // UTILI_Int2Str(global.adc_f_mV, str, sizeof (str));
267 | // DISP_Str(5, 2, str, 0);
268 | //
269 | // UTILI_Int2Str(global.adc_r_mV, str, sizeof (str));
270 | // DISP_Str(5, 3, str, 0);
271 |
272 |
273 | }
274 |
275 | static void MENU_Main_Init(void)
276 | {
277 | DISP_Clr();
278 | BUTTON_Reset();
279 | DISP_Str(0, 0,str_PWR,0);
280 | DISP_Str(0, 1,str_SWR,0);
281 | MENU_var.main.update_cnt = 0;
282 | MENU_var.main.old_pwr = -1; //Dummy value
283 | MENU_var.main.counter_1sec =0;
284 | MENU_var.main.sleep_timer =0;
285 | MENU_var.main.relais_backup = UTILI_Get_LC_Relays();
286 | }
287 |
288 | static void MENU_Main_Weakup(void)
289 | {
290 | UTILI_Set_LC_Relays(MENU_var.main.relais_backup);
291 | MENU_Main_Init(); //Restore display
292 | }
293 |
294 | static void MENU_Main_Run(void)
295 | {
296 | UTILI_CalPWR();
297 | UTILI_CalSWR();
298 |
299 | //-----------------------------------------
300 | //global.sleep_delay_sec = 100;
301 | //-----------------------------------------
302 |
303 | if ((global.PWR >= SLEEP_WAKEUP_PWR ) && (global.sleep_enable == TRUE))
304 | {
305 | if (MENU_var.main.sleep_timer == global.sleep_delay_sec)
306 | {
307 | //sleeping weakup by power
308 | MENU_Main_Weakup();
309 | }
310 |
311 | MENU_var.main.sleep_timer=0; //Reset sleeptimer if PWR >0
312 | }
313 |
314 | if ((global.sleep_enable == TRUE) && (global.bypass_enable != TRUE))
315 | {
316 | if (MENU_var.main.sleep_timer < global.sleep_delay_sec)
317 | {
318 | MENU_var.main.counter_1sec++;
319 | if (MENU_var.main.counter_1sec == 100)
320 | {
321 | MENU_var.main.counter_1sec=0;
322 | MENU_var.main.sleep_timer++;
323 | if (MENU_var.main.sleep_timer == global.sleep_delay_sec)
324 | {
325 | //Sleeping
326 | DISP_Clr();
327 | DISP_Str(DISP_COL_CENTER, 1, str_sleeping, 0);
328 | UTILI_Set_LC_Relays(0); //Reset all relays
329 | }
330 | }
331 | }
332 | }
333 |
334 |
335 | if ((MENU_var.main.sleep_timer < global.sleep_delay_sec) || (global.sleep_enable != TRUE))
336 | {
337 | MENU_var.main.update_cnt++;
338 | if (MENU_var.main.update_cnt == UPDATE_PERIODE)
339 | {
340 | MENU_var.main.update_cnt = 0;
341 | if ((global.PWR > 0) || (MENU_var.main.old_pwr != 0)) //avoid display refresh when receiving
342 | {
343 | MENU_var.main.old_pwr = global.PWR;
344 | MENU_Main_Update();
345 | }
346 | }
347 |
348 | //Auto Tune
349 | if((global.tune_auto_enable == TRUE) && (global.bypass_enable != TRUE))
350 | {
351 | if((global.PWR > 0) && (global.SWR >= global.tune_auto_swr))
352 | {
353 | current_menu = &menuTune;
354 | current_menu->Init();
355 | }
356 | }
357 |
358 |
359 | //short press ->
360 | if (BUTTON_count == BUTTON_RELEASED)
361 | {
362 | if(global.bypass_enable == TRUE) //-> bypass reset
363 | {
364 | global.bypass_enable = FALSE;
365 | UTILI_Set_LC_Relays(global.bypass_save_relais);
366 | }
367 | else // -> Tuning
368 | {
369 | current_menu = &menuTune;
370 | }
371 | current_menu->Init();
372 | }
373 |
374 | //long pressed ->
375 | if (BUTTON_count == BUTTON_LONG_PRESSED)
376 | {
377 | if(global.bypass_enable == TRUE) //-> bypass reset
378 | {
379 | global.bypass_enable = FALSE;
380 | UTILI_Set_LC_Relays(global.bypass_save_relais);
381 | }
382 | else //-> sub menu
383 | {
384 | current_menu = &menuSubTop;
385 | }
386 | current_menu->Init();
387 | }
388 | }
389 | else
390 | {
391 | //sleeping weakup by button
392 | if (BUTTON_count == BUTTON_SHORT_PRESSED)
393 | {
394 | MENU_Main_Weakup();
395 | }
396 | }
397 |
398 |
399 |
400 | }
401 |
402 | //-- Menu_Reset --------------------------------------------------------------------------------------------------
403 | static void MENU_Reset_Init(void)
404 | {
405 | UTILI_Set_LC_Relays(0);
406 | global.bypass_enable = FALSE;
407 | MENU_Init();
408 | }
409 |
410 | //-- Menu Bypass --------------------------------------------------------------------------------------------------
411 | static void MENU_Bypass_Init(void)
412 | {
413 | global.bypass_enable = TRUE;
414 | global.bypass_save_relais = UTILI_Get_LC_Relays(); //Save current relais
415 | UTILI_Set_LC_Relays(0); //reset relais
416 | MENU_Init();
417 | }
418 |
419 | //-- Menu_Tune --------------------------------------------------------------------------------------------------
420 |
421 | static void MENU_Tune_Update(void)
422 | {
423 | uint8_t state = TUNE_state;
424 | if (state == TUNE_RUN)
425 | {
426 | if (MENU_var.tune.blink)
427 | {
428 | MENU_var.tune.blink = 0;
429 | state=0;
430 | } else
431 | {
432 | MENU_var.tune.blink = 1;
433 | }
434 | }
435 | DISP_Str(DISP_COL_CENTER, 2, str_TUNE_State[state], 0);
436 | }
437 |
438 | static void MENU_Tune_Init(void)
439 | {
440 | DISP_Clr();
441 | BUTTON_Reset();
442 | DISP_Str(DISP_COL_CENTER, 0, str__Tune_, 1);
443 | MENU_var.tune.blink=0;
444 | MENU_var.tune.relays_backup = UTILI_Get_LC_Relays();
445 | TUNE_Init();
446 | }
447 |
448 | static void MENU_Tune_Run(void)
449 | {
450 |
451 | //Tune
452 | TUNE_Run();
453 |
454 | //Display update
455 | MENU_var.tune.update_cnt++;
456 | if (MENU_var.tune.update_cnt == TUNE_UPDATE_PERIODE)
457 | {
458 | MENU_var.tune.update_cnt = 0;
459 | MENU_Tune_Update();
460 | }
461 |
462 | if (BUTTON_count == BUTTON_SHORT_PRESSED)
463 | {
464 | UTILI_Set_LC_Relays(MENU_var.tune.relays_backup);
465 | MENU_Init();
466 | return;
467 | }
468 |
469 | if(TUNE_state == TUNE_READY)
470 | {
471 | MENU_Init();
472 | return;
473 | }
474 |
475 | }
476 |
477 | //-- Menu_TParam --------------------------------------------------------------------------------------------------
478 | static void MENU_TParam_Update(void)
479 | {
480 | uint8_t cursor = MENU_var.tparam.cursor;
481 | if(MENU_var.tparam.auto_enable == TRUE)
482 | {
483 | DISP_Str(7, 0, str_On, (cursor == 0));
484 | }
485 | else
486 | {
487 | DISP_Str(7, 0, str_Off, (cursor == 0));
488 | }
489 |
490 | DISP_SWR(6, 1, MENU_var.tparam.auto_swr, (cursor == 1));
491 | DISP_SWR(6, 2, MENU_var.tparam.stop_swr, (cursor == 2));
492 | DISP_Str(0,3,str_Save, (cursor == 3));
493 | DISP_Str(7,3,str_Esc, (cursor == 4));
494 |
495 | }
496 |
497 | static void MENU_TParam_Init(void)
498 | {
499 | DISP_Clr();
500 | BUTTON_Reset();
501 | DISP_Str(0, 0,str_Auto, 0);
502 | DISP_Str(0, 1,str_Start,0);
503 | DISP_Str(0, 2,str_Stop,0);
504 | MENU_var.tparam.cursor=0;
505 | MENU_var.tparam.auto_enable = global.tune_auto_enable;
506 | MENU_var.tparam.auto_swr = global.tune_auto_swr;
507 | MENU_var.tparam.stop_swr = global.tune_stop_swr;
508 | MENU_TParam_Update();
509 | }
510 |
511 | static void MENU_TParam_Run(void)
512 | {
513 |
514 | if (BUTTON_count == BUTTON_RELEASED)
515 | {
516 | MENU_var.tparam.cursor++;
517 | if (MENU_var.tparam.cursor > 4)
518 | {
519 | MENU_var.tparam.cursor = 0;
520 | }
521 |
522 | MENU_TParam_Update();
523 | }
524 |
525 | if (BUTTON_count == BUTTON_LONG_PRESSED)
526 | {
527 | BUTTON_count -= BUTTON_LONG_REPEAT_DELAY_MAX;
528 |
529 | //cursor at "Auto"
530 | if(MENU_var.tparam.cursor == 0)
531 | {
532 | if(MENU_var.tparam.auto_enable == TRUE)
533 | {
534 | MENU_var.tparam.auto_enable = FALSE;
535 | }
536 | else
537 | {
538 | MENU_var.tparam.auto_enable = TRUE;
539 | }
540 | MENU_TParam_Update();
541 | }
542 |
543 |
544 | //cursor at "Start"
545 | if(MENU_var.tparam.cursor == 1)
546 | {
547 | MENU_var.tparam.auto_swr += 5; // step SWR 0.05
548 | if(MENU_var.tparam.auto_swr > TUNE_AUTO_MAX_SWR)
549 | {
550 | MENU_var.tparam.auto_swr = TUNE_AUTO_MIN_SWR;
551 | }
552 | MENU_TParam_Update();
553 | }
554 |
555 | //cursor at "Stop"
556 | if(MENU_var.tparam.cursor == 2)
557 | {
558 | MENU_var.tparam.stop_swr += 5; // step SWR 0.05
559 | if(MENU_var.tparam.stop_swr > TUNE_STOP_MAX_SWR)
560 | {
561 | MENU_var.tparam.stop_swr = TUNE_STOP_MIN_SWR;
562 | }
563 | MENU_TParam_Update();
564 | }
565 |
566 | if (MENU_var.tparam.cursor == 3) //cursor at "Save"
567 | {
568 | global.tune_auto_enable = MENU_var.tparam.auto_enable;
569 | global.tune_auto_swr = MENU_var.tparam.auto_swr;
570 | global.tune_stop_swr = MENU_var.tparam.stop_swr;
571 |
572 | EEPROM_Write((uint8_t)&ee_tune_stop_swr, &global.tune_stop_swr, sizeof(ee_tune_stop_swr));
573 | EEPROM_Write((uint8_t)&ee_tune_auto_swr, &global.tune_auto_swr, sizeof(ee_tune_auto_swr));
574 | EEPROM_Write((uint8_t)&ee_tune_auto_enable, &global.tune_auto_enable, sizeof(ee_tune_auto_enable));
575 | MENU_Init();
576 | return;
577 | }
578 |
579 | if (MENU_var.tparam.cursor == 4) //cursor at "ESC"
580 | {
581 | MENU_Init();
582 | return;
583 | }
584 |
585 | }
586 | }
587 |
588 |
589 | //-- Menu_Sleep --------------------------------------------------------------------------------------------------
590 | static void MENU_Sleep_Update(void)
591 | {
592 | uint8_t cursor = MENU_var.sleep.cursor;
593 | if(MENU_var.sleep.enable == TRUE)
594 | {
595 | DISP_Str(7, 0, str_On, (cursor == 0));
596 | }
597 | else
598 | {
599 | DISP_Str(7, 0, str_Off, (cursor == 0));
600 | }
601 |
602 | char str[4];
603 | UTILI_Int2Str(MENU_var.sleep.delay_sec, str, sizeof(str));
604 | DISP_Str(7,1,str,(cursor == 1));
605 | DISP_Str(0,3,str_Save,(cursor == 2));
606 | DISP_Str(7,3,str_Esc, (cursor == 3));
607 |
608 | }
609 |
610 | static void MENU_Sleep_Init(void)
611 | {
612 | DISP_Clr();
613 | BUTTON_Reset();
614 | DISP_Str(0, 0, str_Sleep, 0);
615 | DISP_Str(0, 1, str_Delay,0);
616 | MENU_var.sleep.cursor=0;
617 | MENU_var.sleep.enable = global.sleep_enable;
618 | MENU_var.sleep.delay_sec = global.sleep_delay_sec;
619 | MENU_Sleep_Update();
620 | }
621 |
622 | static void MENU_Sleep_Run(void)
623 | {
624 |
625 | if (BUTTON_count == BUTTON_RELEASED)
626 | {
627 | MENU_var.sleep.cursor++;
628 | if (MENU_var.sleep.cursor > 3)
629 | {
630 | MENU_var.sleep.cursor = 0;
631 | }
632 | MENU_Sleep_Update();
633 | }
634 |
635 | if (BUTTON_count == BUTTON_LONG_PRESSED)
636 | {
637 | BUTTON_count -= BUTTON_LONG_REPEAT_DELAY_MAX;
638 |
639 | //cursor at "Sleep"
640 | if(MENU_var.sleep.cursor == 0)
641 | {
642 | if(MENU_var.sleep.enable == TRUE)
643 | {
644 | MENU_var.sleep.enable = FALSE;
645 | }
646 | else
647 | {
648 | MENU_var.sleep.enable = TRUE;
649 | }
650 | MENU_Sleep_Update();
651 | }
652 |
653 |
654 | //cursor at "Delay"
655 | if(MENU_var.sleep.cursor == 1)
656 | {
657 |
658 | if(MENU_var.sleep.delay_sec >= SLEEP_DELAY_FAST_HIGHER)
659 | {
660 | MENU_var.sleep.delay_sec += SLEEP_DELAY_STEP_FAST;
661 | }
662 | else
663 | {
664 | MENU_var.sleep.delay_sec += SLEEP_DELAY_STEP_SLOW;
665 | }
666 |
667 | if(MENU_var.sleep.delay_sec > SLEEP_DELAY_MAX)
668 | {
669 | MENU_var.sleep.delay_sec = SLEEP_DELAY_STEP_SLOW;
670 | }
671 |
672 | MENU_Sleep_Update();
673 | }
674 |
675 |
676 | if (MENU_var.tparam.cursor == 2) //cursor at "Save"
677 | {
678 | global.sleep_delay_sec = MENU_var.sleep.delay_sec;
679 | global.sleep_enable = MENU_var.sleep.enable;
680 | EEPROM_Write((uint8_t)&ee_sleep_delay_sec, &global.sleep_delay_sec, sizeof(ee_sleep_delay_sec));
681 | EEPROM_Write((uint8_t)&ee_sleep_enable, &global.sleep_enable, sizeof(ee_sleep_enable));
682 | MENU_Init();
683 | return;
684 | }
685 |
686 | if (MENU_var.tparam.cursor == 3) //cursor at "Esc"
687 | {
688 | MENU_Init();
689 | return;
690 | }
691 |
692 |
693 | }
694 | }
695 |
696 |
697 |
698 | //-- Menu_RelTest --------------------------------------------------------------------------------------------------
699 |
700 | static void MENU_RelTest_Update(void)
701 | {
702 | uint8_t cursor = MENU_var.reltest.cursor;
703 | uint8_t c_row = 1;
704 | uint8_t l_row = 2;
705 | char str[7];
706 |
707 |
708 |
709 | //switch off : Input -> C -> L -> Output
710 | //switch on : Input -> L -> C -> Output
711 | if (global.cap_sw)
712 | {
713 | c_row = 2;
714 | l_row = 1;
715 | }
716 |
717 |
718 | DISP_Str(0, c_row, str_C_, 0);
719 | UTILI_GetCapValueStr(str, sizeof (str));
720 | DISP_Str(4, c_row, str, (cursor == (c_row - 1)));
721 |
722 | DISP_Str(0, l_row, str_L_, 0);
723 | UTILI_GetIndValueStr(str, sizeof (str));
724 | DISP_Str(4, l_row, str, (cursor == (l_row - 1)));
725 |
726 | if (!global.cap_sw)
727 | {
728 | DISP_Str(0, 3, str_C_L, (cursor == 2));
729 | } else
730 | {
731 | DISP_Str(0, 3, str_L_C, (cursor == 2));
732 | }
733 |
734 | DISP_Str(7, 3, str_Esc, (cursor == 3));
735 | }
736 |
737 | static void MENU_RelTest_Init(void)
738 | {
739 | DISP_Clr();
740 | BUTTON_Reset();
741 | MENU_var.reltest.cursor = 0;
742 | MENU_var.reltest.relais_backup = UTILI_Get_LC_Relays();
743 | MENU_var.reltest.update_cnt = 0;
744 | global.cap_sw = 0;
745 | global.cap_relays = 0;
746 | global.ind_relays = 0;
747 | UTILI_SetRelays();
748 | MENU_RelTest_Update();
749 | }
750 |
751 | static void MENU_RelTest_Run(void)
752 | {
753 |
754 | MENU_var.reltest.update_cnt++;
755 | if (MENU_var.reltest.update_cnt == UPDATE_PERIODE)
756 | {
757 | MENU_var.reltest.update_cnt = 0;
758 | UTILI_CalPWR();
759 | UTILI_CalSWR();
760 | DISP_SWR(0, 0, global.SWR, 0);
761 | DISP_PWR(6, 0, global.PWR, 0);
762 | }
763 |
764 | if (BUTTON_count == BUTTON_RELEASED)
765 | {
766 | MENU_var.reltest.cursor++;
767 | if (MENU_var.reltest.cursor > 3)
768 | {
769 | MENU_var.reltest.cursor = 0;
770 | }
771 |
772 | MENU_RelTest_Update();
773 | }
774 |
775 |
776 | if (BUTTON_count == BUTTON_LONG_PRESSED)
777 | {
778 | BUTTON_count -= BUTTON_LONG_REPEAT_DELAY_MAX;
779 |
780 | //cursor at "cap"
781 | if ((!global.cap_sw && (MENU_var.reltest.cursor == 0))
782 | || (global.cap_sw && (MENU_var.reltest.cursor == 1)))
783 | {
784 | if (global.cap_relays == 0)
785 | {
786 | global.cap_relays = 1;
787 | } else
788 | {
789 | global.cap_relays = (uint8_t) (global.cap_relays << 1) & 0x7f;
790 | }
791 | }
792 |
793 |
794 | //cursor at "ind"
795 | if ((!global.cap_sw && (MENU_var.reltest.cursor == 1))
796 | || (global.cap_sw && (MENU_var.reltest.cursor == 0)))
797 | {
798 | if (global.ind_relays == 0)
799 | {
800 | global.ind_relays = 1;
801 | } else
802 | {
803 | global.ind_relays = (uint8_t) (global.ind_relays << 1) & 0x7f;
804 | }
805 | }
806 |
807 | if (MENU_var.reltest.cursor == 2) //cursor at "C-SW"
808 | {
809 | if (global.cap_sw == 0)
810 | {
811 | global.cap_sw = 1;
812 | } else
813 | {
814 | global.cap_sw = 0;
815 | }
816 |
817 | BUTTON_count = BUTTON_RESET;
818 |
819 | }
820 |
821 | if (MENU_var.reltest.cursor == 3) //cursor at "Esc"
822 | {
823 | //Restore C/L settings
824 | UTILI_Set_LC_Relays(MENU_var.reltest.relais_backup);
825 | MENU_Init();
826 | return;
827 | }
828 | else
829 | {
830 | MENU_RelTest_Update();
831 | }
832 |
833 | UTILI_SetRelays();
834 | }
835 |
836 |
837 | //- Buttons Auto and Bypass for fine tuning
838 |
839 | uint8_t update =0;
840 |
841 | //cursor at "cap"
842 | if ((!global.cap_sw && (MENU_var.reltest.cursor == 0))
843 | || (global.cap_sw && (MENU_var.reltest.cursor == 1)))
844 | {
845 | if(BUTTON_Bypass_count == 1)
846 | {
847 | if(global.cap_relays > 0) global.cap_relays--;
848 | update=1;
849 | }
850 |
851 | if(BUTTON_Auto_count == 1)
852 | {
853 | if(global.cap_relays < 0x7f) global.cap_relays++;
854 | update=1;
855 | }
856 | }
857 |
858 |
859 | //cursor at "ind"
860 | if ((!global.cap_sw && (MENU_var.reltest.cursor == 1))
861 | || (global.cap_sw && (MENU_var.reltest.cursor == 0)))
862 | {
863 | if(BUTTON_Bypass_count == 1)
864 | {
865 | if(global.ind_relays > 0) global.ind_relays--;
866 | update=1;
867 | }
868 |
869 | if(BUTTON_Auto_count == 1)
870 | {
871 | if(global.ind_relays < 0x7f) global.ind_relays++;
872 | update=1;
873 | }
874 | }
875 |
876 |
877 | if(update)
878 | {
879 | UTILI_SetRelays();
880 | MENU_RelTest_Update();
881 | }
882 |
883 |
884 | }
885 |
886 |
887 | //-- MENU_CalMenu -------------------------------------------------------------------------------------------------
888 |
889 | static void MENU_CalPWR_Update(void)
890 | {
891 | char str[2] = " ";
892 |
893 | str[0] = MENU_var.cal.step + '1';
894 | DISP_Str(0, 0,str_Point,0);
895 | DISP_Str(9, 0, str, 0);
896 | DISP_Str(0, 1,str_WaitForHF, 0);
897 |
898 | DISP_Str(0, 2, str_Power, 0);
899 | DISP_PWR(6, 2, MENU_var.cal.cal_point[MENU_var.cal.step], (MENU_var.cal.cursor == 0));
900 |
901 | DISP_Str(7, 3,str_Esc, (MENU_var.cal.cursor == 1));
902 | }
903 |
904 | static void MENU_CalPWR_Init(void)
905 | {
906 | DISP_Clr();
907 | MENU_var.cal.cursor = 0;
908 | MENU_var.cal.step = 0;
909 | MENU_var.cal.cal_point[0] = global.cal_point[0];
910 | MENU_var.cal.cal_point[1] = global.cal_point[1];
911 | BUTTON_Reset();
912 |
913 | MENU_CalPWR_Update();
914 |
915 | }
916 |
917 | static void MENU_CalPWR_Run(void)
918 | {
919 | if (BUTTON_count == BUTTON_RELEASED)
920 | {
921 | MENU_var.cal.cursor = MENU_var.cal.cursor ^ 0x01; // value 0 or 1
922 | MENU_CalPWR_Update();
923 | }
924 |
925 |
926 | if (BUTTON_count == BUTTON_LONG_PRESSED)
927 | {
928 | BUTTON_count -= BUTTON_LONG_REPEAT_DELAY_MAX;
929 |
930 |
931 | if ((MENU_var.cal.cursor == 0)&&(MENU_var.cal.step <=1)) //cursor at "Power"
932 | {
933 | int16_t value = MENU_var.cal.cal_point[MENU_var.cal.step];
934 |
935 | if (value < 100) value += 5;
936 | else value += 50;
937 |
938 | if (MENU_var.cal.step == 0)
939 | {
940 | if (value > CAL_STEP0_MAX) value = 0;
941 | }
942 | else
943 | {
944 | //Value in step 1 could not be smaller than in step 0
945 | if (value > CAL_STEP1_MAX) value = MENU_var.cal.cal_point[0];
946 | }
947 |
948 | MENU_var.cal.cal_point[MENU_var.cal.step] = value;
949 |
950 | MENU_CalPWR_Update();
951 |
952 | }
953 | else //cursor at "ESC"
954 | {
955 | MENU_Init();
956 | return;
957 | }
958 | }
959 |
960 | //ADC
961 | if (MENU_var.cal.step <= 1) //step 0 & 1
962 | {
963 | if (global.adc_f_mV > ADC_CAL_START)
964 | {
965 | if (global.adc_f_mV == MENU_var.cal.adc_value_old) //stable value current == old
966 | {
967 | MENU_var.cal.adc_value[MENU_var.cal.step] = global.adc_f_mV; //save
968 |
969 | DISP_Clr();
970 | DISP_Str(DISP_COL_CENTER, 1, str_Ok, 0);
971 | MENU_var.cal.step += 2; //steps 0->2 & 1->3
972 | }
973 | }
974 | }
975 | else //step 2 & 3
976 | {
977 | //Wait end of power
978 | if (global.adc_f_mV < ADC_CAL_STOP)
979 | {
980 |
981 | MENU_var.cal.step--; //steps 2->1 & 3->2
982 | if (MENU_var.cal.step == 1)
983 | {
984 | DISP_Clr();
985 | MENU_CalPWR_Update();
986 | }
987 | else
988 | {
989 | global.cal_point[0] = MENU_var.cal.cal_point[0];
990 | global.cal_point[1] = MENU_var.cal.cal_point[1];
991 |
992 | // char str[8];
993 | // UART_WriteStr("Point 0: ");
994 | // UTILI_Int2Str(global.cal_point[0],str,sizeof(str));
995 | // UART_WriteStrLn(str);
996 |
997 | // UART_WriteStr("Point 1: ");
998 | // UTILI_Int2Str(global.cal_point[1],str,sizeof(str));
999 | // UART_WriteStrLn(str);
1000 |
1001 | int16_t y1 = UTILI_deciWatt_to_centiVolt(global.cal_point[0]);
1002 | int16_t y2 = UTILI_deciWatt_to_centiVolt(global.cal_point[1]);
1003 |
1004 | // UART_WriteStr("Point V 0: ");
1005 | // UTILI_Int2Str(y1,str,sizeof(str));
1006 | // UART_WriteStrLn(str);
1007 |
1008 | // UART_WriteStr("Point V 1: ");
1009 | // UTILI_Int2Str(y2,str,sizeof(str));
1010 | // UART_WriteStrLn(str);
1011 |
1012 | global.cal_gain = (int16_t) (((y2 - y1) * (int32_t) CAL_GAIN_MULTIPLIER) / (MENU_var.cal.adc_value[1] - MENU_var.cal.adc_value[0]));
1013 |
1014 | // UART_WriteStr("Gain: ");
1015 | // UTILI_Int2Str(global.cal_gain,str,sizeof(str));
1016 | // UART_WriteStrLn(str);
1017 |
1018 | global.cal_offset = y1 - (int16_t) (((int32_t) global.cal_gain * MENU_var.cal.adc_value[0]) / CAL_GAIN_MULTIPLIER);
1019 |
1020 | // UART_WriteStr("Offset: ");
1021 | // UTILI_Int2Str(global.cal_offset,str,sizeof(str));
1022 | // UART_WriteStrLn(str);
1023 |
1024 | //Save new cal values to eeprom
1025 | EEPROM_Write((uint8_t)&ee_cal_point_0, &global.cal_point[0], sizeof (ee_cal_point_0));
1026 | EEPROM_Write((uint8_t)&ee_cal_point_1, &global.cal_point[1], sizeof (ee_cal_point_1));
1027 | EEPROM_Write((uint8_t)&ee_cal_offset, &global.cal_offset, sizeof (ee_cal_offset));
1028 | EEPROM_Write((uint8_t)&ee_cal_gain, &global.cal_gain, sizeof (ee_cal_gain));
1029 |
1030 | MENU_Init();
1031 | return;
1032 | }
1033 | }
1034 | }
1035 |
1036 | MENU_var.cal.adc_value_old = global.adc_f_mV;
1037 |
1038 |
1039 |
1040 | }
1041 |
1042 |
1043 |
1044 |
1045 | //static void MENU_Back_Init(void)
1046 | //{
1047 | // const menu_t* ptrMenu;
1048 | // if(stack_index > 1)
1049 | // {
1050 | // stack_index--;
1051 | // stack_index--;
1052 | // ptrMenu = (menu_t*) stack_menu[stack_index];
1053 | // ptrMenu->Init();
1054 | //
1055 | // }
1056 | //}
1057 |
1058 |
1059 | //-- MENU_Setup -------------------------------------------------------------------------------------------------
1060 | static void MENU_SubSetup_Init(void)
1061 | {
1062 | DISP_Clr();
1063 | BUTTON_Reset();
1064 |
1065 | MENU_var.sub.cursor =0;
1066 | MENU_var.sub.top=0;
1067 | MENU_var.sub.timeout =0;
1068 | MENU_var.sub.items = MENU_SUBSETUP_ITEMS;
1069 | MENU_var.sub.ptrMenu = ptrSubSetupMenu;
1070 |
1071 | MENU_Sub_Update();
1072 |
1073 | }
1074 |
1075 | //-- MENU_Sub -------------------------------------------------------------------------------------------------
1076 |
1077 |
1078 | static void MENU_SubTop_Init(void)
1079 | {
1080 | DISP_Clr();
1081 | BUTTON_Reset();
1082 |
1083 | MENU_var.sub.cursor =0;
1084 | MENU_var.sub.top=0;
1085 | MENU_var.sub.timeout =0;
1086 | MENU_var.sub.items = MENU_SUBTOP_ITEMS;
1087 | MENU_var.sub.ptrMenu = ptrSubTopMenu;
1088 |
1089 | MENU_Sub_Update();
1090 |
1091 | }
1092 |
1093 |
1094 | static void MENU_Sub_Update(void)
1095 | {
1096 | //Show 4 lines of the sub menu and highlight the current cursor item
1097 | uint8_t pos = MENU_var.sub.top;
1098 |
1099 |
1100 | for(uint8_t i = 0; i < 4; i++)
1101 | {
1102 | DISP_Str(DISP_COL_CENTER, i, MENU_var.sub.ptrMenu[pos]->title, (pos == MENU_var.sub.cursor));
1103 | pos++;
1104 | }
1105 | }
1106 |
1107 |
1108 |
1109 | static void MENU_Sub_Run(void)
1110 | {
1111 |
1112 | //Timeout
1113 | MENU_var.sub.timeout++;
1114 | if(MENU_var.sub.timeout >= MENU_SUB_TIMEOUT)
1115 | {
1116 | MENU_Init();
1117 | return;
1118 | }
1119 |
1120 | if(BUTTON_count == BUTTON_RELEASED)
1121 | {
1122 | MENU_var.sub.timeout=0;
1123 |
1124 | uint8_t cursor_pos = MENU_var.sub.cursor - MENU_var.sub.top;
1125 |
1126 | switch (cursor_pos)
1127 | {
1128 | //cursor in the 1st or in the 3rd line
1129 | case 0:
1130 | case 2:
1131 | MENU_var.sub.cursor++;
1132 | break;
1133 |
1134 | //cursor in the 2nd. line
1135 | case 1:
1136 | //Are more than 4 items ahead -> increase top position and cursor
1137 | //if not only move cursor to 3rd line
1138 | if((MENU_var.sub.top +4) < MENU_var.sub.items)
1139 | {
1140 | MENU_var.sub.top++;
1141 | }
1142 | MENU_var.sub.cursor++;
1143 | break;
1144 |
1145 | //cursor in the 4th line
1146 | //case 3:
1147 | default:
1148 | //Redraw menu from top
1149 | MENU_var.sub.top=0;
1150 | MENU_var.sub.cursor=0;
1151 | break;
1152 | }
1153 |
1154 | MENU_Sub_Update();
1155 |
1156 | }
1157 |
1158 | if (BUTTON_count == BUTTON_LONG_PRESSED)
1159 | {
1160 | current_menu = MENU_var.sub.ptrMenu[MENU_var.sub.cursor];
1161 | current_menu->Init();
1162 | }
1163 |
1164 |
1165 | }
1166 |
1167 | //-- MENU_Load_Save_Memory -------------------------------------------------------------------------------------------------
1168 |
1169 | static void MENU_Memory_Update(void)
1170 | {
1171 | char str_index[3] = "0:";
1172 | uint8_t index;
1173 | union
1174 | {
1175 | tunemem_t tunemem;
1176 | uint8_t bytes[sizeof(tunemem_t) +1]; //make the union one byte longer
1177 | }memory;
1178 |
1179 |
1180 |
1181 | for(uint8_t i = 0; i < 3; i++)
1182 | {
1183 | index = MENU_var.memory.top + i;
1184 | str_index[0] = '0' + index;
1185 | DISP_Str(0, i+1,str_index,(index == MENU_var.memory.cursor));
1186 |
1187 | //Load item from eeprom
1188 | EEPROM_Read((uint8_t)&ee_tunemem + (sizeof(tunemem_t) * index) , &memory, sizeof(tunemem_t));
1189 | memory.bytes[sizeof(tunemem_t)] =0; //Terminat string
1190 | DISP_Str(2,i+1,memory.tunemem.str_name, (index == MENU_var.memory.cursor));
1191 | }
1192 | }
1193 |
1194 |
1195 | static void MENU_Memory_Init(void)
1196 | {
1197 | MENU_var.memory.cursor =0;
1198 | MENU_var.memory.top=0;
1199 | MENU_var.memory.timeout =0;
1200 | MENU_Memory_Update();
1201 | BUTTON_Reset();
1202 | }
1203 |
1204 | static void MENU_MemoryLoad_Init(void)
1205 | {
1206 | DISP_Clr();
1207 | DISP_Str(0,0,str_MENU_Load,0);
1208 | MENU_var.memory.save_mode =0;
1209 | MENU_Memory_Init();
1210 | }
1211 |
1212 | static void MENU_MemorySave_Init(void)
1213 | {
1214 | DISP_Clr();
1215 | DISP_Str(0,0,str_MENU_Save,0);
1216 | MENU_var.memory.save_mode =1;
1217 | MENU_Memory_Init();
1218 | }
1219 |
1220 |
1221 |
1222 |
1223 |
1224 | static void MENU_Memory_Run(void)
1225 | {
1226 |
1227 | //Timeout
1228 | MENU_var.memory.timeout++;
1229 | if(MENU_var.memory.timeout >= MENU_MEMORY_TIMEOUT)
1230 | {
1231 | MENU_Init();
1232 | return;
1233 | }
1234 |
1235 | if(BUTTON_count == BUTTON_RELEASED)
1236 | {
1237 | MENU_var.memory.timeout=0;
1238 |
1239 | uint8_t cursor_pos = MENU_var.memory.cursor - MENU_var.memory.top;
1240 |
1241 | switch (cursor_pos)
1242 | {
1243 | //cursor in the 1st or in the 3rd line
1244 | case 0:
1245 | MENU_var.memory.cursor++;
1246 | break;
1247 |
1248 | //cursor in the 2nd. line
1249 | case 1:
1250 | //Are more than 2 items ahead -> increase top position and cursor
1251 | //if not only move cursor to 3rd line
1252 | if((MENU_var.memory.top +3) < TUNEMEM_ITEMS)
1253 | {
1254 | MENU_var.memory.top++;
1255 | }
1256 | MENU_var.memory.cursor++;
1257 | break;
1258 |
1259 | //cursor in the 4th line
1260 | //case 3:
1261 | default:
1262 | //Redraw menu from top
1263 | MENU_var.memory.top=0;
1264 | MENU_var.memory.cursor=0;
1265 | break;
1266 | }
1267 |
1268 | MENU_Memory_Update();
1269 |
1270 | }
1271 |
1272 | if (BUTTON_count == BUTTON_LONG_PRESSED)
1273 | {
1274 | if (MENU_var.memory.save_mode == TRUE)
1275 | {
1276 | if(MENU_var.memory.cursor == 0) //Startup
1277 | {
1278 | current_menu = &menuStartupSave;
1279 |
1280 | }
1281 | else
1282 | {
1283 | MENU_var.nameedit.mem_index = MENU_var.memory.cursor;
1284 | current_menu = &menuNameEdit;
1285 | }
1286 |
1287 | current_menu->Init();
1288 | return;
1289 | }
1290 | else
1291 | {
1292 | //Load
1293 | tunemem_t tunemem;
1294 | EEPROM_Read((uint8_t) & ee_tunemem + (sizeof (tunemem_t) * MENU_var.memory.cursor) , &tunemem, sizeof (tunemem_t));
1295 | UTILI_Set_LC_Relays(tunemem.relays);
1296 | MENU_Init();
1297 | return;
1298 | }
1299 | }
1300 |
1301 |
1302 | }
1303 |
1304 | //-- MENU_NameEdit -------------------------------------------------------------------------------------------------
1305 |
1306 | static void MENU_NameEdit_Update(void)
1307 | {
1308 | uint8_t i;
1309 |
1310 |
1311 | //name
1312 | for(i=0; i= (sizeof(NameEditChar)-1) )
1341 | {
1342 | i=0;
1343 | }
1344 | DISP_Char(2+x,1,NameEditChar[i],0);
1345 | }
1346 | }
1347 | else //is cursor at save or ESC print empty line
1348 | {
1349 | DISP_Str(0, 1, str_SpaceLine,0);
1350 | }
1351 |
1352 |
1353 |
1354 |
1355 |
1356 |
1357 | DISP_Str(0,3,str_Save, (MENU_var.nameedit.cursor == TUNEMEM_STRLEN) );
1358 | DISP_Str(7,3,str_Esc, (MENU_var.nameedit.cursor == TUNEMEM_STRLEN+1));
1359 | }
1360 |
1361 |
1362 | static void MENU_NameEdit_Init(void)
1363 | {
1364 |
1365 | //print memory slot
1366 | char str_index[3] = "0:";
1367 | str_index[0] = '0' + MENU_var.nameedit.mem_index;
1368 | DISP_Clr();
1369 | DISP_Str(0, 0,str_index,0);
1370 |
1371 | EEPROM_Read((uint8_t)&ee_tunemem + (sizeof(tunemem_t) * MENU_var.nameedit.mem_index) , &MENU_var.nameedit.tunemem, sizeof(tunemem_t));
1372 | MENU_var.nameedit.cursor=0;
1373 | MENU_var.nameedit.button_repeat_delay = BUTTON_LONG_REPEAT_DELAY_MAX;
1374 | BUTTON_Reset();
1375 | MENU_NameEdit_Update();
1376 |
1377 | }
1378 |
1379 | static void MENU_NameEdit_Run(void)
1380 | {
1381 |
1382 | if(BUTTON_count == BUTTON_IDLE)
1383 | {
1384 | MENU_var.nameedit.button_repeat_delay = BUTTON_LONG_REPEAT_DELAY_MAX;
1385 | }
1386 |
1387 |
1388 | if(BUTTON_count == BUTTON_RELEASED)
1389 | {
1390 | //move cursor
1391 | MENU_var.nameedit.cursor++;
1392 | if(MENU_var.nameedit.cursor > TUNEMEM_STRLEN+1)
1393 | {
1394 | MENU_var.nameedit.cursor=0;
1395 | }
1396 | MENU_NameEdit_Update();
1397 | }
1398 |
1399 | if (BUTTON_count == BUTTON_LONG_PRESSED)
1400 | {
1401 | BUTTON_count -= MENU_var.nameedit.button_repeat_delay;
1402 |
1403 | if(MENU_var.nameedit.button_repeat_delay > BUTTON_LONG_REPEAT_DELAY_MIN)
1404 | {
1405 | MENU_var.nameedit.button_repeat_delay -= BUTTON_LONG_REPEAT_DELAY_STEP;
1406 | }
1407 |
1408 |
1409 | if(MENU_var.nameedit.cursor < TUNEMEM_STRLEN)
1410 | {
1411 |
1412 | char c = MENU_var.nameedit.tunemem.str_name[MENU_var.nameedit.cursor];
1413 |
1414 | uint8_t i=0;
1415 | while( (c != NameEditChar[i]) && (i= (sizeof(NameEditChar)-1) )
1421 | {
1422 | i=0;
1423 | }
1424 | MENU_var.nameedit.tunemem.str_name[MENU_var.nameedit.cursor] = NameEditChar[i];
1425 |
1426 | MENU_NameEdit_Update();
1427 | }
1428 |
1429 |
1430 |
1431 | //Save
1432 | if(MENU_var.nameedit.cursor == TUNEMEM_STRLEN)
1433 | {
1434 | MENU_var.nameedit.tunemem.relays = UTILI_Get_LC_Relays(); //Save current relais
1435 | EEPROM_Write((uint8_t)ee_tunemem + (sizeof(tunemem_t) * MENU_var.nameedit.mem_index) , &MENU_var.nameedit.tunemem, sizeof(tunemem_t));
1436 | MENU_Init();
1437 | return;
1438 | }
1439 |
1440 | //Esc
1441 | if(MENU_var.nameedit.cursor == TUNEMEM_STRLEN+1)
1442 | {
1443 | MENU_Init();
1444 | return;
1445 | }
1446 |
1447 |
1448 | }
1449 | }
1450 |
1451 |
1452 |
1453 | //-- MENU_StartupSave -------------------------------------------------------------------------------------------------
1454 |
1455 | static void MENU_StartupSave_Update(void)
1456 | {
1457 | DISP_Str(0,3,str_Save, (MENU_var.startupsave.cursor == 0));
1458 | DISP_Str(7,3,str_Esc, (MENU_var.startupsave.cursor == 1));
1459 | }
1460 |
1461 |
1462 | static void MENU_StartupSave_Init(void)
1463 | {
1464 | DISP_Clr();
1465 | char str_index[3] = "0:";
1466 | DISP_Str(0, 1,str_index,0);
1467 |
1468 | EEPROM_Read((uint8_t)&ee_tunemem , &MENU_var.startupsave.tunemem, sizeof(tunemem_t));
1469 | MENU_var.startupsave.str_terminate=0; //Terminat string
1470 | DISP_Str(2, 1,MENU_var.startupsave.tunemem.str_name, 0);
1471 |
1472 | MENU_var.startupsave.cursor=0;
1473 | BUTTON_Reset();
1474 | MENU_StartupSave_Update();
1475 | }
1476 |
1477 | static void MENU_StartupSave_Run(void)
1478 | {
1479 | if(BUTTON_count == BUTTON_RELEASED)
1480 | {
1481 | //move cursor
1482 | MENU_var.startupsave.cursor++;
1483 | if(MENU_var.startupsave.cursor > 1)
1484 | {
1485 | MENU_var.startupsave.cursor=0;
1486 | }
1487 | MENU_StartupSave_Update();
1488 | }
1489 |
1490 | if (BUTTON_count == BUTTON_LONG_PRESSED)
1491 | {
1492 | //Save
1493 | if(MENU_var.startupsave.cursor == 0)
1494 | {
1495 | MENU_var.startupsave.tunemem.relays = UTILI_Get_LC_Relays(); //Save current relais
1496 | EEPROM_Write((uint8_t)ee_tunemem , &MENU_var.startupsave.tunemem, sizeof(tunemem_t));
1497 | }
1498 |
1499 | MENU_Init();
1500 | return;
1501 | }
1502 | }
1503 |
1504 |
1505 |
1506 | //-- MENU About --------------------------------------------------------------------------------------------
1507 |
1508 | static void MENU_About_Init(void)
1509 | {
1510 | DISP_Clr();
1511 | DISP_Str(DISP_COL_CENTER,0,str_Hardware,0);
1512 | DISP_Str(DISP_COL_CENTER,1,str_designed,0);
1513 | DISP_Str(DISP_COL_CENTER,2,str_by,0);
1514 | DISP_Str(DISP_COL_CENTER,3,str_N7DCC,0);
1515 | BUTTON_Reset();
1516 | MENU_var.about.step=0;
1517 | }
1518 |
1519 | static void MENU_About_Run(void)
1520 | {
1521 |
1522 | if(BUTTON_count == BUTTON_SHORT_PRESSED)
1523 | {
1524 | if(MENU_var.about.step ==0)
1525 | {
1526 | MENU_var.about.step++;
1527 | DISP_Clr();
1528 | DISP_Str(DISP_COL_CENTER,0,str_YetAnother,0);
1529 | DISP_Str(DISP_COL_CENTER,1,str_Firmware,0);
1530 | DISP_Str(DISP_COL_CENTER,2,str_by,0);
1531 | DISP_Str(DISP_COL_CENTER,3,str_DG4SN,0);
1532 | }
1533 | else
1534 | {
1535 | MENU_Init();
1536 | return;
1537 | }
1538 | }
1539 | }
1540 |
1541 |
1542 | //-- MENU -------------------------------------------------------------------------------------------------
1543 | void MENU_Init(void)
1544 | {
1545 | current_menu = (menu_t*) & menuMain;
1546 | MENU_Main_Init();
1547 | }
1548 |
1549 | void MENU_Run(void)
1550 | {
1551 | if(current_menu->Run != NULL)
1552 | {
1553 | current_menu->Run();
1554 | }
1555 | }
1556 |
1557 |
--------------------------------------------------------------------------------
/dist/ATU-100_YAF_0V68.hex:
--------------------------------------------------------------------------------
1 | :040000008031132810
2 | :100008007E1480312000911C0A280B281128911099
3 | :100018000130F00070082100B9077E100900803116
4 | :10002800152865308400A5308500E530860000304D
5 | :1000380087000B308731F9278031DB308400A73007
6 | :100048008500483086000130870025308731F92740
7 | :100058008031FC015D308400003085000930A53115
8 | :100068004E258031A0308400003085004530A53110
9 | :100078004E25803120308400013085002830A5319C
10 | :100088004E2580317E102000913136290330200022
11 | :100098006206031950285128FE2B05306206031DFD
12 | :1000A800562857285828FE2B2100310803195D28A7
13 | :1000B8005E2861280130B102FE2B9D3193258031E5
14 | :1000C8009031342080312100320803196C286D28C2
15 | :1000D800E62B3B08803A2000BD0080303D02031D1E
16 | :1000E80078280A3021003A0203187B287C28E62B5E
17 | :1000F80004302000BD003D08E200FE2B21003B0833
18 | :10010800803A2000BD0080303D02031D8E280A3051
19 | :1001180021003A02031C91289228FE2B0A30200065
20 | :10012800BD003D082100B20002302000BD003D089E
21 | :10013800E200E7302100AA000330AB00E730A80056
22 | :100148000330A900E730A6000330A700FC01200017
23 | :10015800E1010230BD003D082100B100FE2B210065
24 | :100168003F08803A2000BD0021003D08803A200069
25 | :100178003D02031DC22821003C083E02031CC5287D
26 | :10018800C628CC2805302000BD003D08E200FE2B23
27 | :1001980021003D08803A2000BD0021002908803A4E
28 | :1001A80020003D02031DDB28210028083C0203181B
29 | :1001B800DE28DF28E42821003D08A9003C08A80023
30 | :1001C80021003D08803A2000BD0021002B08803A1C
31 | :1001D80020003D02031DF32821002A083C020318D1
32 | :1001E800F628F7280C2921003D08AB003C08AA0096
33 | :1001F80020006108BD003D08E0007C08BD003D0806
34 | :10020800DF00210055082000BD003D082100B00096
35 | :1002180001302000BD003D08E1070B3061020318E2
36 | :10022800162917293F291430F1000030F200210067
37 | :100238002908F4002808F3009E314A26803121005D
38 | :10024800280871072000BD0021002908723D200000
39 | :10025800BE003E08803ABF0021003D08803A2000D9
40 | :100268003F02031D3B2921003C0820003D020318E2
41 | :100278003E293F29A5292000E1010130BD003D08A4
42 | :10028800FC071430F1000030F20021002708F400C8
43 | :100298002608F3009E314A2680312100260871077E
44 | :1002A8002000BD0021002708723D2000BE003E0846
45 | :1002B800803ABF0021002908803A20003F02031D30
46 | :1002C80069292100280820003D0203186C296D299E
47 | :1002D800892921005503031D722973297A291430AD
48 | :1002E8002000BD003D082100B200FE2BD501D50A33
49 | :1002F8002000E101FC01E7302100A8000330A9003B
50 | :10030800E730A6000330A7008E2921002908A7009E
51 | :100318002808A600E730A8000330A9000B307C02AB
52 | :10032800031C97299829A529FC01E730A800033068
53 | :10033800A9005503031DA129A229A3297329D501C1
54 | :10034800D50A20006108273E8400A8300318013E22
55 | :1003580085000008BD003D082100D6007C081C3E31
56 | :100368008400A8300318013E850000082000BD0065
57 | :100378003D082100D7009031B420803102302000A0
58 | :10038800BD003D082100B100FE2B210030082000EF
59 | :10039800BD003D082100D50020006008273E8400EC
60 | :1003A800A8300318013E85000008BD003D08210063
61 | :1003B800D60020005F081C3E8400A8300318013EC8
62 | :1003C80085000008BD003D082100D7002000600816
63 | :1003D800273E8400A8300318013E85000008BD00B0
64 | :1003E8003D082100A40020005F081C3E8400A830BE
65 | :1003F8000318013E85000008BD003D082100A1004A
66 | :10040800200060080319092A0A2A232A6008263EC0
67 | :100418008400A8300318013E85000008BD0060086C
68 | :10042800273E8400A8300318013E85000008BE005E
69 | :100438003D083E02BF003F082100AF00252A2100E9
70 | :10044800AF010A302000600203182B2A2C2A452A03
71 | :100458006008273E8400A8300318013E8500000884
72 | :10046800BD006008283E8400A8300318013E8500BE
73 | :100478000008BE003D083E02BF003F082100AE0054
74 | :10048800472A2100AE0120005F0803194C2A4D2A93
75 | :10049800662A5F081B3E8400A8300318013E8500C9
76 | :1004A8000008BD005F081C3E8400A8300318013E08
77 | :1004B80085000008BE003D083E02BF003F0821003D
78 | :1004C800AD00682A2100AD010A3020005F02031840
79 | :1004D8006E2A6F2A882A5F081C3E8400A8300318F9
80 | :1004E800013E85000008BD005F081D3E8400A8305D
81 | :1004F8000318013E85000008BE003D083E02BF000B
82 | :100508003F082100AC008A2A2100AC010230F1002A
83 | :100518000030F2002F082000BD00BE013D08F300A6
84 | :100528003E08F4009E314A26803171082000BF0041
85 | :100538003F082100AF000230F1000030F2002E0821
86 | :100548002000BD00BE013D08F3003E08F4009E31C6
87 | :100558004A26803171082000BF003F082100AE0004
88 | :100568000230F1000030F2002D082000BD00BE016D
89 | :100578003D08F3003E08F4009E314A268031710898
90 | :100588002000BF003F082100AD000230F10000301C
91 | :10059800F2002C082000BD00BE013D08F3003E0813
92 | :1005A800F4009E314A26803171082000BF003F08C0
93 | :1005B8002100AC002F0824022000BD003D082100C6
94 | :1005C800A30024082E072000BD003D082100A50037
95 | :1005D8002D0821022000BD003D082100A0002108AF
96 | :1005E8002C072000BD003D082100A200E730AA002A
97 | :1005F8000330AB002000E101E10AFC01FC0A210004
98 | :1006080024082000BD003D082100D6002108200054
99 | :10061800BD003D082100D7009031B4208031023060
100 | :100628002000BD003D082100B1001E302000BD00A3
101 | :100638003D082100B200FE2B21003F08803A20002F
102 | :10064800BD0021003D08803A20003D02031D2F2BEC
103 | :1006580021003C083E02031C322B332B342BC628C6
104 | :1006680021003D08803A2000BD0021002B08803A77
105 | :1006780020003D02031D432B21002A083C020318D9
106 | :10068800462B472B552B21003D08AB003C08AA0000
107 | :1006980020006108BD003D08E0007C08BD003D0861
108 | :1006A800DF0020006103031D5A2B5B2B712B2100F7
109 | :1006B800240823060319612B622B652B2000E10116
110 | :1006C800AB2B2508240603196A2B6B2B712B0230E0
111 | :1006D8002000BD003D08E100AB2B20006108031D90
112 | :1006E800762B772B7F2B21002508240603197D2BD9
113 | :1006F8007E2B7F2B6B2B2000E101E10A7C03031D7D
114 | :10070800862B872B972B21002108200603198D2B78
115 | :100718008E2B902BFC01AB2B220821060319952B5D
116 | :10072800962B972B6B2B7C08031D9B2B9C2BA92BA3
117 | :100738002100220821060319A22BA32BA92B023082
118 | :100748002000BD003D08FC00AB2BFC01FC0A20008A
119 | :100758006103031DB02BB12BCD2B7C03031DB52BDF
120 | :10076800B62BCD2B6008A33E860087010108BD008B
121 | :100778003D082100D60020005F08A03E86008701C2
122 | :100788000108BD003D082100D7009031B420803118
123 | :10079800C6286108A33E860087010108BD003D0800
124 | :1007A8002100D6007C08A03E8600870101082000B1
125 | :1007B800BD003D082100D700BF290330BD003D081A
126 | :1007C800E200FE2B210032082000BD00BE013E08D9
127 | :1007D800003A0319F02BE12B3D08003A031982284F
128 | :1007E8000A3A0319B3281E3A0319C9290A3A031900
129 | :1007F800202BE12B0800003400340034003400348E
130 | :10080800003400345F3400340034003407340034DA
131 | :100818000734003414347F3414347F3414342434CB
132 | :100828002A347F342A341234233413340834643499
133 | :100838006234363449345534223450340034053463
134 | :1008480003340034003400341C342234413400347E
135 | :100858000034413422341C34003408342A341C3423
136 | :100868002A340834083408343E3408340834003450
137 | :100878005034303400340034083408340834083430
138 | :100888000834003430343034003400342034103428
139 | :100898000834043402343E345134493445343E3447
140 | :1008A800003442347F3440340034423461345134AB
141 | :1008B800493446342134413445344B3431341834C6
142 | :1008C800143412347F3410342734453445344534D5
143 | :1008D80039343C344A34493449343034013471347D
144 | :1008E8000934053403343634493449344934363408
145 | :1008F80006344934493429341E3400343634363405
146 | :1009080000340034003456343634003400340034B3
147 | :100918000834143422344134143414341434143460
148 | :100928001434413422341434083400340234013489
149 | :1009380051340934063432344934793441343E343C
150 | :100948007E341134113411347E347F3449344934BF
151 | :10095800493436343E3441344134413422347F34CE
152 | :100968004134413422341C347F34493449344934C5
153 | :1009780041347F3409340934013401343E3441347C
154 | :100988004134513432347F340834083408347F34E5
155 | :10099800003441347F34413400342034403441340D
156 | :1009A8003F3401347F3408341434223441347F34E2
157 | :1009B80040344034403440347F3402340434023408
158 | :1009C8007F347F340434083410347F343E34413467
159 | :1009D800413441343E347F3409340934093406340F
160 | :1009E8003E344134513421345E347F34093419346F
161 | :1009F800293446344634493449344934313401348D
162 | :100A080001347F34013401343F34403440344034BD
163 | :100A18003F341F342034403420341F347F34203492
164 | :100A2800183420347F346334143408341434633471
165 | :100A3800033404347834043403346134513449348D
166 | :100A480045344334003400347F3441344134023473
167 | :100A58000434083410342034413441347F340034B1
168 | :100A68000034043402340134023404344034403451
169 | :100A78004034403440340034013402340434003407
170 | :100A8800203454345434543478347F34483444341F
171 | :100A980044343834383444344434443420343834D6
172 | :100AA8004434443448347F3438345434543454341B
173 | :100AB800183408347E3409340134023408341434C8
174 | :100AC800543454343C347F34083404340434783493
175 | :100AD800003444347D3440340034203440344434C9
176 | :100AE8003D34003400347F34103428344434003426
177 | :100AF80041347F34403400347C34043418340434B2
178 | :100B080078347C3408340434043478343834443445
179 | :100B18004434443438347C341434143414340834AD
180 | :100B280008341434143418347C347C3408340434D1
181 | :100B38000434083448345434543454342034043499
182 | :100B48003F344434403420343C344034403420343E
183 | :100B58007C341C342034403420341C343C3440343D
184 | :100B6800303440343C344434283410342834443449
185 | :100B78000C345034503450343C3444346434543499
186 | :100B88004C344434003408343634413400340034AE
187 | :100B980000347F34003400340034413436340834AF
188 | :100BA8000034083408342A341C34083408341C341B
189 | :100BB8002A3408340834FB3020006406031DE52D70
190 | :100BC800E62DF12D21005808013A2000C9004908F6
191 | :100BD8002100D8009F3189278531503020006406D4
192 | :100BE800031DF72DF82D672E2830E4022100580840
193 | :100BF800031DFF2D002E632E023059020318052E07
194 | :100C0800062E632E5935DA3E86008701403F2000C4
195 | :100C1800D300413FD4005408803AC90080304902CB
196 | :100C2800031D182E6430530203181B2E1C2E222E6F
197 | :100C380005302000D3070030D43D272E3230200065
198 | :100C4800D3070030D43D21005908031D2C2E2D2E2A
199 | :100C58003F2E20005408803AC90080304902031D05
200 | :100C6800372E65305302031C3A2E3B2E552E20009A
201 | :100C7800D301D401552E20005408803AC90083308E
202 | :100C88004902031D492EE9305302031C4C2E4D2EF8
203 | :100C9800552E21005B082000D40021005A082000AE
204 | :100CA800D30021005935DA3E860087012000530819
205 | :100CB800C03F5408C13F9F3189278531672EA53130
206 | :100CC8005C258531972F02302100590203186D2EBB
207 | :100CD8006E2EA62E5408803A2000C90080304902A2
208 | :100CE800031D792E653021005302031C7C2E7D2EB6
209 | :100CF800922F210063085406031D842E62085306B0
210 | :100D0800031D872E882E922F5935DE3E86008701D7
211 | :100D18005308C03F5408C13F983104208531200052
212 | :100D2800A001A00AED30A100A930A200A3018030E3
213 | :100D38008E317E26853102302000C9004908210005
214 | :100D4800D907922F5408803A2000C9008030490200
215 | :100D5800031DB12E0530210053020318B42EB52E01
216 | :100D6800922F01302100D9025903031DBC2EBD2E3C
217 | :100D7800C42E9831042085319F3189278531922FDF
218 | :100D88005B08CA005A08C9005D08CC005C08CB00A3
219 | :100D98004A082000B300210049082000B20095311C
220 | :100DA8004125853120003308D2003208D1002100C6
221 | :100DB8004C082000B30021004B082000B2009531F8
222 | :100DC8004125853120003308D0003208CF00063095
223 | :100DD800D83E860087010830D83E84008501403F10
224 | :100DE8000002A4000131413F003BA500A601A51B5C
225 | :100DF800A6032608A70051084F02C9005208503B15
226 | :100E0800CA004908CB004A08CC000030CC1BFF3090
227 | :100E1800CD00CE000C30CB35CC0DCD0DCE0D890BD1
228 | :100E28000F2F4E08AB004D08AA004C08A9004B082C
229 | :100E3800A8009231D3228531200025082100D00056
230 | :100E4800200024082100CF0000302000A700003037
231 | :100E5800A6001030A5000030A40021004F08F100C2
232 | :100E68005008F200890D893B8909F300F4005E08F7
233 | :100E7800F5005F08F600890D893B8909F700F8003D
234 | :100E88009931D621853174082000AB007308AA0077
235 | :100E98007208A9007108A8009231D3228531200078
236 | :100EA800240851022100CD0020002508523B2100D2
237 | :100EB800CE00C9302000C9004908F5000230CA0038
238 | :100EC8004A08F6006A30A73195278531CB302000D3
239 | :100ED800C9004908F5000230CA004A08F60068301F
240 | :100EE800A73195278531CD302000C9004908F50084
241 | :100EF8000230CA004A08F6006630A73195278531C6
242 | :100F0800CF302000C9004908F5000230CA004A085D
243 | :100F1800F6006430A73195278531632E21005408E7
244 | :100F2800E3005308E20008002000BE00BF01BF0A2A
245 | :100F38003A08803ABC0080303C02031DA52F64307B
246 | :100F48003902031CA82FA92FBB2F0A30F10000304B
247 | :100F5800F20020003A08F4003908F3009E314A26CE
248 | :100F6800873172082000BA007108B900BF0120005B
249 | :100F78003A08A1003908A0004030BC003C08A20093
250 | :100F88000430BD003D08A3008831002087312000CF
251 | :100F98003F080319D02FD12FE32F4108BC003C088C
252 | :100FA800C00020304006031DDA2FDB2FDF2F303042
253 | :100FB800BC003C08C0002E30BC003C08C1005730C3
254 | :100FC800BC003C08C300C4013808BC003C08A000B1
255 | :100FD8004030A1000030A2003B08BD003D08A3003E
256 | :100FE8003E088E317E2687310800FE0012001E0062
257 | :060FF800FE0BFA2F00348D
258 | :101000002000A40102302302031807280828092819
259 | :101010008A282308FF3EFA007A08A500220825073F
260 | :10102000FA007A08A6002608860087018101A11F20
261 | :101030001A281B282228A401A40AA009A109A00A91
262 | :101040000319A10A0130A5020130A6022108803A45
263 | :10105000FA0080307A02031D2F2801302002031C81
264 | :101060003228332859280A30F1000030F2002000DD
265 | :101070002108F4002008F3009D31402588317108D3
266 | :10108000303EFA0020002608860087017A08810099
267 | :101090000A30F1000030F2002108F4002008F300CB
268 | :1010A0009E314A26883172082000A1007108A000F4
269 | :1010B000852820002308FE3EFA00FF300318003088
270 | :1010C000FB0025087A067B04031D67286828702822
271 | :1010D0003030FA002608860087017A0881008528CA
272 | :1010E00024080319742875287E282D30FA00260854
273 | :1010F000860087017A088100A40185282030FA0043
274 | :101100002608860087017A0881002508031D8928A2
275 | :101110008A282228080002302000C5004508D20095
276 | :101120000330C5004508D300B80121003B0820006A
277 | :10113000BA0021003A082000B900BB010430873111
278 | :10114000982788312000B801B80A21003D08200006
279 | :10115000BA0021003C082000B900BB0104309C31DA
280 | :10116000AD248831210055080319B728B828C128B3
281 | :1011700003302000C5004508D2000230C5004508F4
282 | :10118000D30021004603031DC628C728D7280330F3
283 | :101190002000C5004508A000F630A100A830A2003C
284 | :1011A000A301A30A00308E317E2688312129200038
285 | :1011B0005208C5004508A000F030A100A930A200E7
286 | :1011C000A30100308E317E26883107302000C50013
287 | :1011D0004508A7004B309A310C2288312000520874
288 | :1011E000C5004508A0004B30A1000030A200A301BB
289 | :1011F00002308E317E26883120005308C500450814
290 | :10120000A000F330A100A930A200A30100308E316C
291 | :101210007E26883107302000C5004508A7004B30E6
292 | :101220009A314322883120005308C5004508A000A8
293 | :101230004B30A1000030A200A30102308E317E2687
294 | :10124000883121004203031D2629272955294603F9
295 | :1012500003192B292C295529CA302000C900A9308F
296 | :10126000CA00D4015408C5004508B8004A08C700A0
297 | :101270004908C60054084607840047080318470A6F
298 | :1012800085000008C8004808B900BA010930A63135
299 | :10129000B426883101302000C5004508D407043049
300 | :1012A0005402031C54295529322908002000C20188
301 | :1012B000B8014208DD3E860087010108BE003E08F5
302 | :1012C000B9002100590820004206031968296A293B
303 | :1012D00001306B290030BF003F08BA004208023ECF
304 | :1012E000A631B426893101302000BE003E08C20775
305 | :1012F00008304202031C7D297E295829083021002C
306 | :101300005902031884298529E0295908DD3E860001
307 | :10131000870101082000BE003E08C000C2019429D8
308 | :101320000130BE003E08C2074208003E8400A030E3
309 | :101330000318013E8500000840060319A029A129D1
310 | :10134000A72949304202031CA629A7299029B801E0
311 | :10135000B80A4008BE003E08B900BA01BA0A023015
312 | :10136000A631B42689312000C101C10A0130BE0076
313 | :101370003E08C20748304202031CBF29C029C129C8
314 | :10138000C201B801B80A4208003E8400A030031828
315 | :10139000013E85000008BE003E08B900BA014108C0
316 | :1013A000023EA631B426893101302000BE003E083D
317 | :1013B000C10708304102031CDE29DF29B629EC29C8
318 | :1013C0002000A001A00A6930A100A830A200A3015A
319 | :1013D00000308E317E26893103302000BE003E0869
320 | :1013E000A000BB30A100A930A2000830210059069E
321 | :1013F0000319FB29FD290130FE2900302000BF0020
322 | :101400003F08A30000308E317E2689310330200052
323 | :10141000BE003E08A000E130A100A930A2000930C2
324 | :10142000210059060319152A172A0130182A0030FD
325 | :101430002000BF003F08A30007308E317E2689318F
326 | :101440000800210058082000B8003808C500C30172
327 | :10145000C30A0230B8003808C40021005508031937
328 | :10146000322A332A3A2A02302000B8003808C30052
329 | :10147000C401C40A20004308B8003808A000F030B6
330 | :10148000A100A930A200A30100308E317E268A314E
331 | :1014900007302000B8003808A7003C309A310C22F1
332 | :1014A0008A3120004308B8003808A0003C30A10071
333 | :1014B0000030A2004308FF3EB900FF30031800309F
334 | :1014C000BA00450839063A040319672A692A013027
335 | :1014D0006A2A0030BB003B08A30004308E317E2610
336 | :1014E0008A3120004408B8003808A000F330A10079
337 | :1014F000A930A200A30100308E317E268A31073048
338 | :101500002000B8003808A7003C309A3143228A31C5
339 | :1015100020004408B8003808A0003C30A10000308A
340 | :10152000A2004408FF3EB900FF3003180030BA00A3
341 | :10153000450839063A0403199E2AA02A0130A12A37
342 | :101540000030BB003B08A30004308E317E268A3178
343 | :1015500021005508031DAD2AAE2AC72A03302000FA
344 | :10156000B8003808A000D430A100A930A200023091
345 | :1015700045060319BC2ABE2A0130BF2A0030B90033
346 | :101580003908A30000308E317E268A31DF2A0330ED
347 | :101590002000B8003808A000CF30A100A930A20078
348 | :1015A000023045060319D52AD72A0130D82A00303F
349 | :1015B000B9003908A30000308E317E268A3103300D
350 | :1015C0002000B8003808A000E130A100A930A20036
351 | :1015D000033045060319ED2AEF2A0130F02A0030C6
352 | :1015E000B9003908A30007308E317E268A31080001
353 | :1015F00000302000BB000030BA000030B9000030DD
354 | :10160000B8000030BF000030BE000030BD00003028
355 | :10161000BC00C101C0010130B2003208C107413530
356 | :10162000343E860001308700403FB200413FB300A6
357 | :101630004035343E8600013087003208C03F330811
358 | :10164000C13F3208B4003308B5000030B51BFF308D
359 | :10165000B600B7003408B8073508B93D3608BA3DBA
360 | :101660003708BB3D4135203E860001308700403FB2
361 | :10167000B200413FB3004035203E86000130870074
362 | :101680003208C03F3308C13F3208B4003308B50008
363 | :101690000030B51BFF30B600B7003408BC07350872
364 | :1016A000BD3D3608BE3D3708BF3D0130B2003208AF
365 | :1016B000C00709304002031C5E2B5F2B0B2B01304F
366 | :1016C0009A317A228A3120004135343E8600013039
367 | :1016D00087007108C03F7208C13F7108B2007208EC
368 | :1016E000B3000030B31BFF30B400B5003208B807B8
369 | :1016F0003308B93D3408BA3D3508BB3D00309A3156
370 | :101700007A228A3120004135203E86000130870050
371 | :101710007108C03F7208C13F7108B2007208B3007F
372 | :101720000030B31BFF30B400B5003208BC073308EB
373 | :10173000BD3D3408BE3D3508BF3D0030A700003038
374 | :10174000A6000030A5000A30A4003B08AB003A0810
375 | :10175000AA003908A9003808A8009231D3228A319A
376 | :10176000200025082100D400200024082100D300F7
377 | :1017700000302000A7000030A6000030A5000A308D
378 | :10178000A4003F08AB003E08AA003D08A9003C08A1
379 | :10179000A8009231D3228A31200025082100D200EE
380 | :1017A000200024082100D100080001302000C600DC
381 | :1017B00046082100DB070A305B06031DE02BE12B06
382 | :1017C000062CDB019D3193258B31903134208B31F8
383 | :1017D0002000B80121003D082000BA0021003C088B
384 | :1017E0002000B900BB0100309C31AD248B312000BA
385 | :1017F000B80121003B082000BA0021003A0820006F
386 | :10180000B900BB010630873198278B31FB302000AF
387 | :101810006406031D0C2C0D2C1C2C0130C600460840
388 | :101820002100D80704305802031C172C182C192C3F
389 | :10183000D8018A3121228B31503020006406031DEB
390 | :10184000222C232C982C2830E40221005508031D5B
391 | :101850002A2C2B2C302C580803192F2C302C3A2CE6
392 | :1018600055080319342C352C492C5803031D392CE9
393 | :101870003A2C492C5608031D3E2C3F2C422CD601F5
394 | :10188000D60A492C56357F392000C600460821006B
395 | :10189000D6005508031D4D2C4E2C532C580303190C
396 | :1018A000522C532C5D2C55080319572C582C6C2C9A
397 | :1018B0005808031D5C2C5D2C6C2C5708031D612CF3
398 | :1018C000622C652CD701D70A6C2C57357F39200044
399 | :1018D000C60046082100D70002305806031D712CAF
400 | :1018E000722C802C5508031D762C772C7A2CD50170
401 | :1018F000D50A7B2CD501FF302000C6004608E40045
402 | :10190000033021005806031D862C872C922C5A0880
403 | :10191000F4005908F300A6319C268B31A5315C25D3
404 | :101920008B311A2D8A3121228B319031B4208B31A9
405 | :101930002000C70121005508031D9F2CA02CA52CB9
406 | :1019400058080319A42CA52CAF2C55080319A92C51
407 | :10195000AA2CD42C5803031DAE2CAF2CD42C34034A
408 | :10196000031DB32CB42CBE2C56080319B82CB92C6B
409 | :10197000BB2C0130D6022000C701C70A2000630338
410 | :10198000031DC32CC42CD42C7F3021005602031815
411 | :10199000CA2CCB2CD12C01302000C60046082100D7
412 | :1019A000D6072000C701C70A21005508031DD92CFE
413 | :1019B000DA2CDF2C58030319DE2CDF2CE92C550818
414 | :1019C0000319E32CE42C0E2D5808031DE82CE92CF8
415 | :1019D0000E2D3403031DED2CEE2CF82C57080319A3
416 | :1019E000F22CF32CF52C0130D7022000C701C70AD6
417 | :1019F00020006303031DFD2CFE2C0E2D7F302100E3
418 | :101A000057020318042D052D0B2D01302000C600B0
419 | :101A100046082100D7072000C701C70A2000470851
420 | :101A20000319132D142D1A2D9031B4208B318A31C6
421 | :101A300021228B3108009D3193258D319031342046
422 | :101A40008D3121003B08803A2000D50080305502BE
423 | :101A5000031D2D2D053021003A02031C302D312DA0
424 | :101A6000472D21004303031D362D372D472D4508F3
425 | :101A70005C06031D3D2D44085B06031D402D412DD2
426 | :101A8000442DA53170258D312100DB01DC012100C1
427 | :101A90004303031D4C2D4D2D952D46030319512D48
428 | :101AA000522D952D5C08803A2000D5002100450874
429 | :101AB000803A20005502031D602D210044085B027E
430 | :101AC0000318632D642D952D01302000D500550895
431 | :101AD0002100DD0764305D06031D6F2D702D952DEF
432 | :101AE000DD010130DB070030DC3D45085C06031DED
433 | :101AF0007B2D44085B06031D7E2D7F2D952D98318F
434 | :101B000004208D312000A001A00AED30A100A830F2
435 | :101B1000A200A30180308E317E268D310030F3008B
436 | :101B2000F400A6319C268D31952D21005C08803A69
437 | :101B30002000D50021004508803A20005502031DF1
438 | :101B4000A42D210044085B02031CA72DA82DAE2D57
439 | :101B5000210043030319AD2DAE2D742E013020005A
440 | :101B6000D50055082100D8070A305806031DB92DA5
441 | :101B7000BA2DD92DD8013B08803A2000D5008030FD
442 | :101B80005502031DC62D013021003A020318C92D4C
443 | :101B9000CA2DD12D210059085A040319D02DD12D59
444 | :101BA000D92D21003B08DA003A08D90088318B2072
445 | :101BB0008D3121004203031DDE2DDF2D1B2E460338
446 | :101BC0000319E32DE42D1B2E3B08803A2000D5009D
447 | :101BD00080305502031DEF2D013021003A02031C15
448 | :101BE000F22DF32D1B2E21003D08803A2000D50058
449 | :101BF00021004108803A20005502031D022E2100D9
450 | :101C000040083C02031C052E062E1B2E3D302000F2
451 | :101C1000DD00A930DE005E08D6005D08D500023088
452 | :101C20005507840056080318560A8500013F8A00AC
453 | :101C3000003F0A008E31FB3020006406031D212E78
454 | :101C4000222E472E21004603031D272E282E312E3B
455 | :101C5000C6014808F4004708F300A6319C268D31E0
456 | :101C6000362E3D302000DD00A930DE0020005E0869
457 | :101C7000D6005D08D50002305507840056080318C9
458 | :101C8000560A8500013F8A00003F0A008E3150301D
459 | :101C900020006406031D4D2E4E2E7D2E210046038E
460 | :101CA000031D532E542E5D2EC6014808F40047082C
461 | :101CB000F300A6319C268D31622E7F302000DD009E
462 | :101CC000A930DE0020005E08D6005D08D500023095
463 | :101CD0005507840056080318560A8500013F8A00FC
464 | :101CE000003F0A008E317D2E20006403031D792EF3
465 | :101CF0007A2E7D2EA53170258D3108002000AB0095
466 | :101D000023080319842E852E8A2EFF30A400240870
467 | :101D1000B3008B2EB3012035A4002408AC00803022
468 | :101D20002B06031D942E952ECD2EB0012208B50052
469 | :101D30002108B400A32E0130A4002408B00701300C
470 | :101D4000B4070030B53D3408840035088500120022
471 | :101D5000031DAB2EAC2E9B2E0C30A4002408F100EA
472 | :101D60003008A63104268E312000A5002508B000D9
473 | :101D70000230F1000030F2008030A400300824026C
474 | :101D8000F300F401031CF4039E314A268E317108DE
475 | :101D90002000A5002508AF00D92E0C30A40024088F
476 | :101DA000F1002B08A63104268E312000A50025085D
477 | :101DB000AF002F08A4002408F4002C089831D92083
478 | :101DC0008E3120002208B5002108B400612F3408AC
479 | :101DD0008400350885000008E03EF100FF3003185C
480 | :101DE0000030F2000530F3000030F400A731352751
481 | :101DF0008E3172082000AE007108AD00B1013108CB
482 | :101E0000A400A501FF30A6008330A7002408260700
483 | :101E1000A8002508273DA90028082D0784002908C7
484 | :101E20002E3D85000008AA002A08B700B613B71D8A
485 | :101E30001A2FB61720003613371D1F2F3617200014
486 | :101E4000B612371D242FB61620003612B71C292FC4
487 | :101E500036162000B611B71C2E2FB61520003611ED
488 | :101E6000371C332F36152000B610371C382FB61408
489 | :101E70002000361036083306A4002408B6003608C1
490 | :101E80009A31B3228E31200036089A31B3228E3136
491 | :101E900001302000A4002408B10705303102031CE2
492 | :101EA000522F532FFF2E33089A31B3228E31200048
493 | :101EB00033089A31B3228E3101302000B40700304C
494 | :101EC000B53D34088400350885001200031D692FD4
495 | :101ED0006A2FE72E2F08A4002408F4002C08013EE6
496 | :101EE0009831D9208E3120002208B5002108B40095
497 | :101EF000F32F34088400350885000008E03EF10027
498 | :101F0000FF3003180030F2000530F3000030F40019
499 | :101F1000A73135278E3172082000AE007108AD0060
500 | :101F2000B2013208A400A501FF30A6008330A7004B
501 | :101F300024082607A8002508273DA90028082D0702
502 | :101F4000840029082E3D85000008AA002A08B70051
503 | :101F5000B6133613371FAD2F36172000B612371FB2
504 | :101F6000B22FB61620003612B71EB72F3616200035
505 | :101F7000B611B71EBC2FB61520003611371EC12F63
506 | :101F800036152000B610371EC62FB61420003610A6
507 | :101F9000B71DCB2F3614200036083306A4002408C2
508 | :101FA000B60036089A31B3228E31200036089A31B5
509 | :101FB000B3228E3101302000A4002408B20705307E
510 | :101FC0003202031CE42FE52F912F33089A31B322FC
511 | :101FD0008E31200033089A31B3228E310130200037
512 | :101FE000B4070030B53D3408840035088500120080
513 | :101FF000031DFB2FFC2F792FA531B3258E3108004F
514 | :102002000330FA007A082000A000BB30A100A930FA
515 | :10201200A2002100590803190F28112801301228A3
516 | :102022000030FB007B082000A30000308E317E26AA
517 | :1020320090310330FA007A082000A000E130A100BC
518 | :10204200A930A20021005903031928282A280130A7
519 | :102052002B280030FB007B082000A30007308E31C4
520 | :102062007E26903108002000B201B30121005408FD
521 | :10207200803AFA0080307A02031D4128643053020C
522 | :10208200031C44284528AB2821005208803AFA0054
523 | :102092005408803A7A02031D50285308510203184B
524 | :1020A20053285428A6281730BA3E860087011930D3
525 | :1020B200BA3E84008501403F00022000A4000131A5
526 | :1020C200413F003BA500A601A51BA6032608A700C9
527 | :1020D2001730BA3E860087011930BA3E8400850166
528 | :1020E200403F0007F1000131413F003DF200F301A2
529 | :1020F200F21BF3037308F4000030F8000030F7001D
530 | :102102000030F6006430F5009931D6219031740820
531 | :102112002000AB007308AA007208A9007108A80089
532 | :102122009231D322903120002508B3002408B20056
533 | :102132003308803AFA0083307A02031DA228E8307D
534 | :102142003202031CA528A628AB28E7302000B200E3
535 | :102152000330B300200033082100BD002000320804
536 | :102162002100BC00080021005708F1007108F200AC
537 | :102172007218BC28BF2822008D15C12822008D119B
538 | :10218200F218C428C72822000C15C92822000C11F5
539 | :102192007219CC28CF2822000D16D12822000D1248
540 | :1021A200F219D428D72822008C15D92822008C11A4
541 | :1021B200721ADC28DF2822008D16E12822008D12F7
542 | :1021C200F21AE428E72822008C16E92822008C1251
543 | :1021D200721BEC28EF2822000C16F12822000C12A8
544 | :1021E20021005608F1007108F2007218F928FC2843
545 | :1021F20022008E17FE2822008E13F21801290429CC
546 | :1022020022008E15062922008E11721909290C2925
547 | :1022120022000E170E2922000E13F2191129142979
548 | :1022220022000E15162922000E11721A19291C29D4
549 | :1022320022008E161E2922008E12F21A212924292A
550 | :1022420022008E14262922008E10721B29292C2985
551 | :1022520022000E162E2922000E122100550C2200F9
552 | :10226200031C0E1003180E14080099313721913106
553 | :102272009E31A9269131A53194259131A631582656
554 | :102282009131F430F1000130F200A631E5269131AE
555 | :10229200FA01783094319B2491312000A001223040
556 | :1022A200A100A930A200A30180308E317E26913197
557 | :1022B2002000A001A00A1A30A100A930A200A301A7
558 | :1022C20080308E317E26913102302000DC005C08A5
559 | :1022D200A000B530A100A930A200A30180308E3148
560 | :1022E2007E269131DC30F1000530F200A631E52680
561 | :1022F2009131983104209131A5315C259131A03082
562 | :10230200F5000130F6000A302000DC005C08F7001E
563 | :102312000030A7317427913123002108F4002008EE
564 | :10232200F300A6319C2691312100380839060319A1
565 | :102332009B299C29AB2901302000DC005C0821008C
566 | :10234200B80701302000DC005C082100B7078A31A1
567 | :10235200F82291310A3021003706031DB129B22932
568 | :102362009529B7019D31EE259131A731B6279131DB
569 | :10237200640095298031132801302100DB070030E9
570 | :10238200DC3D01305C02F43003195B02031CCA29F4
571 | :10239200CB29CF29A5315C259131442AFB3020007D
572 | :1023A2006406031DD529D629202A2100DB01DC0180
573 | :1023B2005A0859022000BE003E08C1000A2A013014
574 | :1023C2002000BE003E082100D9071D2A21005A081C
575 | :1023D200043E2000BE00003003180130BF003F0859
576 | :1023E200803AC00080304002031DFB2921005808BA
577 | :1023F20020003E020318FE29FF29E02901302000B7
578 | :10240200BE003E082100DA07E0292100DA01D901E5
579 | :102412001D2A4108BE00BF013F08003A0319122AD3
580 | :10242200062A3E08003A0319E029013A0319E7296E
581 | :10243200033A0319E029062A9B31E22391315030F5
582 | :1024420020006406031D262A272A442A2100593522
583 | :102452005D072000BE003E08860001308700403F35
584 | :10246200DD00413FDE005E08BF005D08BE000230B5
585 | :102472003E0784003F0803183F0A8500013F8A0097
586 | :10248200003F0A0092310800210058082000B800DD
587 | :102492003808BE0021005903031D502A512A662A1A
588 | :1024A2002000A001D930A100A930A2003E080319E2
589 | :1024B2005B2A5D2A01305E2A0030B8003808A3008A
590 | :1024C20007308E317E2692317A2A2000A001DD303B
591 | :1024D200A100A930A2003E080319702A722A013015
592 | :1024E200732A0030B8003808A30007308E317E26E8
593 | :1024F200923121005B082000A10021005A0820002F
594 | :10250200A0003A30B8003808A2000430B9003908F7
595 | :10251200A3008831002092312000A001A00A3A30A5
596 | :10252200A1000030A2003E030319982A9A2A013022
597 | :102532009B2A0030B8003808A30007308E317E266F
598 | :10254200923103302000B8003808A000BB30A1004F
599 | :10255200A930A20002303E060319B02AB22A013085
600 | :10256200B32A0030B9003908A30000308E317E262C
601 | :10257200923103302000B8003808A000E130A100F9
602 | :10258200A930A20003303E060319C82ACA2A013024
603 | :10259200CB2A0030B9003908A30007308E317E26DD
604 | :1025A200923108002000AD01A71FD82AD92AE62AB5
605 | :1025B200A409A509A609A709A40A0319A50A0319CA
606 | :1025C200A60A0319A70AAD01AD0AAB1FE92AEA2A36
607 | :1025D200F92AA809A909AA09AB09A80A0319A90A8B
608 | :1025E2000319AA0A0319AB0A0130F9007908AD06EA
609 | :1025F2000030B1000030B0000030AF000030AE005B
610 | :1026020027082604250424040319082B092B4A2B26
611 | :10261200AC01AC0A172B0130A435A50DA60DA70DF0
612 | :10262200890B0D2B0130F9007908AC07A71F1A2B73
613 | :102632001B2B0C2B0130AE35AF0DB00DB10D890B3C
614 | :102642001C2B27082B02031D302B26082A02031DF0
615 | :10265200302B25082902031D302B24082802031CD5
616 | :10266200332B342B3D2B2408A8022508A93B26082E
617 | :10267200AA3B2708AB3B2E140130A736A60CA50CAB
618 | :10268200A40C890B3E2B0130AC02031D492B4A2BB3
619 | :102692001B2B2D0803194E2B4F2B5A2BAE09AF09BA
620 | :1026A200B009B109AE0A0319AF0A0319B00A031936
621 | :1026B200B10A3108A7003008A6002F08A5002E088D
622 | :1026C200A4000800210058082000C4004408C600E5
623 | :1026D20021005D03031D6E2B6F2B842B2000A001B4
624 | :1026E200D930A100A930A20046080319792B7B2B0F
625 | :1026F20001307C2B0030C4004408A30007308E3127
626 | :102702007E269331982B2000A001DD30A100A93054
627 | :10271200A200460803198E2B902B0130912B00301A
628 | :10272200C4004408A30007308E317E269331200076
629 | :10273200B801B80A21005C082000BA0021005B0839
630 | :102742002000B90046030319A72BA92B0130AA2B9D
631 | :102752000030C4004408BB0006309C31AD249331E4
632 | :1027620002302000C4004408B80021005A082000AA
633 | :10277200BA00210059082000B900023046060319A8
634 | :10278200C32BC52B0130C62B0030C5004508BB004A
635 | :1027920006309C31AD24933103302000C40044083C
636 | :1027A200A000BB30A100A930A200033046060319E5
637 | :1027B200DB2BDD2B0130DE2B0030C5004508A300EA
638 | :1027C20000308E317E26933103302000C40044084D
639 | :1027D200A000E130A100A930A2000430460603198E
640 | :1027E200F32BF52B0130F62B0030C5004508A30072
641 | :1027F20007308E317E2693310800FB3020006406BC
642 | :10280200031D042C052C142C0130BF003F082100AD
643 | :10281200D80704305802031C0F2C102C112CD8019D
644 | :10282200923145229331503020006406031D1A2C48
645 | :102832001B2C9A2C2830E40221005808031D222C5C
646 | :10284200232C2F2C5903031D272C282C2A2CD90189
647 | :102852002C2CD901D90A92314522933121005803F7
648 | :10286200031D342C352C662C5B08803A2000BF00F7
649 | :1028720080303F02031D402C643021005A02031CA9
650 | :10288200432C442C4A2C0F302100DA070030DB3D68
651 | :102892004F2C05302100DA070030DB3D5B08803A1F
652 | :1028A2002000BF0081303F02031D5A2C2D30210031
653 | :1028B2005A02031C5D2C5E2C632C05302100DA00C9
654 | :1028C2000030DB009231452293310230210058065C
655 | :1028D200031D6C2C6D2C932C5B08C5005A08C40098
656 | :1028E20059082000BF003F082100C300C430200067
657 | :1028F200BF003F08F5000230C0004008F6006C300F
658 | :10290200A73195279331C3302000BF003F08F5005F
659 | :10291200F601F60A7230A73195279331A5315C256D
660 | :1029220093319A2C03305806031D982C992C9A2C1B
661 | :102932008F2C08002000A0002008FB007B08E50087
662 | :102942007A08FB007B082100B6000D178D172200C4
663 | :102952000D138D130630890BAC2C0032A631CC2618
664 | :102962009431200065089A31B322943100309A31B3
665 | :10297200B3229431AE309A31B3229431D5309A31A8
666 | :10298200B322943180309A31B3229431A8309A31F3
667 | :10299200B32294313F309A31B3229431D3309A31F9
668 | :1029A200B322943100309A31B322943140309A31BB
669 | :1029B200B32294318D309A31B322943114309A314A
670 | :1029C200B322943181309A31B3229431FF309A315B
671 | :1029D200B3229431D9309A31B3229431F1309A3101
672 | :1029E200B322943120309A31B322943102309A3199
673 | :1029F200B322943121309A31B322943100309A318A
674 | :102A0200B32294317F309A31B32294312E309A31ED
675 | :102A1200B322943121003603031D102D112D1A2DDE
676 | :102A2200A0309A31B3229431C0309A31B32294311A
677 | :102A3200222DA1309A31B3229431C8309A31B32277
678 | :102A42009431DA309A31B322943112309A31B3226E
679 | :102A52009431DB309A31B322943140309A31B3222F
680 | :102A62009431A4309A31B3229431A6309A31B322F0
681 | :102A72009431A531B3259431983104209431080062
682 | :102A820020003208F1003308F200890D893B8909E0
683 | :102A9200F300F4000030F8000030F700C330F60015
684 | :102AA2005030F5009931D621953174082000BF00CD
685 | :102AB2007308BE007208BD007108BC000030A70098
686 | :102AC2000030A6000030A5000230A4003F08AB0091
687 | :102AD2003E08AA003D08A9003C08A8009231D32272
688 | :102AE200953120002708C3002608C2002508C1002E
689 | :102AF2002408C0000030C7000030C6000030C50006
690 | :102B02000030C400D02D4308C7004208C600410867
691 | :102B1200C5004008C4004708A7004608A6004508AB
692 | :102B2200A5004408A4003F08AB003E08AA003D08E7
693 | :102B3200A9003C08A8009231D32295312000240834
694 | :102B42004407B4002508453DB5002608463DB600B9
695 | :102B52002708473DB7003708BB003608BA003508DA
696 | :102B6200B9003408B8000030A7000030A6000030D9
697 | :102B7200A5000230A4003B08AB003A08AA003908BD
698 | :102B8200A9003808A8009231D322953120002708E5
699 | :102B9200C3002608C2002508C1002408C000470857
700 | :102BA2004306031DDE2D46084206031DDE2D4508A1
701 | :102BB2004106031DDE2D44084006031DE12DE22DD2
702 | :102BC200842D4108B3004008B200080020006408C8
703 | :102BD200031DEC2DED2DF22D2830C30043082100FA
704 | :102BE200DA00FB3020006406031DF82DF92D082EB3
705 | :102BF2000130C30043082100D9070A305902031CDF
706 | :102C0200032E042E052ED9018931562195315030DB
707 | :102C120020006406031D0E2E0F2E932E21005A084B
708 | :102C22002000E4020B3021005A02031C192E1A2E36
709 | :102C32001C2E0530DA02083059020318212E222EEA
710 | :102C4200632E5908DD3E8600870101082000C3007B
711 | :102C52004308C600C701312E0130C3004308C7072D
712 | :102C62004708003E8400A0300318013E850000089A
713 | :102C7200460603193D2E3E2E442E49304702031CC0
714 | :102C8200432E442E2D2E0130C3004308C70748307F
715 | :102C92004702031C4D2E4E2E4F2EC7014708003E01
716 | :102CA2008400A0300318013E85000008C300210003
717 | :102CB2005908DD3E860087012000430881008931E2
718 | :102CC20056219531083021005906031D692E6A2EBE
719 | :102CD2008C2EA631FF26953172082100DC00710886
720 | :102CE200DB00DB302000C3004308F5000A30C400DB
721 | :102CF2004408F6000A30C5004508F10021005808D2
722 | :102D0200A63104269531003EA73195279531A5318C
723 | :102D12005C259531932E09305906031D912E922E72
724 | :102D2200932E882E080001302100D8070030D93DAB
725 | :102D320001305902F43003195802031CA12EA22EAD
726 | :102D4200A62EA5315C259631452FFB302000640666
727 | :102D5200031DAC2EAD2EF22E2100D801D9015C0844
728 | :102D62005A022000CA004A08CD00DF2E013020009E
729 | :102D7200CA004A082100DA07EF2E21005C08033E50
730 | :102D82002000CA00003003180130CB004B08803A03
731 | :102D9200CC0080304C02031DD02E0A304A020318A8
732 | :102DA200D32ED42EB72E01302000CA004A082100AB
733 | :102DB200DC07B72E2100DC01DA01EF2E4D08CA0034
734 | :102DC200CB014B08003A0319E72EDB2E4A08003AE2
735 | :102DD2000319B72E013A0319BE2EDB2E9F31192794
736 | :102DE2009631503020006406031DF82EF92E452F2F
737 | :102DF20021005B03031DFE2EFF2E262F5A08031D02
738 | :102E0200032F042F0A2F31302000DD00A930DE000D
739 | :102E1200152F5A082000CA004A082100D80037306E
740 | :102E22002000DD00A930DE005E08CB005D08CA008C
741 | :102E320002304A0784004B0803184B0A8500013F01
742 | :102E42008A00003F0A009731452F4E30F5000030CE
743 | :102E5200F6000A302000CA004A08F7000A30CB0008
744 | :102E62004B08F10021005A08A63104269631003E93
745 | :102E7200A7317427963120004F08F4004E08F30062
746 | :102E8200A6319C269631A22E0800FB302000640653
747 | :102E9200031D4C2F4D2F5C2F0130C7004708210026
748 | :102EA200D80705305802031C572F582F592FD80125
749 | :102EB200933163239731503020006406031D622F43
750 | :102EC200632FFF2F2830E40221005808031D6A2FC8
751 | :102ED2006B2F772F5D03031D6F2F702F722FDD0174
752 | :102EE200742FDD01DD0A93316323973121005803EA
753 | :102EF200031D7C2F7D2F982F0530DB070030DC3D32
754 | :102F02005C08803A2000C70080304702031D8C2FE6
755 | :102F1200C93021005B02031C8F2F902F952F783030
756 | :102F22002100DB000030DC00933163239731023053
757 | :102F320021005806031D9E2F9F2FBA2F0530D90757
758 | :102F42000030DA3D5A08803A2000C700803047023C
759 | :102F5200031DAE2F973021005902031CB12FB22F4F
760 | :102F6200B72F64302100D9000030DA009331632397
761 | :102F72009731033021005806031DC02FC12FF82FAF
762 | :102F82005D082000C70047082100C2005C08C1009C
763 | :102F92005B08C0005A08BF005908BE00BE302000BE
764 | :102FA200C7004708F5000230C8004808F600703034
765 | :102FB200A73195279731C0302000C7004708F50098
766 | :102FC2000230C8004808F6006E30A73195279731C5
767 | :102FD200C2302000C7004708F500F601F60A733038
768 | :102FE200A73195279731A5315C259731FF2F043002
769 | :0E2FF2005806031DFD2FFE2FFF2FF42F0800A1
770 | :10300800A53144259831F901F40179089831D9207E
771 | :103018009831F80100309A31B32298310130F70025
772 | :103028007708F80780307802031C1B281C280E2814
773 | :103038000130F7007708F90708307902031C2528C2
774 | :1030480026280828A531B3259831A5314925983176
775 | :103058000800F40023009518322833282E28740815
776 | :10306800F200F3017208910073089200710893004E
777 | :103078003F30F20072089505200003108B1F452889
778 | :103088004628472803148B1323001515553096003E
779 | :10309800AA309600951415112000031C54285528B1
780 | :1030A80056288B17080020006208FA007A08FB00EF
781 | :1030B80002307B06031D612862286D28210059080B
782 | :1030C8000319672868286B28D901FB016D28D901E5
783 | :1030D800D90A0230FA007A082000A0007B35483E61
784 | :1030E800860001308700403FA100413FA200A301B4
785 | :1030F80080308E317E26983108009831042098312E
786 | :10310800A531542598312000A0019130A100A930A3
787 | :10311800A200A30100308E317E2698312000A00144
788 | :10312800A00A9730A100A930A200A30100308E3177
789 | :103138007E2698312100D8014308FA007A08D90080
790 | :103148004508DB004408DA0092314522983108002E
791 | :1031580080314A20983101302000C0004008210009
792 | :10316800D80732305806031DBA28BB28BF28D80113
793 | :1031780098315720983120006403031DC428C528BE
794 | :10318800D12821005B08F4005A08F300A6319C26D8
795 | :103198009831A5315C259831D82805306206031D81
796 | :1031A800D628D728D828CD280800F600A631CC265E
797 | :1031B8009831200065089A31B322983100309A314D
798 | :1031C800B32298317608B03E9A31B3229831740808
799 | :1031D8000F399A31B32298317408F5000430F53666
800 | :1031E800890BF3287508103E9A31B3229831A6311D
801 | :1031F800CC269831200065089A31B32298314030A6
802 | :103208009A31B32298310800983104209931A531B8
803 | :10321800542599312000A001E530A100A930A20071
804 | :10322800A30100308E317E2699312000A001A00A2A
805 | :10323800E930A100A930A200A30100308E317E261A
806 | :1032480099312100D801FF30D900FF30DA00DD01C3
807 | :10325800DB01DC01A631FF26993172082100DF006D
808 | :103268007108DE0008007A302100990022008C01E4
809 | :103278008D018E0120001C08FC3902389C00873023
810 | :103288009C05FA309B00210091140B1720001C1597
811 | :103298008B17C03023008D05220091139313210052
812 | :1032A8008E138E110E130E118E128E100E120E101A
813 | :1032B8008D110C110D128C118D128C120C12D7015C
814 | :1032C800D601D5016430BE000030BF009513080058
815 | :1032D800F701F801F9010130F300790A7429F3358F
816 | :1032E800890B732973082100560503197C297D2948
817 | :1032F80092297908F300F401F335F40D0E307307C1
818 | :103308008400A830743D8500003FF500013FF600B9
819 | :1033180077087507F7007808763DF8000130F30064
820 | :103328007308F90707307902031C9B299C296F2928
821 | :103338007808F2007708F1000800F701F801F901B0
822 | :103348000130F300790AA929F335890BA8297308F4
823 | :10335800210057050319B129B229C7297908F300B3
824 | :10336800F401F335F40D003073078400A830743D80
825 | :103378008500003FF500013FF60077087507F70064
826 | :103388007808763DF8000130F3007308F907073034
827 | :103398007902031CD029D129A4297808F2007708DA
828 | :1033A800F100080000302000A3000030A200003027
829 | :1033B800A1000030A000711CE229E329EC2975085E
830 | :1033C8002000A0077608A13D7708A23D7808A33D14
831 | :1033D8000130F535F60DF70DF80D890BED290130A3
832 | :1033E800F436F30CF20CF10C890BF429740873040D
833 | :1033F80072047104031D012A022ADF292000230810
834 | :10340800F4002208F3002108F2002008F100080067
835 | :103418002000AC00073027020318132A142A152AA3
836 | :10342800422A99316C219A3172082000AB00710848
837 | :10343800AA002B08A1002A08A0002C08A800280828
838 | :10344800A2000530A9002908A300883100209A317C
839 | :1034580070302000A8002C08043E86008701280848
840 | :1034680081004630A8002C08053E86008701280800
841 | :1034780081002C08063E8600870181010800200093
842 | :10348800AC000730270203184A2A4B2A4C2A792A0B
843 | :103498009931A1219A3172082000AB007108AA0065
844 | :1034A8002B08A1002A08A0002C08A8002808A200C0
845 | :1034B8000530A9002908A300883100209A316E3010
846 | :1034C8002000A8002C08043E8600870128088100F7
847 | :1034D8004830A8002C08053E86008701280881008E
848 | :1034E8002C08063E86008701810108002000A00004
849 | :1034F8002008F300F30DF30D21001D08730683392E
850 | :1035080073069D000630890B872A003221009D141E
851 | :103518009D188F2A902A8C2A1C08F300F40173083E
852 | :103528002000A1007408A20021001B08F300F40188
853 | :1035380020002208F6002108F5007508F600F501BC
854 | :1035480073087507F8007408763DF900F835F90D29
855 | :10355800F835F90D7808F1007908F2000800F20052
856 | :10356800F301F21BB82AB92ABC2A21008D13BE2AFE
857 | :1035780021008D170630890BBF2A003221000D1754
858 | :103588000630890BC52A003221000D130630890B3D
859 | :10359800CB2A00327235F1007108F2000130F100D7
860 | :1035A8007108F30708307302031CDB2ADC2AB52AEA
861 | :1035B80021008D170630890BDF2A003221000D17F4
862 | :1035C8000630890BE52A003221000D130630890BDD
863 | :1035D800EB2A00320800983104209A312000A0011B
864 | :1035E8000830A100A930A200A30180308E317E26C8
865 | :1035F8009A312000A001A00AFF30A100A830A20043
866 | :10360800A30180308E317E269A310230FA007A0882
867 | :103618002000A000F630A100A930A200A30180304C
868 | :103628008E317E269A310330FA007A082000A000F5
869 | :10363800AF30A100A930A200A30180308E317E26D0
870 | :103648009A31A53154259A312100D8010800FB3060
871 | :1036580020006406031D312B322B412B0130B800AA
872 | :1036680038082100D90702305902031C3C2B3D2B96
873 | :103678003E2BD901903101209B3150302000640647
874 | :10368800031D472B482B662B21005908031D4D2B82
875 | :103698004E2B632BA631FF269B3172082100DB00DD
876 | :1036A8007108DA00DA302000B8003808F5000A306E
877 | :1036B800B9003908F6000030A73195279B31A531AC
878 | :1036C8005C259B310800983104209B31A531542595
879 | :1036D8009B312000A001C530A100A930A200A301A0
880 | :1036E80000308E317E269B312000A001A00A8B304D
881 | :1036F800A100A930A200A30100308E317E269B31A3
882 | :103708000230FA007A082000A000C030A100A930D9
883 | :10371800A200A30100308E317E269B312100D80102
884 | :103728004208FA007A08DD004108DC004008DB00A6
885 | :103738003F08DA003E08D900933163239B31080023
886 | :10374800983104209B31210065082000B900210030
887 | :1037580066082000BA00210067082000BB00A0010D
888 | :10376800A00A3930A1000030A200A30100308E3138
889 | :103778007E269B31DA30F5000030F6000A30200052
890 | :10378800B8003808F7000030A73174279B312100B2
891 | :10379800E4012000A001A00ADC30A1000030A20052
892 | :1037A800A30102308E317E269B312100D901A5313B
893 | :1037B80054259B31903101209B31080021005A0883
894 | :1037C8002000B8003808FA00FB017B08B800380868
895 | :1037D800A0007A3521005D072000B900390886006D
896 | :1037E80001308700403FBA00413FBB003A088400DF
897 | :1037F8003B088500003FA100013FA20021005908B5
898 | :103808007A060319082C0A2C01300B2C00302000F2
899 | :10381800BD003D08A30080308E317E269B310130EB
900 | :103828002000B8003808FA070130B8003808FB074C
901 | :1038380004307B02031C212C222CE92B08000030C9
902 | :103848002000A7000030A600C330A5005030A40017
903 | :10385800A830B4006130B5000030B6000030B700C1
904 | :103868003208F1003308F200890D893B8909F30019
905 | :10387800F4003208F5003308F600890D893B890900
906 | :10388800F700F8009931D6219C3171082000B4075F
907 | :103898007208B53D7308B63D7408B73D3708AB00EC
908 | :1038A8003608AA003508A9003408A8009231D322A6
909 | :1038B8009C3120002508FB002408FA007B08B3008F
910 | :1038C8007A08B2000800210068082000BA00210028
911 | :1038D80069082000BB0021006A082000BC00210004
912 | :1038E8005808303E2000B8003808BA009831042043
913 | :1038F8009C312000A0013A30A1000030A200A301B1
914 | :1039080000308E317E269C31DB30F5000030F60029
915 | :103918000A302000B8003808F7000A30B900390822
916 | :10392800F10021005808A63104269C31003EA73139
917 | :1039380074279C312100D90128302000B8003808AC
918 | :103948002100DA00A53154259C31893156219C315A
919 | :1039580008002000BE0054308600013087003F3048
920 | :103968008400003085000530BC0016001A00BC0B2E
921 | :10397800B92C3A08803ABC0080303C02031DC62CA2
922 | :1039880064303902031CC92CCA2CE32C20003A08E5
923 | :10399800A1003908A0004030BC003C08A200043057
924 | :1039A800BD003D08A300883100209C31200040085C
925 | :1039B800BC003C08BF002E30BC003C08C000200002
926 | :1039C8003808BC003C08A0003F30A1000030A2002D
927 | :1039D8003B08BD003D08A3003E088E317E269C3181
928 | :1039E800080020006403031DFA2CFB2C3F2D210046
929 | :1039F8005808031D002D012D3C2D0130FA007A08CE
930 | :103A0800D807983104209C312000A001E230A100A1
931 | :103A1800A830A200A30180308E317E269C31200080
932 | :103A2800A001A00A1130A100A930A200A301803092
933 | :103A38008E317E269C310230FA007A082000A000E0
934 | :103A4800F630A100A930A200A30180308E317E2675
935 | :103A58009C310330FA007A082000A000A930A100A8
936 | :103A6800A930A200A30180308E317E269C313F2DE3
937 | :103A7800A5315C259C310800F701F41F442D452D24
938 | :103A88004C2DF309F409F30A0319F40AF701F70AAC
939 | :103A9800F21F4F2D502D552DF109F209F10A031986
940 | :103AA800F20A7108720403195A2D5B2D842DF60150
941 | :103AB800F60A672D0130F135F20D890B5F2D0130C3
942 | :103AC800F5007508F607F21F6A2D6B2D5E2D72083A
943 | :103AD8007402031D712D71087302031C742D752D5A
944 | :103AE800792D7108F3027208F43B0130F236F10CBB
945 | :103AF800890B7A2D0130F602031D832D842D6B2D41
946 | :103B080077080319882D892D8E2DF309F409F30AF6
947 | :103B18000319F40A7408F2007308F100080013305E
948 | :103B2800BA3E8600870100302000A7000030A600BA
949 | :103B38001030A5000030A40021004F08F100500803
950 | :103B4800F200890D893B8909F300F4005308F50058
951 | :103B58005408F600890D893B8909F700F800993166
952 | :103B6800D6219D3174082000AB007308AA007208A2
953 | :103B7800A9007108A8009231D3229D31403F20004E
954 | :103B88002407B900413F253DBA003A08B300390877
955 | :103B9800B2009C3123249D3120003308BC00320838
956 | :103BA800BB003C08803AB80080303802031DDE2D87
957 | :103BB80002303B020318E12DE22DE52D2000BB0168
958 | :103BC800BC0120003C082100BB0020003B0821006C
959 | :103BD800BA00080020000D18F22DF32D072EFA3038
960 | :103BE80064020318F82DF92DFD2D0130F10071083C
961 | :103BF800E40750306406031D022E032E222E2100F6
962 | :103C0800B501B50A222E21003508031D0C2E0D2EF4
963 | :103C18001E2E200064080319122E132E1E2EFB30B0
964 | :103C280064020318182E192E1E2EFB30F10071089D
965 | :103C3800E400202E2000E4012100B50120008D18A9
966 | :103C4800262E272E342E0130F1007108E307143098
967 | :103C58006302031C302E312E352EE301E30A352E84
968 | :103C6800E3010D19382E392E472E0130F100710865
969 | :103C78002100B40714303402031C432E442E492E6D
970 | :103C8800B401B40A492E2100B4010800F701F21F5B
971 | :103C98004E2E4F2E562EF109F209F10A0319F20A97
972 | :103CA800F701F70AF41F592E5A2E632EF309F40967
973 | :103CB800F30A0319F40A0130F5007508F706F8014C
974 | :103CC800F9017108720403196A2E6B2E9A2EF601F7
975 | :103CD800F60A772E0130F135F20D890B6F2E01307F
976 | :103CE800F5007508F607F21F7A2E7B2E6E2E01302E
977 | :103CF800F835F90D890B7C2E72087402031D862E87
978 | :103D080071087302031C892E8A2E8F2E7108F30204
979 | :103D18007208F43B78140130F236F10C890B902EBE
980 | :103D28000130F602031D992E9A2E7B2E770803196F
981 | :103D38009E2E9F2EA42EF809F909F80A0319F90AEC
982 | :103D48007908F2007808F1000800BE30F50000306C
983 | :103D5800F60002302000A0002008F7007030A731DC
984 | :103D680074279E31C030F5000030F6000230200084
985 | :103D7800A0002008F7006E30A73174279E31C230AA
986 | :103D8800F5000030F600F701F70A7330A731742701
987 | :103D98009E31C430F5000030F60002302000A0004B
988 | :103DA8002008F7006C30A73174279E31C330F50026
989 | :103DB8000030F600F701F70A7230A73174279E31F8
990 | :103DC800C930F5000030F60002302000A0002008BD
991 | :103DD800F7006A30A73174279E31CB30F5000030E8
992 | :103DE800F60002302000A0002008F7006830A73154
993 | :103DF80074279E31CD30F5000030F60002302000E7
994 | :103E0800A0002008F7006630A73174279E31CF3014
995 | :103E1800F5000030F60002302000A0002008F7006E
996 | :103E28006430A73174279E31080021006B082000F8
997 | :103E3800BA0021006C082000BB0021006D0820009A
998 | :103E4800BC00BE0121005C0820003E07B80038080D
999 | :103E5800BD003D08303EB8003808BA003E08013EB3
1000 | :103E6800B8003808A0003A30A1000030A2002100B4
1001 | :103E78005A0820003D060319422F442F0130452FD0
1002 | :103E88000030B9003908A30000308E317E269F31FA
1003 | :103E98003F30F5000030F6000A302000B80038083E
1004 | :103EA800F7000A30B9003908F1003D08A6310426A8
1005 | :103EB8009F31003EA73174279F312000C9013E0879
1006 | :103EC800013EB8003808A0004130A1000030A2002F
1007 | :103ED80021005A0820003D060319732F752F013061
1008 | :103EE800762F0030B9003908A30002308E317E26C3
1009 | :103EF8009F3101302000B8003808BE0703303E0269
1010 | :103F0800031C872F882F262F080021006F08200008
1011 | :103F1800C80021006E082000C70021005908313E62
1012 | :103F28002000C5004508C700A0019D30A100A930A8
1013 | :103F3800A200A30100308E317E269F312000A0010F
1014 | :103F48004730A1000030A200A30109308E317E263F
1015 | :103F58009F312000A001A00A5E30A100A830A20075
1016 | :103F6800A30100308E317E269F3102302000C5002B
1017 | :103F78004508A000A330A100A930A200A301003089
1018 | :103F88008E317E269F3102302000C5004508B800DA
1019 | :103F980021005935DA3E86008701403F2000B900EC
1020 | :103FA800413FBA00210058080319DB2FDD2F0130EB
1021 | :103FB800DE2F00302000C6004608BB0006308731DF
1022 | :103FC80098279F3103302000C5004508A000E13044
1023 | :103FD800A100A930A200210058030319F42FF62FDD
1024 | :103FE8000130F72F00302000C6004608A300073034
1025 | :103FF8008E317E269F3108002034303431343234FB
1026 | :10400800333434343534363437343834393461342D
1027 | :1040180062346334643465346634673468346934CC
1028 | :104028006A346B346C346D346E346F34703471347C
1029 | :10403800723473347434753476347734783479342C
1030 | :104048007A34413442344334443445344634473472
1031 | :10405800483449344A344B344C344D344E344F345C
1032 | :10406800503451345234533454345534563457340C
1033 | :10407800583459345A343F3421342F342B342D34A6
1034 | :0A4088002334253424345F3400345F
1035 | :104A8800AE30A531DA25A5310800AF30A531DA25D9
1036 | :104A9800A5310800640080010131890B4F2D0034D5
1037 | :104AA800FF30F10071082000E4002100B501080082
1038 | :104AB80085302000DD00A930DE0099310821A531BC
1039 | :104AC800080030343A34003430343A340034303466
1040 | :104AD8003A3400342034003421005F08F4005E08C2
1041 | :104AE800F300A6319C26A53199310821A53108008B
1042 | :104AF8002100DA01DC01D801D9019F311927A5313C
1043 | :104B0800A5315425A53108000030F300F400A63182
1044 | :104B18009C26A5312100C601A5315C25A5310800D8
1045 | :104B280021000D1424000D1421008D1424008D146F
1046 | :104B380021000D1524000D1508002000E201E20AED
1047 | :104B48002100B201B101D501D601D7019031B420BD
1048 | :104B5800A5310230F30073082100B10008002100DC
1049 | :104B68008D130630890BB62D003221000D17063043
1050 | :104B7800890BBC2D003221008D170630890BC22D00
1051 | :104B88000032080098310420A5312000A001B63079
1052 | :104B9800A100A830A200A30100308E317E26A531E5
1053 | :104BA8002100DB01A5317C25A5310800F400A631E0
1054 | :104BB800CC26A531200065089A31B322A531803072
1055 | :104BC8009A31B322A53174089A31B322A531A5319F
1056 | :104BD800B325A5310800F400640023009518F52DCD
1057 | :104BE800F62DF02D7408F100F20171089100720899
1058 | :104BF80092003F30F3007308950515141308080058
1059 | :104C0800F400F301741C092E0A2E0E2E7108F2000E
1060 | :104C18007208F3070310F10D0310F40C7408031D58
1061 | :104C2800162E172E062E730808002100C601C60A84
1062 | :104C3800A631FF26A63172082100C8007108C700F6
1063 | :104C48000030F300F400A6319C26A631A5315C257E
1064 | :104C5800A631080098310420A6312000A001C130F7
1065 | :104C6800A100A830A200A30100308E317E26A63113
1066 | :104C78002100DB01DB0AA5317C25A631080098312B
1067 | :104C88000420A6312100D801D9014A08DB004908CF
1068 | :104C9800DA004C08DD004B08DC00A5315425A631AC
1069 | :104CA8009F318927A631080021000C1423000C1419
1070 | :104CB80021008C1423008C148330220097002100DB
1071 | :104CC8009E171E088F3920389E001E1103309E043F
1072 | :104CD8001D14080098310420A631A5315425A631A9
1073 | :104CE8002100D901DA01DB01DC010630FA007A087B
1074 | :104CF800D8005930FA007A08DD009B31E223A6314A
1075 | :104D0800080098310420A631A5315425A631210088
1076 | :104D1800D901DA01DB01DC010430FA007A08D80095
1077 | :104D28006530FA007A08DD009B31E223A6310800DD
1078 | :104D3800F41F9F2EA02EA42E2100D501D50AA62E41
1079 | :104D48002100D50174087F39F5007508D60073086D
1080 | :104D58007F39F5007508D7009031B420A6310800D6
1081 | :104D68002000BB003908FA007A08BC00BD013808E9
1082 | :104D7800FA007A08A0003C30A1000030A2003A08EE
1083 | :104D8800FB007B08A3003B088E317E26A631080075
1084 | :104D980021000D170630890BCF2E003221008D1708
1085 | :104DA8000630890BD52E003221008D130630890B71
1086 | :104DB800DB2E003221000D130630890BE12E003264
1087 | :104DC80008007208F5007108F4006400F82E063037
1088 | :104DD800F3003030890BEE2EF30BEE2E0032640018
1089 | :104DE8000130F4020030F53B74087504031DFD2EF4
1090 | :104DF800FE2EEB2E080021005708F300F401560898
1091 | :104E0800F500F6017508F600F50173087507F80056
1092 | :104E18007408763DF90055080319132F142F152F20
1093 | :104E2800F9177908F2007808F10008009831042091
1094 | :104E3800A731A5315425A7312100D801A631FF2675
1095 | :104E4800A73172082100DA007108D900DB01D50109
1096 | :104E5800D601D7019031B420A7318A312122A73158
1097 | :104E68000800F501F601711C3A2F3B2F3F2F7308FC
1098 | :104E7800F5077408F63D0130F335F40D890B402F22
1099 | :104E88000130F236F10C890B452F71087204031DAD
1100 | :104E98004E2F4F2F372F7608F2007508F1000800C3
1101 | :104EA80098310420A731A5315425A7312000A0014D
1102 | :104EB8002A30A100A930A200A301A30A80308E31B4
1103 | :104EC8007E26A7312100D901A631FF26A731720815
1104 | :104ED8002100DB007108DA00A531A125A7310800FF
1105 | :104EE800F9007608FB007508FA008F2F7908A531BC
1106 | :104EF800EF25A731F8007A0886007B088700780834
1107 | :104F080081000130F7020130F8007808F907013014
1108 | :104F1800FA070030FB3D7708031D932F942F7A2F53
1109 | :104F28000800F8007508F7007708F900B02F79082D
1110 | :104F3800860087010108F7007708F10078089831A2
1111 | :104F48002D20A7310130F6020130F7007708F80765
1112 | :104F58000130F7007708F9077608031DB42FB52F3D
1113 | :104F68009B2F080020005E08D9005D08D800043097
1114 | :104F78005807840059080318590A85001200DA00F6
1115 | :104F88001200DA040319C92FCA2FDA2F5E08D900D4
1116 | :104F98005D08D80004305807840059080318590AD6
1117 | :104FA8008500013F8A00003F0A00A73108006934E4
1118 | :104FB800A8345E34A8345334A8344834A8343D3473
1119 | :104FC800A8343234A83430342E34303430340034F9
1120 | :104FD8007334A9346134A9346734A9346D34A934DD
1121 | :104FE8007934A9345B34A9345534A9344F34A934FD
1122 | :104FF8004334A9344934A934323400346434003495
1123 | :10500800DC340034C2340134E834033498340834CE
1124 | :10501800303411340A340034163400342F34003458
1125 | :1050280064340034DC340034D6340134E8340334D6
1126 | :105038000034013402340434083410342034403449
1127 | :10504800603470347F34003401340234043408345A
1128 | :10505800103420344034603470347F3420342034A9
1129 | :105068005234653461346434793420342034203443
1130 | :105078000034203450345734523420346C346F3474
1131 | :1050880077342034203400342034203442347234CD
1132 | :10509800653461346B3420342034203400342034B7
1133 | :1050A800523475346E346E3469346E346734203457
1134 | :1050B80020340034773461346934743420346634ED
1135 | :1050C8002E342034483446340034203420342034FC
1136 | :1050D8002034203420342034203420342034003448
1137 | :1050E800413462346F3475347434203420342034BD
1138 | :1050F80020342034003453346534743475347034B7
1139 | :1051080020342034203420342034003443346134B3
1140 | :105118006C346934623472346134743465342034E4
1141 | :1051280000345434653473347434203420342034D7
1142 | :10513800203420342034003453346C3465346534DE
1143 | :105148007034203420342034203420340034543453
1144 | :1051580075346E3469346E34673420342034203426
1145 | :10516800203400344C346F34613464342034543483
1146 | :1051780075346E34653420340034533461347634F5
1147 | :1051880065342034543475346E3465342034003436
1148 | :1051980042347934703461347334733420342034B5
1149 | :1051A8002034203400345234653473346534743414
1150 | :1051B80020342034203420342034003459346534E9
1151 | :1051C800743441346E346F347434683465347234F2
1152 | :1051D800003473346C3465346534703469346E3437
1153 | :1051E8006734003420344234793470346134733491
1154 | :1051F8007334203400346434653473346934673468
1155 | :105208006E34653464340034483461347234643440
1156 | :105218007734613472346534003446346934723416
1157 | :105228006D3477346134723465340034453458341D
1158 | :1052380054342D34593441344634003441345434D0
1159 | :1052480055342D343134303430340034203454342F
1160 | :1052580075346E3465342034003400340034A4349A
1161 | :105268001B342B341B340034003467341C34E734CB
1162 | :1052780015340034003454342734AC3418348A34A8
1163 | :10528800A83443342634DF3405349534A8341A342A
1164 | :105298002734D5340B34A034A83481341834FE3480
1165 | :1052A8001334AB34A83467341B344634173474349D
1166 | :1052B800A834EF341A34F5341C34B634A834C63460
1167 | :1052C800253494341634C134A8342E342634943416
1168 | :1052D8001634D734A8348834253400340034CC3418
1169 | :1052E800A83419342634003400347F34A834853483
1170 | :1052F8002634BD341134003400346E342634BD34C1
1171 | :10530800113400340034083419341B340D34533448
1172 | :105318007434613472347434003453346C34653406
1173 | :10532800653470340034443465346C346134793411
1174 | :10533800003450346F3469346E347434003450346B
1175 | :105348006F34773465347234003444344734343439
1176 | :1053580053344E3400344E343734443444344334B4
1177 | :105368000034563430342E34363438340034533420
1178 | :105378006134763465340034533474346F347034A3
1179 | :1053880000344134753474346F3400344134553446
1180 | :1053980054344F3400343E344C342D3443340034C8
1181 | :1053A8003E3443342D344C34003420344F346E347E
1182 | :1053B80000344F346634663400344534733463340F
1183 | :1053C8000034503457345234003453345734523440
1184 | :1053D80000344F346B34003443343D3400344C349F
1185 | :0A53E8003D3400346234793400349F
1186 | :020000040001F9
1187 | :08000000FF3FFF3FFF3FFF3F00
1188 | :04000E00FF3FFF3F72
1189 | :10E00000000000005300740061007200740075008D
1190 | :10E0100070002000000000002000200020002000F0
1191 | :10E020002000200020002000000000002000200030
1192 | :10E030002000200020002000200020000000000020
1193 | :10E0400020002000200020002000200020002000D0
1194 | :10E050000000000020002000200020002000200000
1195 | :10E0600020002000000000002000200020002000F0
1196 | :10E0700020002000200020000000000020002000E0
1197 | :10E0800020002000200020002000200000000000D0
1198 | :10E090002000200020002000200020002000200080
1199 | :10E0A00000000000200020002000200020002000B0
1200 | :10E0B00020002000000000002000200020002000A0
1201 | :10E0C0002000200020002000E0002E00960000002C
1202 | :10E0D0001E0000000A0000001E0000008C0000006E
1203 | :08E0E0007800000000000000C0
1204 | :00000001FF
1205 |
--------------------------------------------------------------------------------