Modified some code on "frum" and "microdrill"

This commit is contained in:
Eddy
2014-10-21 01:58:46 +04:00
parent cb0a628165
commit d642d03734
25 changed files with 283204 additions and 1012 deletions

57
microdrill/README Normal file
View File

@@ -0,0 +1,57 @@
Algorithm
1. Main functionality - footswitch
By pressing footswitch you move drill down. Speed setup produced
by variable resistor on tray's control. Pulling footswitch
up returns drill into its previous position. If you press down the
footswitch when drill haven't reach its starting position, it moves down
again and returns back on next pulling up.
If drill motor was off, pressing footswitch will also turn it on.
/*
* the behaviour of steps counter depends on footswitch state; timer
* setup varies due to varistor value.
*/
2. Tray buttons
2.1. Left button (BTN1) used to setup the zero point of drill:
- drill quickly moves up
- stepper speed changes to lowest
- while pressing down the footswitch motor moves down
- press BTN1 again to set current position as zero-point
/*
* Button control: by default, EXTI interrupts serve buttons.
* To avoid clash, EXTI interrupt handler sets the special flag
* value to 50 (in milliseconds) and turns off EXTI IRQ.
* In the main() body the endless cycle checks value of system
* timer variable changed by system timer once per millisecond.
* If the EXTI pause flag non-zero, it decrements it until zero.
* After that EXTI turns on again and keys state occured. This
* allows also to avoid some noice on MCU inputs.
*/
2.2. Right button (BTN2) used to switch between regulation
of stepper speed or drill speed by variable resistor on tray's
control. The default state is stepper (vertical) speed regulation.
Drill works with algorithm of automatical moment correction:
if drill stalled, the PWM duty reduced until current through drill's
winding stabilize to max value. Conversely, when current through winding
falls to very low value, PWM duty increased until normal current
value. Varistor allows you to set these limiting values in drill speed
mode.
2.3. Simultaneous pressing of both buttons will:
- stop drill motor
- move tray up
- move drill down
So, you can easily change drilling bits. After that press again BTN1+BTN2
to return tray down & drill motor up. After this operation the uppest
drill's position will be zero.

View File

@@ -40,18 +40,8 @@ INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4){}
// External Interrupt PORTC
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5){
if(!(PC_IDR & GPIO_PIN4)){ // PC4 - pedal switch - connect to ground!
if(!drill_works)
DRILL_ON(); // in future it should be more complex: move motor down etc
}else{
// it would be better to set flags as drill motor would have to move up first
if(drill_works)
DRILL_OFF();
}
// PC2 - down; PC3 - up
if((PC_IDR & (GPIO_PIN2 | GPIO_PIN3)) != (GPIO_PIN2 | GPIO_PIN3)){
TRAY_STOP(); // stop tray motor
}
BTNS_EXTI_DISABLE();
exti_event = 100; // set pause to 100us
}
// External Interrupt PORTD
@@ -194,7 +184,10 @@ INTERRUPT_HANDLER(ADC1_IRQHandler, 22){
//if(val_ctr == 10) val_ctr = 0;
if(drill_works && auto_speed){
if(v > 50) DRILL_SLOWER(); // current = 0.48A
else if(v < 30) DRILL_FASTER(); // current = 0.29A
else if(v < 3){ // no motor or break?
DRILL_OFF();
uart_write("No drill motor?");
}else if(v < 30) DRILL_FASTER(); // current = 0.29A
}
ADC_CSR &= 0x3f; // clear EOC & AWD flags
}

View File

