Testet automatic drill speed management

This commit is contained in:
Eddy 2014-08-19 18:10:00 +04:00
parent 359cae8bbd
commit 64d8bfdb78
18 changed files with 2195 additions and 656 deletions

View File

@ -168,6 +168,8 @@ int main() {
TIM4_CR1 = TIM_CR1_APRE | TIM_CR1_URS | TIM_CR1_CEN;
// EXTI: PC1 & PC2 == "boom"
EXTI_CR1 = 0x10; // PCIS = 01 - rising edge only
// PC_CR1 = 0x06; // PC1 & PC2 pullup
// PC_CR1 = 0x06; // enable EXTI
#ifdef UART
// Configure pins
// PC2 - PP output (on-board LED)

22
client-term-8bit/Makefile Normal file
View File

@ -0,0 +1,22 @@
PROGRAM = client
LDFLAGS =
SRCS = client.c
CC = gcc
DEFINES = -D_XOPEN_SOURCE=501
CXX = gcc
CFLAGS = -Wall -Werror $(DEFINES)
OBJS = $(SRCS:.c=.o)
all : $(PROGRAM) clean
$(PROGRAM) : $(OBJS)
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $(PROGRAM)
# some addition dependencies
# %.o: %.c
# $(CC) $(LDFLAGS) $(CFLAGS) $< -o $@
#$(SRCS) : %.c : %.h $(INDEPENDENT_HEADERS)
# @touch $@
clean:
/bin/rm -f *.o *~
depend:
$(CXX) -MM $(CXX.SRCS)

223
client-term-8bit/client.c Normal file
View File

@ -0,0 +1,223 @@
/*
* client.c - simple terminal client
*
* Copyright 2013 Edward V. Emelianoff <eddy@sao.ru>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#include <termios.h> // tcsetattr
#include <unistd.h> // tcsetattr, close, read, write
#include <sys/ioctl.h> // ioctl
#include <stdio.h> // printf, getchar, fopen, perror
#include <stdlib.h> // exit
#include <sys/stat.h> // read
#include <fcntl.h> // read
#include <signal.h> // signal
#include <time.h> // time
#include <string.h> // memcpy
#include <stdint.h> // int types
#include <sys/time.h> // gettimeofday
double t0; // start time
FILE *fout = NULL; // file for messages duplicating
char *comdev = "/dev/ttyUSB0";
int BAUD_RATE = B57600;
struct termio oldtty, tty; // TTY flags
struct termios oldt, newt; // terminal flags
int comfd; // TTY fd
/**
* function for different purposes that need to know time intervals
* @return double value: time in seconds
*/
double dtime(){
double t;
struct timeval tv;
gettimeofday(&tv, NULL);
t = tv.tv_sec + ((double)tv.tv_usec)/1e6;
return t;
}
/**
* Exit & return terminal to old state
* @param ex_stat - status (return code)
*/
void quit(int ex_stat){
tcsetattr(STDIN_FILENO, TCSANOW, &oldt); // return terminal to previous state
ioctl(comfd, TCSANOW, &oldtty ); // return TTY to previous state
close(comfd);
if(fout) fclose(fout);
printf("Exit! (%d)\n", ex_stat);
exit(ex_stat);
}
/**
* Open & setup TTY, terminal
*/
void tty_init(){
// terminal without echo
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
if(tcsetattr(STDIN_FILENO, TCSANOW, &newt) < 0) quit(-2);
printf("\nOpen port...\n");
if ((comfd = open(comdev,O_RDWR|O_NOCTTY|O_NONBLOCK)) < 0){
fprintf(stderr,"Can't use port %s\n",comdev);
quit(1);
}
printf(" OK\nGet current settings...\n");
if(ioctl(comfd,TCGETA,&oldtty) < 0) exit(-1); // Get settings
tty = oldtty;
tty.c_lflag = 0; // ~(ICANON | ECHO | ECHOE | ISIG)
tty.c_oflag = 0;
tty.c_cflag = BAUD_RATE|CS8|CREAD|CLOCAL; // 9.6k, 8N1, RW, ignore line ctrl
tty.c_cc[VMIN] = 0; // non-canonical mode
tty.c_cc[VTIME] = 5;
if(ioctl(comfd,TCSETA,&tty) < 0) exit(-1); // set new mode
printf(" OK\n");
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
}
/**
* Read character from console without echo
* @return char readed
*/
int read_console(){
int rb;
struct timeval tv;
int retval;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(STDIN_FILENO, &rfds);
tv.tv_sec = 0; tv.tv_usec = 10000;
retval = select(1, &rfds, NULL, NULL, &tv);
if(!retval) rb = 0;
else {
if(FD_ISSET(STDIN_FILENO, &rfds)) rb = getchar();
else rb = 0;
}
return rb;
}
/**
* getchar() without echo
* wait until at least one character pressed
* @return character readed
*/
int mygetchar(){ // ÁÎÁÌÏÇ getchar() ÂÅÚ ÎÅÏÂÈÏÄÉÍÏÓÔÉ ÖÁÔØ Enter
int ret;
do ret = read_console();
while(ret == 0);
return ret;
}
/**
* Read data from TTY
* @param buff (o) - buffer for data read
* @param length - buffer len
* @return amount of readed bytes
*/
size_t read_tty(uint8_t *buff, size_t length){
ssize_t L = 0;
fd_set rfds;
struct timeval tv;
int retval;
FD_ZERO(&rfds);
FD_SET(comfd, &rfds);
tv.tv_sec = 0; tv.tv_usec = 10000; // wait for 10ms
retval = select(comfd + 1, &rfds, NULL, NULL, &tv);
if (!retval) return 0;
if(FD_ISSET(comfd, &rfds)){
if((L = read(comfd, buff, length)) < 1) return 0;
}
return (size_t)L;
}
void help(){
printf("Use this commands:\n"
"h\tShow this help\n"
"q\tQuit\n"
);
}
#define dup_pr(...) do{printf(__VA_ARGS__); if(fout) fprintf(fout, __VA_ARGS__);}while(0)
void con_sig(int rb){
uint8_t cmd;
if(rb < 1) return;
if(rb == 'q') quit(0); // q == exit
cmd = (uint8_t) rb;
write(comfd, &cmd, 1);
/*switch(rb){
case 'h':
help();
break;
default:
cmd = (uint8_t) rb;
write(comfd, &cmd, 1);
}*/
}
/**
* Get integer value from buffer
* @param buff (i) - buffer with int
* @param len - length of data in buffer (could be 2 or 4)
* @return
*/
uint32_t get_int(uint8_t *buff, size_t len){
if(len != 2 && len != 4){
fprintf(stdout, "Bad data length!\n");
return 0xffffffff;
}
uint32_t data = 0;
uint8_t *i8 = (uint8_t*) &data;
if(len == 2) memcpy(i8, buff, 2);
else memcpy(i8, buff, 4);
return data;
}
int main(int argc, char *argv[]){
int rb;
uint8_t buff[256];
size_t L;
if(argc == 2){
fout = fopen(argv[1], "a");
if(!fout){
perror("Can't open output file");
exit(-1);
}
setbuf(fout, NULL);
}
tty_init();
signal(SIGTERM, quit); // kill (-15)
signal(SIGINT, quit); // ctrl+C
signal(SIGQUIT, SIG_IGN); // ctrl+\ .
signal(SIGTSTP, SIG_IGN); // ctrl+Z
setbuf(stdout, NULL);
t0 = dtime();
while(1){
rb = read_console();
if(rb > 0) con_sig(rb);
L = read_tty(buff, 255);
if(L){
buff[L] = 0;
printf("%s", buff);
//if(fout) fprintf(fout, "%zd\t%s", time(NULL), buff);
if(fout) fprintf(fout, "%s", buff);
}
}
}

View File

@ -0,0 +1,22 @@
PROGRAM = client
LDFLAGS =
SRCS = client.c
CC = gcc
DEFINES = -D_XOPEN_SOURCE=501
CXX = gcc
CFLAGS = -Wall -Werror $(DEFINES)
OBJS = $(SRCS:.c=.o)
all : $(PROGRAM) clean
$(PROGRAM) : $(OBJS)
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $(PROGRAM)
# some addition dependencies
# %.o: %.c
# $(CC) $(LDFLAGS) $(CFLAGS) $< -o $@
#$(SRCS) : %.c : %.h $(INDEPENDENT_HEADERS)
# @touch $@
clean:
/bin/rm -f *.o *~
depend:
$(CXX) -MM $(CXX.SRCS)

BIN
microdrill/client-term/client Executable file

Binary file not shown.

View File

@ -0,0 +1,223 @@
/*
* client.c - simple terminal client
*
* Copyright 2013 Edward V. Emelianoff <eddy@sao.ru>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#include <termios.h> // tcsetattr
#include <unistd.h> // tcsetattr, close, read, write
#include <sys/ioctl.h> // ioctl
#include <stdio.h> // printf, getchar, fopen, perror
#include <stdlib.h> // exit
#include <sys/stat.h> // read
#include <fcntl.h> // read
#include <signal.h> // signal
#include <time.h> // time
#include <string.h> // memcpy
#include <stdint.h> // int types
#include <sys/time.h> // gettimeofday
double t0; // start time
FILE *fout = NULL; // file for messages duplicating
char *comdev = "/dev/ttyUSB0";
int BAUD_RATE = B57600;
struct termio oldtty, tty; // TTY flags
struct termios oldt, newt; // terminal flags
int comfd; // TTY fd
/**
* function for different purposes that need to know time intervals
* @return double value: time in seconds
*/
double dtime(){
double t;
struct timeval tv;
gettimeofday(&tv, NULL);
t = tv.tv_sec + ((double)tv.tv_usec)/1e6;
return t;
}
/**
* Exit & return terminal to old state
* @param ex_stat - status (return code)
*/
void quit(int ex_stat){
tcsetattr(STDIN_FILENO, TCSANOW, &oldt); // return terminal to previous state
ioctl(comfd, TCSANOW, &oldtty ); // return TTY to previous state
close(comfd);
if(fout) fclose(fout);
printf("Exit! (%d)\n", ex_stat);
exit(ex_stat);
}
/**
* Open & setup TTY, terminal
*/
void tty_init(){
// terminal without echo
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
if(tcsetattr(STDIN_FILENO, TCSANOW, &newt) < 0) quit(-2);
printf("\nOpen port...\n");
if ((comfd = open(comdev,O_RDWR|O_NOCTTY|O_NONBLOCK)) < 0){
fprintf(stderr,"Can't use port %s\n",comdev);
quit(1);
}
printf(" OK\nGet current settings...\n");
if(ioctl(comfd,TCGETA,&oldtty) < 0) exit(-1); // Get settings
tty = oldtty;
tty.c_lflag = 0; // ~(ICANON | ECHO | ECHOE | ISIG)
tty.c_oflag = 0;
tty.c_cflag = BAUD_RATE|CS8|CREAD|CLOCAL; // 9.6k, 8N1, RW, ignore line ctrl
tty.c_cc[VMIN] = 0; // non-canonical mode
tty.c_cc[VTIME] = 5;
if(ioctl(comfd,TCSETA,&tty) < 0) exit(-1); // set new mode
printf(" OK\n");
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
}
/**
* Read character from console without echo
* @return char readed
*/
int read_console(){
int rb;
struct timeval tv;
int retval;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(STDIN_FILENO, &rfds);
tv.tv_sec = 0; tv.tv_usec = 10000;
retval = select(1, &rfds, NULL, NULL, &tv);
if(!retval) rb = 0;
else {
if(FD_ISSET(STDIN_FILENO, &rfds)) rb = getchar();
else rb = 0;
}
return rb;
}
/**
* getchar() without echo
* wait until at least one character pressed
* @return character readed
*/
int mygetchar(){ // ÁÎÁÌÏÇ getchar() ÂÅÚ ÎÅÏÂÈÏÄÉÍÏÓÔÉ ÖÁÔØ Enter
int ret;
do ret = read_console();
while(ret == 0);
return ret;
}
/**
* Read data from TTY
* @param buff (o) - buffer for data read
* @param length - buffer len
* @return amount of readed bytes
*/
size_t read_tty(uint8_t *buff, size_t length){
ssize_t L = 0;
fd_set rfds;
struct timeval tv;
int retval;
FD_ZERO(&rfds);
FD_SET(comfd, &rfds);
tv.tv_sec = 0; tv.tv_usec = 10000; // wait for 10ms
retval = select(comfd + 1, &rfds, NULL, NULL, &tv);
if (!retval) return 0;
if(FD_ISSET(comfd, &rfds)){
if((L = read(comfd, buff, length)) < 1) return 0;
}
return (size_t)L;
}
void help(){
printf("Use this commands:\n"
"h\tShow this help\n"
"q\tQuit\n"
);
}
#define dup_pr(...) do{printf(__VA_ARGS__); if(fout) fprintf(fout, __VA_ARGS__);}while(0)
void con_sig(int rb){
uint8_t cmd;
if(rb < 1) return;
if(rb == 'q') quit(0); // q == exit
cmd = (uint8_t) rb;
write(comfd, &cmd, 1);
/*switch(rb){
case 'h':
help();
break;
default:
cmd = (uint8_t) rb;
write(comfd, &cmd, 1);
}*/
}
/**
* Get integer value from buffer
* @param buff (i) - buffer with int
* @param len - length of data in buffer (could be 2 or 4)
* @return
*/
uint32_t get_int(uint8_t *buff, size_t len){
if(len != 2 && len != 4){
fprintf(stdout, "Bad data length!\n");
return 0xffffffff;
}
uint32_t data = 0;
uint8_t *i8 = (uint8_t*) &data;
if(len == 2) memcpy(i8, buff, 2);
else memcpy(i8, buff, 4);
return data;
}
int main(int argc, char *argv[]){
int rb;
uint8_t buff[256];
size_t L;
if(argc == 2){
fout = fopen(argv[1], "a");
if(!fout){
perror("Can't open output file");
exit(-1);
}
setbuf(fout, NULL);
}
tty_init();
signal(SIGTERM, quit); // kill (-15)
signal(SIGINT, quit); // ctrl+C
signal(SIGQUIT, SIG_IGN); // ctrl+\ .
signal(SIGTSTP, SIG_IGN); // ctrl+Z
setbuf(stdout, NULL);
t0 = dtime();
while(1){
rb = read_console();
if(rb > 0) con_sig(rb);
L = read_tty(buff, 255);
if(L){
buff[L] = 0;
printf("%s", buff);
//if(fout) fprintf(fout, "%zd\t%s", time(NULL), buff);
if(fout) fprintf(fout, "%s", buff);
}
}
}

View File

@ -39,7 +39,20 @@ INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3){}
INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4){}
// External Interrupt PORTC
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5){}
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
}
}
// External Interrupt PORTD
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6){
@ -66,10 +79,11 @@ INTERRUPT_HANDLER(SPI_IRQHandler, 10){}
// Timer1 Update/Overflow/Trigger/Break Interrupt
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11){
/*
if(TIM1_SR1 & TIM_SR1_UIF){ // update interrupt
Global_time++; // increase timer
}
TIM1_SR1 = 0; // clear all interrupt flags
*/
}
// Timer1 Capture/Compare Interrupt routine.
@ -170,7 +184,19 @@ INTERRUPT_HANDLER(UART3_RX_IRQHandler, 21){}
INTERRUPT_HANDLER(ADC2_IRQHandler, 22){}
#else
// ADC1 interrupt
//U8 val_ctr = 0;
//U16 ADC_values[10];
INTERRUPT_HANDLER(ADC1_IRQHandler, 22){
U16 v = ADC_DRL; // in right-alignment mode we should first read LSB
v |= ADC_DRH << 8;
//ADC_values[val_ctr++] = v;
ADC_value = v;
//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
}
ADC_CSR &= 0x3f; // clear EOC & AWD flags
}
#endif // STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax
@ -179,7 +205,12 @@ INTERRUPT_HANDLER(ADC1_IRQHandler, 22){
INTERRUPT_HANDLER(TIM6_UPD_OVF_TRG_IRQHandler, 23){}
#else // STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF52Ax or STM8AF62Ax or STM8AF626x
// Timer4 Update/Overflow Interrupt
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23){}
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23){
if(TIM4_SR & TIM_SR1_UIF){ // update interrupt
Global_time++; // increase timer
}
TIM4_SR = 0; // clear all interrupt flags
}
#endif // STM8S903
// Eeprom EEC Interrupt

