Debugged @ breadboard

This commit is contained in:
eddyem 2017-06-15 09:14:36 +03:00
parent 7aee7cc1f4
commit 3d145e64dd
10 changed files with 210 additions and 160 deletions

View File

@ -6,7 +6,7 @@ LDFLAGS= -mstm8 --out-fmt-ihx -lstm8
FLASHFLAGS=-cstlinkv2 -pstm8s105?4 FLASHFLAGS=-cstlinkv2 -pstm8s105?4
SRC=$(wildcard *.c) SRC=$(wildcard *.c)
DEFS = -DEBUG #DEFS = -DEBUG
OBJ=$(SRC:%.c=%.rel) OBJ=$(SRC:%.c=%.rel)
TRASH=$(OBJ) $(SRC:%.c=%.rst) $(SRC:%.c=%.asm) $(SRC:%.c=%.lst) TRASH=$(OBJ) $(SRC:%.c=%.rst) $(SRC:%.c=%.asm) $(SRC:%.c=%.lst)

View File

@ -5,11 +5,41 @@ SCORPIO platform controller
PINS description PINS description
* D6 - USART Rx * D6 -- USART Rx
* D5 - USART Tx * D5 -- USART Tx
* D0..D2 - select motors pair * D0..D2 -- select motors pair
* D3, D4 - select motor from pair * D3, D4 -- select motor from pair
* C1..C3 - LED1..LED3 * C1..C3 -- LED1..LED3
* B0..B3 - stepper motors' outputs * B0..B3 -- stepper motors' outputs
* B4, B5, F4 - relays (shutter, neon, flat) * B4, B5, F4 -- relays (shutter, neon, flat)
* A1, A2 - end-switches ("-" and "+") * A1, A2 -- end-switches ("-" and "+")
* C5..C7 -- end-switch address (C5 is LSB)
### Commands protocol
All commands should be in **square brackets with '\n'** after closing bracket. Spaces between parts
inside command ignored.
As heritage, The device have number "2", so it would parse only commands with format **"[2 Xxx]\n"**.
List of commands:
* **[2 ?]** -- *(debug)* tell amount of steps leave.
* **[2 0]** -- *(new behaviour, old was "restart")* -- stop all motors and turn off all relays, due
to working watchdog there's no need to make full system restart.
* **[2 N xxx]**, where **N** is number from 1 to 6, **xxx** is number from -32767 to 32767 -- run
stepper motor number **N** for given amount of steps; if stepper is at end-switch and can't go further,
the answer would be **[2 N St=x]**, where **x** is 1 or 2 (depending on end-switch number);
when all steps wuold be over (or motor will come to end-switch), controller will answer a status:
**[2 N St=x]**, if x==3 the stepper isn't at any end-switch.
* **[2 N x]**, where **N** is number from 7 to 9 -- turn on/off or get status of relays (7 -- Shutter,
8 -- Neon, 9 -- Flat); if x==1 the relay would be turned on, if x==0 -- off, if x=='-' the status would
be answered (format: **[2 N St=x]**, x==0 if power down, 1 if power up).
* **[2 a xxx]**, where **xxx** if a number from -8 to 32767 -- change motor speed;
new speed is 0xffff / (xxx + 10) * 0.125 steps per second.
* **[2 N xxx], where **N** from 'b' to 'd', **xxx** from 0 to 255 -- change LEDx brightness, ('b' -- LED1,
'c' -- LED2, 'd' -- LED3); brightness 0 is minimum and 255 is maximum.

View File

@ -91,12 +91,13 @@ INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13){ // generate pulses for stepp
U8 sw; U8 sw;
if(TIM2_SR1 & TIM_SR1_UIF){ if(TIM2_SR1 & TIM_SR1_UIF){
TIM2_SR1 &= ~TIM_SR1_UIF; // take off flag TIM2_SR1 &= ~TIM_SR1_UIF; // take off flag
tmp = PORT(STP_PORT, ODR) & ~STP_PINS;
PORT(STP_PORT, ODR) = tmp | usteps[Ustep];
if(Steps_left == 0){ if(Steps_left == 0){
stop_motor(); stop_motor();
return; return;
} }
tmp = PORT(STP_PORT, ODR) & ~STP_PINS;
PORT(STP_PORT, ODR) = tmp | usteps[Ustep];
sw = check_endsw(); sw = check_endsw();
if(Dir){ if(Dir){
@ -109,13 +110,14 @@ INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13){ // generate pulses for stepp
} }
} }
}else{ }else{
if(Ustep == 0 && sw == 2){ // check end-switches only @ full steps
stop_motor();
return;
}
if(++Ustep > 7){ if(++Ustep > 7){
Ustep = 0; Ustep = 0;
--Steps_left; --Steps_left;
if(sw == 2){
stop_motor();
return;
}
} }
} }
} }

View File