@@ -26,6 +26,7 @@
#include "stepper.h"
unsigned long Global_time = 0L; // global time in ms
volatile char exti_event = -1; // flag & counter of EXTI interrupt
U16 paused_val = 500; // interval between LED flashing
U8 drill_works = 0; // flag of working motor
@@ -46,12 +47,12 @@ U8 UART_rx_cur_i = 0; // index of current first byte in rx array (to which d
* 7 0111
* 8 1000
* 9 1001
*10 1010
*11 1011
*12 1100
*13 1101
*14 1110
*15 1111
*10 1010 a
*11 1011 b
*12 1100 c
*13 1101 d
*14 1110 e
*15 1111 f
*/
// microsteps: DCBA = 1000, 1100, 0100, 0110, 0010, 0011, 0001, 1001 -- for ULN
// what a shit is this > DCBA = 0001, 0010, 0110, 1010, 1001, 1000, 0100, 0000 - bipolar
@@ -66,7 +67,7 @@ char usteps[8] =
#error Define MOTOR_TYPE_UNIPOLAR or MOTOR_TYPE_BIPOLAR
#endif
U16 ADC_value = 0; // value of last ADC measurement
volatile U16 ADC_value = 0; // value of last ADC measurement
/**
* Send one byte through UART
@@ -159,8 +160,44 @@ void error_msg(char *msg){
UART_send_byte('\n');
}
U8 old_buttons_state = BTNS_EXTI_MASK; // default buttons state - none pressed
void check_buttons(){
U8 btn_state = BTNS_IDR & BTNS_EXTI_MASK, btns_changed;
if(btn_state == old_buttons_state) goto rtn; // none changed
btns_changed = btn_state ^ old_buttons_state; // XOR -> 1 on changed states
// check for footswitch
if(FOOTSW_TEST(btns_changed)){
if(!FOOTSW_TEST(btn_state)){ // pedal switch pressed - connect to ground!
if(!drill_works){
DRILL_ON();
}
add_steps(-5000); // this is a trick to move more than stage allows
uart_write("move down\n");
}else{
add_steps(-5000); // return to previous state (this function moves RELATIVELY)
uart_write("move up\n");
}
}
// check for tray endswitches. We don't care for their off state, so only check ON
if(TRAYSW_TEST(btns_changed) && TRAYSW_PRSD(btn_state)){
uart_write("tray stop\n");
TRAY_STOP(); // stop tray motor in any moving direction
}
// check for user buttons pressed (the same - only pressed)
if(BTN12_TEST(btns_changed) && !BTN12_TEST(btn_state)){ // pressed both buttons
uart_write("both buttons\n");
}else if(BTN1_TEST(btns_changed) && !BTN1_TEST(btn_state)){ // btn1
uart_write("button 1\n");
}else if(BTN2_TEST(btns_changed) && !BTN2_TEST(btn_state)){ // btn2
uart_write("button 2\n");
}
old_buttons_state = btn_state;
rtn:
BTNS_EXTI_ENABLE();
}
int main() {
unsigned long T = 0L;
unsigned long T = 0L, TT = 0L;
int Ival;
U8 rb, v;
CFG_GCR |= 1; // disable SWIM
@@ -206,9 +243,8 @@ int main() {
// Configure pins
// EXTI
EXTI_CR1 = 0x30; // PCIS[1:0] = 11b -> rising/falling
PC_CR1 = 0x1c; // PC2, PC3 and PC4 are switches with pull-up
PC_CR2 = 0x1c; // enable interrupts
BTNS_SETUP();
BTNS_EXTI_ENABLE(); // enable interrupts
// other
PC_DDR |= GPIO_PIN1; // setup timer's output
DRILL_OFF(); // set PC1 to zero - power off motor
@@ -234,14 +270,24 @@ int main() {
// Loop
do{
if(Global_time != TT){ // once per 1ms
TT = Global_time;
// check EXTI counter
if(exti_event > 0){ // delay for 50us - decrement counter
exti_event--;
}else if(exti_event == 0){
exti_event = -1;
check_buttons();
}
}
if((Global_time - T > paused_val) || (T > Global_time)){
U8 i;
//U8 i;
T = Global_time;
PORT(LED_PORT, ODR) ^= LED_PIN; // blink on-board LED
//ADC_value = 0;
//for(i = 0; i < 10; i++) ADC_value += ADC_values[i];
//ADC_value /= 10;
printUint((U8*)&ADC_value, 2); // & print out ADC value
// printUint((U8*)&ADC_value, 2); // & print out ADC value
}
if(UART_read_byte(&rb)){ // buffer isn't empty
switch(rb){

View File

@@ -24,6 +24,8 @@
extern unsigned long Global_time; // global time in ms
extern volatile char exti_event; // flag of EXTI interrupt == 0 -> check keys
extern char usteps[]; // current array for microsteps
#define UART_BUF_LEN 8 // max 7 bytes transmited in on operation
@@ -34,7 +36,7 @@ extern U8 UART_rx_start_i;
extern U8 UART_rx_cur_i;
//extern U16 ADC_values[];
extern U16 ADC_value; // value of last ADC measurement
extern volatile U16 ADC_value; // value of last ADC measurement
extern U8 drill_works;
extern U8 auto_speed; // == 1 to automatic speed regulation

View File

@@ -46,32 +46,58 @@
/***** Stepper motor *****/
// Clocking
#define STP_PORT PB // PB0..3 -- pins A..D of stepper
#define STP_PORT PB // PB0..3 -- pins A..D of stepper
/* drill motor PC1 - timer 1 PWM output 1 */
/* drill motor PC1 - timer 1 PWM output 1; PC5 - footswitch */
#define DRILL_ON() do{TIM1_BKR |= 0x80; drill_works = 1;}while(0) // turn on drill motor
#define DRILL_OFF() do{TIM1_BKR &= ~0x80; PC_ODR &= ~GPIO_PIN1; drill_works = 0;}while(0) // turn it off
#define DRILL_FASTER() do{U8 r = TIM1_CCR1L; if(r < 100) TIM1_CCR1L = r+1;}while(0)// increase current
#define DRILL_SLOWER() do{U8 r = TIM1_CCR1L; if(r > 0) TIM1_CCR1L = r-1;}while(0) // decrease it
#define FOOTSWITCH ((PC_IDR & GPIO_PIN5))
#define FOOTSW_TEST(x) ((x & GPIO_PIN5))
/* tray motor: PB4, PB5 - rotation direction; PC2, PC3 - end-switches (bottom/top) */
#define TRAY_UP() do{if(!(PC_IDR & GPIO_PIN3)){PB_ODR &= ~0x30; PB_ODR |= 0x10;}}while(0)
#define TRAY_DOWN() do{if(!(PC_IDR & GPIO_PIN2)){PB_ODR &= ~0x30; PB_ODR |= 0x20;}}while(0)
#define TRAY_STOP() do{PB_ODR &= ~0x30;}while(0)
/* tray motor: PD2, PD3 - rotation direction; PC3, PC4 - end-switches (bottom/top) */
#define TRAY_TOP_SW ((PC_IDR & GPIO_PIN4))
#define TRAY_BTM_SW ((PC_IDR & GPIO_PIN3))
#define TRAYSW_TEST(x) ((x & (GPIO_PIN3 | GPIO_PIN4)))
#define TRAYSW_PRSD(x) (((x & (GPIO_PIN3 | GPIO_PIN4)) != (GPIO_PIN3 | GPIO_PIN4)))
#define TRAY_STOP() do{PD_ODR &= ~0x0C;}while(0)
#define TRAY_UP() do{if(!TRAY_TOP_SW){PD_ODR &= ~0x0C; PC_ODR |= 0x04;}}while(0)
#define TRAY_DOWN() do{if(!(TRAY_BTM_SW)){PD_ODR &= ~0x0C; PC_ODR |= 0x08;}}while(0)
/* Buttons: PC6 - BTN1 & PC7 - BTN2 */
#define BTN1 ((PC_IDR & GPIO_PIN6))
#define BTN2 ((PC_IDR & GPIO_PIN7))
#define BTN1_TEST(x) ((x & GPIO_PIN6))
#define BTN2_TEST(x) ((x & GPIO_PIN7))
#define BTN12_TEST(x) (((x & (GPIO_PIN7 | GPIO_PIN6)) == (GPIO_PIN7 | GPIO_PIN6)))
// EXTI for all buttons: PC3..7
#define BTNS_IDR PC_IDR
#define BTNS_EXTI_MASK (0xf8)
#define BTNS_EXTI_DISABLE() do{PC_CR2 = 0;}while(0)
#define BTNS_EXTI_ENABLE() do{PC_CR2 = BTNS_EXTI_MASK;}while(0)
#define BTNS_SETUP() do{EXTI_CR1 = 0x30; PC_CR1 |= BTNS_EXTI_MASK;}while(0)
#endif // __PORTS_DEFINITION_H__
/*
* PORTS:
* DRILL
* PC1 - PWM (TIM1_CH1)
* PF4 - Sence (AIN12)
* PC4 - Pedal switch
* PC5 - Pedal switch
* Stepper motor
* PB0, PB1, PB2, PB3 - phases of motor
* Slider (tray) motor
* PB4, PB5 - rotation direction
* PC2 - down end-switch
* PC3 - up end-switch
* PD2, PD3 - rotation direction
* PC3 - down end-switch
* PC4 - up end-switch
* On-tray buttons & resistor
* PB4 - variable resistor (AIN4)
* PC6 - BTN1
* PC7 - BTN2
* UART
* PD5 - TX
* PD6 - RX
*/

View File