View File

@ -28,6 +28,9 @@
unsigned long Global_time = 0L; // global time in ms
U16 paused_val = 500; // interval between LED flashing
U8 drill_works = 0; // flag of working motor
U8 auto_speed = 0;
U8 UART_rx[UART_BUF_LEN]; // cycle buffer for received data
U8 UART_rx_start_i = 0; // started index of received data (from which reading starts)
U8 UART_rx_cur_i = 0; // index of current first byte in rx array (to which data will be written)
@ -63,6 +66,8 @@ char usteps[8] =
#error Define MOTOR_TYPE_UNIPOLAR or MOTOR_TYPE_BIPOLAR
#endif
U16 ADC_value = 0; // value of last ADC measurement
/**
* Send one byte through UART
* @param byte - data to send
@ -157,33 +162,65 @@ void error_msg(char *msg){
int main() {
unsigned long T = 0L;
int Ival;
U8 rb;
U8 rb, v;
CFG_GCR |= 1; // disable SWIM
// Configure clocking
CLK_CKDIVR = 0; // F_HSI = 16MHz, f_CPU = 16MHz
// Configure timer 1 - systick
// prescaler = f_{in}/f_{tim1} - 1
// set Timer1 to 1MHz: 1/1 - 1 = 15
TIM1_PSCRH = 0;
TIM1_PSCRL = 15; // LSB should be written last as it updates prescaler
// auto-reload each 1ms: TIM_ARR = 1000 = 0x03E8
TIM1_ARRH = 0x03;
TIM1_ARRL = 0xE8;
// Timer 4 (8 bit) used as system tick timer
// prescaler == 128 (2^7), Tfreq = 125kHz
// period = 1ms, so ARR = 125
TIM4_PSCR = 7;
TIM4_ARR = 125;
// interrupts: update
TIM1_IER = TIM_IER_UIE;
TIM4_IER = TIM_IER_UIE;
// auto-reload + interrupt on overflow + enable
TIM4_CR1 = TIM_CR1_APRE | TIM_CR1_URS | TIM_CR1_CEN;
// Timer1 is PWM generator for drill motor: 1MHz -> 10kHz PWM from 0 to 100
TIM1_PSCRH = 0; // this timer have 16 bit prescaler
TIM1_PSCRL = 3; // LSB should be written last as it updates prescaler
// PWM frequency is 10kHz: 1000/10 = 100
TIM1_ARRH = 0;
TIM1_ARRL = 100;
TIM1_CCR1H = 0; TIM1_CCR1L = 10; // default: 10%
// channel 1 generates PWM pulses
TIM1_CCMR1 = 0x60; // OC1M = 110b - PWM mode 1 ( 1 -> 0)
//TIM1_CCMR1 = 0x70; // OC1M = 111b - PWM mode 2 ( 0 -> 1)
TIM1_CCER1 = 1; // Channel 1 is on. Active is high
//TIM1_CCER1 = 3; // Channel 1 is on. Active is low
// interrupts: none for timer 1
TIM1_IER = 0;
// auto-reload + interrupt on overflow + enable
TIM1_CR1 = TIM_CR1_APRE | TIM_CR1_URS | TIM_CR1_CEN;
// Configure pins
// configure ADC
// select PF4 - Sence (AIN12) & enable interrupt for EOC
ADC_CSR = 0x2c; // EOCIE = 1; CH[3:0] = 0x0c (12)
ADC_TDRH = 0x10;// disable Schmitt triger for AIN12
// right alignment
ADC_CR2 = 0x08; // don't forget: first read ADC_DRL!
// f_{ADC} = f/18 & continuous non-buffered conversion & wake it up
ADC_CR1 = 0x73;
ADC_CR1 = 0x73; // turn on ADC (this needs second write operation)
// 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
// other
PC_DDR |= GPIO_PIN1; // setup timer's output
DRILL_OFF(); // set PC1 to zero - power off motor
// PC2 - PP output (on-board LED)
PORT(LED_PORT, DDR) |= LED_PIN;
PORT(LED_PORT, CR1) |= LED_PIN;
PORT(LED_PORT, DDR) |= LED_PIN;
PORT(LED_PORT, CR1) |= LED_PIN;
// PD5 - UART2_TX
PORT(UART_PORT, DDR) |= UART_TX_PIN;
PORT(UART_PORT, CR1) |= UART_TX_PIN;
// Configure UART
// Configure UART
// 8 bit, no parity, 1 stop (UART_CR1/3 = 0 - reset value)
// 57600 on 16MHz: BRR1=0x11, BRR2=0x06
UART2_BRR1 = 0x11; UART2_BRR2 = 0x06;
@ -198,8 +235,13 @@ int main() {
// Loop
do{
if((Global_time - T > paused_val) || (T > Global_time)){
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
}
if(UART_read_byte(&rb)){ // buffer isn't empty
switch(rb){
@ -207,7 +249,11 @@ int main() {
case 'H':
uart_write("\nPROTO:\n+/-\tLED period\nS/s\tset/get Mspeed\n"
"m\tget steps\nx\tstop\np\tpause/resume\nM\tmove motor\na\tadd Nstps\n"
"u\tunipolar motor\nb\tbipolar motor\n");
"0\tturn drill OFF\n1\tturn drill ON\n"
">\trotate faster\n<\trotate slower\n"
"u\ttray up\nd\ttray down\n"
"c\tauto speed off\nz\tauto speed on\n"
"g\tget speed\n");
break;
case '+':
paused_val += 100;
@ -217,7 +263,7 @@ int main() {
case '-':
paused_val -= 100;
if(paused_val < 100) // but not less than 0.1s
paused_val = 500;
paused_val = 100;
break;
case 'S': // set stepper speed
if(readInt(&Ival) && Ival > MIN_STEP_LENGTH)
@ -255,6 +301,34 @@ int main() {
error_msg("bad value");
}
break;
case '0': // turn off drill
DRILL_OFF();
break;
case '1': // turn on drill
DRILL_ON();
break;
case '>': // faster
DRILL_FASTER();
break;
case '<': // slower
DRILL_SLOWER();
break;
case 'u':
TRAY_UP();
break;
case 'd':
TRAY_DOWN();
break;
case 'c':
auto_speed = 0;
break;
case 'z':
auto_speed = 1;
break;
case 'g':
v = TIM1_CCR1L;
printUint(&v, 1);
break;
}
}
}while(1);

View File

@ -33,6 +33,11 @@ extern U8 UART_rx[];
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 U8 drill_works;
extern U8 auto_speed; // == 1 to automatic speed regulation
void UART_send_byte(U8 byte);
void uart_write(char *str);
void printUint(U8 *val, U8 len);

View File

@ -47,6 +47,18 @@
/***** Stepper motor *****/
// Clocking
#define STP_PORT PB // PB0..3 -- pins A..D of stepper
/* drill motor PC1 - timer 1 PWM output 1 */
#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
/* 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)
#endif // __PORTS_DEFINITION_H__

View File

@ -1,4 +1,4 @@
Cmp-Mod V01 Created by CvPcb (2013-may-18)-stable date = Вс 17 авг 2014 22:58:37
Cmp-Mod V01 Created by CvPcb (2013-may-18)-stable date = Вт 19 авг 2014 18:05:15
BeginCmp
TimeStamp = /52FB0413;
@ -32,7 +32,14 @@ BeginCmp
TimeStamp = /53F0F88C;
Reference = C5;
ValeurCmp = 47u;
IdModule = SM1206;
IdModule = SM1206POL;
EndCmp
BeginCmp
TimeStamp = /53EF036E/53F36070;
Reference = C6;
ValeurCmp = 47u;
IdModule = SM1206POL;
EndCmp
BeginCmp
@ -133,13 +140,6 @@ ValeurCmp = CONN_2;
IdModule = SIL-2;
EndCmp
BeginCmp
TimeStamp = /53EF036E/53E67E1E;
Reference = Q1;
ValeurCmp = MOS_N;
IdModule = ;
EndCmp
BeginCmp
TimeStamp = /52FB0DE2;
Reference = R1;
@ -164,7 +164,7 @@ EndCmp
BeginCmp
TimeStamp = /53EF036E/53E680EF;
Reference = R4;
ValeurCmp = 1k;
ValeurCmp = 47k;
IdModule = SM0603;
EndCmp
@ -183,8 +183,36 @@ IdModule = R4;
EndCmp
BeginCmp
TimeStamp = /52FB0F3B;
TimeStamp = /53EF036E/53F123DF;
Reference = R7;
ValeurCmp = 1R;
IdModule = R4;
EndCmp
BeginCmp
TimeStamp = /53F13089;
Reference = SW1;
ValeurCmp = DRILL;
IdModule = 2PIN_6mm;
EndCmp
BeginCmp
TimeStamp = /53F12B09;
Reference = SW2;
ValeurCmp = UP;
IdModule = 2PIN_6mm;
EndCmp
BeginCmp
TimeStamp = /53F12B1C;
Reference = SW3;
ValeurCmp = DOWN;
IdModule = 2PIN_6mm;
EndCmp
BeginCmp
TimeStamp = /52FB0F3B;
Reference = SW4;
ValeurCmp = SW_PUSH;
IdModule = 2PIN_6mm;
EndCmp
@ -203,4 +231,11 @@ ValeurCmp = LM1117MPX-3.3;
IdModule = SOT223;
EndCmp
BeginCmp
TimeStamp = /53EF036E/53F123C0;
Reference = VT1;
ValeurCmp = S8205A;
IdModule = TSSOP-8;
EndCmp
EndListe

View File

@ -1,7 +1,7 @@
(export (version D)
(design
(source /sdh/Data/documents/00__Electronics/STM8/microdrill/schematics/MCU_module.sch)
(date "Вс 17 авг 2014 22:34:25")
(source /home/eddy/Docs/ELECTRONICS/STM8/STM8_samples/microdrill/schematics/MCU_module.sch)
(date "Вт 19 авг 2014 18:08:16")
(tool "eeschema (2013-may-18)-stable"))
(components
(comp (ref U1)
@ -59,7 +59,7 @@
(libsource (lib device) (part R))
(sheetpath (names /) (tstamps /))
(tstamp 52FB0EFD))
(comp (ref SW1)
(comp (ref SW4)
(value SW_PUSH)
(libsource (lib device) (part SW_PUSH))
(sheetpath (names /) (tstamps /))
@ -122,16 +122,26 @@
(libsource (lib conn) (part CONN_2))
(sheetpath (names /) (tstamps /))
(tstamp 53F1169C))
(comp (ref SW2)
(value UP)
(libsource (lib device) (part SW_PUSH))
(sheetpath (names /) (tstamps /))
(tstamp 53F12B09))
(comp (ref SW3)
(value DOWN)
(libsource (lib device) (part SW_PUSH))
(sheetpath (names /) (tstamps /))
(tstamp 53F12B1C))
(comp (ref SW1)
(value DRILL)
(libsource (lib device) (part SW_PUSH))
(sheetpath (names /) (tstamps /))
(tstamp 53F13089))
(comp (ref P7)
(value CONN_2)
(libsource (lib conn) (part CONN_2))
(sheetpath (names "/Drill motor/") (tstamps /53EF036E/))
(tstamp 53E67E05))
(comp (ref Q1)
(value MOS_N)
(libsource (lib device) (part MOS_N))
(sheetpath (names "/Drill motor/") (tstamps /53EF036E/))
(tstamp 53E67E1E))
(comp (ref R5)
(value 1R)
(libsource (lib device) (part R))
@ -143,7 +153,7 @@
(sheetpath (names "/Drill motor/") (tstamps /53EF036E/))
(tstamp 53E67E9C))
(comp (ref R4)
(value 1k)
(value 47k)
(libsource (lib device) (part R))
(sheetpath (names "/Drill motor/") (tstamps /53EF036E/))
(tstamp 53E680EF))
@ -151,7 +161,23 @@
(value DIODESCH)
(libsource (lib device) (part DIODESCH))
(sheetpath (names "/Drill motor/") (tstamps /53EF036E/))
(tstamp 53E68EA1)))
(tstamp 53E68EA1))
(comp (ref VT1)
(value S8205A)
(footprint TSSOP-8)
(libsource (lib s8205a) (part S8205A))
(sheetpath (names "/Drill motor/") (tstamps /53EF036E/))
(tstamp 53F123C0))
(comp (ref R7)
(value 1R)
(libsource (lib device) (part R))
(sheetpath (names "/Drill motor/") (tstamps /53EF036E/))
(tstamp 53F123DF))
(comp (ref C6)
(value 47u)
(libsource (lib device) (part CP1))
(sheetpath (names "/Drill motor/") (tstamps /53EF036E/))
(tstamp 53F36070)))
(libparts
(libpart (lib device) (part C)
(description "Condensateur non polarise")
@ -161,9 +187,7 @@
(fp C1-1))
(fields
(field (name Reference) C)
(field (name Value) C)
(field (name Footprint) ~)
(field (name Datasheet) ~))
(field (name Value) C))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
@ -174,9 +198,7 @@
(fp SM*))
(fields
(field (name Reference) C)
(field (name Value) CP1)
(field (name Footprint) ~)
(field (name Datasheet) ~))
(field (name Value) CP1))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
@ -187,9 +209,7 @@
(fp S*))
(fields
(field (name Reference) D)
(field (name Value) DIODESCH)
(field (name Footprint) ~)
(field (name Datasheet) ~))
(field (name Value) DIODESCH))
(pins
(pin (num 1) (name A) (type passive))
(pin (num 2) (name K) (type passive))))
@ -204,23 +224,10 @@
(fp LEDV))
(fields
(field (name Reference) D)
(field (name Value) LED)
(field (name Footprint) ~)
(field (name Datasheet) ~))
(field (name Value) LED))
(pins
(pin (num 1) (name A) (type passive))
(pin (num 2) (name K) (type passive))))
(libpart (lib device) (part MOS_N)
(docs transistors/mos/*.*)
(fields
(field (name Reference) Q)
(field (name Value) MOS_N)
(field (name Footprint) ~)
(field (name Datasheet) ~))
(pins
(pin (num D) (name D) (type passive))
(pin (num G) (name G) (type input))
(pin (num S) (name S) (type passive))))
(libpart (lib device) (part R)
(description Resistance)
(footprints
@ -231,9 +238,7 @@
(fp SM1206))
(fields
(field (name Reference) R)
(field (name Value) R)
(field (name Footprint) ~)
(field (name Datasheet) ~))
(field (name Value) R))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
@ -241,9 +246,7 @@
(description "Push Button")
(fields
(field (name Reference) SW)
(field (name Value) SW_PUSH)
(field (name Footprint) ~)
(field (name Datasheet) ~))
(field (name Value) SW_PUSH))
(pins
(pin (num 1) (name 1) (type passive))
(pin (num 2) (name 2) (type passive))))
@ -305,6 +308,26 @@
(pin (num 3) (name ~) (type passive))
(pin (num 4) (name ~) (type passive))
(pin (num 5) (name ~) (type passive))))
(libpart (lib L9110) (part L9110)
(footprints
(fp DIP8*)
(fp DIP-8*)
(fp SOP8*)
(fp SOP-8*))
(fields
(field (name Reference) DA)
(field (name Value) L9110)
(field (name Footprint) ~)
(field (name Datasheet) ~))
(pins
(pin (num 1) (name OA) (type output))
(pin (num 2) (name VCC) (type power_in))
(pin (num 3) (name VCC) (type power_in))
(pin (num 4) (name OB) (type output))
(pin (num 5) (name GND) (type power_in))
(pin (num 6) (name IA) (type input))
(pin (num 7) (name IB) (type input))
(pin (num 8) (name GND) (type power_in))))
(libpart (lib stm8s105k4t6c) (part STM8S105K4T6C)
(footprints
(fp lqfp32*))
@ -358,215 +381,230 @@
(pin (num 1) (name GND) (type power_in))
(pin (num 2) (name OUT) (type power_out))
(pin (num 3) (name IN) (type power_in))))
(libpart (lib L9110) (part L9110)
(libpart (lib s8205a) (part S8205A)
(footprints
(fp DIP8*)
(fp DIP-8*)
(fp SOP8*)
(fp SOP-8*))
(fp TSSOP8*)
(fp TSSOP-8*))
(fields
(field (name Reference) DA)
(field (name Value) L9110))
(field (name Reference) VT)
(field (name Value) S8205A)
(field (name Footprint) TSSOP-8)
(field (name Datasheet) ~))
(pins
(pin (num 1) (name OA) (type output))
(pin (num 2) (name VCC) (type power_in))
(pin (num 3) (name VCC) (type power_in))
(pin (num 4) (name OB) (type output))
(pin (num 5) (name GND) (type power_in))
(pin (num 6) (name IA) (type input))
(pin (num 7) (name IB) (type input))
(pin (num 8) (name GND) (type power_in)))))
(pin (num 1) (name D) (type passive))
(pin (num 2) (name S1) (type passive))
(pin (num 3) (name S1) (type passive))
(pin (num 4) (name G1) (type passive))
(pin (num 5) (name G2) (type passive))
(pin (num 7) (name S2) (type passive))
(pin (num 8) (name D) (type passive)))))
(libraries
(library (logical device)
(uri /usr/share/kicad/library/device.lib))
(library (logical conn)
(uri /usr/share/kicad/library/conn.lib))
(library (logical stm8s105k4t6c)
(uri stm8s105k4t6c.lib))
(library (logical L9110)
(uri L9110.lib))
(library (logical stm8s105k4t6c)
(uri stm8s105k4t6c.lib))
(library (logical LM1117)
(uri LM1117.lib)))
(uri LM1117.lib))
(library (logical s8205a)
(uri s8205a.lib)))
(nets
(net (code 1) (name "")
(node (ref DA2) (pin 4))
(node (ref P3) (pin 4)))
(net (code 2) (name "")
(node (ref DA2) (pin 1))
(node (ref P3) (pin 3)))
(net (code 3) (name /PB1)
(node (ref P1) (pin 11))
(node (ref U1) (pin 15))
(node (ref DA1) (pin 7)))
(net (code 4) (name /PB0)
(node (ref DA1) (pin 6))
(node (ref P1) (pin 12))
(node (ref U1) (pin 16)))
(net (code 5) (name /PB2)
(node (ref U1) (pin 14))
(net (code 1) (name /PB2)
(node (ref P1) (pin 10))
(node (ref DA2) (pin 6)))
(net (code 6) (name "")
(node (ref P3) (pin 1))
(node (ref DA1) (pin 1)))
(net (code 7) (name "/Drill motor/Sence")
(node (ref U1) (pin 8))
(node (ref P1) (pin 6))
(node (ref R4) (pin 1)))
(net (code 8) (name "/Drill motor/PWM_in")
(node (ref P1) (pin 14))
(node (ref Q1) (pin G))
(node (ref U1) (pin 18)))
(net (code 9) (name "")
(node (ref DA2) (pin 6))
(node (ref U1) (pin 14)))
(net (code 2) (name /PB5)
(node (ref DA3) (pin 7))
(node (ref U1) (pin 11))
(node (ref P1) (pin 7)))
(net (code 3) (name /PB4)
(node (ref U1) (pin 12))
(node (ref DA3) (pin 6))
(node (ref P1) (pin 8)))
(net (code 4) (name /PB3)
(node (ref U1) (pin 13))
(node (ref P1) (pin 9))
(node (ref DA2) (pin 7)))
(net (code 5) (name "")
(node (ref DA1) (pin 4))
(node (ref P3) (pin 2)))
(net (code 10) (name /PB5)
(node (ref U1) (pin 11))
(node (ref P1) (pin 7))
(node (ref DA3) (pin 7)))
(net (code 11) (name /PB4)
(node (ref U1) (pin 12))
(node (ref P1) (pin 8))
(node (ref DA3) (pin 6)))
(net (code 12) (name /PB3)
(node (ref U1) (pin 13))
(node (ref DA2) (pin 7))
(node (ref P1) (pin 9)))
(net (code 13) (name /5.0V)
(node (ref P6) (pin 2)))
(net (code 14) (name GND)
(node (ref C5) (pin 2))
(net (code 6) (name "")
(node (ref DA2) (pin 4))
(node (ref P3) (pin 4)))
(net (code 7) (name "")
(node (ref DA2) (pin 1))
(node (ref P3) (pin 3)))
(net (code 8) (name GND)
(node (ref U2) (pin 1))
(node (ref C4) (pin 2))
(node (ref K1) (pin 1))
(node (ref R2) (pin 2))
(node (ref SW1) (pin 1))
(node (ref C3) (pin 2))
(node (ref R5) (pin 2))
(node (ref R6) (pin 2))
(node (ref C2) (pin 1))
(node (ref P1) (pin 2))
(node (ref SW1) (pin 2))
(node (ref SW3) (pin 1))
(node (ref SW2) (pin 2))
(node (ref C4) (pin 2))
(node (ref C5) (pin 2))
(node (ref C6) (pin 2))
(node (ref C3) (pin 2))
(node (ref SW4) (pin 1))
(node (ref R7) (pin 2))
(node (ref R6) (pin 2))
(node (ref R5) (pin 2))
(node (ref P2) (pin 4))
(node (ref U1) (pin 10))
(node (ref U1) (pin 4))
(node (ref C2) (pin 1))
(node (ref C1) (pin 1))
(node (ref DA3) (pin 8))
(node (ref DA2) (pin 8))
(node (ref R2) (pin 2))
(node (ref DA1) (pin 8))
(node (ref DA2) (pin 5))
(node (ref P6) (pin 5))
(node (ref DA1) (pin 5))
(node (ref DA3) (pin 5)))
(net (code 15) (name +3.3V)
(node (ref D1) (pin 1))
(node (ref R3) (pin 1))
(node (ref P2) (pin 1))
(node (ref P1) (pin 1))
(node (ref DA2) (pin 8))
(node (ref DA2) (pin 5))
(node (ref DA3) (pin 5))
(node (ref P6) (pin 5))
(node (ref DA3) (pin 8)))
(net (code 9) (name /PB1)
(node (ref P1) (pin 11))
(node (ref U1) (pin 15))
(node (ref DA1) (pin 7)))
(net (code 10) (name /PB0)
(node (ref U1) (pin 16))
(node (ref P1) (pin 12))
(node (ref DA1) (pin 6)))
(net (code 11) (name /5.0V)
(node (ref P6) (pin 2)))
(net (code 12) (name +3.3V)
(node (ref U1) (pin 9))
(node (ref D2) (pin 1))
(node (ref R3) (pin 1))
(node (ref P6) (pin 1))
(node (ref P1) (pin 1))
(node (ref C2) (pin 2))
(node (ref U1) (pin 6))
(node (ref P2) (pin 1))
(node (ref U1) (pin 7))
(node (ref U1) (pin 9))
(node (ref C5) (pin 1))
(node (ref U2) (pin 2))
(node (ref P6) (pin 1)))
(net (code 16) (name /PD6)
(node (ref P6) (pin 3))
(node (ref D1) (pin 1)))
(net (code 13) (name /PD6)
(node (ref P5) (pin 2))
(node (ref U1) (pin 31))
(node (ref P5) (pin 2)))
(node (ref P6) (pin 3)))
(net (code 14) (name "")
(node (ref DA1) (pin 1))
(node (ref P3) (pin 1)))
(net (code 15) (name "/Drill motor/Sence")
(node (ref R4) (pin 1))
(node (ref C6) (pin 1))
(node (ref P1) (pin 6))
(node (ref U1) (pin 8)))
(net (code 16) (name "/Drill motor/PWM_in")
(node (ref VT1) (pin 4))
(node (ref U1) (pin 18))
(node (ref P1) (pin 14)))
(net (code 17) (name /PD5)
(node (ref P6) (pin 4))
(node (ref P5) (pin 3))
(node (ref P6) (pin 4))
(node (ref U1) (pin 30)))
(net (code 18) (name "")
(node (ref DA3) (pin 1))
(node (ref P4) (pin 1)))
(node (ref DA3) (pin 4))
(node (ref P4) (pin 2)))
(net (code 19) (name "")
(node (ref P4) (pin 2))
(node (ref DA3) (pin 4)))
(net (code 20) (name +12V)
(node (ref P7) (pin 1))
(node (ref K1) (pin 3))
(node (ref D3) (pin 2)))
(net (code 21) (name +5V)
(node (ref P4) (pin 1))
(node (ref DA3) (pin 1)))
(net (code 20) (name +5V)
(node (ref C4) (pin 1))
(node (ref U2) (pin 3))
(node (ref DA1) (pin 3))
(node (ref DA1) (pin 2))
(node (ref DA3) (pin 3))
(node (ref DA3) (pin 2))
(node (ref DA2) (pin 2))
(node (ref DA2) (pin 3))
(node (ref DA1) (pin 2))
(node (ref K1) (pin 2))
(node (ref C4) (pin 1))
(node (ref U2) (pin 3)))
(net (code 22) (name /NRST)
(node (ref P2) (pin 3))
(node (ref SW1) (pin 2))
(node (ref R3) (pin 2))
(node (ref C3) (pin 1))
(node (ref P1) (pin 3))
(node (ref U1) (pin 1)))
(net (code 23) (name "")
(node (ref C1) (pin 2))
(node (ref U1) (pin 5)))
(net (code 24) (name /PC7)
(node (ref U1) (pin 24))
(node (ref P5) (pin 9)))
(net (code 25) (name /PC6)
(node (ref U1) (pin 23))
(node (ref P5) (pin 10)))
(net (code 26) (name /PD7)
(node (ref U1) (pin 32))
(node (ref P5) (pin 1)))
(net (code 27) (name /PC5)
(node (ref P5) (pin 11))
(node (ref U1) (pin 22)))
(net (code 28) (name /PC4)
(node (ref P5) (pin 12))
(node (ref U1) (pin 21)))
(net (code 29) (name /PD0)
(node (ref P5) (pin 8))
(node (ref U1) (pin 25)))
(net (code 30) (name /PC3)
(node (ref U1) (pin 20))
(node (ref P5) (pin 13)))
(net (code 31) (name /OSC2IN)
(node (ref P1) (pin 5))
(node (ref U1) (pin 3)))
(net (code 32) (name /OSC1IN)
(node (ref DA2) (pin 2))
(node (ref K1) (pin 2)))
(net (code 21) (name /PC4)
(node (ref U1) (pin 21))
(node (ref SW1) (pin 1))
(node (ref P5) (pin 12)))
(net (code 22) (name /PC2)
(node (ref U1) (pin 19))
(node (ref SW3) (pin 2))
(node (ref R1) (pin 2))
(node (ref P5) (pin 14)))
(net (code 23) (name /PC3)
(node (ref SW2) (pin 1))
(node (ref P5) (pin 13))
(node (ref U1) (pin 20)))
(net (code 24) (name +12V)
(node (ref D3) (pin 2))
(node (ref K1) (pin 3))
(node (ref P7) (pin 1)))
(net (code 25) (name /OSC1IN)
(node (ref P1) (pin 4))
(node (ref U1) (pin 2)))
(net (code 33) (name /PD4)
(node (ref U1) (pin 29))
(node (ref P5) (pin 4)))
(net (code 34) (name /PC2)
(node (ref R1) (pin 2))
(node (ref P5) (pin 14))
(node (ref U1) (pin 19)))
(net (code 26) (name /PD0)
(node (ref P5) (pin 8))
(node (ref U1) (pin 25)))
(net (code 27) (name /PC7)
(node (ref P5) (pin 9))
(node (ref U1) (pin 24)))
(net (code 28) (name /PC6)
(node (ref U1) (pin 23))
(node (ref P5) (pin 10)))
(net (code 29) (name /PD7)
(node (ref P5) (pin 1))
(node (ref U1) (pin 32)))
(net (code 30) (name /PC5)
(node (ref U1) (pin 22))
(node (ref P5) (pin 11)))
(net (code 31) (name "")
(node (ref C1) (pin 2))
(node (ref U1) (pin 5)))
(net (code 32) (name /OSC2IN)
(node (ref P1) (pin 5))
(node (ref U1) (pin 3)))
(net (code 33) (name /NRST)
(node (ref P1) (pin 3))
(node (ref U1) (pin 1))
(node (ref C3) (pin 1))
(node (ref P2) (pin 3))
(node (ref SW4) (pin 2))
(node (ref R3) (pin 2)))
(net (code 34) (name /PD4)
(node (ref P5) (pin 4))
(node (ref U1) (pin 29)))
(net (code 35) (name /PD3)
(node (ref P5) (pin 5))
(node (ref U1) (pin 28)))
(node (ref U1) (pin 28))
(node (ref P5) (pin 5)))
(net (code 36) (name /PD2)
(node (ref P5) (pin 6))
(node (ref U1) (pin 27)))
(node (ref U1) (pin 27))
(node (ref P5) (pin 6)))
(net (code 37) (name /PE5)
(node (ref U1) (pin 17))
(node (ref P1) (pin 13)))
(net (code 38) (name /SWIM/PD1)
(node (ref U1) (pin 26))
(node (ref P5) (pin 7))
(node (ref P2) (pin 2))
(node (ref P5) (pin 7)))
(node (ref U1) (pin 26)))
(net (code 39) (name "")
(node (ref R2) (pin 1))
(node (ref D2) (pin 2)))
(net (code 40) (name "")
(node (ref D1) (pin 2))
(node (ref R1) (pin 1)))
(node (ref R1) (pin 1))
(node (ref D1) (pin 2)))
(net (code 41) (name "")
(node (ref P7) (pin 2))
(node (ref Q1) (pin D))
(node (ref D3) (pin 1)))
(net (code 42) (name "")
(node (ref Q1) (pin S))
(node (ref VT1) (pin 3))
(node (ref VT1) (pin 7))
(node (ref R7) (pin 1))
(node (ref VT1) (pin 2))
(node (ref VT1) (pin 5))
(node (ref R5) (pin 1))
(node (ref R6) (pin 1))
(node (ref R4) (pin 2)))))
(node (ref R4) (pin 2)))
(net (code 42) (name "")
(node (ref D3) (pin 1))
(node (ref VT1) (pin 8))
(node (ref VT1) (pin 1))
(node (ref P7) (pin 2)))))

View File

@ -1,10 +1,5 @@
update=Вс 17 авг 2014 23:25:44
last_client=eeschema
[cvpcb]
version=1
NetIExt=net
[cvpcb/libraries]
EquName1=devcms
update=Вт 19 авг 2014 18:02:55
last_client=cvpcb
[pcbnew]
version=1
LastNetListRead=
@ -25,7 +20,6 @@ DrawSegmentWidth=" 0.200000"
BoardOutlineThickness=" 0.100000"
ModuleOutlineThickness=" 0.150000"
[pcbnew/libraries]
LibDir=
LibName1=sockets
LibName2=connect
LibName3=discret
@ -33,16 +27,16 @@ LibName4=pin_array
LibName5=divers
LibName6=smd_capacitors
LibName7=smd_resistors
LibName8=smd_crystal&oscillator
LibName9=smd_dil
LibName10=smd_transistors
LibName11=libcms
LibName12=display
LibName13=led
LibName14=dip_sockets
LibName15=pga_sockets
LibName16=valves
LibName17=SOP8
LibName8=smd_dil
LibName9=smd_transistors
LibName10=libcms
LibName11=display
LibName12=led
LibName13=dip_sockets
LibName14=pga_sockets
LibName15=valves
LibName16=SOP8
LibDir=
[eeschema]
version=1
LibDir=
@ -86,3 +80,8 @@ LibName31=stm8s105k4t6c
LibName32=L9110
LibName33=LM1117
LibName34=s8205a
[cvpcb]
version=1
NetIExt=net
[cvpcb/libraries]
EquName1=devcms

View File

@ -40,7 +40,7 @@ $Descr A3 16535 11693
encoding utf-8
Sheet 1 2
Title ""
Date "17 aug 2014"
Date "19 aug 2014"
Rev ""
Comp ""
Comment1 ""
@ -408,10 +408,10 @@ Wire Wire Line
Wire Wire Line
6500 3850 6500 4050
$Comp
L SW_PUSH SW1
L SW_PUSH SW4
U 1 1 52FB0F3B
P 6500 3550
F 0 "SW1" H 6650 3660 50 0000 C CNN
F 0 "SW4" H 6650 3660 50 0000 C CNN
F 1 "SW_PUSH" H 6500 3470 50 0000 C CNN
F 2 "" H 6500 3550 60 0000 C CNN
F 3 "" H 6500 3550 60 0000 C CNN
@ -986,10 +986,10 @@ Connection ~ 9000 2900
Wire Notes Line
5700 8450 3550 8450
$Comp
L SW_PUSH SW?
L SW_PUSH SW2
U 1 1 53F12B09
P 4150 8250
F 0 "SW?" H 4300 8360 50 0000 C CNN
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
@ -997,10 +997,10 @@ F 3 "~" H 4150 8250 60 0000 C CNN
1 0 0 -1
$EndComp
$Comp
L SW_PUSH SW?
L SW_PUSH SW3
U 1 1 53F12B1C
P 5050 8250
F 0 "SW?" H 5200 8360 50 0000 C CNN
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
@ -1010,10 +1010,10 @@ $EndComp
Wire Wire Line
4450 8250 4750 8250
$Comp
L GND #PWR?
L GND #PWR028
U 1 1 53F12BC1
P 4600 8350
F 0 "#PWR?" H 4600 8350 30 0001 C CNN
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
@ -1028,10 +1028,10 @@ PC2
Text Label 3850 8250 2 60 ~ 0
PC3
$Comp
L SW_PUSH SW?
L SW_PUSH SW1
U 1 1 53F13089
P 1650 6750
F 0 "SW?" H 1800 6860 50 0000 C CNN
F 0 "SW1" H 1800 6860 50 0000 C CNN
F 1 "DRILL" H 1650 6670 50 0000 C CNN
F 2 "~" H 1650 6750 60 0000 C CNN
F 3 "~" H 1650 6750 60 0000 C CNN
@ -1039,10 +1039,10 @@ F 3 "~" H 1650 6750 60 0000 C CNN
1 0 0 -1
$EndComp
$Comp
L GND #PWR?
L GND #PWR029
U 1 1 53F130B8
P 1950 6950
F 0 "#PWR?" H 1950 6950 30 0001 C CNN
F 0 "#PWR029" 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

File diff suppressed because it is too large Load Diff

View File

@ -1,44 +1,13 @@
update=Вс 10 авг 2014 00:29:49
update=Вт 19 авг 2014 18:08:41
version=1
last_client=cvpcb
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[pcbnew/libraries]
LibName1=sockets
LibName2=connect
LibName3=discret
LibName4=pin_array
LibName5=divers
LibName6=smd_capacitors
LibName7=smd_resistors
LibName8=smd_dil
LibName9=smd_transistors
LibName10=libcms
LibName11=display
LibName12=led
LibName13=dip_sockets
LibName14=pga_sockets
LibName15=valves
LibDir=
last_client=pcbnew
[general]
version=1
[cvpcb]
version=1
NetIExt=net
[cvpcb/libraries]
EquName1=devcms
[eeschema]
version=1
LibDir=
@ -56,8 +25,43 @@ LibName5=linear
LibName6=regul
LibName7=texas
LibName8=contrib
[cvpcb]
LibName9=s8205a
LibName10=L9110
LibName11=LM1117
LibName12=stm8s105k4t6c
[pcbnew]
version=1
NetIExt=net
[cvpcb/libraries]
EquName1=devcms
LastNetListRead=MCU_module.net
UseCmpFile=0
PadDrill=" 0.600000"
PadDrillOvalY=" 0.600000"
PadSizeH=" 1.500000"
PadSizeV=" 1.500000"
PcbTextSizeV=" 1.500000"
PcbTextSizeH=" 1.500000"
PcbTextThickness=" 0.300000"
ModuleTextSizeV=" 1.000000"
ModuleTextSizeH=" 1.000000"
ModuleTextSizeThickness=" 0.150000"
SolderMaskClearance=" 0.000000"
SolderMaskMinWidth=" 0.000000"
DrawSegmentWidth=" 0.200000"
BoardOutlineThickness=" 0.100000"
ModuleOutlineThickness=" 0.150000"
[pcbnew/libraries]
LibDir=
LibName1=sockets
LibName2=connect
LibName3=discret
LibName4=pin_array
LibName5=divers
LibName6=smd_capacitors
LibName7=smd_resistors
LibName8=smd_dil
LibName9=smd_transistors
LibName10=libcms
LibName11=display
LibName12=led
LibName13=dip_sockets
LibName14=pga_sockets
LibName15=valves

View File

@ -40,7 +40,7 @@ $Descr A4 11693 8268
encoding utf-8
Sheet 2 2
Title ""
Date "17 aug 2014"
Date "19 aug 2014"
Rev ""
Comp ""
Comment1 ""
@ -62,10 +62,10 @@ $EndComp
Text Notes 5525 3150 0 60 ~ 0
Motor
$Comp
L GND #PWR028
L GND #PWR030
U 1 1 53E67E30
P 4800 5700
F 0 "#PWR028" H 4800 5700 30 0001 C CNN
F 0 "#PWR030" 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 #PWR029
L +12V #PWR031
U 1 1 53E67FAE
P 5375 3200
F 0 "#PWR029" H 5375 3150 20 0001 C CNN
F 0 "#PWR031" 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
@ -110,7 +110,7 @@ L R R4
U 1 1 53E680EF
P 4350 5100
F 0 "R4" V 4430 5100 50 0000 C CNN
F 1 "1k" V 4350 5100 50 0000 C CNN
F 1 "47k" V 4350 5100 50 0000 C CNN
F 2 "" H 4350 5100 60 0000 C CNN
F 3 "" H 4350 5100 60 0000 C CNN
1 4350 5100
@ -157,10 +157,10 @@ Wire Wire Line
Wire Wire Line
4550 4350 3200 4350
$Comp
L S8205A VT?
L S8205A VT1
U 1 1 53F123C0
P 5300 4150
F 0 "VT?" H 5375 3775 60 0000 R CNN
F 0 "VT1" H 5375 3775 60 0000 R CNN
F 1 "S8205A" H 5450 4500 60 0000 R CNN
F 2 "TSSOP-8" H 5250 3850 60 0001 C CNN
F 3 "~" H 5450 4150 60 0000 C CNN
@ -175,10 +175,10 @@ Wire Wire Line
Wire Wire Line
6050 4600 6050 4350
$Comp
L R R?
L R R7
U 1 1 53F123DF
P 5100 5350
F 0 "R?" V 5180 5350 50 0000 C CNN
F 0 "R7" V 5180 5350 50 0000 C CNN
F 1 "1R" V 5100 5350 50 0000 C CNN
F 2 "" H 5100 5350 60 0000 C CNN
F 3 "" H 5100 5350 60 0000 C CNN
@ -211,4 +211,31 @@ Wire Wire Line
Wire Wire Line
6050 3700 6050 3950
Connection ~ 5375 3700
$Comp
L GND #PWR032
U 1 1 53F35910
P 4000 5700
F 0 "#PWR032" 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
1 4000 5700
1 0 0 -1
$EndComp
Wire Wire Line
4000 5700 4000 5600
Wire Wire Line
4000 5200 4000 5100
Connection ~ 4000 5100
$Comp
L CP1 C6
U 1 1 53F36070
P 4000 5400
F 0 "C6" H 4050 5500 50 0000 L CNN
F 1 "47u" H 4050 5300 50 0000 L CNN
F 2 "" H 4000 5400 60 0000 C CNN
F 3 "" H 4000 5400 60 0000 C CNN
1 4000 5400
1 0 0 -1
$EndComp
$EndSCHEMATC

View File

@ -1,94 +1,118 @@
:2080A000AE5007F6AA0FF7AE5008F6AA0FF7815202160590CF000EAE530CA604F7909E0F21
:2080C00001AE530DF74FAE530E909FF7AE5301A601F7AE5300F6AA84F75B02811E03A300B8
:2080E000002E0B3501000D1E03501F032004725F000D16035F905D2A015A90CF000BCF004C
:20810000097210530081AE5300F6A4FEF7725F000C725F000B725F000A725F0009AE5005FF
:20812000F6A4F0F7AE81E589CD83475B0281CE000B2607CE0009272C2000AE5300F695A52B
:20814000012711A4FEAE5300F7AE81EB89CD83475B0220109EAA01AE5300F7AE81F289CDCD
:2081600083475B028172115300CE000B260FCE0009260A1E0389CD80DC5B02206716035F3D
:20818000905D2A015A72B9000B9FC9000A979EC900099590CF000BCF0009CE000BA300006B
:2081A000C6000AA200C60009A2002E2AAE81FA89CD83475B02C6000DA0014F49C7000D906E
:2081C000CE000B90504FC2000A974FC200099590CF000BCF0009CE000B2605CE000927043D
:2081E000721053008173746F700A0070617573650A00726573756D650A007265766572630F
:03820000650A000C
:078ADD000000000000000092
:20820300808080808080808080AE5255F644241B90CE001472A90001C60013A90097C600A0
:2082230012A9009590CF0014CF0012AE52557F80805202AE5302F66B027B02442503CC82D2
:20824300D07B02A4FEAE5302F7AE5005F6A4F06B01AE001A9FCB0011979EA90095F61A0172
:20826300AE5005F7725D000D272C725C0011C60011A1072D4B725F001190CE000B72A2009D
:2082830001C6000AA20097C60009A2009590CF000BCF0009202A725A0011C60011A1002EBC
:2082A3001F3507001190CE000B72A20001C6000AA20097C60009A2009590CF000BCF000980
:2082C300CE000B2608CE00092603CD81065B028080808080805204AE5240F66B047B04A5C4
:2082E30020274DAE5241F66B017B04A4804D27FDAE52417B01F7AE00011F02C6001997C670
:2083030000194CC700194F9572FB027B01F7C60018C10019260FC600184CC70018A108268A
:1683230004725F0018C60019A1082604725F00195B04808080805C
:028AE400000090
:20800000820080838200000082008203820082048200820582008206820082078200820820
:20802000820082098200820A82000000820000008200820B8200820C820082338200823493
:20804000820082D3820082D4820082D58200000082000000820082D6820082D7820082D803
:208060008200833682008337820083388200000082000000820000008200000082000000C2
:1D808300AE00082707724F00005A26F9AE00192709D68ADCD700085A26F7CC80806D
:03808000CC857D2F
:20833900AE5240F64824F9AE52417B03F781160390F64D2718AE5240F64824F9AE5245F651
:20835900AA08F790F6905CAE5241F720E3815202C60019C1001826034F20271605AE000198
:208379001F01C6001897C600184CC700184F9572FB01F690F7C60018A1082604725F0018DD
:20839900A6015B0281521C5F1F101F0E7B21A1042303CC84747B21A1032603CC84740D2190
:2083B9002603CC8474965C1F124F5F9772FB127F4CA10C25F51E121C000AA60AF77B21A104
:2083D90001270E7B21A102271C7B21A104272120301E1FF66B1C5F0F191F0F7B1C6B117BF6
:2083F900196B0E201C161F90FE5F17101F0E20111E1FE6036B18E602FE6B101F0E7B186BBA
:2084190011A6096B0D4B0A5F894B001E14891E1489CD88585B089F887B0E6B15840A0D5FD3
:20843900417B144172FB12AB30F74B0A5F894B001E14891E1489CD88D55B081F10170E1EC4
:208459001026041E0E27067B0DA1FF2CB87B0D4C5F9772FB1289CD83475B025B1C81521A3A
:20847900CE00141F03CE00121F015F1F0D1F0B0F080F060F05961C000789CD83675B024D47
:208499002603CC851B7B07A12D260E1E0D260A1E0B2606A6016B0820697B07A1302403CC11
:2084B900853D7B07A1392303CC853DA6016B061E0D891E0D894B0A5F894B00CD89745B089C
:2084D9001F1917177B070F155F90977B15909572F9199F1918979E19179572A200309FA269
:2084F900006B109EA200170D6B0B7B106B0CAE7FFF130D4F120C4F120B24075F1F0D1F0B07
:208519000F0590CE001472F203C60013120295C6001212019790A327109EA2009FA2002442
:2085390003CC848E0D0526040D0626034F201A7B0D887B0F6B0B846B090D0827051E095080
:208559001F091E1D1609FFA6015B1A81AE87A189CD83475B021E0389CD83475B024B0ACDD1
:2085790083398481520C5F1F031F0172107F60AE50C67FAE52607FAE5261A60FF7AE526230
:20859900A603F7AE5263A6E8F7AE5254A601F7AE5250A685F7AE500CF6AA04F7AE500DF630
:2085B900AA04F7AE5011F6AA20F7AE5012F6AA20F7AE5242A611F7AE5243A606F7AE524555
:2085D900A62CF79A4BE84B03CD80AF5B02CD80A0CE001472F0031F0AC6001312026B09C6C1
:2085F90000121201CE0016905F88130B909F120A909E12015B012511CE00141303C60013D5
:208619001202C6001212012411CE00141F03CE00121F01AE500AF6A804F7961C000589CD5B
:2086390083675B024D27A97B056B0C7B0CA12B27637B0CA12D2603CC86C97B0CA148274871
:208659007B0CA14D2603CC872C7B0CA1532603CC86E57B0CA1612603CC87767B0CA16827D7
:20867900277B0CA16D2603CC871E7B0CA1702603CC87707B0CA1732603CC87107B0CA17840
:208699002603CC876ACC85E9AE87AA89CD83475B02CC85E9CE00161C0064CF0016A32710E8
:2086B9002203CC85E935F4001735010016CC85E9CE00161D0064CF0016A300642503CC85B2
:2086D900E935F4001735010016CC85E9961C000689CD84775B024D27121E06A3007D2D0B6A
:2086F9001E0689CD80AF5B02CC85E9AE883189CD85655B02CC85E9AE000E4B0289CD839E63
:208719005B03CC85E9AE00094B0489CD839E5B03CC85E9CE000B2605CE0009270CAE883B14
:2087390089CD85655B02CC85E9961C000689CD84775B024D270F1E06270B1E0689CD80DC34
:208759005B02CC85E9AE884389CD85655B02CC85E9CD8106CC85E9CD812ECC85E9961C0023
:208779000689CD84775B024D270F1E06270B1E0689CD81655B02CC85E9AE884E89CD856598
:208799005B02CC85E95B0C810A4552524F523A20000A50524F544F3A0A2B2F2D094C45440C
:2087B90020706572696F640A532F73097365742F676574204D73706565640A6D09676574FC
:2087D9002073746570730A780973746F700A700970617573652F726573756D650A4D096DB2
:2087F9006F7665206D6F746F720A6109616464204E737470730A7509756E69706F6C6172FE
:20881900206D6F746F720A62096269706F6C6172206D6F746F720A00626164207370656541
:1F88390064006D6F76696E672100626164204E7374657073006261642076616C756500E3
:108AE6000000000001F40000080A0206040501095E
:2088580052040F040F017B0B484F494D262E160D1E0B905859170D1F0B1E09130D7B0812C9
:208878000C7B07120B240D160D1E0B549056170D1F0B20080C017B016B0420CA7B046B0339
:208898001E09130D7B08120C7B07120B2513160972F20D7B08120C977B07120B9517091FC6
:2088B80007160D1E0B549056170D1F0B7B036B020A030D0226CA1E0916075B048152125FE7
:2088D8001F051F03A6206B027B15484F496B0116171E1590585917171F157B036B0B1E0412
:2088F800887B076B0F84080E59090B1F047B0E6B067B0B6B030D01271A7B06AA016B127B51
:20891800056B117B046B107B036B0F16111705160F17031E05131B7B04121A7B0312192580
:208938002B160572F21B7B04121A6B087B03121917056B037B086B047B18AA0190977B1720
:2089580090957B16977B159517171F150A020D022703CC88E01E1716155B128152409096AC
:20897800905C961C00431F091E09E603961C00471F0B1E0B1F111E111F131E1388E60197B2
:20899800844290FF72A900021E09E6031E0B1F3F1E3F1F0D1E0D1F0F1E0F88E603978442D9
:2089B80090FF965C1F151E15F66B1B1E09F697160B90E603429F1B1B1E15F71E15F66B1CFC
:2089D8001E09E60197160B90E602429F1B1C1E15F79096905C93FE1F1D1E09E6011E0B1FCA
:2089F8001F1E1F1F211E211F231E2388E60397844272FB1D90FF93FE1F251E09E6021E0B0D
:208A18001F271E271F291E291F2B1E2B88E60297844272FB2590FF16091E09E6021E0B1F2D
:208A38002F1E2F1F311E311F331E3388E6019784429F90F71E095C1F351E09E60290971E43
:208A58000BE60390421E35FF160B1E09E6031E0B1F371E371F3D1E3D88F69784429F90F729
:208A78001E0B5C1F2D1E09E60390971E0BE60290421E2DFF1E0B1C00037F1E091C00037F1D
:208A9800965CE6036B08E6026B07E6016B06F616431739164572F9071719887B07193B6B59
:208AB800198419396B171619EF021617FFE603E602FE16491E4772F9199F1918979E191795
:058AD80095515B408197
:2080A000AE5007F6AA0FAE5007F7AE5008F6AA0FAE5008F7815202160590CF000EAE530CF4
:2080C000A604F7909E0F01AE530DF74FAE530E909FF7AE5301A601F7AE5300F6AA84AE5372
:2080E00000F75B02811E03A300002E0B3501000D1E03501F032004725F000D16035F905D71
:208100002A015A90CF000BCF0009AE5300F6AA01AE5300F781AE5300F6A4FEAE5300F7727A
:208120005F000C725F000B725F000A725F0009AE5005F6A4F0AE5005F7AE820C89CD842185
:208140005B0281CE000B2607CE0009272D2000AE5300F6959EA5012711A4FEAE5300F7AEA0
:20816000821289CD84215B0220109EAA01AE5300F7AE821989CD84215B0281AE5300F6A4E5
:20818000FEAE5300F7CE000B2610CE0009260B1E0389CD80E55B02CC820B16035F905D2AB1
:2081A000015A909F909772B9000B9FC9000A979EC900099590CF000BCF0009CE000BA3000C
:2081C00000C6000AA200C60009A2002E2AAE822189CD84215B02C6000DA0014F49C7000DDB
:2081E00090CE000B90504FC2000A974FC200099590CF000BCF0009CE000B2605CE00092791
:208200000AAE5300F6AA01AE5300F78173746F700A0070617573650A00726573756D650AA6
:0A82200000726576657263650A005E
:078DCA0000000000000000A2
:20822A008080808080AE500BF6A5102616725D0018262EAE526DF6AA80AE526DF735010062
:20824A0018201E725D00182718AE526DF6A47FAE526DF7AE500AF6A4FDAE500AF7725F003F
:20826A0018AE500BF6A40CA10C270AAE5005F6A4CFAE5005F78080808080805202AE530292
:20828A00F66B027B02442503CC83217B02A4FEAE5302F7AE5005F6A4F06B01AE001C9FCBD2
:2082AA000011979EA90095F61A01AE5005F7725D000D272C725C0011C60011A1072D4B72AE
:2082CA005F001190CE000B72A20001C6000AA20097C60009A2009590CF000BCF0009202A0B
:2082EA00725A0011C60011A1002E1F3507001190CE000B72A20001C6000AA20097C600092F
:20830A00A2009590CF000BCF0009CE000B2608CE00092603CD81155B0280808080808052C1
:20832A0004AE5240F66B047B04A5202750AE5241F66B017B04A4804D27FDAE52417B01F764
:20834A00AE00011F02C6001B97C6001B4CC7001B4F9572FB027B01F7C6001AC1001B261202
:20836A00C6001A4CC7001AC6001AA1082604725F001AC6001BA1082604725F001B5B0480C9
:20838A005202AE5405F65F971F01AE5404F65F9758585858585858589F1A02979E1A01951A
:2083AA00CF0024725D0018272B725D00192725A30032230EAE5266F64D27194AAE5266F7BD
:2083CA002012A3001E240DAE5266F6A16424054CAE5266F7AE5400F6A43FAE5400F75B020B
:2083EA0080AE5342F644241B90CE001472A90001C60013A90097C60012A9009590CF001407
:09840A00CF0012AE53427F8080C6
:028DD1000000A0
: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
:00000001FF