@ -114,21 +114,27 @@ int main() {
setup_stepper_pins(); setup_stepper_pins();
RELAY_SETUP(); RELAY_SETUP();
// setup endswitch selection pins
PORT(ESW_SEL_PORT, DDR) |= ESW_SEL_PINS;
PORT(ESW_SEL_PORT, CR1) |= ESW_SEL_PINS;
// Pullup to esw inputs
PORT(ESW_PORT, CR1) |= ESW_PINS;
// enable all interrupts // enable all interrupts
enableInterrupts(); enableInterrupts();
/*
// Setup watchdog // Setup watchdog
IWDG_KR = KEY_ENABLE; // start watchdog
IWDG_KR = KEY_ACCESS; // enable access to protected registers IWDG_KR = KEY_ACCESS; // enable access to protected registers
IWDG_PR = 6; // /256 IWDG_PR = 6; // /256
IWDG_RLR = 0xff; // max time for watchdog (1.02s) IWDG_RLR = 0xff; // max time for watchdog (1.02s)
IWDG_KR = KEY_ENABLE; // start watchdog
*/
// Loop // Loop
uart_write("Scorpio platform ready\n");
if(RST_SR) RST_SR = 0x1f; // clear reset flags writing 1
do{ do{
//if(RST_SR) RST_SR = 0x1f; // clear reset flags writing 1 IWDG_KR = KEY_REFRESH; // refresh watchdog
//IWDG_KR = KEY_REFRESH; // refresh watchdog
if(uart_rdy){ if(uart_rdy){
process_string(); process_string();
} }

View File

@ -64,6 +64,11 @@
#define STP_PORT PB #define STP_PORT PB
#define STP_PINS 0x0f #define STP_PINS 0x0f
// PC5-PC7 - endswitch address (through multiplexer)
#define ESW_SEL_PORT PC
#define ESW_SEL_PINS 0xe0
#define ESW_SELECT(NUM) do{register U8 C=PC_ODR & ~ESW_SEL_PINS; C |= ((NUM-1)<<5); PC_ODR = C;}while(0)
// PD0..PD4 - select pair 0..2 & stepper // PD0..PD4 - select pair 0..2 & stepper
#define STP_SEL_PORT PD #define STP_SEL_PORT PD
#define STP_SEL_PINS 0x1f #define STP_SEL_PINS 0x1f
@ -71,6 +76,7 @@
#define STPRS_OFF() do{PORT(STP_PORT, ODR) &= ~STP_PINS; PORT(STP_SEL_PORT, ODR) &= ~0x07; PORT(STP_SEL_PORT, ODR) |= 0x18; }while(0) #define STPRS_OFF() do{PORT(STP_PORT, ODR) &= ~STP_PINS; PORT(STP_SEL_PORT, ODR) &= ~0x07; PORT(STP_SEL_PORT, ODR) |= 0x18; }while(0)
#define ESW_PORT PA #define ESW_PORT PA
#define ESW_PINS 0x06
// PA1 - "-", PA2 - "+" // PA1 - "-", PA2 - "+"
#define ESW_PLUS 0x02 #define ESW_PLUS 0x02
#define ESW_MINUS 0x04 #define ESW_MINUS 0x04

View File

@ -34,7 +34,8 @@
U8 move_motor(char *cmd){ U8 move_motor(char *cmd){
U8 N = (U8)*cmd - '0'; U8 N = (U8)*cmd - '0';
int steps; int steps;
if(N < 1 || N > 6) return 0; if(N < 1 || N > 6 || Steps_left) return 0;
IWDG_KR = KEY_REFRESH; // refresh watchdog
cmd = omit_whitespace(cmd+1); cmd = omit_whitespace(cmd+1);
if(!readInt(cmd, &steps)) return 0; if(!readInt(cmd, &steps)) return 0;
#ifdef EBUG #ifdef EBUG
@ -47,7 +48,8 @@ U8 move_motor(char *cmd){
if(steps) return stepper_move(N, steps); if(steps) return stepper_move(N, steps);
else{ // steps == 0 - just check endswitches else{ // steps == 0 - just check endswitches
stepper_get_esw(N); cur_motor = N;
chk_esw = 1;
return 0; return 0;
} }
} }
@ -59,6 +61,7 @@ U8 move_motor(char *cmd){
*/ */
U8 relay(char *cmd, char N){ U8 relay(char *cmd, char N){
U8 on = 0; U8 on = 0;
IWDG_KR = KEY_REFRESH; // refresh watchdog
if(*cmd == '-'){ // just check if(*cmd == '-'){ // just check
char ans[] = "[2 N St=1]\n"; char ans[] = "[2 N St=1]\n";
ans[3] = N; ans[3] = N;
@ -77,7 +80,7 @@ U8 relay(char *cmd, char N){
} }
if(!on) ans[8] = '0'; // off if(!on) ans[8] = '0'; // off
uart_write(ans); uart_write(ans);
return 1; return 0; // not echo previous command
} }
if(*cmd == '0'){ // turn OFF if(*cmd == '0'){ // turn OFF
switch (N){ switch (N){
@ -141,6 +144,7 @@ void LEDshine(char *cmd, U8 N){
*/ */
U8 process_commands(char *cmd){ U8 process_commands(char *cmd){
char s; char s;
IWDG_KR = KEY_REFRESH; // refresh watchdog
cmd = omit_whitespace(cmd + 1); cmd = omit_whitespace(cmd + 1);
if(*cmd > '0' && *cmd < '7') if(*cmd > '0' && *cmd < '7')
return move_motor(cmd); return move_motor(cmd);
@ -151,6 +155,7 @@ U8 process_commands(char *cmd){
uart_write("Steps_left="); uart_write("Steps_left=");
print_long((long) Steps_left); print_long((long) Steps_left);
uart_write("\n"); uart_write("\n");
return 0;
break; break;
case '0': // stop motors case '0': // stop motors
DBG("restart"); DBG("restart");
@ -159,15 +164,15 @@ U8 process_commands(char *cmd){
break; break;
case '7': case '7':
DBG("Shutter"); DBG("Shutter");
relay(cmd, '7'); return relay(cmd, '7');
break; break;
case '8': case '8':
DBG("Neon"); DBG("Neon");
relay(cmd, '8'); return relay(cmd, '8');
break; break;
case '9': case '9':
DBG("Flat"); DBG("Flat");
relay(cmd, '9'); return relay(cmd, '9');
break; break;
case 'a': case 'a':
return stepper_ch_speed(cmd); return stepper_ch_speed(cmd);
@ -192,7 +197,8 @@ U8 process_commands(char *cmd){
} }
void process_string(){ void process_string(){
U8 rbs, noerr=1; U8 rbs, noerr=1, ctr;
char buf[UART_BUF_LEN+1];
char *cmd; char *cmd;
if(uart_rdy == 0) return; if(uart_rdy == 0) return;
uart_rdy = 0; uart_rdy = 0;
@ -208,10 +214,11 @@ void process_string(){
UART_rx[rx_idx] = 0; UART_rx[rx_idx] = 0;
cmd = omit_whitespace(&UART_rx[1]); cmd = omit_whitespace(&UART_rx[1]);
if(*cmd != '2') return; if(*cmd != '2') return;
for(ctr = 0; ctr <= rx_idx; ++ctr) buf[ctr] = UART_rx[ctr];
rbs = rx_idx; rbs = rx_idx;
rx_idx = 0; rx_idx = 0;
uart_write(UART_rx);
UART_rx[rbs - 2] = 0; UART_rx[rbs - 2] = 0;
process_commands(cmd); if(process_commands(cmd))
uart_write(buf);
} }
} }

View File

@ -1,122 +1,117 @@
:2080A000AE5007F6AA0FF7AE5008F6AA0FF7AE5009F6AA0FF7AE5011F6AA1FF7AE5012F6F1 :2080A000AE5007F6AA0FF7AE5008F6AA0FF7AE5009F6AA0FF7AE5011F6AA1FF7AE5012F6F1
:2080C000AA1FF7AE5013F6AA1FF7AE5005F6A4F0F7AE500FF6A4F8F7AE500FF6AA18F781C2 :2080C000AA1FF7AE5013F6AA1FF7AE5005F6A4F0F7AE500FF6A4F8F7AE500FF6AA18F781C2
:2080E0005206961C0003891E0B89CD86F05B044D276E1E03A3FFF72D5E1E03A37FFF2E57A8 :2080E0005204965C891E0989CD86775B044D27441E01A3FFF72D3D1E01A37FFF2E36160141
:20810000160372A9000AAEFFFF651F01A3007D24034F204DCF00473504530C7B010F05AE01 :2081000072A9000AAEFFFF65A3007D24034F2025CF00473504530C9E0F0390AE530D90F7CB
:20812000530DF77B02954F9EAE530EF735015301AE5300F6AA84F7AE83B289CD85255B02FD :208120004F9FAE530EF735015301AE5300F6AA84F7A601214F5B0481AE5001F6A5042604E6
:20814000965C4B0289CD857C5B03AE83C489CD85255B02A601200AAE83C689CD85255B02B4 :20814000A6012008A5022603A602214F8152020D05270F7B05A10622091E062705CE004497
:208160004F5B0681AE5001F6A5042604A6012008A5022603A602214F81880D04270F7B0480 :2081600027044FCC822735AA50E00D062A0B350100461E06501F062004725F00467B07C720
:20818000A10622091E052705CE004427044FCC82380D052A0B350100461E05501F0520042E :2081800000457B06C70044AE500AF6A41F6B027B054A4EA4F0481A02AE500AF7AE5005F6D8
:2081A000725F00467B06C700457B05C70044AE5005F6A4F0F7AE500FF6A4F8F7AE500FF673 :2081A000A4F0F7AE500FF6A4F8F7AE500FF6AA18F7AE500FF66B015F7B05975A4B024B000B
:2081C000AA18F7AE500FF6957B044488A6016B02844D270508014A26FB9E1A01AE500FF7C1 :2081C00089CD8D715B049FAE00014D2704584A26FC9F1A01AE500FF7AE500FF6887B064454
:2081E000AE500FF6887B0544842408A4F7AE500FF72006A4EFAE500FF7CD8164027B0401F0 :2081E000842408A4F7AE500FF72006A4EFAE500FF7CD8138027B0501889EC7004B844D273A
:20820000889EC7004B844D2714A1012609725D0046260A4F2007725D004627014F4D270688 :2082000014A1012609725D0046260A4F2007725D004627014F4D2706CD822A4F2009AE53C6
:20822000CD823B4F2012AE83D789CD85255B02AE5300F6AA01F7A6015B0181AE5300F6A416 :2082200000F6AA01F7A6015B028172115300AE5005F6A4F0F7AE500FF6A4F8F7AE500FF62E
:20824000FEF75FCF004435010043AE83E589CD85255B028152027B05A1612F067B05A168B6 :20824000AA18F7725F004C5FCF0044350100438152027B05A1612F067B05A1682D034F20A9
:208260002D034F201AAE83721F017B05A06197494FA2009558585872FB01CF0049A6015B0B :208260001AAE83211F017B05A06197494FA2009558585872FB01CF0049A6015B0281521313
:2082800002815213965C1F121E12A65BF71E125CA632F71E125C5CA620F71E121C00031F3D :20828000965C1F0F1E0FA65BF71E0F5CA632F71E0F5C5CA620F71E0F1C00031F0D1E0DA656
:2082A0000F1E0FA630F71E12A620E7041E12A653E7051E12A674E7061E12A63DE7071E1257 :2082A00030F71E0FA620E7041E0FA653E7051E0FA674E7061E0FA63DE7071E0F1C00081F05
:2082C0001C00081F0D1E0DA630F71E12A65DE7091E12A60AE70A1E121C000B7F0D16260340 :2082C000111E11A630F71E0FA65DE7091E0FA60AE70A1E0F1C000B7F35AA50E00D16273E39
:2082E000CC836F7B16A1072303CC836FAE5005F6A4F0F7AE500FF6A4F8F7AE500FF6AA18C4 :2082E0007B16A1062238AE500AF6A41F6B137B164A4EA4F0481A13AE500AF77B16AB301EF2
:20830000F7AE500FF6957B164488A6016B12844D270508114A26FB9E1A11AE500FF7AE5001 :208300000DF7CD8138954D2603A603959EAB301E11F71E0F89CD84A35B02725F004B5B135A
:208320000FF6887B1744842408AA10AE500FF72006AA20AE500FF77B16AB301E0FF7CD819A :2083200081080C0406020301090206040C08090103080901030206040C080A020604050111
:2083400064954D2603A603959EAB301E0DF71E1289CD85255B02AE5005F6A4F0F7AE500FB7 :208340000907030B090D0C0E060D090B0307060E0C07060E0C0D090B0307050D090B0A0EEE
:20836000F6A4F8F7AE500FF6AA18F73507004B5B1381080C0406020301090206040C0809EC :018360000616
:208380000103080901030206040C080A02060405010907030B090D0C0E060D090B03070603 :098D90000000000000008321072F
:2083A0000E0C07060E0C0D090B0307050D090B0A0E065370656564206368616E6765642012 :2083610080808080808080808035005255808088AE5302F6A501277EA4FEAE5302F7AE503A
:2083C000746F20000A004261642073706565642076616C75650A00737465707065725F6D42 :2083810005F6A4F06B01C6004ACB004C97C60049A90095F61A01AE5005F7CE00442605CDC1
:0B83E0006F76650A0073746F700A006E :2083A100822A2052CD81389095725D00462720725A004CC6004C4D2A3D3507004CCE00441F
:098E7000000000000000837207FD :2083C1005ACF0044909EA101262CCD822A2027725D004C260B909EA1022605CD822A201656
:2083EB0080808080808080808035005255808088AE5302F6A5012776A4FEAE5302F7CE00E8 :2083E100725C004CC6004CA1072D0B725F004CCE00445ACF00448480808080805202AE527C
:20840B00442605CD823B2066AE5005F6A4F06B01C6004ACB004C97C60049A90095F61A01BD :2084010040F64D2A43725D0050260DAE5245F6A47FF7725F004F2030C60050C1004F2319F2
:20842B00AE5005F7CD81649095725D00462720725A004CC6004C4D2A353507004CCE004494 :20842100AE00221F01C6004F97725C004F4F9572FB01F6AE5241F7200FAE5245F6A47FF77E
:20844B005ACF0044909EA1012624CD823B201F725C004CC6004CA1072D14725F004CCE00C1 :20844100725F004F725F00505B02805203AE5240F6A5202747AE5241F66B01AE00011F02CC
:20846B00445ACF0044909EA1022603CD823B8480808080805202AE5240F64D2A43725D00A5 :20846100C6004E97725C004E4F9572FB027B01F77B01A10A2603A601214F88C6004EA120AA
:20848B0050260DAE5245F6A47FF7725F004F2030C60050C1004F2319AE00221F01C6004F22 :208481008426094D2606725F004E20104D270D3501004D5FC6004E9772FB027F5B03808006
:2084AB0097725C004F4F9572FB01F6AE5241F7200FAE5245F6A47FF7725F004F725F0050B8 :0284A1008080D9
:2084CB005B02805203AE5240F6A5202747AE5241F66B01AE00011F02C6004E97725C004EBC :018D990000D9
:2084EB004F9572FB027B01F77B01A10A2603A601214F88C6004EA1208426094D2606725FEA :2084A3005202725D0050270635AA50E020F4721F5245725F004FAE00221F011E05C6005085
:1A850B00004E20104D270D3501004D5FC6004E9772FB027F5B03808080807E :2084C3009097725C00504F909572F901F65C90F7F64D2707C60050A12025E2AE5245F6AA67
:018E790000F8 :2084E30080F75B02811E03F6A120270CA1092708A10D2704A10A26045CF620EC8152255FDD
:208525005202725D005026FA721F5245725F004FAE00221F011E05C600509097725C0050ED :208503001F031F017B2AA1042303CC85E67B2AA1032603CC85E60D2A2603CC85E6961C007D
:208545004F909572F901F65C90F7F64D2707C60050A12025E2AE5245F6AA80F75B02811EB6 :20852300061F144F5F9772FB147F4CA10C25F51E14A60AE70A7B2AA101270E7B2AA10227E9
:2085650003F6A120270CA1092708A10D2704A10A26045CF620EC8152255F1F0F1F0D7B2ACE :20854300197B2AA104272E20451E28F66B214F5F6B031F017B216B042034162817121E1201
:20858500A1042303CC86607B2AA1032603CC86600D2A2603CC8660965C1F124F5F9772FB4E :20856300FE1F1C161C171A0F190F18161A1703161817012019162817161E16E6036B25E646
:2085A500127F4CA10C25F51E12A60AE70A7B2AA101270E7B2AA10227197B2AA104272E207E :20858300026B24FE1F221624170316221701A6096B054B0A5F894B001E07891E0789CD8C08
:2085C500451E28F66B174F5F6B0F1F0D7B176B102034162817241E24FE1F22162217200F66 :2085A300045B08517B050A055F9772FB14909FAB30F74B0A5F894B001E07891E0789CD8CBC
:2085E5001F0F1E1620170F161E170D20191628171C1E1CE6036B1BE6026B1AFE1F18161A51 :2085C3009B5B081F0317011E0326041E0127067B05A1FF2CBD7B054C5F9772FB1489CD84A3
:20860500170F1618170DA6096B114B0A5F894B001E13891E1389CD8CF85B08517B110A110A :2085E300A35B025B258152100F0E965C5C1F0F1E0F1C000B7F0D132A14161590504F1214CB
:208625005F9772FB12909FAB30F74B0A5F894B001E13891E1389CD8D8F5B081F0F170D1E07 :20860300974F12139517151F13A6016B0EA60B6B014B0A5F894B001E19891E1989CD8BDFDD
:208645000F26041E0D27067B11A1FF2CBD7B114C5F9772FB1289CD85255B025B2581521062 :208623005B089F0A015F417B014172FB0FAB30F74B0A5F894B001E19891E1989CD8C745B4F
:208665000F0D965C1F0F1E0F1C000B7F0D132A14161590504F1214974F12139517151F130A :20864300081F1517131E1526041E1327040D0126C07B010D0127110D0E270D7B014A5F9737
:20868500A6016B0DA60B6B0E4B0A5F894B001E19891E1989CD8CD35B089F0A0E5F417B0E15 :2086630072FB0F88A62DF7845F9772FB0F89CD84A35B128152100F06A6016B055F1F031F9A
:2086A5004172FB0FAB30F74B0A5F894B001E19891E1989CD8D685B081F1517131E1526043E :208683000135AA50E01E13F6A12D2607A6016B065C1F131613170B1E0BF61E0B5C1F0BA145
:2086C5001E1327040D0E26C07B0E0D0E27110D0D270D7B0E4A5F9772FB0F88A62DF7845F94 :2086A300302552A139224E0F05881E04891E04894B0A5F894B00CD8CF55B081F0A170884CF
:2086E5009772FB0F89CD85255B128152100F02A6016B015F1F051F031E13F6A12D2607A681 :2086C300905F90975F905D2A015A72F9099F1908889E1908958472A20030A20002A20095FD
:20870500016B025C1F131613170B1E0BF61E0B5C1F0BA1302552A139224E0F01881E068968 :2086E30017031F01AE7FFE13034F12024F12012EA6A6016B050D0527034F202B0D06271C20
:208725001E06894B0A5F894B00CD8DE95B081F0A170884905F90975F905D2A015A72F90932 :208703007B04406B104F12036B0F4F12026B0E4F12016B01160F17037B0E6B021E15270500
:208745009F1908889E1908958472A20030A20002A2009517051F03AE7FFF13054F12044F9F :0A8723001E151603FFA6015B10816E
:2087650012032EA6A6016B010D0127034F202B0D02271C7B06406B104F12056B0F4F120453 :048D9A0000000000D5
:1D8785006B0E4F12036B03160F17057B0E6B041E1527051E151605FFA6015B108114 :208000008200808382000000820083618200836282008363820083648200836582008366E6
:048E7A0000000000F4 :2080200082008367820083688200000082000000820083698200836A8200836F820083709D
:208000008200808382000000820083EB820083EC820083ED820083EE820083EF820083F0AA :20804000820083F9820083FA820083FB8200000082000000820083FC820083FD8200844CCA
:20802000820083F1820083F28200000082000000820083F3820083F4820083F9820083FA61 :20806000820084A0820084A1820084A2820000008200000082000000820000008200000081
:208040008200847B8200847C8200847D82000000820000008200847E8200847F820084CEB9 :1D808300AE00422707724F00005A26F9AE000E2709D68D8FD700425A26F7CC80804E
:208060008200852282008523820085248200000082000000820000008200000082000000F8 :03808000CC872D7D
:1D808300AE00422707724F00005A26F9AE000E2709D68E6FD700425A26F7CC80806D :20872D00AE50C0F6AA08F772107F60350050C6AE500CF6AA0EF7AE500DF6AA0EF7AE500EB8
:03808000CC87A208 :20874D00F6AA0EF735005260350F52613500526235FF5263350052653514526635005267DC
:2087A200AE50C0F6AA08F772107F60350050C6AE500CF6AA0EF7AE500DF6AA0EF7AE500E43 :20876D0035145268350052693514526A35605258356052593560525A3511525C3501525D5B
:2087C200F6AA0EF735005260350F52613500526235FF526335005265351452663500526767 :20878D0035815250721E526DAE5011F6AA20F7AE5012F6AA20F7AE5013F6AA20F735035246
:2087E20035145268350052693514526A35605258356052593560525A3511525C3501525DE6 :2087AD004335685242352C5245AE03E8CF00473504530C3503530D35E8530E35015301AEAB
:2088020035815250721E526DAE5011F6AA20F7AE5012F6AA20F7AE5013F6AA20F7350352D0 :2087CD005300F6AA84F7CD80A0AE5007F6AA30F7AE5008F6AA30F7AE501BF6AA10F7AE50DA
:208822004335685242352C5245AE03E8CF00473504530C3503530D35E8530E35015301AE35 :2087ED001CF6AA10F7AE500CF6AAE0F7AE500DF6AAE0F7AE5003F6AA06F79A35CC50E03508
:208842005300F6AA84F7CD80A0AE5007F6AA30F7AE5008F6AA30F7AE501BF6AA10F7AE5064 :20880D005550E0350650E135FF50E2AE884D89CD84A35B02AE50B3F64D2704351F50B335EC
:208862001CF6AA10F79A725D004D2703CD8BDA725D004327F1725F00433B004BCD82828408 :20882D00AA50E0725D004D2703CD8B24725D004327ED725F00433B004BCD827E8420E081FD
:2088820020E48152051E08F6A0306B037B03A10125067B03A10623034F206A5C89CD856496 :20884D0053636F7270696F20706C6174666F726D2072656164790A0052041E07F6A030A186
:2088A2005B021F04965C891E0689CD86F05B044D26034F2050AE8C7489CD85255B02961C7A :20886D0001250AA106220690CE004427034F203C35AA50E05C8889CD84E85B021F04849626
:2088C20000034B0189CD857C5B03AE8C8089CD85255B0216015F905D2A015A908989CD869E :20888D005C88891E0689CD86775B049784414D4126034F20171E01270B1E018988CD814DD3
:2088E200635B04AE8C8689CD85255B021E01270D1E01897B0588CD81795B0320087B038841 :2088AD005B032008C7004B350100434F5B0481521535AA50E01E18F66B117B1AA1372606B4
:20890200CD8282844F5B058152151E18F66B157B1AA1372606A6016B1220020F127B1AA187 :2088CD00A6016B1020020F107B1AA1382606A6016B0E20020F0E7B1AA1392606A6016B0F73
:20892200382606A6016B0E20020F0E7B1AA1392606A6016B1120020F117B15A12D2703CC1E :2088ED0020020F0F7B11A12D2703CC8998965C1F121E12A65BF71E125CA632F71E125C5C2C
:2089420089E3965C1F131E13A65BF71E135CA632F71E135C5CA620F7161372A90003A64E1F :20890D00A620F7161272A90003A64E90F71E12A620E7041E12A653E7051E12A674E7061E81
:2089620090F71E13A620E7041E13A653E7051E13A674E7061E13A63DE7071E131C00081FC8 :20892D0012A63DE7071E121C00081F141E14A631F71E12A65DE7091E12A60AE70A1E121C80
:208982000F1E0FA631F71E13A65DE7091E13A60AE70A1E131C000B7F7B1A90F70D12260A93 :20894D00000B7F7B1A90F70D10260A0D0E26100D0F2616201EAE5005F6A4106B0D2018AE25
:2089A2000D0E26100D112616201EAE5005F6A4106B0D2018AE5005F6A4206B0D200EAE500E :20896D005005F6A4206B0D200EAE5019F6A4106B0D20044FCC8A040D0D26051E14A630F7EB
:2089C20019F6A4106B0D20044FCC8A4F0D0D26051E0FA630F71E1389CD85255B02A60120AE :20898D001E1289CD84A35B024F206C7B11A13026300D10260A0D0E260F0D0F2614201BAE56
:2089E2006C7B15A13026300D12260A0D0E260F0D112614201BAE5005F6A4EFF72015AE506A :2089AD005005F6A4EFF72015AE5005F6A4DFF7200CAE5019F6A4EFF720034F203AA60120D7
:208A020005F6A4DFF7200CAE5019F6A4EFF720034F203AA60120367B15A131262F0D122657 :2089CD00367B11A131262F0D10260A0D0E260F0D0F2614201BAE5005F6AA10F72015AE5096
:208A22000A0D0E260F0D112614201BAE5005F6AA10F72015AE5005F6AA20F7200CAE50196B :2089ED0005F6AA20F7200CAE5019F6AA10F720034F2004A601214F5B15815202965C891E39
:208A4200F6AA10F720034F2004A601214F5B15815202965C891E0789CD86F05B044D273705 :208A0D000789CD86775B044D27370D012B331E01A300FF2C2C7B02887B08A10084271288F2
:208A62000D012B331E01A300FF2C2C7B02887B08A100842712887B08A101842710887B0816 :208A2D007B08A101842710887B08A10284270E2010AE5266F7200AAE5268F72004AE526A3E
:208A8200A10284270E2010AE5266F7200AAE5268F72004AE526AF75B028152021E055C89A3 :208A4D00F75B028135AA50E01E035C89CD84E85B02F6A1302D0DA1372E0989CD88655B02D9
:208AA200CD85645B02F6A1302D0DA1372E0989CD88855B02CC8BD75C8889CD85645B021F04 :208A6D00CC8B235C8889CD84E85B0284A130274AA1372759A138275FA1392765A13F27136F
:208AC2000284A130275CA1372775A1382603CC8B56A1392603CC8B6BA13F271FA161260381 :208A8D00A1612767A162276BA1632771A1642777CC8B1EAE8BD189CD84A35B0290CE00446A
:208AE200CC8B80A1622603CC8B8AA1632603CC8B9FA1642603CC8BB4CC8BC9AE8C8D89CDF7 :208AAD005F905D2A015A908989CD85E95B04AE8BDD89CD84A35B024F205CCD822AAE500565
:208B020085255B0290CE00445F905D2A015A908989CD86635B04AE8C9989CD85255B02CC26 :208ACD00F6A4CFF7AE5019F6AAEFF720474B3789CD88BC5B03203F4B3889CD88BC5B0320B1
:208B22008BCCAE8C9B89CD85255B02CD823BAE5005F6A4CFF7AE5019F6AAEFF7CC8BCCAE4F :208AED00354B3989CD88BC5B03202B89CD80E05B0220234B0089CD8A075B0320174B01897B
:208B42008CA389CD85255B024B371E0289CD890A5B032076AE8CAB89CD85255B024B381E25 :208B0D00CD8A075B03200D4B0289CD8A075B0320034F2002A60181522AA6016B01725D00B3
:208B62000289CD890A5B032061AE8CB089CD85255B024B391E0289CD890A5B03204C1E016C :208B2D004D2603CC8BCE725F004DC6004EA103251C90AE000190F6A15B26125FC6004E9773
:208B820089CD80E05B02204DAE8CB589CD85255B024B001E0289CD8A525B03202DAE8CBACB :208B4D005A5A1F2772F92790F6A15D270FAE0001F688CD825084725F004E0F010D012761AD
:208BA20089CD85255B024B011E0289CD8A525B032018AE8CBF89CD85255B024B021E0289D6 :208B6D00AE00011F255FC6004E9772FB257F1E255C89CD84E85B021F021E02F6A1322641AB
:208BC200CD8A525B0320034F200BAE8C9989CD85255B02A6015B02815207A6016B03725DFD :208B8D00961C00041F294F905F909772F9295F9772FB2588F69790F7844CC1004E23E8C6FD
:208BE200004D2603CC8C71725F004DC6004EA103251C90AE000190F6A15B26125FC6004EB1 :208BAD00004E725F004E5F975A5A72FB257F1E0289CD8A515B024D27081E2989CD84A35B37
:208C0200975A5A1F0672F90690F6A15D271CAE0001F688CD82545B014D2609AE8CC489CDAE :208BCD00025B2A8153746570735F6C6566743D000A001E0916072A03CD8D858990891E0907
:208C220085255B02725F004E0F030D032741AE00011F045FC6004E9772FB047F1E045C89AF :208BED0016072A03CD8D85899089CD8C045B087B032A03CD8D858152030F030F017B0A488E
:208C4200CD85645B021F011E01F6A1322621C6004E725F004E1E048889CD85255B02845F93 :208C0D004F494D262E160C1E0A905859170C1F0A1E08130C7B07120B7B06120A240D160C63
:208C6200975A5A72FB047F1E0189CD8A9C5B025B07814D6F7665206D6F746F72200020664E :208C2D001E0A549056170C1F0A20080C017B016B0320CA7B036B021E0872F00C7B07120B52
:208C82006F72200073746570730A0053746570735F6C6566743D000A007265737461727433 :208C4D0090977B06120A25061F0890951706160C1E0A549056170C1F0A7B020A024D26D70C
:208CA2000053687574746572004E656F6E00466C6174004C454431004C454432004C4544CA :208C6D001E0816065B03811E0916072A03CD8D858990891E0916072A03CD8D85899089CD15
:208CC2003300456E74657220225B636D645D220A001E0916072A03CD8E658990891E0916F7 :208C8D008C9B5B087B0318072A03CD8D858152065F1F051F03A6206B027B09484F496B0113
:208CE200072A03CD8E65899089CD8CF85B087B032A03CD8E658152030F030F017B0A484FA9 :208CAD00160B1E09905859170B1F0916051E0390585917051F030D0127067B06AA016B0641
:208D0200494D262E160C1E0A905859170C1F0A1E08130C7B07120B7B06120A240D160C1E9E :208CCD001E0572F00F7B04120E90977B03120D250C1F05909517037B0CAA016B0C0A022621
:208D22000A549056170C1F0A20080C017B016B0320CA7B036B021E0872F00C7B07120B90EA :208CED00B81E0B16095B06815F89897B0A977B0E421F037B09977B0E4272FB021F024FA99D
:208D4200977B06120A25061F0890951706160C1E0A549056170C1F0A7B020A024D26D71E88 :208D0D00006B017B0A977B0D4272FB021F024F19016B017B0A977B0C4272FB011F017B0998
:208D62000816065B03811E0916072A03CD8E658990891E0916072A03CD8E65899089CD8DEE :208D2D00977B0D4272FB011F017B08977B0E4272FB011F017B07977B0E429F1B016B017B3E
:208D82008F5B087B0318072A03CD8E658152065F1F051F03A6206B027B09484F496B0116BE :208D4D000A977B0B429F1B016B017B09977B0C429F1B016B017B08977B0D429F1B016B0160
:208DA2000B1E09905859170B1F0916051E0390585917051F030D0127067B06AA016B061E43 :208D6D00908585811E039E16052A034390505D2A0150654D2A01508190535D2703535C8181
:208DC2000572F00F7B04120E90977B03120D250C1F05909517037B0CAA016B0C0A0226B891 :038D8D00905C8176
:208DE2001E0B16095B06815F89897B0A977B0E421F037B09977B0E4272FB021F024FA9005F
:208E02006B017B0A977B0D4272FB021F024F19016B017B0A977B0C4272FB011F017B09970B
:208E22007B0D4272FB011F017B08977B0E4272FB011F017B07977B0E429F1B016B017B0AD5
:208E4200977B0B429F1B016B017B09977B0C429F1B016B017B08977B0D429F1B016B0190E4
:0E8E620085858190535D2703535C81905C8170
:00000001FF :00000001FF

View File

@ -102,6 +102,7 @@ U8 check_endsw(){
U8 stepper_move(U8 Nmotor, int Nsteps){ U8 stepper_move(U8 Nmotor, int Nsteps){
U8 c; U8 c;
if(!Nmotor || Nmotor > 6 || !Nsteps || Steps_left) return 0; if(!Nmotor || Nmotor > 6 || !Nsteps || Steps_left) return 0;
IWDG_KR = KEY_REFRESH; // refresh watchdog
if(Nsteps < 0){ if(Nsteps < 0){
Dir = 1; Dir = 1;
@ -109,11 +110,12 @@ U8 stepper_move(U8 Nmotor, int Nsteps){
}else }else
Dir = 0; Dir = 0;
Steps_left = Nsteps; Steps_left = Nsteps;
// select endswitch
ESW_SELECT(Nmotor);
// turn all motors OFF
STPRS_OFF(); STPRS_OFF();
// turn all OFF
// turn on the motor we need // turn on the motor we need
PORT(STP_SEL_PORT, ODR) |= (1 << (Nmotor/2)); PORT(STP_SEL_PORT, ODR) |= (1 << ((Nmotor-1)/2));
if(Nmotor & 1) PORT(STP_SEL_PORT, ODR) &= ~GPIO_PIN3; if(Nmotor & 1) PORT(STP_SEL_PORT, ODR) &= ~GPIO_PIN3;
else PORT(STP_SEL_PORT, ODR) &= ~GPIO_PIN4; else PORT(STP_SEL_PORT, ODR) &= ~GPIO_PIN4;
c = check_endsw(); c = check_endsw();
@ -133,6 +135,9 @@ U8 stepper_move(U8 Nmotor, int Nsteps){
void stop_motor(){ void stop_motor(){
TIM2_CR1 &= ~TIM_CR1_CEN; // Turn off timer TIM2_CR1 &= ~TIM_CR1_CEN; // Turn off timer
// turn all motors OFF
STPRS_OFF();
Ustep = 0;
Steps_left = 0; Steps_left = 0;
chk_esw = 1; chk_esw = 1;
DBG("stop\n"); DBG("stop\n");
@ -156,16 +161,13 @@ U8 chk_stpr_cmd(char N){
void stepper_get_esw(U8 Nmotor){ void stepper_get_esw(U8 Nmotor){
U8 sw; U8 sw;
char str[] = "[2 0 St=0]\n"; // 3 - motor number, 5 - endswitch (3 if none) char str[] = "[2 0 St=0]\n"; // 3 - motor number, 5 - endswitch (3 if none)
if(Nmotor == 0 || Nmotor > 7) return; // no running motor IWDG_KR = KEY_REFRESH; // refresh watchdog
STPRS_OFF(); if(Nmotor == 0 || Nmotor > 6) return; // no running motor
PORT(STP_SEL_PORT, ODR) |= (1 << (Nmotor/2)); ESW_SELECT(Nmotor);
if(Nmotor & 1) PORT(STP_SEL_PORT, ODR) |= 1<<4;
else PORT(STP_SEL_PORT, ODR) |= 1<<5;
str[3] = Nmotor + '0'; str[3] = Nmotor + '0';
sw = check_endsw(); sw = check_endsw();
if(sw == 0) sw = 3; if(sw == 0) sw = 3;
str[8] = sw + '0'; str[8] = sw + '0';
uart_write(str); uart_write(str);
STPRS_OFF(); cur_motor = 0;
cur_motor = 7;
} }

View File

@ -27,6 +27,7 @@
#define MIN_STEP_LENGTH 125 // max speed == 1/(125us*16) = 500 steps per second #define MIN_STEP_LENGTH 125 // max speed == 1/(125us*16) = 500 steps per second
extern volatile char Ustep;
extern volatile U8 chk_esw; extern volatile U8 chk_esw;
extern U8 cur_motor; extern U8 cur_motor;

View File

@ -40,7 +40,7 @@ void UART_send_byte(U8 byte){
}*/ }*/
void uart_write(char *str){ void uart_write(char *str){
while(tx_len); while(tx_len) {IWDG_KR = KEY_REFRESH;}
UART2_CR2 &= ~UART_CR2_TIEN; UART2_CR2 &= ~UART_CR2_TIEN;
tx_idx = 0; tx_idx = 0;
do{ do{
@ -117,6 +117,7 @@ void print_long(long Number){
U8 readInt(char *buff, int *val){ U8 readInt(char *buff, int *val){
U8 sign = 0, rb, bad = 1; U8 sign = 0, rb, bad = 1;
long R = 0; long R = 0;
IWDG_KR = KEY_REFRESH; // refresh watchdog
//usart_send("readInt, buff="); //usart_send("readInt, buff=");
//usart_send(buff); //usart_send(buff);
if(*buff == '-'){ if(*buff == '-'){
@ -128,7 +129,7 @@ U8 readInt(char *buff, int *val){
if(rb < '0' || rb > '9') break; if(rb < '0' || rb > '9') break;
bad = 0; bad = 0;
R = R * 10L + rb - '0'; R = R * 10L + rb - '0';
if(R > 0x7fff){ // bad value if(R > 0x7ffe){ // bad value
bad = 1; bad = 1;
break; break;
} }