@@ -40,7 +40,7 @@ $Descr A3 16535 11693
encoding utf-8
Sheet 1 2
Title ""
Date "19 aug 2014"
Date "20 oct 2014"
Rev ""
Comp ""
Comment1 ""
@@ -60,10 +60,10 @@ F 3 "~" H 4400 3100 60 0000 C CNN
1 0 0 -1
$EndComp
$Comp
L GND #PWR01
L GND #PWR10
U 1 1 52FB03EF
P 2750 3200
F 0 "#PWR01" H 2750 3200 30 0001 C CNN
F 0 "#PWR10" H 2750 3200 30 0001 C CNN
F 1 "GND" H 2750 3130 30 0001 C CNN
F 2 "" H 2750 3200 60 0000 C CNN
F 3 "" H 2750 3200 60 0000 C CNN
@@ -75,10 +75,10 @@ Wire Wire Line
Wire Wire Line
2750 3150 3000 3150
$Comp
L GND #PWR02
L GND #PWR9
U 1 1 52FB0400
P 2750 2600
F 0 "#PWR02" H 2750 2600 30 0001 C CNN
F 0 "#PWR9" H 2750 2600 30 0001 C CNN
F 1 "GND" H 2750 2530 30 0001 C CNN
F 2 "" H 2750 2600 60 0000 C CNN
F 3 "" H 2750 2600 60 0000 C CNN
@@ -126,10 +126,10 @@ Wire Wire Line
Wire Wire Line
2050 2700 2050 3100
$Comp
L GND #PWR03
L GND #PWR5
U 1 1 52FB0453
P 2050 3100
F 0 "#PWR03" H 2050 3100 30 0001 C CNN
F 0 "#PWR5" H 2050 3100 30 0001 C CNN
F 1 "GND" H 2050 3030 30 0001 C CNN
F 2 "" H 2050 3100 60 0000 C CNN
F 3 "" H 2050 3100 60 0000 C CNN
@@ -280,10 +280,10 @@ PC3
Text Label 6750 2150 2 60 ~ 0
PC2
$Comp
L +3.3V #PWR04
L +3.3V #PWR1
U 1 1 52FB0DC4
P 950 2800
F 0 "#PWR04" H 950 2760 30 0001 C CNN
F 0 "#PWR1" H 950 2760 30 0001 C CNN
F 1 "+3.3V" H 950 2910 30 0000 C CNN
F 2 "" H 950 2800 60 0000 C CNN
F 3 "" H 950 2800 60 0000 C CNN
@@ -319,10 +319,10 @@ Wire Wire Line
Wire Wire Line
950 3850 950 3950
$Comp
L +3.3V #PWR05
L +3.3V #PWR2
U 1 1 52FB0EC7
P 1300 2800
F 0 "#PWR05" H 1300 2760 30 0001 C CNN
F 0 "#PWR2" H 1300 2760 30 0001 C CNN
F 1 "+3.3V" H 1300 2910 30 0000 C CNN
F 2 "" H 1300 2800 60 0000 C CNN
F 3 "" H 1300 2800 60 0000 C CNN
@@ -352,10 +352,10 @@ F 3 "" H 1300 3600 60 0000 C CNN
1 0 0 -1
$EndComp
$Comp
L GND #PWR06
L GND #PWR3
U 1 1 52FB0ED9
P 1300 3950
F 0 "#PWR06" H 1300 3950 30 0001 C CNN
F 0 "#PWR3" H 1300 3950 30 0001 C CNN
F 1 "GND" H 1300 3880 30 0001 C CNN
F 2 "" H 1300 3950 60 0000 C CNN
F 3 "" H 1300 3950 60 0000 C CNN
@@ -371,10 +371,10 @@ Wire Wire Line
Text Label 950 3950 2 60 ~ 0
PC2
$Comp
L +3.3V #PWR07
L +3.3V #PWR18
U 1 1 52FB0EF1
P 6500 2550
F 0 "#PWR07" H 6500 2510 30 0001 C CNN
F 0 "#PWR18" H 6500 2510 30 0001 C CNN
F 1 "+3.3V" H 6500 2660 30 0000 C CNN
F 2 "" H 6500 2550 60 0000 C CNN
F 3 "" H 6500 2550 60 0000 C CNN
@@ -393,10 +393,10 @@ F 3 "" H 6500 2900 60 0000 C CNN
1 0 0 -1
$EndComp
$Comp
L GND #PWR08
L GND #PWR19
U 1 1 52FB0F03
P 6500 4050
F 0 "#PWR08" H 6500 4050 30 0001 C CNN
F 0 "#PWR19" H 6500 4050 30 0001 C CNN
F 1 "GND" H 6500 3980 30 0001 C CNN
F 2 "" H 6500 4050 60 0000 C CNN
F 3 "" H 6500 4050 60 0000 C CNN
@@ -444,10 +444,10 @@ Connection ~ 6500 3200
Text Label 6650 3200 0 60 ~ 0
NRST
$Comp
L +3.3V #PWR09
L +3.3V #PWR6
U 1 1 52FB2273
P 2150 850
F 0 "#PWR09" H 2150 810 30 0001 C CNN
F 0 "#PWR6" H 2150 810 30 0001 C CNN
F 1 "+3.3V" H 2150 960 30 0000 C CNN
F 2 "" H 2150 850 60 0000 C CNN
F 3 "" H 2150 850 60 0000 C CNN
@@ -457,10 +457,10 @@ $EndComp
Wire Wire Line
1600 850 2150 850
$Comp
L GND #PWR010
L GND #PWR7
U 1 1 52FB2296
P 2150 1000
F 0 "#PWR010" H 2150 1000 30 0001 C CNN
F 0 "#PWR7" H 2150 1000 30 0001 C CNN
F 1 "GND" H 2150 930 30 0001 C CNN
F 2 "" H 2150 1000 60 0000 C CNN
F 3 "" H 2150 1000 60 0000 C CNN
@@ -477,10 +477,10 @@ Wire Wire Line
2750 3050 2750 2850
Connection ~ 2750 2850
$Comp
L +3.3V #PWR011
L +3.3V #PWR8
U 1 1 52FB26FA
P 2600 3000
F 0 "#PWR011" H 2600 2960 30 0001 C CNN
F 0 "#PWR8" H 2600 2960 30 0001 C CNN
F 1 "+3.3V" H 2600 3110 30 0000 C CNN
F 2 "" H 2600 3000 60 0000 C CNN
F 3 "" H 2600 3000 60 0000 C CNN
@@ -491,10 +491,10 @@ Wire Wire Line
2600 3000 2600 3050
Connection ~ 2750 3050
$Comp
L +3.3V #PWR012
L +3.3V #PWR11
U 1 1 52FB286D
P 4000 750
F 0 "#PWR012" H 4000 710 30 0001 C CNN
F 0 "#PWR11" H 4000 710 30 0001 C CNN
F 1 "+3.3V" H 4000 860 30 0000 C CNN
F 2 "" H 4000 750 60 0000 C CNN
F 3 "" H 4000 750 60 0000 C CNN
@@ -502,10 +502,10 @@ F 3 "" H 4000 750 60 0000 C CNN
1 0 0 -1
$EndComp
$Comp
L GND #PWR013
L GND #PWR12
U 1 1 52FB287C
P 4000 1300
F 0 "#PWR013" H 4000 1300 30 0001 C CNN
F 0 "#PWR12" H 4000 1300 30 0001 C CNN
F 1 "GND" H 4000 1230 30 0001 C CNN
F 2 "" H 4000 1300 60 0000 C CNN
F 3 "" H 4000 1300 60 0000 C CNN
@@ -550,10 +550,10 @@ Text Label 9100 1550 0 61 ~ 0
Text Label 9100 1650 0 61 ~ 0
3.3V
$Comp
L GND #PWR014
L GND #PWR24
U 1 1 52FB4CEF
P 10100 1350
F 0 "#PWR014" H 10100 1350 30 0001 C CNN
F 0 "#PWR24" H 10100 1350 30 0001 C CNN
F 1 "GND" H 10100 1280 30 0001 C CNN
F 2 "" H 10100 1350 60 0000 C CNN
F 3 "" H 10100 1350 60 0000 C CNN
@@ -573,10 +573,10 @@ Wire Wire Line
Wire Wire Line
10300 1450 10300 950
$Comp
L +3.3V #PWR015
L +3.3V #PWR26
U 1 1 52FB4EDC
P 10500 1550
F 0 "#PWR015" H 10500 1510 30 0001 C CNN
F 0 "#PWR26" H 10500 1510 30 0001 C CNN
F 1 "+3.3V" H 10500 1660 30 0000 C CNN
F 2 "" H 10500 1550 60 0000 C CNN
F 3 "" H 10500 1550 60 0000 C CNN
@@ -679,10 +679,10 @@ Wire Wire Line
Wire Wire Line
3700 5350 4000 5350
$Comp
L GND #PWR016
L GND #PWR13
U 1 1 53F0F2B8
P 4000 6500
F 0 "#PWR016" H 4000 6500 30 0001 C CNN
F 0 "#PWR13" H 4000 6500 30 0001 C CNN
F 1 "GND" H 4000 6430 30 0001 C CNN
F 2 "" H 4000 6500 60 0000 C CNN
F 3 "" H 4000 6500 60 0000 C CNN
@@ -707,10 +707,10 @@ Wire Wire Line
5100 5900 5350 5900
Connection ~ 5350 5900
$Comp
L +5V #PWR017
L +5V #PWR16
U 1 1 53F0F5FC
P 5100 5900
F 0 "#PWR017" H 5100 5990 20 0001 C CNN
F 0 "#PWR16" H 5100 5990 20 0001 C CNN
F 1 "+5V" H 5100 5990 30 0000 C CNN
F 2 "" H 5100 5900 60 0000 C CNN
F 3 "" H 5100 5900 60 0000 C CNN
@@ -760,10 +760,10 @@ Wire Wire Line
9450 3200 9450 3400
Connection ~ 9450 3300
$Comp
L GND #PWR018
L GND #PWR23
U 1 1 53F0FCF1
P 9450 3400
F 0 "#PWR018" H 9450 3400 30 0001 C CNN
F 0 "#PWR23" H 9450 3400 30 0001 C CNN
F 1 "GND" H 9450 3330 30 0001 C CNN
F 2 "" H 9450 3400 60 0000 C CNN
F 3 "" H 9450 3400 60 0000 C CNN
@@ -782,10 +782,10 @@ F 3 "" H 7950 2900 60 0000 C CNN
-1 0 0 1
$EndComp
$Comp
L GND #PWR019
L GND #PWR21
U 1 1 53F0FD7A
P 8350 3100
F 0 "#PWR019" H 8350 3100 30 0001 C CNN
F 0 "#PWR21" H 8350 3100 30 0001 C CNN
F 1 "GND" H 8350 3030 30 0001 C CNN
F 2 "" H 8350 3100 60 0000 C CNN
F 3 "" H 8350 3100 60 0000 C CNN
@@ -798,10 +798,10 @@ Wire Wire Line
8350 3000 8350 3100
Connection ~ 8800 2900
$Comp
L +5V #PWR020
L +5V #PWR22
U 1 1 53F0FE51
P 8800 2850
F 0 "#PWR020" H 8800 2940 20 0001 C CNN
F 0 "#PWR22" H 8800 2940 20 0001 C CNN
F 1 "+5V" H 8800 2940 30 0000 C CNN
F 2 "" H 8800 2850 60 0000 C CNN
F 3 "" H 8800 2850 60 0000 C CNN
@@ -811,10 +811,10 @@ $EndComp
Wire Wire Line
8800 2900 8800 2850
$Comp
L +12V #PWR021
L +12V #PWR20
U 1 1 53F0FEBE
P 8350 2750
F 0 "#PWR021" H 8350 2700 20 0001 C CNN
F 0 "#PWR20" H 8350 2700 20 0001 C CNN
F 1 "+12V" H 8350 2850 30 0000 C CNN
F 2 "" H 8350 2750 60 0000 C CNN
F 3 "" H 8350 2750 60 0000 C CNN
@@ -826,10 +826,10 @@ Wire Wire Line
Wire Wire Line
8350 2800 8300 2800
$Comp
L +3.3V #PWR022
L +3.3V #PWR25
U 1 1 53F1006E
P 10200 2850
F 0 "#PWR022" H 10200 2810 30 0001 C CNN
F 0 "#PWR25" H 10200 2810 30 0001 C CNN
F 1 "+3.3V" H 10200 2960 30 0000 C CNN
F 2 "" H 10200 2850 60 0000 C CNN
F 3 "" H 10200 2850 60 0000 C CNN
@@ -864,9 +864,9 @@ Wire Wire Line
Wire Wire Line
5600 6400 5200 6400
Text Label 4000 7700 2 60 ~ 0
PB4
PD2
Text Label 4000 7600 2 60 ~ 0
PB5
PD3
Wire Wire Line
4000 7800 3700 7800
Wire Wire Line
@@ -876,10 +876,10 @@ Wire Wire Line
Wire Wire Line
5200 7600 5200 7700
$Comp
L GND #PWR023
L GND #PWR14
U 1 1 53F11196
P 4000 7900
F 0 "#PWR023" H 4000 7900 30 0001 C CNN
F 0 "#PWR14" H 4000 7900 30 0001 C CNN
F 1 "GND" H 4000 7830 30 0001 C CNN
F 2 "" H 4000 7900 60 0000 C CNN
F 3 "" H 4000 7900 60 0000 C CNN
@@ -890,10 +890,10 @@ Wire Wire Line
4000 7900 4000 7800
Connection ~ 4000 7800
$Comp
L +5V #PWR024
L +5V #PWR17
U 1 1 53F11209
P 5300 7650
F 0 "#PWR024" H 5300 7740 20 0001 C CNN
F 0 "#PWR17" H 5300 7740 20 0001 C CNN
F 1 "+5V" H 5300 7740 30 0000 C CNN
F 2 "" H 5300 7650 60 0000 C CNN
F 3 "" H 5300 7650 60 0000 C CNN
@@ -937,18 +937,18 @@ Wire Wire Line
Wire Wire Line
5500 7750 5750 7750
Wire Notes Line
3550 7050 3550 8450
3550 7050 3550 8850
Wire Notes Line
5700 7050 5700 8450
5700 7050 5700 8850
Wire Notes Line
5700 7050 3550 7050
Text Notes 3800 7200 0 60 ~ 0
Slider (tray) motor
$Comp
L PWR_FLAG #FLG025
L PWR_FLAG #FLG1
U 1 1 53F11FC5
P 8550 2750
F 0 "#FLG025" H 8550 2845 30 0001 C CNN
F 0 "#FLG1" H 8550 2845 30 0001 C CNN
F 1 "PWR_FLAG" H 8550 2930 30 0000 C CNN
F 2 "" H 8550 2750 60 0000 C CNN
F 3 "" H 8550 2750 60 0000 C CNN
@@ -958,10 +958,10 @@ $EndComp
Wire Wire Line
8550 2750 8350 2750
$Comp
L PWR_FLAG #FLG026
L PWR_FLAG #FLG2
U 1 1 53F12233
P 8550 3000
F 0 "#FLG026" H 8550 3095 30 0001 C CNN
F 0 "#FLG2" H 8550 3095 30 0001 C CNN
F 1 "PWR_FLAG" H 8550 3180 30 0000 C CNN
F 2 "" H 8550 3000 60 0000 C CNN
F 3 "" H 8550 3000 60 0000 C CNN
@@ -970,10 +970,10 @@ F 3 "" H 8550 3000 60 0000 C CNN
$EndComp
Connection ~ 8350 3000
$Comp
L PWR_FLAG #FLG027
L PWR_FLAG #FLG3
U 1 1 53F122D9
P 9000 2800
F 0 "#FLG027" H 9000 2895 30 0001 C CNN
F 0 "#FLG3" H 9000 2895 30 0001 C CNN
F 1 "PWR_FLAG" H 9000 2980 30 0000 C CNN
F 2 "" H 9000 2800 60 0000 C CNN
F 3 "" H 9000 2800 60 0000 C CNN
@@ -983,50 +983,48 @@ $EndComp
Wire Wire Line
9000 2800 9000 2900
Connection ~ 9000 2900
Wire Notes Line
5700 8450 3550 8450
$Comp
L SW_PUSH SW2
U 1 1 53F12B09
P 4150 8250
F 0 "SW2" H 4300 8360 50 0000 C CNN
F 1 "UP" H 4150 8170 50 0000 C CNN
F 2 "~" H 4150 8250 60 0000 C CNN
F 3 "~" H 4150 8250 60 0000 C CNN
1 4150 8250
P 4150 8400
F 0 "SW2" H 4300 8510 50 0000 C CNN
F 1 "BTN1" H 4150 8320 50 0000 C CNN
F 2 "~" H 4150 8400 60 0000 C CNN
F 3 "~" H 4150 8400 60 0000 C CNN
1 4150 8400
1 0 0 -1
$EndComp
$Comp
L SW_PUSH SW3
U 1 1 53F12B1C
P 5050 8250
F 0 "SW3" H 5200 8360 50 0000 C CNN
F 1 "DOWN" H 5050 8170 50 0000 C CNN
F 2 "~" H 5050 8250 60 0000 C CNN
F 3 "~" H 5050 8250 60 0000 C CNN
1 5050 8250
P 5050 8400
F 0 "SW3" H 5200 8510 50 0000 C CNN
F 1 "BTN2" H 5050 8320 50 0000 C CNN
F 2 "~" H 5050 8400 60 0000 C CNN
F 3 "~" H 5050 8400 60 0000 C CNN
1 5050 8400
1 0 0 -1
$EndComp
Wire Wire Line
4450 8250 4750 8250
4450 8400 4750 8400
$Comp
L GND #PWR028
L GND #PWR15
U 1 1 53F12BC1
P 4600 8350
F 0 "#PWR028" H 4600 8350 30 0001 C CNN
F 1 "GND" H 4600 8280 30 0001 C CNN
F 2 "" H 4600 8350 60 0000 C CNN
F 3 "" H 4600 8350 60 0000 C CNN
1 4600 8350
P 4600 8700
F 0 "#PWR15" H 4600 8700 30 0001 C CNN
F 1 "GND" H 4600 8630 30 0001 C CNN
F 2 "" H 4600 8700 60 0000 C CNN
F 3 "" H 4600 8700 60 0000 C CNN
1 4600 8700
1 0 0 -1
$EndComp
Wire Wire Line
4600 8350 4600 8250
Connection ~ 4600 8250
Text Label 5350 8250 0 60 ~ 0
PC2
Text Label 3850 8250 2 60 ~ 0
4600 8100 4600 8700
Connection ~ 4600 8400
Text Label 5350 8100 0 60 ~ 0
PC3
Text Label 3850 8100 2 60 ~ 0
PC4
$Comp
L SW_PUSH SW1
U 1 1 53F13089
@@ -1039,10 +1037,10 @@ F 3 "~" H 1650 6750 60 0000 C CNN
1 0 0 -1
$EndComp
$Comp
L GND #PWR029
L GND #PWR4
U 1 1 53F130B8
P 1950 6950
F 0 "#PWR029" H 1950 6950 30 0001 C CNN
F 0 "#PWR4" H 1950 6950 30 0001 C CNN
F 1 "GND" H 1950 6880 30 0001 C CNN
F 2 "" H 1950 6950 60 0000 C CNN
F 3 "" H 1950 6950 60 0000 C CNN
@@ -1052,7 +1050,7 @@ $EndComp
Wire Wire Line
1950 6950 1950 6750
Text Label 1350 6750 2 60 ~ 0
PC4
PC5
Wire Notes Line
750 4750 750 7150
Wire Notes Line
@@ -1063,4 +1061,104 @@ Wire Notes Line
2350 4750 750 4750
Text Notes 1050 5000 0 60 ~ 0
Drill motor
Text Notes 850 7450 0 60 ~ 0
"DRILL" is foot-switch.\nPress it to move drill down,\nrelease to return it to start position.\nDouble-click turns drill motor on/off.\n
Text Notes 6350 7250 0 60 ~ 0
Two buttons on tray have following functionality:\nBTN1 - setup zero point (move slowly + set coordinate\n to 0 after footswitch released); next pressing returns\n device to normal state;\nBTN2 - switch between regulation of drill speed/stepper speed;\nBTN1+BTN2 (simultaneously) - move tray up/down.\n\n"volume" varistor allows to regulate motor speed.\nDefault is max drill speed, varistor regulates stepper speed.
$Comp
L POT RV1
U 1 1 54442B33
P 5000 8650
F 0 "RV1" H 5000 8550 50 0000 C CNN
F 1 "POT" H 5000 8650 50 0000 C CNN
F 2 "" H 5000 8650 60 0000 C CNN
F 3 "" H 5000 8650 60 0000 C CNN
1 5000 8650
-1 0 0 1
$EndComp
Wire Wire Line
5000 8800 5250 8800
Wire Wire Line
5250 8800 5250 8650
Wire Wire Line
4750 8650 4600 8650
Connection ~ 5250 8650
Wire Notes Line
5700 8850 3550 8850
Text Notes 5950 3650 0 60 ~ 0
Drill PWM
Text Notes 2900 2850 2 60 ~ 0
Drill sense
Wire Notes Line
2900 2950 2800 2950
Wire Notes Line
2800 2950 2800 2900
Text Notes 6000 3250 0 60 ~ 0
Drill SW
Wire Notes Line
2850 3750 2800 3750
Wire Notes Line
2800 3750 2800 3400
Text Notes 2750 3600 2 60 ~ 0
Stepper phases
Text Notes 6000 2700 0 60 ~ 0
Tray bridge
Text Notes 6000 3150 0 60 ~ 0
BTN1
Text Notes 6000 3050 0 60 ~ 0
BTN2
Connection ~ 4600 8650
Wire Wire Line
5250 8650 5400 8650
Text Notes 2800 3350 2 60 ~ 0
Rvar
Text Label 5400 8650 0 60 ~ 0
PB4
$Comp
L SW_PUSH SW5
U 1 1 54442832
P 4150 8100
F 0 "SW5" H 4300 8210 50 0000 C CNN
F 1 "UP" H 4150 8020 50 0000 C CNN
F 2 "~" H 4150 8100 60 0000 C CNN
F 3 "~" H 4150 8100 60 0000 C CNN
1 4150 8100
1 0 0 -1
$EndComp
$Comp
L SW_PUSH SW6
U 1 1 54442838
P 5050 8100
F 0 "SW6" H 5200 8210 50 0000 C CNN
F 1 "DOWN" H 5050 8020 50 0000 C CNN
F 2 "~" H 5050 8100 60 0000 C CNN
F 3 "~" H 5050 8100 60 0000 C CNN
1 5050 8100
1 0 0 -1
$EndComp
Text Notes 5950 3450 0 60 ~ 0
Tray Down
Text Notes 6000 3350 0 60 ~ 0
Tray Up
Text Label 5350 8400 0 60 ~ 0
PC7
Text Label 3850 8400 2 60 ~ 0
PC6
Wire Wire Line
4450 8100 4750 8100
Connection ~ 4600 8100
Text Notes 6450 4500 0 60 ~ 0
All MCU inputs connected to switches\nshould be in "pull-up input" mode.
Text Notes 5950 3550 0 60 ~ 0
LED onbrd
Wire Notes Line
5950 2450 6000 2450
Wire Notes Line
6000 2450 6000 2300
Text Notes 6050 2400 0 60 ~ 0
UART
Wire Notes Line
5950 2750 6000 2750
Wire Notes Line
6000 2750 6000 2600
$EndSCHEMATC

