diff --git a/STM8/Makefile b/STM8/Makefile index afd91ed..7935e43 100644 --- a/STM8/Makefile +++ b/STM8/Makefile @@ -6,7 +6,7 @@ LDFLAGS= -mstm8 --out-fmt-ihx -lstm8 FLASHFLAGS=-cstlinkv2 -pstm8s105?4 SRC=$(wildcard *.c) -DEFS = -DEBUG +#DEFS = -DEBUG OBJ=$(SRC:%.c=%.rel) TRASH=$(OBJ) $(SRC:%.c=%.rst) $(SRC:%.c=%.asm) $(SRC:%.c=%.lst) diff --git a/STM8/Readme.md b/STM8/Readme.md index 5f6fcae..5e58e82 100644 --- a/STM8/Readme.md +++ b/STM8/Readme.md @@ -5,11 +5,41 @@ SCORPIO platform controller PINS description -* D6 - USART Rx -* D5 - USART Tx -* D0..D2 - select motors pair -* D3, D4 - select motor from pair -* C1..C3 - LED1..LED3 -* B0..B3 - stepper motors' outputs -* B4, B5, F4 - relays (shutter, neon, flat) -* A1, A2 - end-switches ("-" and "+") +* D6 -- USART Rx +* D5 -- USART Tx +* D0..D2 -- select motors pair +* D3, D4 -- select motor from pair +* C1..C3 -- LED1..LED3 +* B0..B3 -- stepper motors' outputs +* B4, B5, F4 -- relays (shutter, neon, flat) +* 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. diff --git a/STM8/interrupts.c b/STM8/interrupts.c index a911a49..aa49a1d 100644 --- a/STM8/interrupts.c +++ b/STM8/interrupts.c @@ -91,12 +91,13 @@ INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13){ // generate pulses for stepp U8 sw; if(TIM2_SR1 & TIM_SR1_UIF){ 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){ stop_motor(); return; } - tmp = PORT(STP_PORT, ODR) & ~STP_PINS; - PORT(STP_PORT, ODR) = tmp | usteps[Ustep]; sw = check_endsw(); if(Dir){ @@ -109,13 +110,14 @@ INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13){ // generate pulses for stepp } } }else{ + if(Ustep == 0 && sw == 2){ // check end-switches only @ full steps + stop_motor(); + return; + } if(++Ustep > 7){ Ustep = 0; --Steps_left; - if(sw == 2){ - stop_motor(); - return; - } + } } } diff --git a/STM8/main.c b/STM8/main.c index 9db3185..e565965 100644 --- a/STM8/main.c +++ b/STM8/main.c @@ -114,21 +114,27 @@ int main() { setup_stepper_pins(); 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 enableInterrupts(); -/* + // Setup watchdog + IWDG_KR = KEY_ENABLE; // start watchdog IWDG_KR = KEY_ACCESS; // enable access to protected registers IWDG_PR = 6; // /256 IWDG_RLR = 0xff; // max time for watchdog (1.02s) - IWDG_KR = KEY_ENABLE; // start watchdog -*/ + // Loop + uart_write("Scorpio platform ready\n"); + if(RST_SR) RST_SR = 0x1f; // clear reset flags writing 1 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){ process_string(); } diff --git a/STM8/ports_definition.h b/STM8/ports_definition.h index 9e6a81b..11ad374 100644 --- a/STM8/ports_definition.h +++ b/STM8/ports_definition.h @@ -64,6 +64,11 @@ #define STP_PORT PB #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 #define STP_SEL_PORT PD #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 ESW_PORT PA +#define ESW_PINS 0x06 // PA1 - "-", PA2 - "+" #define ESW_PLUS 0x02 #define ESW_MINUS 0x04 diff --git a/STM8/proto.c b/STM8/proto.c index b118fe9..b49cbf8 100644 --- a/STM8/proto.c +++ b/STM8/proto.c @@ -34,7 +34,8 @@ U8 move_motor(char *cmd){ U8 N = (U8)*cmd - '0'; 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); if(!readInt(cmd, &steps)) return 0; #ifdef EBUG @@ -47,7 +48,8 @@ U8 move_motor(char *cmd){ if(steps) return stepper_move(N, steps); else{ // steps == 0 - just check endswitches - stepper_get_esw(N); + cur_motor = N; + chk_esw = 1; return 0; } } @@ -59,6 +61,7 @@ U8 move_motor(char *cmd){ */ U8 relay(char *cmd, char N){ U8 on = 0; + IWDG_KR = KEY_REFRESH; // refresh watchdog if(*cmd == '-'){ // just check char ans[] = "[2 N St=1]\n"; ans[3] = N; @@ -77,7 +80,7 @@ U8 relay(char *cmd, char N){ } if(!on) ans[8] = '0'; // off uart_write(ans); - return 1; + return 0; // not echo previous command } if(*cmd == '0'){ // turn OFF switch (N){ @@ -141,6 +144,7 @@ void LEDshine(char *cmd, U8 N){ */ U8 process_commands(char *cmd){ char s; + IWDG_KR = KEY_REFRESH; // refresh watchdog cmd = omit_whitespace(cmd + 1); if(*cmd > '0' && *cmd < '7') return move_motor(cmd); @@ -151,6 +155,7 @@ U8 process_commands(char *cmd){ uart_write("Steps_left="); print_long((long) Steps_left); uart_write("\n"); + return 0; break; case '0': // stop motors DBG("restart"); @@ -159,15 +164,15 @@ U8 process_commands(char *cmd){ break; case '7': DBG("Shutter"); - relay(cmd, '7'); + return relay(cmd, '7'); break; case '8': DBG("Neon"); - relay(cmd, '8'); + return relay(cmd, '8'); break; case '9': DBG("Flat"); - relay(cmd, '9'); + return relay(cmd, '9'); break; case 'a': return stepper_ch_speed(cmd); @@ -192,7 +197,8 @@ U8 process_commands(char *cmd){ } void process_string(){ - U8 rbs, noerr=1; + U8 rbs, noerr=1, ctr; + char buf[UART_BUF_LEN+1]; char *cmd; if(uart_rdy == 0) return; uart_rdy = 0; @@ -208,10 +214,11 @@ void process_string(){ UART_rx[rx_idx] = 0; cmd = omit_whitespace(&UART_rx[1]); if(*cmd != '2') return; + for(ctr = 0; ctr <= rx_idx; ++ctr) buf[ctr] = UART_rx[ctr]; rbs = rx_idx; rx_idx = 0; - uart_write(UART_rx); UART_rx[rbs - 2] = 0; - process_commands(cmd); + if(process_commands(cmd)) + uart_write(buf); } } diff --git a/STM8/sco_platform.ihx b/STM8/sco_platform.ihx index 3986c27..28c25ac 100644 --- a/STM8/sco_platform.ihx +++ b/STM8/sco_platform.ihx @@ -1,122 +1,117 @@ :2080A000AE5007F6AA0FF7AE5008F6AA0FF7AE5009F6AA0FF7AE5011F6AA1FF7AE5012F6F1 :2080C000AA1FF7AE5013F6AA1FF7AE5005F6A4F0F7AE500FF6A4F8F7AE500FF6AA18F781C2 -:2080E0005206961C0003891E0B89CD86F05B044D276E1E03A3FFF72D5E1E03A37FFF2E57A8 -:20810000160372A9000AAEFFFF651F01A3007D24034F204DCF00473504530C7B010F05AE01 -:20812000530DF77B02954F9EAE530EF735015301AE5300F6AA84F7AE83B289CD85255B02FD -:20814000965C4B0289CD857C5B03AE83C489CD85255B02A601200AAE83C689CD85255B02B4 -:208160004F5B0681AE5001F6A5042604A6012008A5022603A602214F81880D04270F7B0480 -:20818000A10622091E052705CE004427044FCC82380D052A0B350100461E05501F0520042E -:2081A000725F00467B06C700457B05C70044AE5005F6A4F0F7AE500FF6A4F8F7AE500FF673 -:2081C000AA18F7AE500FF6957B044488A6016B02844D270508014A26FB9E1A01AE500FF7C1 -:2081E000AE500FF6887B0544842408A4F7AE500FF72006A4EFAE500FF7CD8164027B0401F0 -:20820000889EC7004B844D2714A1012609725D0046260A4F2007725D004627014F4D270688 -:20822000CD823B4F2012AE83D789CD85255B02AE5300F6AA01F7A6015B0181AE5300F6A416 -:20824000FEF75FCF004435010043AE83E589CD85255B028152027B05A1612F067B05A168B6 -:208260002D034F201AAE83721F017B05A06197494FA2009558585872FB01CF0049A6015B0B -:2082800002815213965C1F121E12A65BF71E125CA632F71E125C5CA620F71E121C00031F3D -:2082A0000F1E0FA630F71E12A620E7041E12A653E7051E12A674E7061E12A63DE7071E1257 -:2082C0001C00081F0D1E0DA630F71E12A65DE7091E12A60AE70A1E121C000B7F0D16260340 -:2082E000CC836F7B16A1072303CC836FAE5005F6A4F0F7AE500FF6A4F8F7AE500FF6AA18C4 -:20830000F7AE500FF6957B164488A6016B12844D270508114A26FB9E1A11AE500FF7AE5001 -:208320000FF6887B1744842408AA10AE500FF72006AA20AE500FF77B16AB301E0FF7CD819A -:2083400064954D2603A603959EAB301E0DF71E1289CD85255B02AE5005F6A4F0F7AE500FB7 -:20836000F6A4F8F7AE500FF6AA18F73507004B5B1381080C0406020301090206040C0809EC -:208380000103080901030206040C080A02060405010907030B090D0C0E060D090B03070603 -:2083A0000E0C07060E0C0D090B0307050D090B0A0E065370656564206368616E6765642012 -:2083C000746F20000A004261642073706565642076616C75650A00737465707065725F6D42 -:0B83E0006F76650A0073746F700A006E -:098E7000000000000000837207FD -:2083EB0080808080808080808035005255808088AE5302F6A5012776A4FEAE5302F7CE00E8 -:20840B00442605CD823B2066AE5005F6A4F06B01C6004ACB004C97C60049A90095F61A01BD -:20842B00AE5005F7CD81649095725D00462720725A004CC6004C4D2A353507004CCE004494 -:20844B005ACF0044909EA1012624CD823B201F725C004CC6004CA1072D14725F004CCE00C1 -:20846B00445ACF0044909EA1022603CD823B8480808080805202AE5240F64D2A43725D00A5 -:20848B0050260DAE5245F6A47FF7725F004F2030C60050C1004F2319AE00221F01C6004F22 -:2084AB0097725C004F4F9572FB01F6AE5241F7200FAE5245F6A47FF7725F004F725F0050B8 -:2084CB005B02805203AE5240F6A5202747AE5241F66B01AE00011F02C6004E97725C004EBC -:2084EB004F9572FB027B01F77B01A10A2603A601214F88C6004EA1208426094D2606725FEA -:1A850B00004E20104D270D3501004D5FC6004E9772FB027F5B03808080807E -:018E790000F8 -:208525005202725D005026FA721F5245725F004FAE00221F011E05C600509097725C0050ED -:208545004F909572F901F65C90F7F64D2707C60050A12025E2AE5245F6AA80F75B02811EB6 -:2085650003F6A120270CA1092708A10D2704A10A26045CF620EC8152255F1F0F1F0D7B2ACE -:20858500A1042303CC86607B2AA1032603CC86600D2A2603CC8660965C1F124F5F9772FB4E -:2085A500127F4CA10C25F51E12A60AE70A7B2AA101270E7B2AA10227197B2AA104272E207E -:2085C500451E28F66B174F5F6B0F1F0D7B176B102034162817241E24FE1F22162217200F66 -:2085E5001F0F1E1620170F161E170D20191628171C1E1CE6036B1BE6026B1AFE1F18161A51 -:20860500170F1618170DA6096B114B0A5F894B001E13891E1389CD8CF85B08517B110A110A -:208625005F9772FB12909FAB30F74B0A5F894B001E13891E1389CD8D8F5B081F0F170D1E07 -:208645000F26041E0D27067B11A1FF2CBD7B114C5F9772FB1289CD85255B025B2581521062 -:208665000F0D965C1F0F1E0F1C000B7F0D132A14161590504F1214974F12139517151F130A -:20868500A6016B0DA60B6B0E4B0A5F894B001E19891E1989CD8CD35B089F0A0E5F417B0E15 -:2086A5004172FB0FAB30F74B0A5F894B001E19891E1989CD8D685B081F1517131E1526043E -:2086C5001E1327040D0E26C07B0E0D0E27110D0D270D7B0E4A5F9772FB0F88A62DF7845F94 -:2086E5009772FB0F89CD85255B128152100F02A6016B015F1F051F031E13F6A12D2607A681 -:20870500016B025C1F131613170B1E0BF61E0B5C1F0BA1302552A139224E0F01881E068968 -:208725001E06894B0A5F894B00CD8DE95B081F0A170884905F90975F905D2A015A72F90932 -:208745009F1908889E1908958472A20030A20002A2009517051F03AE7FFF13054F12044F9F -:2087650012032EA6A6016B010D0127034F202B0D02271C7B06406B104F12056B0F4F120453 -:1D8785006B0E4F12036B03160F17057B0E6B041E1527051E151605FFA6015B108114 -:048E7A0000000000F4 -:208000008200808382000000820083EB820083EC820083ED820083EE820083EF820083F0AA -:20802000820083F1820083F28200000082000000820083F3820083F4820083F9820083FA61 -:208040008200847B8200847C8200847D82000000820000008200847E8200847F820084CEB9 -:208060008200852282008523820085248200000082000000820000008200000082000000F8 -:1D808300AE00422707724F00005A26F9AE000E2709D68E6FD700425A26F7CC80806D -:03808000CC87A208 -:2087A200AE50C0F6AA08F772107F60350050C6AE500CF6AA0EF7AE500DF6AA0EF7AE500E43 -:2087C200F6AA0EF735005260350F52613500526235FF526335005265351452663500526767 -:2087E20035145268350052693514526A35605258356052593560525A3511525C3501525DE6 -:2088020035815250721E526DAE5011F6AA20F7AE5012F6AA20F7AE5013F6AA20F7350352D0 -:208822004335685242352C5245AE03E8CF00473504530C3503530D35E8530E35015301AE35 -:208842005300F6AA84F7CD80A0AE5007F6AA30F7AE5008F6AA30F7AE501BF6AA10F7AE5064 -:208862001CF6AA10F79A725D004D2703CD8BDA725D004327F1725F00433B004BCD82828408 -:2088820020E48152051E08F6A0306B037B03A10125067B03A10623034F206A5C89CD856496 -:2088A2005B021F04965C891E0689CD86F05B044D26034F2050AE8C7489CD85255B02961C7A -:2088C20000034B0189CD857C5B03AE8C8089CD85255B0216015F905D2A015A908989CD869E -:2088E200635B04AE8C8689CD85255B021E01270D1E01897B0588CD81795B0320087B038841 -:20890200CD8282844F5B058152151E18F66B157B1AA1372606A6016B1220020F127B1AA187 -:20892200382606A6016B0E20020F0E7B1AA1392606A6016B1120020F117B15A12D2703CC1E -:2089420089E3965C1F131E13A65BF71E135CA632F71E135C5CA620F7161372A90003A64E1F -:2089620090F71E13A620E7041E13A653E7051E13A674E7061E13A63DE7071E131C00081FC8 -:208982000F1E0FA631F71E13A65DE7091E13A60AE70A1E131C000B7F7B1A90F70D12260A93 -:2089A2000D0E26100D112616201EAE5005F6A4106B0D2018AE5005F6A4206B0D200EAE500E -:2089C20019F6A4106B0D20044FCC8A4F0D0D26051E0FA630F71E1389CD85255B02A60120AE -:2089E2006C7B15A13026300D12260A0D0E260F0D112614201BAE5005F6A4EFF72015AE506A -:208A020005F6A4DFF7200CAE5019F6A4EFF720034F203AA60120367B15A131262F0D122657 -:208A22000A0D0E260F0D112614201BAE5005F6AA10F72015AE5005F6AA20F7200CAE50196B -:208A4200F6AA10F720034F2004A601214F5B15815202965C891E0789CD86F05B044D273705 -:208A62000D012B331E01A300FF2C2C7B02887B08A100842712887B08A101842710887B0816 -:208A8200A10284270E2010AE5266F7200AAE5268F72004AE526AF75B028152021E055C89A3 -:208AA200CD85645B02F6A1302D0DA1372E0989CD88855B02CC8BD75C8889CD85645B021F04 -:208AC2000284A130275CA1372775A1382603CC8B56A1392603CC8B6BA13F271FA161260381 -:208AE200CC8B80A1622603CC8B8AA1632603CC8B9FA1642603CC8BB4CC8BC9AE8C8D89CDF7 -:208B020085255B0290CE00445F905D2A015A908989CD86635B04AE8C9989CD85255B02CC26 -:208B22008BCCAE8C9B89CD85255B02CD823BAE5005F6A4CFF7AE5019F6AAEFF7CC8BCCAE4F -:208B42008CA389CD85255B024B371E0289CD890A5B032076AE8CAB89CD85255B024B381E25 -:208B62000289CD890A5B032061AE8CB089CD85255B024B391E0289CD890A5B03204C1E016C -:208B820089CD80E05B02204DAE8CB589CD85255B024B001E0289CD8A525B03202DAE8CBACB -:208BA20089CD85255B024B011E0289CD8A525B032018AE8CBF89CD85255B024B021E0289D6 -:208BC200CD8A525B0320034F200BAE8C9989CD85255B02A6015B02815207A6016B03725DFD -:208BE200004D2603CC8C71725F004DC6004EA103251C90AE000190F6A15B26125FC6004EB1 -:208C0200975A5A1F0672F90690F6A15D271CAE0001F688CD82545B014D2609AE8CC489CDAE -:208C220085255B02725F004E0F030D032741AE00011F045FC6004E9772FB047F1E045C89AF -:208C4200CD85645B021F011E01F6A1322621C6004E725F004E1E048889CD85255B02845F93 -:208C6200975A5A72FB047F1E0189CD8A9C5B025B07814D6F7665206D6F746F72200020664E -:208C82006F72200073746570730A0053746570735F6C6566743D000A007265737461727433 -:208CA2000053687574746572004E656F6E00466C6174004C454431004C454432004C4544CA -:208CC2003300456E74657220225B636D645D220A001E0916072A03CD8E658990891E0916F7 -:208CE200072A03CD8E65899089CD8CF85B087B032A03CD8E658152030F030F017B0A484FA9 -:208D0200494D262E160C1E0A905859170C1F0A1E08130C7B07120B7B06120A240D160C1E9E -:208D22000A549056170C1F0A20080C017B016B0320CA7B036B021E0872F00C7B07120B90EA -:208D4200977B06120A25061F0890951706160C1E0A549056170C1F0A7B020A024D26D71E88 -:208D62000816065B03811E0916072A03CD8E658990891E0916072A03CD8E65899089CD8DEE -:208D82008F5B087B0318072A03CD8E658152065F1F051F03A6206B027B09484F496B0116BE -:208DA2000B1E09905859170B1F0916051E0390585917051F030D0127067B06AA016B061E43 -:208DC2000572F00F7B04120E90977B03120D250C1F05909517037B0CAA016B0C0A0226B891 -:208DE2001E0B16095B06815F89897B0A977B0E421F037B09977B0E4272FB021F024FA9005F -:208E02006B017B0A977B0D4272FB021F024F19016B017B0A977B0C4272FB011F017B09970B -:208E22007B0D4272FB011F017B08977B0E4272FB011F017B07977B0E429F1B016B017B0AD5 -:208E4200977B0B429F1B016B017B09977B0C429F1B016B017B08977B0D429F1B016B0190E4 -:0E8E620085858190535D2703535C81905C8170 +:2080E0005204965C891E0989CD86775B044D27441E01A3FFF72D3D1E01A37FFF2E36160141 +:2081000072A9000AAEFFFF65A3007D24034F2025CF00473504530C9E0F0390AE530D90F7CB +:208120004F9FAE530EF735015301AE5300F6AA84F7A601214F5B0481AE5001F6A5042604E6 +:20814000A6012008A5022603A602214F8152020D05270F7B05A10622091E062705CE004497 +:2081600027044FCC822735AA50E00D062A0B350100461E06501F062004725F00467B07C720 +:2081800000457B06C70044AE500AF6A41F6B027B054A4EA4F0481A02AE500AF7AE5005F6D8 +:2081A000A4F0F7AE500FF6A4F8F7AE500FF6AA18F7AE500FF66B015F7B05975A4B024B000B +:2081C00089CD8D715B049FAE00014D2704584A26FC9F1A01AE500FF7AE500FF6887B064454 +:2081E000842408A4F7AE500FF72006A4EFAE500FF7CD8138027B0501889EC7004B844D273A +:2082000014A1012609725D0046260A4F2007725D004627014F4D2706CD822A4F2009AE53C6 +:2082200000F6AA01F7A6015B028172115300AE5005F6A4F0F7AE500FF6A4F8F7AE500FF62E +:20824000AA18F7725F004C5FCF0044350100438152027B05A1612F067B05A1682D034F20A9 +:208260001AAE83211F017B05A06197494FA2009558585872FB01CF0049A6015B0281521313 +:20828000965C1F0F1E0FA65BF71E0F5CA632F71E0F5C5CA620F71E0F1C00031F0D1E0DA656 +:2082A00030F71E0FA620E7041E0FA653E7051E0FA674E7061E0FA63DE7071E0F1C00081F05 +:2082C000111E11A630F71E0FA65DE7091E0FA60AE70A1E0F1C000B7F35AA50E00D16273E39 +:2082E0007B16A1062238AE500AF6A41F6B137B164A4EA4F0481A13AE500AF77B16AB301EF2 +:208300000DF7CD8138954D2603A603959EAB301E11F71E0F89CD84A35B02725F004B5B135A +:2083200081080C0406020301090206040C08090103080901030206040C080A020604050111 +:208340000907030B090D0C0E060D090B0307060E0C07060E0C0D090B0307050D090B0A0EEE +:018360000616 +:098D90000000000000008321072F +:2083610080808080808080808035005255808088AE5302F6A501277EA4FEAE5302F7AE503A +:2083810005F6A4F06B01C6004ACB004C97C60049A90095F61A01AE5005F7CE00442605CDC1 +:2083A100822A2052CD81389095725D00462720725A004CC6004C4D2A3D3507004CCE00441F +:2083C1005ACF0044909EA101262CCD822A2027725D004C260B909EA1022605CD822A201656 +:2083E100725C004CC6004CA1072D0B725F004CCE00445ACF00448480808080805202AE527C +:2084010040F64D2A43725D0050260DAE5245F6A47FF7725F004F2030C60050C1004F2319F2 +:20842100AE00221F01C6004F97725C004F4F9572FB01F6AE5241F7200FAE5245F6A47FF77E +:20844100725F004F725F00505B02805203AE5240F6A5202747AE5241F66B01AE00011F02CC +:20846100C6004E97725C004E4F9572FB027B01F77B01A10A2603A601214F88C6004EA120AA +:208481008426094D2606725F004E20104D270D3501004D5FC6004E9772FB027F5B03808006 +:0284A1008080D9 +:018D990000D9 +:2084A3005202725D0050270635AA50E020F4721F5245725F004FAE00221F011E05C6005085 +:2084C3009097725C00504F909572F901F65C90F7F64D2707C60050A12025E2AE5245F6AA67 +:2084E30080F75B02811E03F6A120270CA1092708A10D2704A10A26045CF620EC8152255FDD +:208503001F031F017B2AA1042303CC85E67B2AA1032603CC85E60D2A2603CC85E6961C007D +:20852300061F144F5F9772FB147F4CA10C25F51E14A60AE70A7B2AA101270E7B2AA10227E9 +:20854300197B2AA104272E20451E28F66B214F5F6B031F017B216B042034162817121E1201 +:20856300FE1F1C161C171A0F190F18161A1703161817012019162817161E16E6036B25E646 +:20858300026B24FE1F221624170316221701A6096B054B0A5F894B001E07891E0789CD8C08 +:2085A300045B08517B050A055F9772FB14909FAB30F74B0A5F894B001E07891E0789CD8CBC +:2085C3009B5B081F0317011E0326041E0127067B05A1FF2CBD7B054C5F9772FB1489CD84A3 +:2085E300A35B025B258152100F0E965C5C1F0F1E0F1C000B7F0D132A14161590504F1214CB +:20860300974F12139517151F13A6016B0EA60B6B014B0A5F894B001E19891E1989CD8BDFDD +:208623005B089F0A015F417B014172FB0FAB30F74B0A5F894B001E19891E1989CD8C745B4F +:20864300081F1517131E1526041E1327040D0126C07B010D0127110D0E270D7B014A5F9737 +:2086630072FB0F88A62DF7845F9772FB0F89CD84A35B128152100F06A6016B055F1F031F9A +:208683000135AA50E01E13F6A12D2607A6016B065C1F131613170B1E0BF61E0B5C1F0BA145 +:2086A300302552A139224E0F05881E04891E04894B0A5F894B00CD8CF55B081F0A170884CF +:2086C300905F90975F905D2A015A72F9099F1908889E1908958472A20030A20002A20095FD +:2086E30017031F01AE7FFE13034F12024F12012EA6A6016B050D0527034F202B0D06271C20 +:208703007B04406B104F12036B0F4F12026B0E4F12016B01160F17037B0E6B021E15270500 +:0A8723001E151603FFA6015B10816E +:048D9A0000000000D5 +:208000008200808382000000820083618200836282008363820083648200836582008366E6 +:2080200082008367820083688200000082000000820083698200836A8200836F820083709D +:20804000820083F9820083FA820083FB8200000082000000820083FC820083FD8200844CCA +:20806000820084A0820084A1820084A2820000008200000082000000820000008200000081 +:1D808300AE00422707724F00005A26F9AE000E2709D68D8FD700425A26F7CC80804E +:03808000CC872D7D +:20872D00AE50C0F6AA08F772107F60350050C6AE500CF6AA0EF7AE500DF6AA0EF7AE500EB8 +:20874D00F6AA0EF735005260350F52613500526235FF5263350052653514526635005267DC +:20876D0035145268350052693514526A35605258356052593560525A3511525C3501525D5B +:20878D0035815250721E526DAE5011F6AA20F7AE5012F6AA20F7AE5013F6AA20F735035246 +:2087AD004335685242352C5245AE03E8CF00473504530C3503530D35E8530E35015301AEAB +:2087CD005300F6AA84F7CD80A0AE5007F6AA30F7AE5008F6AA30F7AE501BF6AA10F7AE50DA +:2087ED001CF6AA10F7AE500CF6AAE0F7AE500DF6AAE0F7AE5003F6AA06F79A35CC50E03508 +:20880D005550E0350650E135FF50E2AE884D89CD84A35B02AE50B3F64D2704351F50B335EC +:20882D00AA50E0725D004D2703CD8B24725D004327ED725F00433B004BCD827E8420E081FD +:20884D0053636F7270696F20706C6174666F726D2072656164790A0052041E07F6A030A186 +:20886D0001250AA106220690CE004427034F203C35AA50E05C8889CD84E85B021F04849626 +:20888D005C88891E0689CD86775B049784414D4126034F20171E01270B1E018988CD814DD3 +:2088AD005B032008C7004B350100434F5B0481521535AA50E01E18F66B117B1AA1372606B4 +:2088CD00A6016B1020020F107B1AA1382606A6016B0E20020F0E7B1AA1392606A6016B0F73 +:2088ED0020020F0F7B11A12D2703CC8998965C1F121E12A65BF71E125CA632F71E125C5C2C +:20890D00A620F7161272A90003A64E90F71E12A620E7041E12A653E7051E12A674E7061E81 +:20892D0012A63DE7071E121C00081F141E14A631F71E12A65DE7091E12A60AE70A1E121C80 +:20894D00000B7F7B1A90F70D10260A0D0E26100D0F2616201EAE5005F6A4106B0D2018AE25 +:20896D005005F6A4206B0D200EAE5019F6A4106B0D20044FCC8A040D0D26051E14A630F7EB +:20898D001E1289CD84A35B024F206C7B11A13026300D10260A0D0E260F0D0F2614201BAE56 +:2089AD005005F6A4EFF72015AE5005F6A4DFF7200CAE5019F6A4EFF720034F203AA60120D7 +:2089CD00367B11A131262F0D10260A0D0E260F0D0F2614201BAE5005F6AA10F72015AE5096 +:2089ED0005F6AA20F7200CAE5019F6AA10F720034F2004A601214F5B15815202965C891E39 +:208A0D000789CD86775B044D27370D012B331E01A300FF2C2C7B02887B08A10084271288F2 +:208A2D007B08A101842710887B08A10284270E2010AE5266F7200AAE5268F72004AE526A3E +:208A4D00F75B028135AA50E01E035C89CD84E85B02F6A1302D0DA1372E0989CD88655B02D9 +:208A6D00CC8B235C8889CD84E85B0284A130274AA1372759A138275FA1392765A13F27136F +:208A8D00A1612767A162276BA1632771A1642777CC8B1EAE8BD189CD84A35B0290CE00446A +:208AAD005F905D2A015A908989CD85E95B04AE8BDD89CD84A35B024F205CCD822AAE500565 +:208ACD00F6A4CFF7AE5019F6AAEFF720474B3789CD88BC5B03203F4B3889CD88BC5B0320B1 +:208AED00354B3989CD88BC5B03202B89CD80E05B0220234B0089CD8A075B0320174B01897B +:208B0D00CD8A075B03200D4B0289CD8A075B0320034F2002A60181522AA6016B01725D00B3 +:208B2D004D2603CC8BCE725F004DC6004EA103251C90AE000190F6A15B26125FC6004E9773 +:208B4D005A5A1F2772F92790F6A15D270FAE0001F688CD825084725F004E0F010D012761AD +:208B6D00AE00011F255FC6004E9772FB257F1E255C89CD84E85B021F021E02F6A1322641AB +:208B8D00961C00041F294F905F909772F9295F9772FB2588F69790F7844CC1004E23E8C6FD +:208BAD00004E725F004E5F975A5A72FB257F1E0289CD8A515B024D27081E2989CD84A35B37 +:208BCD00025B2A8153746570735F6C6566743D000A001E0916072A03CD8D858990891E0907 +:208BED0016072A03CD8D85899089CD8C045B087B032A03CD8D858152030F030F017B0A488E +:208C0D004F494D262E160C1E0A905859170C1F0A1E08130C7B07120B7B06120A240D160C63 +:208C2D001E0A549056170C1F0A20080C017B016B0320CA7B036B021E0872F00C7B07120B52 +:208C4D0090977B06120A25061F0890951706160C1E0A549056170C1F0A7B020A024D26D70C +:208C6D001E0816065B03811E0916072A03CD8D858990891E0916072A03CD8D85899089CD15 +:208C8D008C9B5B087B0318072A03CD8D858152065F1F051F03A6206B027B09484F496B0113 +:208CAD00160B1E09905859170B1F0916051E0390585917051F030D0127067B06AA016B0641 +:208CCD001E0572F00F7B04120E90977B03120D250C1F05909517037B0CAA016B0C0A022621 +:208CED00B81E0B16095B06815F89897B0A977B0E421F037B09977B0E4272FB021F024FA99D +:208D0D00006B017B0A977B0D4272FB021F024F19016B017B0A977B0C4272FB011F017B0998 +:208D2D00977B0D4272FB011F017B08977B0E4272FB011F017B07977B0E429F1B016B017B3E +:208D4D000A977B0B429F1B016B017B09977B0C429F1B016B017B08977B0D429F1B016B0160 +:208D6D00908585811E039E16052A034390505D2A0150654D2A01508190535D2703535C8181 +:038D8D00905C8176 :00000001FF diff --git a/STM8/stepper.c b/STM8/stepper.c index b44b26c..f1ff2a1 100644 --- a/STM8/stepper.c +++ b/STM8/stepper.c @@ -102,6 +102,7 @@ U8 check_endsw(){ U8 stepper_move(U8 Nmotor, int Nsteps){ U8 c; if(!Nmotor || Nmotor > 6 || !Nsteps || Steps_left) return 0; + IWDG_KR = KEY_REFRESH; // refresh watchdog if(Nsteps < 0){ Dir = 1; @@ -109,11 +110,12 @@ U8 stepper_move(U8 Nmotor, int Nsteps){ }else Dir = 0; Steps_left = Nsteps; + // select endswitch + ESW_SELECT(Nmotor); + // turn all motors OFF STPRS_OFF(); - - // turn all OFF // 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; else PORT(STP_SEL_PORT, ODR) &= ~GPIO_PIN4; c = check_endsw(); @@ -133,6 +135,9 @@ U8 stepper_move(U8 Nmotor, int Nsteps){ void stop_motor(){ TIM2_CR1 &= ~TIM_CR1_CEN; // Turn off timer + // turn all motors OFF + STPRS_OFF(); + Ustep = 0; Steps_left = 0; chk_esw = 1; DBG("stop\n"); @@ -156,16 +161,13 @@ U8 chk_stpr_cmd(char N){ void stepper_get_esw(U8 Nmotor){ U8 sw; char str[] = "[2 0 St=0]\n"; // 3 - motor number, 5 - endswitch (3 if none) - if(Nmotor == 0 || Nmotor > 7) return; // no running motor - STPRS_OFF(); - PORT(STP_SEL_PORT, ODR) |= (1 << (Nmotor/2)); - if(Nmotor & 1) PORT(STP_SEL_PORT, ODR) |= 1<<4; - else PORT(STP_SEL_PORT, ODR) |= 1<<5; + IWDG_KR = KEY_REFRESH; // refresh watchdog + if(Nmotor == 0 || Nmotor > 6) return; // no running motor + ESW_SELECT(Nmotor); str[3] = Nmotor + '0'; sw = check_endsw(); if(sw == 0) sw = 3; str[8] = sw + '0'; uart_write(str); - STPRS_OFF(); - cur_motor = 7; + cur_motor = 0; } diff --git a/STM8/stepper.h b/STM8/stepper.h index dbd8e61..b70b5f4 100644 --- a/STM8/stepper.h +++ b/STM8/stepper.h @@ -27,6 +27,7 @@ #define MIN_STEP_LENGTH 125 // max speed == 1/(125us*16) = 500 steps per second +extern volatile char Ustep; extern volatile U8 chk_esw; extern U8 cur_motor; diff --git a/STM8/uart.c b/STM8/uart.c index 153b714..efe5ea1 100644 --- a/STM8/uart.c +++ b/STM8/uart.c @@ -40,7 +40,7 @@ void UART_send_byte(U8 byte){ }*/ void uart_write(char *str){ - while(tx_len); + while(tx_len) {IWDG_KR = KEY_REFRESH;} UART2_CR2 &= ~UART_CR2_TIEN; tx_idx = 0; do{ @@ -117,6 +117,7 @@ void print_long(long Number){ U8 readInt(char *buff, int *val){ U8 sign = 0, rb, bad = 1; long R = 0; + IWDG_KR = KEY_REFRESH; // refresh watchdog //usart_send("readInt, buff="); //usart_send(buff); if(*buff == '-'){ @@ -128,7 +129,7 @@ U8 readInt(char *buff, int *val){ if(rb < '0' || rb > '9') break; bad = 0; R = R * 10L + rb - '0'; - if(R > 0x7fff){ // bad value + if(R > 0x7ffe){ // bad value bad = 1; break; }