diff --git a/STM8/Readme.md b/STM8/Readme.md index 5e58e82..d9de669 100644 --- a/STM8/Readme.md +++ b/STM8/Readme.md @@ -31,7 +31,7 @@ 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: +when all steps would 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, diff --git a/STM8/interrupts.c b/STM8/interrupts.c index aa49a1d..055db06 100644 --- a/STM8/interrupts.c +++ b/STM8/interrupts.c @@ -175,14 +175,16 @@ INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21){ U8 rb; if(UART2_SR & UART_SR_RXNE){ // data received rb = UART2_DR; // read received byte & clear RXNE flag + if(rb == ' ' || rb == '\t' || rb == '\r' || rb == '\n') return; // omit spaces + if(rb == '[') rx_idx = 0; // start of message //while(!(UART2_SR & UART_SR_TXE)); UART_rx[rx_idx++] = rb; // put received byte into cycled buffer //UART2_DR = rb; - if(rx_idx == UART_BUF_LEN && rb != '\n'){ // Oops: buffer overflow! Just forget old data + if(rx_idx == UART_BUF_LEN && rb != ']'){ // Oops: buffer overflow! Just forget old data rx_idx = 0; return; } - if(rb == '\n'){ + if(rb == ']'){ uart_rdy = 1; UART_rx[rx_idx] = 0; } diff --git a/STM8/main.c b/STM8/main.c index e565965..621c2f5 100644 --- a/STM8/main.c +++ b/STM8/main.c @@ -77,11 +77,11 @@ int main() { TIM1_ARRH = 0x0; TIM1_ARRL = 0xFF; TIM1_CCR1H = 0; - TIM1_CCR1L = 20; + TIM1_CCR1L = 1; // Minimal brightness TIM1_CCR2H = 0; - TIM1_CCR2L = 20; + TIM1_CCR2L = 1; TIM1_CCR3H = 0; - TIM1_CCR3L = 20; + TIM1_CCR3L = 1; // interrupts: none // PWM mode 1 - OC1M = 110 diff --git a/STM8/ports_definition.h b/STM8/ports_definition.h index 11ad374..134c578 100644 --- a/STM8/ports_definition.h +++ b/STM8/ports_definition.h @@ -67,7 +67,6 @@ // 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 @@ -77,8 +76,8 @@ #define ESW_PORT PA #define ESW_PINS 0x06 -// PA1 - "-", PA2 - "+" -#define ESW_PLUS 0x02 -#define ESW_MINUS 0x04 +// PA1 - "+", PA2 - "-" +#define ESW_PLUS 0x04 +#define ESW_MINUS 0x02 #endif // __PORTS_DEFINITION_H__ diff --git a/STM8/proto.c b/STM8/proto.c index b49cbf8..2f72691 100644 --- a/STM8/proto.c +++ b/STM8/proto.c @@ -36,7 +36,7 @@ U8 move_motor(char *cmd){ int steps; if(N < 1 || N > 6 || Steps_left) return 0; IWDG_KR = KEY_REFRESH; // refresh watchdog - cmd = omit_whitespace(cmd+1); + ++cmd; if(!readInt(cmd, &steps)) return 0; #ifdef EBUG uart_write("Move motor "); @@ -145,11 +145,11 @@ void LEDshine(char *cmd, U8 N){ U8 process_commands(char *cmd){ char s; IWDG_KR = KEY_REFRESH; // refresh watchdog - cmd = omit_whitespace(cmd + 1); + ++cmd; if(*cmd > '0' && *cmd < '7') return move_motor(cmd); s = *cmd; - cmd = omit_whitespace(cmd + 1); + ++cmd; switch(s){ case '?': uart_write("Steps_left="); @@ -197,27 +197,16 @@ U8 process_commands(char *cmd){ } void process_string(){ - U8 rbs, noerr=1, ctr; + U8 noerr=1, ctr; char buf[UART_BUF_LEN+1]; - char *cmd; + char *cmd = UART_rx; if(uart_rdy == 0) return; uart_rdy = 0; - if(rx_idx < 3 || UART_rx[0] != '[' || UART_rx[rx_idx - 2] != ']'){ - if(!chk_stpr_cmd(UART_rx[0])){ - DBG("Enter \"[cmd]\"\n"); - } - //if(rx_buffer[0] == 't'){ print_time(); return; } - rx_idx = 0; - noerr = 0; - } if(noerr){ // echo back given string - UART_rx[rx_idx] = 0; - cmd = omit_whitespace(&UART_rx[1]); + ++cmd; if(*cmd != '2') return; for(ctr = 0; ctr <= rx_idx; ++ctr) buf[ctr] = UART_rx[ctr]; - rbs = rx_idx; rx_idx = 0; - UART_rx[rbs - 2] = 0; if(process_commands(cmd)) uart_write(buf); } diff --git a/STM8/sco_platform.ihx b/STM8/sco_platform.ihx index 28c25ac..ce302a3 100644 --- a/STM8/sco_platform.ihx +++ b/STM8/sco_platform.ihx @@ -1,117 +1,110 @@ :2080A000AE5007F6AA0FF7AE5008F6AA0FF7AE5009F6AA0FF7AE5011F6AA1FF7AE5012F6F1 :2080C000AA1FF7AE5013F6AA1FF7AE5005F6A4F0F7AE500FF6A4F8F7AE500FF6AA18F781C2 -: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 +:2080E0005204965C891E0989CD86255B044D27441E01A3FFF72D3D1E01A37FFF2E36160193 +:2081000072A9000AAEFFFF65A3007D24034F2025CF00643504530C9E0F0390AE530D90F7AE +:208120004F9FAE530EF735015301AE5300F6AA84F7A601214F5B0481AE5001F6A5022604E8 +:20814000A6012008A5042603A602214F8152040D07270F7B07A10622091E082705CE006170 +:2081600027044FCC823690AE004C5F7B0797581F0372F90390FE35AA50E00D082A0B3501FA +:2081800000631E08501F082004725F00637B09C700627B08C70061AE005A9F1B0702A900BB +:2081A00095F69095AE500AF6A41F6B01909E4EA4F0481A01AE500AF7AE5005F6A4F0F7AE3E +:2081C000500FF6A4F8F7AE500FF6AA18F7AE500FF695909F4488A6016B03844D270508024C +:2081E0004A26FB9E1A02AE500FF7AE500FF690542408A4EFAE500FF72006A4F7AE500FF7E7 +:20820000CD8138027B0701889EC70066844D2714A1012609725D0063260A4F2007725D007C +:208220006327014F4D2706CD82394F2009AE5300F6AA01F7A6015B048172115300AE5005F1 +:20824000F6A4F0F7AE500FF6A4F8F7AE500FF6AA18F7725F00675FCF006135010043815238 +:2082600014965C5C1F0E1E0EA65BF71E0E5CA632F71E0E5C5CA620F71E0E1C00031F101EBB +:2082800010A630F71E0EA620E7041E0EA653E7051E0EA674E7061E0EA63DE7071E0E1C009B +:2082A000081F131E13A630F71E0EA65DE7091E0EA60AE70A1E0E1C000B7F35AA50E00D1795 +:2082C000274A7B17A1062244AE005A9F1B1702A90095F66B01AE500AF6A41F6B127B014E0B +:2082E000A4F0481A12AE500AF77B17AB301E10F7CD8138954D2603A603959EAB301E13F775 +:0F8300001E0E89CD84695B02725F00665B14817B +:208CCD0000080A02060405010900000003000200010000000400050001040300020500003C +:048CED00000000077C +:20830F0080808080808080808035005255808088AE5302F6A501277CA4FEAE5302F7AE508E +:20832F0005F6A4F06B01AE00449FCB006702A90095F61A01AE5005F7CE00612605CD823943 +:20834F002052CD81389095725D00632720725A0067C600674D2A3D35070067CE00615ACF69 +:20836F000061909EA101262CCD82392027725D0067260B909EA1022605CD82392016725CAD +:20838F000067C60067A1072D0B725F0067CE00615ACF00618480808080805202AE5240F6DB +:2083AF004D2A43725D006B260DAE5245F6A47FF7725F006A2030C6006BC1006A2319AE0061 +:2083CF00221F01C6006A97725C006A4F9572FB01F6AE5241F7200FAE5245F6A47FF7725F78 +:2083EF00006A725F006B5B02805202AE5240F6A5202761AE5241F6A1202759A1092755A1D5 +:20840F000D2751A10A274DA15B2604725F0069AE00011F0141C600694188C600694C95C76A +:20842F00006984024F0172FB01F7A15D2603A601214F88C60069A1208426094D2606725FD6 +:1A844F00006920104D270D350100685FC600699772FB017F5B0280808080EC +:018CF1000082 +:208469005202725D006B270635AA50E020F4721F5245725F006AAE00221F011E05C6006B6E +:208489009097725C006B4F909572F901F65C90F7F64D2707C6006BA12025E2AE5245F6AA6B +:2084A90080F75B028152255F1F101F0E7B2AA1042303CC85937B2AA1032603CC85930D2A4B +:2084C9002603CC8593965C5C1F124F5F9772FB127F4CA10C25F51E12A60AE70A7B2AA10199 +:2084E900270E7B2AA10227197B2AA104272E20451E28F66B1B4F5F6B101F0E7B1B6B112068 +:2085090034162817161E16FE1F14161417240F230F22162417101622170E2019162817201A +:208529001E20E6036B1FE6026B1EFE1F1C161E1710161C170EA6096B014B0A5F894B001E64 +:2085490014891E1489CD8B555B08517B010A015F9772FB12909FAB30F74B0A5F894B001EB6 +:2085690014891E1489CD8BEC5B081F10170E1E1026041E0E27067B01A1FF2CBD7B014C5FC2 +:208589009772FB1289CD84695B025B258152100F01961C00031F0F1E0F1C000B7F0D132AA9 +:2085A90014161590504F1214974F12139517151F13A6016B01A60B6B024B0A5F894B001E49 +:2085C90019891E1989CD8B305B089F0A025F417B024172FB0FAB30F74B0A5F894B001E192F +:2085E900891E1989CD8BC55B081F1517131E1526041E1327040D0226C07B020D0227110DCC +:2086090001270D7B024A5F9772FB0F88A62DF7845F9772FB0F89CD84695B128152140F06EF +:20862900A6016B055F1F031F0135AA50E01E17F6A12D2607A6016B065C1F171617170B1E2D +:208649000BF61E0B5C1F0BA12B27F4A1302552A139224E0F05881E04891E04894B0A5F89B9 +:208669004B00CD8C465B081F0A170884905F90975F905D2A015A72F9099F1908889E190876 +:20868900958472A20030A20002A2009517031F01AE7FFE13034F12024F12012EA2A6016B77 +:2086A900050D0527034F202F0D06271C7B04406B144F12036B134F12026B124F12016B01AE +:1A86C900161317037B126B021619170F1603170D1E0F160DFFA6015B1481E2 +:048CF200000000007E +:2080000082008083820000008200830F8200831082008311820083128200831382008314D2 +:208020008200831582008316820000008200000082008317820083188200831D8200831E89 +:20804000820083A5820083A6820083A78200000082000000820083A8820083A9820083F8C3 +:2080600082008466820084678200846882000000820000008200000082000000820000002F +:1D808300AE00422707724F00005A26F9AE00292709D68CCCD700425A26F7CC8080F7 +:03808000CC86E3C8 +:2086E300AE50C0F6AA08F772107F60350050C6AE500CF6AA0EF7AE500DF6AA0EF7AE500E03 +:20870300F6AA0EF735005260350F52613500526235FF526335005265350152663500526739 +:2087230035015268350052693501526A35605258356052593560525A3511525C3501525DCB +:2087430035815250721E526DAE5011F6AA20F7AE5012F6AA20F7AE5013F6AA20F735035290 +:208763004335685242352C5245AE03E8CF00643504530C3503530D35E8530E35015301AED8 +:208783005300F6AA84F7CD80A0AE5007F6AA30F7AE5008F6AA30F7AE501BF6AA10F7AE5024 +:2087A3001CF6AA10F7AE500CF6AAE0F7AE500DF6AAE0F7AE5003F6AA06F79A35CC50E03552 +:2087C3005550E0350650E135FF50E2AE880389CD84695B02AE50B3F64D2704351F50B335BB +:2087E300AA50E0725D00682703CD8AC8725D004327ED725F00433B0066CD825F8420E0818E +:2088030053636F7270696F20706C6174666F726D2072656164790A0052021E05F6A030A1D4 +:2088230001250AA106220690CE006127034F203435AA50E05C1F05965C88891E0889CD8616 +:20884300255B049784414D4126034F20171E01270B1E018988CD814D5B032008C7006635F4 +:208863000100434F5B0281521535AA50E01E18F66B157B1AA1372606A6016B1120020F1164 +:208883007B1AA1382606A6016B1220020F127B1AA1392606A6016B0D20020F0D7B15A12D7E +:2088A3002703CC8946965C1F131E13A65BF71E135CA632F71E135C5CA620F7161372A9005D +:2088C30003A64E90F71E13A620E7041E13A653E7051E13A674E7061E13A63DE7071E131C98 +:2088E30000081F0F1E0FA631F71E13A65DE7091E13A60AE70A1E131C000B7F7B1A90F70D4E +:2089030011260A0D1226100D0D2616201EAE5005F6A4106B0E2018AE5005F6A4206B0E2076 +:208923000EAE5019F6A4106B0E20044FCC89B20D0E26051E0FA630F71E1389CD84695B0261 +:208943004F206C7B15A13026300D11260A0D12260F0D0D2614201BAE5005F6A4EFF7201599 +:20896300AE5005F6A4DFF7200CAE5019F6A4EFF720034F203AA60120367B15A131262F0D31 +:2089830011260A0D12260F0D0D2614201BAE5005F6AA10F72015AE5005F6AA20F7200CAE3D +:2089A3005019F6AA10F720034F2004A601214F5B15815202965C891E0789CD86255B044D65 +:2089C30027370D012B331E01A300FF2C2C7B02887B08A100842712887B08A10184271088DB +:2089E3007B08A10284270E2010AE5266F7200AAE5268F72004AE526AF75B028135AA50E00D +:208A03001E035C1F031E03F6A1302D0DA1372E0989CD881B5B02CC8AC75CA130274AA1379A +:208A23002759A138275FA1392765A13F2713A1612767A162276BA1632771A1642777CC8A1A +:208A4300C2AE8B2289CD84695B0290CE00615F905D2A015A908989CD85965B04AE8B2E89ED +:208A6300CD84695B024F205CCD8239AE5005F6A4CFF7AE5019F6AAEFF720474B3789CD88C2 +:208A83006A5B03203F4B3889CD886A5B0320354B3989CD886A5B03202B89CD80E05B022086 +:208AA300234B0089CD89B55B0320174B0189CD89B55B03200D4B0289CD89B55B0320034F00 +:208AC3002002A601815229AE00011F2616261728725D00682746725F00681E285C1F011EA2 +:208AE30001F6A1322636961C00031F244F905F909772F9245F9772FB2688F69790F7844C6C +:208B0300C1006923E8725F00691E0189CD89FF5B024D27081E2489CD84695B025B298153D3 +:208B2300746570735F6C6566743D000A001E0916072A03CD8CC28990891E0916072A03CDB9 +:208B43008CC2899089CD8B555B087B032A03CD8CC28152030F030F017B0A484F494D262E4E +:208B6300160C1E0A905859170C1F0A1E08130C7B07120B7B06120A240D160C1E0A549056E5 +:208B8300170C1F0A20080C017B016B0320CA7B036B021E0872F00C7B07120B90977B0612A5 +:208BA3000A25061F0890951706160C1E0A549056170C1F0A7B020A024D26D71E0816065BD4 +:208BC30003811E0916072A03CD8CC28990891E0916072A03CD8CC2899089CD8BEC5B087B90 +:208BE3000318072A03CD8CC28152065F1F051F03A6206B027B09484F496B01160B1E0990AF +:208C03005859170B1F0916051E0390585917051F030D0127067B06AA016B061E0572F00F2F +:208C23007B04120E90977B03120D250C1F05909517037B0CAA016B0C0A0226B81E0B16095F +:208C43005B06815F89897B0A977B0E421F037B09977B0E4272FB021F024FA9006B017B0A56 +:208C6300977B0D4272FB021F024F19016B017B0A977B0C4272FB011F017B09977B0D427261 +:208C8300FB011F017B08977B0E4272FB011F017B07977B0E429F1B016B017B0A977B0B4253 +:208CA3009F1B016B017B09977B0C429F1B016B017B08977B0D429F1B016B019085858190C9 +:0A8CC300535D2703535C81905C8130 :00000001FF diff --git a/STM8/stepper.c b/STM8/stepper.c index f1ff2a1..e6be9fa 100644 --- a/STM8/stepper.c +++ b/STM8/stepper.c @@ -25,22 +25,19 @@ volatile U8 chk_esw = 0; // need 2 check end-switches -static const U8 usteps_matrix[8][8] = { - {0b1000, 0b1100, 0b0100, 0b0110, 0b0010, 0b0011, 0b0001, 0b1001}, // [1234] - {0b0010, 0b0110, 0b0100, 0b1100, 0b1000, 0b1001, 0b0001, 0b0011}, // [3214] - {0b1000, 0b1001, 0b0001, 0b0011, 0b0010, 0b0110, 0b0100, 0b1100}, // [1432] - {0b1000, 0b1010, 0b0010, 0b0110, 0b0100, 0b0101, 0b0001, 0b1001}, // [1324] - // inversion: cat | sed -e 's/0b/x/g' -e 's/0/y/g' -e 's/1/0/g' -e 's/y/1/g' -e s'/x/0b/g' - {0b0111, 0b0011, 0b1011, 0b1001, 0b1101, 0b1100, 0b1110, 0b0110}, // [1234] - {0b1101, 0b1001, 0b1011, 0b0011, 0b0111, 0b0110, 0b1110, 0b1100}, // [3214] - {0b0111, 0b0110, 0b1110, 0b1100, 0b1101, 0b1001, 0b1011, 0b0011}, // [1432] - {0b0111, 0b0101, 0b1101, 0b1001, 0b1011, 0b1010, 0b1110, 0b0110}, // [1324] -}; +U8 usteps[8] = {0b1000, 0b1010, 0b0010, 0b0110, 0b0100, 0b0101, 0b0001, 0b1001}; + +// numbers of motors in inner system: +// MOTOR6=5, MOTOR5=4, MOTOR4=0, MOTOR3=1, MOTOR2=2, MOTOR1=3 +static motors_numbers[7] = {0,3,2,1,0,4,5}; +// array of end-switches for appropriate motor number +// M1=e1, M2=e4, M3=e3, M4=e0, M5=e2, M6=e5 +static U8 esw_arr[7] = {0, 1, 4, 3, 0, 2, 5}; +#define ESW_SELECT(NUM) do{register U8 nsw = esw_arr[NUM]; register U8 C=PC_ODR & ~ESW_SEL_PINS; C |= ((nsw)<<5); PC_ODR = C;}while(0) volatile int Steps_left = 0; // Number of steps volatile char Dir = 0; // direction of moving: 0/1 U16 Stepper_speed = 0; // length of one MICROstep in us -U8 *usteps = &usteps_matrix[0][0]; U8 cur_motor = 7; /** * Setup pins of stepper motor (all - PP out) @@ -88,7 +85,7 @@ U8 stepper_ch_speed(char *spd){ * @return 0 if none pressed, 1 if "-", 2 if "+" */ U8 check_endsw(){ - // A1 - "-", A2 - "+" + // A1 - "+", A2 - "-" U8 pc = PORT(ESW_PORT, IDR); if(0 == (pc & ESW_MINUS)) return 1; if(0 == (pc & ESW_PLUS)) return 2; @@ -100,8 +97,9 @@ U8 check_endsw(){ * @return 1 if all OK, 0 if error occured */ U8 stepper_move(U8 Nmotor, int Nsteps){ - U8 c; + U8 c, nm; if(!Nmotor || Nmotor > 6 || !Nsteps || Steps_left) return 0; + nm = motors_numbers[Nmotor]; IWDG_KR = KEY_REFRESH; // refresh watchdog if(Nsteps < 0){ @@ -115,9 +113,9 @@ U8 stepper_move(U8 Nmotor, int Nsteps){ // turn all motors OFF STPRS_OFF(); // turn on the motor we need - 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; + PORT(STP_SEL_PORT, ODR) |= (1 << (nm/2)); + if(nm & 1) PORT(STP_SEL_PORT, ODR) &= ~GPIO_PIN4; + else PORT(STP_SEL_PORT, ODR) &= ~GPIO_PIN3; c = check_endsw(); cur_motor = Nmotor; if(c){ @@ -143,17 +141,6 @@ void stop_motor(){ DBG("stop\n"); } -/** - * User can change current stepper phases table - * N - position in table from 'a' (0) to 'h' (7) - * return 1 if all OK - */ -U8 chk_stpr_cmd(char N){ - if(N < 'a' || N > 'h') return 0; - usteps = &usteps_matrix[N-'a'][0]; - return 1; -} - /** * get end-switches state for all motors or only Nth * @param Nmotor - number of given motor diff --git a/STM8/stepper.h b/STM8/stepper.h index b70b5f4..0c6f4cb 100644 --- a/STM8/stepper.h +++ b/STM8/stepper.h @@ -34,7 +34,7 @@ extern U8 cur_motor; extern volatile int Steps_left; extern U16 Stepper_speed; extern volatile char Dir; -extern U8 *usteps; +extern U8 usteps[]; void setup_stepper_pins(); U8 stepper_ch_speed(char *spd); diff --git a/STM8/uart.c b/STM8/uart.c index efe5ea1..4d92e7f 100644 --- a/STM8/uart.c +++ b/STM8/uart.c @@ -49,12 +49,6 @@ void uart_write(char *str){ UART2_CR2 |= UART_CR2_TIEN; // enable TXE interrupt } -char *omit_whitespace(char *str){ - char c; - for(c = *str; c == ' ' || c == '\t' || c == '\r' || c == '\n'; c = *(++str)); - return str; -} - void printUint(U8 *val, U8 len){ unsigned long Number = 0; U8 i = len; @@ -126,6 +120,7 @@ U8 readInt(char *buff, int *val){ } do{ rb = *buff++; + if(rb == '+') continue; if(rb < '0' || rb > '9') break; bad = 0; R = R * 10L + rb - '0'; @@ -137,6 +132,6 @@ U8 readInt(char *buff, int *val){ //print_long(R); if(bad) return 0; if(sign) R = -R; - if(val) *val = (int)R; + *val = (int)R; return 1; }