View File

@@ -40,7 +40,7 @@ $Descr A4 11693 8268
encoding utf-8
Sheet 2 2
Title ""
Date "19 aug 2014"
Date "20 oct 2014"
Rev ""
Comp ""
Comment1 ""
@@ -62,10 +62,10 @@ $EndComp
Text Notes 5525 3150 0 60 ~ 0
Motor
$Comp
L GND #PWR030
L GND #PWR28
U 1 1 53E67E30
P 4800 5700
F 0 "#PWR030" H 4800 5700 30 0001 C CNN
F 0 "#PWR28" H 4800 5700 30 0001 C CNN
F 1 "GND" H 4800 5630 30 0001 C CNN
F 2 "" H 4800 5700 60 0000 C CNN
F 3 "" H 4800 5700 60 0000 C CNN
@@ -95,10 +95,10 @@ F 3 "" H 4900 5350 60 0000 C CNN
1 0 0 -1
$EndComp
$Comp
L +12V #PWR031
L +12V #PWR29
U 1 1 53E67FAE
P 5375 3200
F 0 "#PWR031" H 5375 3150 20 0001 C CNN
F 0 "#PWR29" H 5375 3150 20 0001 C CNN
F 1 "+12V" H 5375 3300 30 0000 C CNN
F 2 "" H 5375 3200 60 0000 C CNN
F 3 "" H 5375 3200 60 0000 C CNN
@@ -212,10 +212,10 @@ Wire Wire Line
6050 3700 6050 3950
Connection ~ 5375 3700
$Comp
L GND #PWR032
L GND #PWR27
U 1 1 53F35910
P 4000 5700
F 0 "#PWR032" H 4000 5700 30 0001 C CNN
F 0 "#PWR27" H 4000 5700 30 0001 C CNN
F 1 "GND" H 4000 5630 30 0001 C CNN
F 2 "" H 4000 5700 60 0000 C CNN
F 3 "" H 4000 5700 60 0000 C CNN

View File

@@ -26,7 +26,7 @@
#include "ports_definition.h"
#include "main.h"
extern volatile long Nsteps;
extern volatile long Nsteps;
extern U16 Stepper_speed;
extern volatile char Dir;

View File

@@ -2,117 +2,126 @@
:2080C000A604F7909E0F01AE530DF74FAE530E909FF7AE5301A601F7AE5300F6AA84AE5372
:2080E00000F75B02811E03A300002E0B3501000D1E03501F032004725F000D16035F905D71
:208100002A015A90CF000BCF0009AE5300F6AA01AE5300F781AE5300F6A4FEAE5300F7727A
:208120005F000C725F000B725F000A725F0009AE5005F6A4F0AE5005F7AE820C89CD842185
:208120005F000C725F000B725F000A725F0009AE5005F6A4F0AE5005F7AE820C89CD841195
:208140005B0281CE000B2607CE0009272D2000AE5300F6959EA5012711A4FEAE5300F7AEA0
:20816000821289CD84215B0220109EAA01AE5300F7AE821989CD84215B0281AE5300F6A4E5
:20816000821289CD84115B0220109EAA01AE5300F7AE821989CD84115B0281AE5300F6A405
:20818000FEAE5300F7CE000B2610CE0009260B1E0389CD80E55B02CC820B16035F905D2AB1
:2081A000015A909F909772B9000B9FC9000A979EC900099590CF000BCF0009CE000BA3000C
:2081C00000C6000AA200C60009A2002E2AAE822189CD84215B02C6000DA0014F49C7000DDB
:2081C00000C6000AA200C60009A2002E2AAE822189CD84115B02C6000DA0014F49C7000DEB
:2081E00090CE000B90504FC2000A974FC200099590CF000BCF0009CE000B2605CE00092791
:208200000AAE5300F6AA01AE5300F78173746F700A0070617573650A00726573756D650AA6
:0A82200000726576657263650A005E
:078DCA0000000000000000A2
:20822A008080808080AE500BF6A5102616725D0018262EAE526DF6AA80AE526DF735010062
:20824A0018201E725D00182718AE526DF6A47FAE526DF7AE500AF6A4FDAE500AF7725F003F
:20826A0018AE500BF6A40CA10C270AAE5005F6A4CFAE5005F78080808080805202AE530292
:20828A00F66B027B02442503CC83217B02A4FEAE5302F7AE5005F6A4F06B01AE001C9FCBD2
:2082AA000011979EA90095F61A01AE5005F7725D000D272C725C0011C60011A1072D4B72AE
:2082CA005F001190CE000B72A20001C6000AA20097C60009A2009590CF000BCF0009202A0B
:2082EA00725A0011C60011A1002E1F3507001190CE000B72A20001C6000AA20097C600092F
:20830A00A2009590CF000BCF0009CE000B2608CE00092603CD81155B0280808080808052C1
:20832A0004AE5240F66B047B04A5202750AE5241F66B017B04A4804D27FDAE52417B01F764
:20834A00AE00011F02C6001B97C6001B4CC7001B4F9572FB027B01F7C6001AC1001B261202
:20836A00C6001A4CC7001AC6001AA1082604725F001AC6001BA1082604725F001B5B0480C9
:20838A005202AE5405F65F971F01AE5404F65F9758585858585858589F1A02979E1A01951A
:2083AA00CF0024725D0018272B725D00192725A30032230EAE5266F64D27194AAE5266F7BD
:2083CA002012A3001E240DAE5266F6A16424054CAE5266F7AE5400F6A43FAE5400F75B020B
:2083EA0080AE5342F644241B90CE001472A90001C60013A90097C60012A9009590CF001407
:09840A00CF0012AE53427F8080C6
:028DD1000000A0
:078F0000000000000000006A
:20822A008080808080AE500E7F356400168080808080805202AE5302F66B027B02442503D7
:20824A00CC82D97B02A4FEAE5302F7AE5005F6A4F06B01AE001D9FCB0011979EA90095F62C
:20826A001A01AE5005F7725D000D272C725C0011C60011A1072D4B725F001190CE000B721D
:20828A00A20001C6000AA20097C60009A2009590CF000BCF0009202A725A0011C60011A141
:2082AA00002E1F3507001190CE000B72A20001C6000AA20097C60009A2009590CF000BCF54
:2082CA000009CE000B2608CE00092603CD81155B028080808080805204AE5240F66B047B4E
:2082EA0004A5202750AE5241F66B017B04A4804D27FDAE52417B01F7AE00011F02C6001C17
:20830A0097C6001C4CC7001C4F9572FB027B01F7C6001BC1001C2612C6001B4CC7001BC61A
:20832A00001BA1082604725F001BC6001CA1082604725F001C5B04805202AE5405F65F9791
:20834A001F01AE5404F65F9758585858585858589F1A02979E1A0195CF0025725D0019279E
:20836A0053725D001A274DA30032230EAE5266F64D27414AAE5266F7203AA300032423AE90
:20838A00526DF6A47FAE526DF7AE500AF6A4FDAE500AF7725F0019AE83F389CD84115B02A3
:2083AA002012A3001E240DAE5266F6A16424054CAE5266F7AE5400F6A43FAE5400F75B022B
:2083CA0080AE5342F644241B90CE001472A90001C60013A90097C60012A9009590CF001427
:1983EA00CF0012AE53427F80804E6F206472696C6C206D6F746F723F0053
:028F0700000068
:2080000082008083820000008200822A8200822B8200822C8200822D8200822E8200822F36
:20802000820082808200828182000000820000008200828282008283820082848200828515
:20804000820083248200832582008326820000008200000082008327820083288200832917
:208060008200838A820083EB820084128200000082000000820000008200000082000000DF
:1D808300AE00082707724F00005A26F9AE001D2709D68DC9D700085A26F7CC808079
:03808000CC865A51
:20841300AE5240F64824F9AE52417B03F781160390F64D271BAE5240F64824F9AE5245F673
:20843300AA08AE5245F790F6905CAE5241F720E0815202C6001BC1001A26034F2027160526
:20845300AE00011F01C6001A97C6001A4CC7001A4F9572FB01F690F7C6001AA108260472C2
:208473005F001AA6015B0281521C5F1F101F0E7B21A1042303CC85517B21A1032603CC85FF
:20849300510D212603CC8551965C1F124F5F9772FB127F4CA10C25F51E121C000AA60AF709
:2084B3007B21A101270E7B21A102271C7B21A104272120301E1FF66B1C5F0F191F0F7B1CD5
:2084D3006B117B196B0E201C161F90FE5F17101F0E20111E1FE6036B17E602FE6B101F0EE7
:2084F3007B176B11A6096B0D4B0A5F894B001E14891E1489CD8B495B089F887B0E6B19847A
:208513000A0D5F417B184172FB12AB30F74B0A5F894B001E14891E1489CD8BC65B081F10BE
:20853300170E1E1026041E0E27067B0DA1FF2CB87B0D4C5F9772FB1289CD84215B025B1C2E
:2085530081521ACE00141F0DCE00121F0B5F1F061F040F080F020F01961C000389CD844451
:208573005B024D2603CC85F87B03A12D260E1E06260A1E042606A6016B0820697B03A130B8
:208593002403CC861A7B03A1392303CC861AA6016B021E06891E06894B0A5F894B00CD8CFC
:2085B300655B081F1917177B030F115F90977B11909572F9199F1918979E19179572A20043
:2085D300309FA2006B149EA20017066B047B146B05AE7FFF13064F12054F120424075F1F14
:2085F300061F040F0190CE001472F20DC60013120C95C60012120B9790A327109EA2009FEB
:20861300A2002403CC856B0D0126040D0226034F201A7B06887B086B0B846B090D0827058E
:208633001E09501F091E1D1609FFA6015B1A81AE8A2F89CD84215B021E0389CD84215B025A
:208653004B0ACD84138481520D5F1F031F01AE7F60F6AA01AE7F60F7AE50C67FAE5345A668
:2086730007F7AE5346A67DF7AE5341A601F7AE5340A685F7AE52607FAE5261A603F7AE5265
:20869300627FAE5263A664F7AE52657FAE5266A60AF7AE5258A660F7AE525CA601F7AE5242
:2086B300547FAE5250A685F7AE5400A62CF7AE5406A610F7AE5402A608F7AE5401A673F726
:2086D300AE5401A673F7AE50A0A630F7AE500DA61CF7AE500EA61CF7AE500CF6AA02AE50D6
:2086F3000CF7AE526DF6A47FAE526DF7AE500AF6A4FDAE500AF7725F0018AE500CF6AA0445
:20871300AE500CF7AE500DF6AA04AE500DF7AE5011F6AA20AE5011F7AE5012F6AA20AE50F1
:2087330012F7AE5242A611F7AE5243A606F7AE5245A62CF79A4BE84B03CD80B55B02CD8072
:20875300A0CE001472F0031F0CC6001312026B0BC600121201CE0016905F88130D909F12EA
:208773000C909E12015B012511CE00141303C600131202C600121201241FCE00141F03CE22
:2087930000121F01AE500AF6A804AE500AF7AE00244B0289CD847B5B03961C000689CD8487
:2087B300445B024D279B7B066B097B09A12B2603CC887D7B09A12D2603CC889C7B09A130F7
:2087D3002603CC89747B09A1312603CC898F7B09A13C2603CC89B37B09A13E2603CC89A01E
:2087F3007B09A1482603CC88717B09A14D2603CC89027B09A1532603CC88BB7B09A16126BD
:2088130003CC894C7B09A1632603CC8A097B09A1642603CC89E77B09A1672603CC8A177B06
:2088330009A16827397B09A16D2603CC88F47B09A1702603CC89467B09A1732603CC88E65C
:208853007B09A1752603CC89C57B09A1782603CC89407B09A17A2603CC8A10CC8754AE8AC0
:208873003889CD84215B02CC8754CE00161C0064CF0016CE0016A327102203CC875435F4B2
:20889300001735010016CC8754CE00161D0064CF0016CE0016A300642503CC87543564001E
:2088B30017725F0016CC8754961C000789CD85545B024D27121E07A3007D2D0B1E0789CD3D
:2088D30080B55B02CC8754AE8B2289CD86425B02CC8754AE000E4B0289CD847B5B03CC87C0
:2088F30054AE00094B0489CD847B5B03CC8754CE000B2605CE0009270CAE8B2C89CD864220
:208913005B02CC8754961C000789CD85545B024D270F1E07270B1E0789CD80E55B02CC8791
:2089330054AE8B3489CD86425B02CC8754CD8115CC8754CD8143CC8754961C000789CD856B
:20895300545B024D270F1E07270B1E0789CD817B5B02CC8754AE8B3F89CD86425B02CC87B8
:2089730054AE526DF6A47FAE526DF7AE500AF6A4FDAE500AF7725F0018CC8754AE526DF615
:20899300AA80AE526DF735010018CC8754AE5266F6A1642503CC87544CAE5266F7CC8754C1
:2089B300AE5266F64D2603CC87544AAE5266F7CC8754AE500BF6A5082703CC8754AE50055D
:2089D300F6A4CFAE5005F7AE5005F6AA10AE5005F7CC8754AE500BF6A5042703CC8754AEA6
:2089F3005005F6A4CFAE5005F7AE5005F6AA20AE5005F7CC8754725F0019CC875435010081
:208A130019CC8754AE5266F66B05961C00054B0189CD847B5B03CC87545B0D810A4552527E
:208A33004F523A20000A50524F544F3A0A2B2F2D094C454420706572696F640A532F730936
:208A53007365742F676574204D73706565640A6D096765742073746570730A780973746FDA
:208A7300700A700970617573652F726573756D650A4D096D6F7665206D6F746F720A610936
:208A9300616464204E737470730A30097475726E206472696C6C204F46460A310974757285
:208AB3006E206472696C6C204F4E0A3E09726F74617465206661737465720A3C09726F7418
:208AD30061746520736C6F7765720A7509747261792075700A64097472617920646F776E31
:208AF3000A63096175746F207370656564206F66660A7A096175746F207370656564206FA2
:208B13006E0A67096765742073706565640A00626164207370656564006D6F76696E6721D6
:168B330000626164204E7374657073006261642076616C75650004
:148DD3000000000001F400000000080A02060405010900006A
:208B490052040F020F017B0B484F494D262E160D1E0B905859170D1F0B1E09130D7B0812D7
:208B69000C7B07120B240D160D1E0B549056170D1F0B20080C017B016B0220CA7B026B0448
:208B89001E09130D7B08120C7B07120B2513160972F20D7B08120C977B07120B9517091FD2
:208BA90007160D1E0B549056170D1F0B7B046B030A040D0326CA1E0916075B048152125FEF
:208BC9001F051F03A6206B027B15484F496B0116171E1590585917171F157B036B0F1E041A
:208BE900887B076B1384081259090F1F047B126B067B0F6B030D01271A7B06AA016B0A7B51
:208C0900056B097B046B087B036B0716091705160717031E05131B7B04121A7B03121925B4
:208C29002B160572F21B7B04121A6B0C7B03121917056B037B0C6B047B18AA0190977B1724
:208C490090957B16977B159517171F150A020D022703CC8BD11E1716155B128152409096C4
:208C6900905C961C00431F0B1E0BE603961C00471F151E151F171E171F3F1E3F88E6019742
:208C8900844290FF72A900021E0BE6031E151F111E111F131E131F191E1988E60397844215
:208CA90090FF965C1F1B1E1BF66B1D1E0BF697161590E603429F1B1D1E1BF71E1BF66B1EDE
:208CC9001E0BE60197161590E602429F1B1E1E1BF79096905C93FE1F1F1E0BE6011E151FB4
:208CE900211E211F231E231F251E2588E60397844272FB1F90FF93FE1F271E0BE6021E15FD
:208D09001F291E291F2B1E2B1F2F1E2F88E60297844272FB2790FF160B1E0BE6021E151F19
:208D2900311E311F331E331F351E3588E6019784429F90F71E0B5C1F371E0BE60290971E3D
:208D490015E60390421E37FF16151E0BE6031E151F3D1E3D1F051E0588F69784429F90F777
:208D69001E155C1F2D1E0BE60390971E15E60290421E2DFF1E151C00037F1E0B1C00037F07
:208D8900965CE6036B0AE6026B09E6016B08F61643170D164572F909173B887B09190F6B91
:208DA9003B84190D6B39163BEF021639FFFE16491E4772F93B9F193A979E193995515B402F
:018DC9008128
:20802000820082388200823982000000820000008200823A8200823B8200823C8200823DC5
:20804000820082DC820082DD820082DE8200000082000000820082DF820082E0820082E1CD
:2080600082008342820083CB820083F2820000008200000082000000820000008200000068
:1D808300AE00082707724F00005A26F9AE001F2709D68EFFD700085A26F7CC808040
:03808000CC871F8B
:20840300AE5240F64824F9AE52417B03F781160390F64D271BAE5240F64824F9AE5245F683
:20842300AA08AE5245F790F6905CAE5241F720E0815202C6001CC1001B26034F2027160534
:20844300AE00011F01C6001B97C6001B4CC7001B4F9572FB01F690F7C6001BA108260472CE
:208463005F001BA6015B0281521C5F1F031F017B21A1042303CC85437B21A1032603CC8536
:20848300430D212603CC8543961C00051F124F5F9772FB127F4CA10C25F51E121C000AA671
:2084A3000AF77B21A101270E7B21A102271C7B21A104272120301E1FF66B1C5F0F191F0288
:2084C3007B1C6B047B196B01201C161F90FE5F17031F0120111E1FE6036B18E602FE6B03CD
:2084E3001F017B186B04A6096B114B0A5F894B001E07891E0789CD8C7F5B089F887B126BEE
:2085030015840A115F417B144172FB12AB30F74B0A5F894B001E07891E0789CD8CFC5B0847
:208523001F0317011E0326041E0127067B11A1FF2CB87B114C5F9772FB1289CD84115B02C2
:208543005B1C81521ACE00141F0BCE00121F095F1F071F050F020F0E0F0D965C89CD8434AD
:208563005B024D2603CC85E87B01A12D260E1E07260A1E052606A6016B0220697B01A130E0
:208583002403CC860A7B01A1392303CC860AA6016B0E1E07891E07894B0A5F894B00CD8D1F
:2085A3009B5B081F1517137B010F115F90977B11909572F9159F1914979E19139572A20033
:2085C300309FA2006B189EA20017076B057B186B06AE7FFF13074F12064F120524075F1F16
:2085E300071F050F0D90CE001472F20BC60013120A95C6001212099790A327109EA2009FF3
:20860300A2002403CC855D0D0D26040D0E26034F201A7B07887B096B05846B030D022705A4
:208623001E03501F031E1D1603FFA6015B1A81AE8B2489CD84115B021E0389CD84115B02A6
:208643004B0ACD840384815202AE500BF6A4F86B017B01C100272603CC87167B01C80027AD
:208663006B027B02A52027407B01A5202628725D0019260EAE526DF6AA80AE526DF735010F
:2086830000194B784BECCD817B5B02AE8B2D89CD84115B0220124B784BECCD817B5B02AEF0
:2086A3008B3889CD84115B027B02A518271B7B01A418A1182713AE8B4189CD84115B02AE95
:2086C300500FF6A4F3AE500FF77B02A4C0A1C026137B01A4C0A1C0270BAE8B4C89CD841149
:2086E3005B02202A7B02A54027117B01A540260BAE8B5A89CD84115B0220137B0248240E9F
:208703007B01482509AE8B6489CD84115B027B01C70027AE500EA6F8F75B028152115F1FB5
:20872300091F075F1F051F03AE7F60F6AA01AE7F60F7AE50C67FAE5345A607F7AE5346A696
:208743007DF7AE5341A601F7AE5340A685F7AE52607FAE5261A603F7AE52627FAE5263A695
:2087630064F7AE52657FAE5266A60AF7AE5258A660F7AE525CA601F7AE52547FAE5250A692
:2087830085F7AE5400A62CF7AE5406A610F7AE5402A608F7AE5401A673F7AE5401A673F70B
:2087A300AE50A0A630F7AE500DF6AAF8AE500DF7AE500EA6F8F7AE500CF6AA02AE500CF758
:2087C300AE526DF6A47FAE526DF7AE500AF6A4FDAE500AF7725F0019AE500CF6AA04AE5078
:2087E3000CF7AE500DF6AA04AE500DF7AE5011F6AA20AE5011F7AE5012F6AA20AE5012F716
:20880300AE5242A611F7AE5243A606F7AE5245A62CF79A4BE84B03CD80B55B02CD80A01EEC
:2088230005C3001426071E03C300122727CE00141F05CE00121F03C60016A1002D09C60067
:20884300164AC70016200D725D0016260735FF0016CD864ACE001472F0091F0FC60013124C
:20886300086B0EC600121207CE0017905F881310909F120F909E12015B012511CE001413EC
:2088830009C600131208C6001212072414CE00141F09CE00121F07AE500AF6A804AE500AEE
:2088A300F7961C000C89CD84345B024D2603CC88227B0C6B117B11A12B2603CC89787B11CC
:2088C300A12D2603CC89977B11A1302603CC8A697B11A1312603CC8A847B11A13C2603CCAE
:2088E3008AA87B11A13E2603CC8A957B11A1482603CC896C7B11A14D2603CC89FB7B11A145
:20890300532603CC89B67B11A1612603CC8A437B11A1632603CC8AFE7B11A1642603CC8A60
:20892300DC7B11A1672603CC8B0C7B11A16827397B11A16D2603CC89ED7B11A1702603CCAC
:208943008A3D7B11A1732603CC89DF7B11A1752603CC8ABA7B11A1782603CC8A377B11A1ED
:208963007A2603CC8B05CC8822AE8B6E89CD84115B02CC8822CE00171C0064CF0017CE0001
:2089830017A327102203CC882235F4001835010017CC8822CE00171D0064CF0017CE001713
:2089A300A300642503CC882235640018725F0017CC8822965C89CD85465B024D27121E01EB
:2089C300A3007D2D0B1E0189CD80B55B02CC8822AE8C5889CD86325B02CC8822AE000E4B45
:2089E3000289CD846B5B03CC8822AE00094B0489CD846B5B03CC8822CE000B2605CE00095F
:208A0300270CAE8C6289CD86325B02CC8822965C89CD85465B024D270F1E01270B1E0189B7
:208A2300CD80E55B02CC8822AE8C6A89CD86325B02CC8822CD8115CC8822CD8143CC8822C9
:208A4300965C89CD85465B024D270F1E01270B1E0189CD817B5B02CC8822AE8C7589CD8600
:208A6300325B02CC8822AE526DF6A47FAE526DF7AE500AF6A4FDAE500AF7725F0019CC8828
:208A830022AE526DF6AA80AE526DF735010019CC8822AE5266F6A1642503CC88224CAE52B0
:208AA30066F7CC8822AE5266F64D2603CC88224AAE5266F7CC8822AE500BF6A5102703CCD1
:208AC3008822AE500FF6A4F3AE500FF7AE500AF6AA04AE500AF7CC8822AE500BF6A5082757
:208AE30003CC8822AE500FF6A4F3AE500FF7AE500AF6AA08AE500AF7CC8822725F001ACC80
:208B030088223501001ACC8822AE5266F66B0B961C000B4B0189CD846B5B03CC88225B1182
:208B2300810A4552524F523A20006D6F766520646F776E0A006D6F76652075700A0074727E
:208B430061792073746F700A00626F746820627574746F6E730A00627574746F6E20310A6B
:208B630000627574746F6E20320A000A50524F544F3A0A2B2F2D094C454420706572696F74
:208B8300640A532F73097365742F676574204D73706565640A6D096765742073746570731E
:208BA3000A780973746F700A700970617573652F726573756D650A4D096D6F7665206D6FED
:208BC300746F720A6109616464204E737470730A30097475726E206472696C6C204F46462A
:208BE3000A31097475726E206472696C6C204F4E0A3E09726F7461746520666173746572EC
:208C03000A3C09726F7461746520736C6F7765720A7509747261792075700A6409747261AC
:208C23007920646F776E0A63096175746F207370656564206F66660A7A096175746F20734C
:208C430070656564206F6E0A67096765742073706565640A00626164207370656564006DBC
:1C8C63006F76696E672100626164204E7374657073006261642076616C75650089
:168F090000000000FF01F400000000080A0206040501090000F839
:208C7F0052040F020F017B0B484F494D262E160D1E0B905859170D1F0B1E09130D7B0812A0
:208C9F000C7B07120B240D160D1E0B549056170D1F0B20080C017B016B0220CA7B026B0411
:208CBF001E09130D7B08120C7B07120B2513160972F20D7B08120C977B07120B9517091F9B
:208CDF0007160D1E0B549056170D1F0B7B046B030A040D0326CA1E0916075B048152125FB8
:208CFF001F051F03A6206B027B15484F496B0116171E1590585917171F157B036B0F1E04E3
:208D1F00887B076B1384081259090F1F047B126B067B0F6B030D01271A7B06AA016B0A7B19
:208D3F00056B097B046B087B036B0716091705160717031E05131B7B04121A7B031219257D
:208D5F002B160572F21B7B04121A6B0C7B03121917056B037B0C6B047B18AA0190977B17ED
:208D7F0090957B16977B159517171F150A020D022703CC8D071E1716155B12815240909655
:208D9F00905C961C00431F0B1E0BE603961C00471F151E151F171E171F3F1E3F88E601970B
:208DBF00844290FF72A900021E0BE6031E151F111E111F131E131F191E1988E603978442DE
:208DDF0090FF965C1F1B1E1BF66B1D1E0BF697161590E603429F1B1D1E1BF71E1BF66B1EA7
:208DFF001E0BE60197161590E602429F1B1E1E1BF79096905C93FE1F1F1E0BE6011E151F7D
:208E1F00211E211F231E231F251E2588E60397844272FB1F90FF93FE1F271E0BE6021E15C5
:208E3F001F291E291F2B1E2B1F2F1E2F88E60297844272FB2790FF160B1E0BE6021E151FE2
:208E5F00311E311F331E331F351E3588E6019784429F90F71E0B5C1F371E0BE60290971E06
:208E7F0015E60390421E37FF16151E0BE6031E151F3D1E3D1F051E0588F69784429F90F740
:208E9F001E155C1F2D1E0BE60390971E15E60290421E2DFF1E151C00037F1E0B1C00037FD0
:208EBF00965CE6036B0AE6026B09E6016B08F61643170D164572F909173B887B09190F6B5A
:208EDF003B84190D6B39163BEF021639FFFE16491E4772F93B9F193A979E193995515B40F8
:018EFF0081F1
:00000001FF