diff --git a/Makefile b/Makefile index 4ccedb3..8608e34 100644 --- a/Makefile +++ b/Makefile @@ -10,29 +10,29 @@ DEFS = -DBAUD=9600 DEFS += -DEBUG LIBS = -SRC=$(wildcard *.c) -HEX = $(NAME).hex -ELF = $(NAME).elf -OBJECTS = $(SRC:%.c=%.o) - # controller -DEVICE = atmega328p -#atmega8535 +DEVICE = atmega8535 +#Тактовая частота 8 МГц +CLOCK = 8000000 +# partno (for avrdude) +PARTNO = m8535 CFLAGS = -g -Wall $(OPTIMIZE) $(DEFS) LDFLAGS = -Wl,-Map,$(NAME).map # programmer (for avrdude) -PROGRAMMER = arduino -# partno (for avrdude) -PARTNO = m328p +PROGRAMMER = avrisp + # serial port device (for avrdude) SERPORT = /dev/ttyUSB0 -#Тактовая частота 16 МГц -CLOCK = 16000000 + +SRC=$(wildcard *.c) +HEX = $(NAME).hex +ELF = $(NAME).elf +OBJECTS = $(SRC:%.c=%.o) # avrdude command from arduino IDE -AVRDUDE = avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -p$(PARTNO) -c$(PROGRAMMER) -P$(SERPORT) -b115200 -D +AVRDUDE = avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -p$(PARTNO) -c$(PROGRAMMER) -P$(SERPORT) -b19200 -D COMPILE = $(CC) $(CFLAGS) -mmcu=$(DEVICE) -DF_CPU=$(CLOCK) @@ -40,7 +40,7 @@ all: $(HEX) lst $(ELF): $(OBJECTS) @echo "ELF" - @$(COMPILE) -o $(ELF) $(OBJECTS) $(LIBS) + @$(COMPILE) $(LDFLAGS) -o $(ELF) $(OBJECTS) $(LIBS) $(HEX): $(ELF) @echo "HEX" @@ -65,7 +65,7 @@ lst: $(NAME).lst flash: all @echo "Flash" - @$(AVRDUDE) -U flash:w:$(HEX):i + $(AVRDUDE) -U flash:w:$(HEX):i clean: @echo "Clean" diff --git a/includes.h b/includes.h index be6ec1f..84814d6 100644 --- a/includes.h +++ b/includes.h @@ -48,6 +48,27 @@ #define STPRS_OFF() do{PORTD |= 0xfc; PORTC |= 0x0f;}while(0) #define DDRAB DDRA #define PORTAB PORTA + // 8535 have common irq register for all timers + #define TIMSK0 TIMSK + #define TIMSK1 TIMSK + #define UCSR0A UCSRA + #define UCSR0B UCSRB + #define UCSR0C UCSRC + #define UDRIE0 UDRIE + #define FE0 FE + #define UPE0 PE + #define DOR0 DOR + #define UDRIE0 UDRIE + #define UDR0 UDR + #define UBRR0H UBRRH + #define UBRR0L UBRRL + #define U2X0 U2X + #define UCSZ01 UCSZ1 + #define UCSZ00 UCSZ0 + #define RXEN0 RXEN + #define TXEN0 TXEN + #define RXCIE0 RXCIE + #define LED1_PIN (_BV(0)) #define LED2_PIN (_BV(1)) #define LED3_PIN (_BV(2)) diff --git a/main.c b/main.c index 08b9711..4fc0b4a 100644 --- a/main.c +++ b/main.c @@ -45,6 +45,7 @@ int main() { /** USART config **/ // set baudrate (using macros from util/setbaud.h) + #if !defined (__AVR_ATmega8535__) UBRR0H = UBRRH_VALUE; UBRR0L = UBRRL_VALUE; @@ -53,6 +54,11 @@ int main() { #else UCSR0A &= ~(_BV(U2X0)); #endif + #else // __AVR_ATmega8535__ + UCSRA &= ~(_BV(U2X0)); + UBRRH = 0; + UBRRL = 51; + #endif UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); // 8-bit data UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0); // Enable RX and TX, enable RX interrupt @@ -70,7 +76,9 @@ int main() { stepper_setup(); sei(); // enable interrupts + wdt_enable(WDTO_2S); // start watchdog + usart_send("Scorpio platform ready\n"); while(1){ wdt_reset(); @@ -104,4 +112,7 @@ ISR(TIMER0_OVF_vect){ if(shi_counter == LEDs[1]) PORTAB &= ~LED2_PIN; if(shi_counter == LEDs[2]) PORTAB &= ~LED3_PIN; ++shi_counter; +// #if defined (__AVR_ATmega8535__) +// TCNT0 += 128; +// #endif } diff --git a/proto.c b/proto.c index b095fcf..31e8d0a 100644 --- a/proto.c +++ b/proto.c @@ -95,8 +95,9 @@ uint8_t process_commands(char *cmd){ char s = *cmd; cmd = omit_whitespace(cmd + 1); switch(s){ - case '0': + case '0': // stop motors DBG("restart"); + stop_motors(); break; case '7': DBG("Shutter"); @@ -145,9 +146,14 @@ void process_string(){ noerr = 0; } if(rx_bufsize < 3 || rx_buffer[0] != '[' || rx_buffer[rx_bufsize - 2] != ']'){ + #ifdef EBUG + usart_send(rx_buffer); + #endif + if(!chk_stpr_cmd(rx_buffer[0])){ + DBG("Enter \"[cmd]\"\n"); + } //if(rx_buffer[0] == 't'){ print_time(); return; } rx_bufsize = 0; - DBG("Enter \"[cmd]\"\n"); noerr = 0; } if(noerr){ // echo back given string diff --git a/scorpio.hex b/scorpio.hex index abca6d4..2c4ce44 100644 --- a/scorpio.hex +++ b/scorpio.hex @@ -1,201 +1,192 @@ -:100000000C9434000C9451000C9451000C94510049 -:100010000C9451000C9451000C9451000C9451001C -:100020000C9451000C9451000C9451000C94B601A6 -:100030000C9451000C9451000C9451000C945100FC -:100040000C9498030C9451000C942D030C946203AF -:100050000C9451000C9451000C9451000C945100DC -:100060000C9451000C94510011241FBECFEFD8E026 -:10007000DEBFCDBF11E0A0E0B1E0E8EBFBE002C0E5 -:1000800005900D92AA3BB107D9F722E0AAEBB1E0A7 -:1000900001C01D92A530B207E1F70E942A050C9419 -:1000A000DA050C94000086B184FF04C085FF04C00B -:1000B00080E0089581E0089582E00895E1E8F0E0AD -:1000C00080818860808380ED97E0909389008093A1 -:1000D0008800808182608083EFE6F0E0808182602A -:1000E000808388B1806388B90895CF93DF9300D06F -:1000F00000D0CDB7DEB7BE016D5F7F4F0E94E60234 -:100100008823B1F16B817C81683F8FEF780764F1C0 -:100110006F3F8FE7780741F1665F7F4F8FEF9FEF6B -:100120000E946B057A83698380916F008D7F809335 -:100130006F0089819A819093890080938800109242 -:1001400085001092840080916F00826080936F0020 -:100150008CE091E00E94C50162E0CE0101960E9410 -:10016000660287EB91E002C08EE191E00E94C5013A -:1001700080E00F900F900F900F90DF91CF91089536 -:10018000CF93DF93CDB7DEB72C970FB6F894DEBFD1 -:100190000FBECDBF9FEF980F973020F59BB19C6F9E -:1001A0009BB99BB122E030E0082E01C0220F0A94D7 -:1001B000EAF7209529232BB99CE0EFE2F1E0DE017C -:1001C000119601900D929A95E1F7805D8C830E94C3 -:1001D0005300811101C083E0805D8987CE010196C3 -:1001E0000E94C5012C960FB6F894DEBF0FBECDBF9E -:1001F000DF91CF9108958091BB010E94C0008BB127 -:100200008C6F8BB988B1807F88B9EFE6F0E0808190 -:100210008D7F80831092BA011092E3011092E20167 -:100220001092BD011092BB0108951F93CF93DF93ED -:10023000182FEB018FEF810F863008F04AC020970E -:1002400009F447C08091E2019091E301892B09F004 -:1002500040C080916F008D7F80936F008BB18C6F59 -:100260008BB988B1807F88B92BB182E090E0012EF4 -:1002700001C0880F0A94EAF7809582238BB90E9407 -:1002800053001093BB01882379F0813021F41C16B0 -:100290001D0664F01CC0D7FF1AC0D195C195D109C5 -:1002A00081E08093BC0104C0D7FDF7CF1092BC0160 -:1002B000D093E301C093E201109285001092840074 -:1002C00080916F00826080936F0081E003C00E9484 -:1002D000FB0080E0DF91CF911F9108951092BA0149 -:1002E00088B1E091BD010E2E000CFF0BEC5FFE4FBC -:1002F000807F9081892B88B90E9453002091BC0196 -:100300009091BD012223B9F0915097FD03C09093C5 -:10031000BD010DC097E09093BD012091E2013091A5 -:10032000E301215031093093E3012093E201813050 -:10033000B1F40C94FB009F5F98301CF49093BD01C6 -:100340000CC01092BD012091E2013091E3012150D7 -:1003500031093093E3012093E201823051F380911F -:10036000E2019091E301892B21F308951F920F92EE -:100370000FB60F9211248F9381E08093BA018F9171 -:100380000F900FBE0F901F9018952091000120FF35 -:10039000FCCF209100012A7F209300011092BE0122 -:1003A0001092BF01DC018091BF01803278F48D9101 -:1003B000882361F0E091BF01F0E0EF53FE4F8083AE -:1003C0008091BF018F5F8093BF01EDCF8091BF010E -:1003D000803251F41092BF018091000181608093BE -:1003E000000181E090E008958091C10080628093D7 -:1003F000C10080E090E008958F929F92AF92BF92EB -:10040000DF92EF92FF920F931F93CF93DF93CDB7BD -:10041000DEB72C970FB6F894DEBF0FBECDBF1C869B -:1004200097FF0AC090958095709561957F4F8F4F8B -:100430009F4FDD24D39401C0D12C0BE03AE0832EF2 -:10044000912CA12CB12C1FEF100FEE24E394F12C72 -:10045000EC0EFD1EE10EF11CA50194010E94A10508 -:10046000605DF7016083B901CA01611571058105FD -:10047000910521F0012F1111E6CF0EC0112361F07B -:10048000DD2051F01EEF100FE1E0F0E0EC0FFD1F5A -:10049000E10FF11D8DE2808381E090E08C0F9D1FC4 -:1004A000810F911D0E94C5012C960FB6F894DEBFF6 -:1004B0000FBECDBFDF91CF911F910F91FF90EF90B5 -:1004C000DF90BF90AF909F908F9008958F929F92F2 -:1004D000AF92BF92CF92DF92FF920F931F93CF9371 -:1004E000DF93CDB7DEB72B970FB6F894DEBF0FBE04 -:1004F000CDBFDC01633009F44AC08FEF860F843032 -:1005000008F045C0FE013196CE010C968F01119284 -:100510008E179F07E1F7623039F0643051F0613097 -:1005200069F46C9170E002C06D917C9180E090E084 -:1005300008C06D917D918D919C9103C060E070E049 -:10054000CB016E012BE0C20ED11C29E0F22E3AE065 -:10055000832E912CA12CB12CFA94A50194010E9418 -:100560007F05605DF60162936F01B901CA016115F3 -:1005700071058105910519F0FFEFFF12EDCF8F2D69 -:10058000FF0C990B0196800F911F0E94C5012B96BD -:100590000FB6F894DEBF0FBECDBFDF91CF911F9194 -:1005A0000F91FF90DF90CF90BF90AF909F908F9072 -:1005B0000895FC012081203211F40196FACF37EF23 -:1005C000320F3230D0F32D30C1F308950F931F93C3 -:1005D000CF93DF93EB01FC0120812D3219F40196BA -:1005E00011E001C010E0FC0120E030E0A90181E051 -:1005F000019190ED900F9A30C0F4AAE0B0E00E9413 -:10060000C005DC01CB01800F911DA11DB11D9C0116 -:10061000AD01205331094109510980E0211590E8CD -:1006200039074105510524F310C081110EC0112373 -:1006300039F050954095309521953F4F4F4F5F4F82 -:10064000209729F03983288302C080E001C081E02F -:10065000DF91CF911F910F9108951F920F920FB6C6 -:100660000F9211248F939F93EF93FF939091C60065 -:100670008091C0008C71C1F4E091C00181E08E0FC7 -:100680008093C001F0E0EC51FE4F90839A3021F44A -:100690008091000182600BC08091C001803249F4DA -:1006A00080910001826103C0809100018A60809383 -:1006B0000001FF91EF919F918F910F900FBE0F90CE -:1006C0001F9018951F920F920FB60F9211248F93BF -:1006D0009F93EF93FF938091BF018823B1F0E09146 -:1006E000BE0181E08E0F8093BE01F0E0EF53FE4F1C -:1006F00080818093C6009091BE018091BF019813C4 -:100700000EC01092BE011092BF018091C1008F7D7A -:100710008093C10080910001816080930001FF916E -:10072000EF919F918F910F900FBE0F901F90189592 -:100730001F920F920FB60F9211248F939F93809167 -:10074000E101811103C085B1886385B990910101F0 -:100750008091E101981301C02B9890910201809142 -:10076000E101981301C02C98909103018091E1015F -:10077000981301C02D988091E1018F5F8093E10172 -:100780009F918F910F900FBE0F901F901895CF9350 -:10079000DF9300D01F92CDB7DEB7FC01908180EDD2 -:1007A000890F8B839153963078F5CF0101960E9483 -:1007B000D902BE016F5F7F4F0E94E602882321F1BC -:1007C0008BE391E00E94C50161E0CE0103960E9497 -:1007D000660287E491E00E94C50169817A81072E53 -:1007E000000C880B990B0E94FC018DE491E00E94A3 -:1007F000C50169817A818B816115710519F00E94AB -:10080000150103C00E94C00080E00F900F900F9070 -:10081000DF91CF910895CF93DF93CDB7DEB72C97BB -:100820000FB6F894DEBF0FBECDBFFC0180818D32C4 -:10083000A1F48CE0E4E5F1E0DE01119601900D9267 -:100840008A95E1F74C8385B1682311F080E38987AD -:10085000CE0101960E94C5010BC0803319F485B109 -:10086000682B05C0813331F485B16095682365B983 -:1008700081E001C080E02C960FB6F894DEBF0FBE79 -:10088000CDBFDF91CF9108951F93CF93DF9300D019 -:10089000CDB7DEB7162FBE016F5F7F4F0E94E60215 -:1008A000882359F089819A818F3F910509F028F4B6 -:1008B000E12FF0E0EF5FFE4F80830F900F90DF910C -:1008C000CF911F9108950F931F93CF9301960E948C -:1008D000D902FC01C0812FEC2C0F263028F4CF91D7 -:1008E0001F910F910C94C70301960E94D9028C01AD -:1008F000C93389F15CF4C733E9F01CF5C03309F062 -:1009000045C080E691E00E94C5013AC0C23651F16F -:100910003CF4C136D9F5CF911F910F910C9475001D -:10092000C33631F1C43691F584E891E00E94C501E7 -:1009300062E023C088E691E00E94C50147E364E0DD -:1009400006C080E791E00E94C50148E362E0C8016B -:100950000E940B0415C085E791E00E94C50149E3A0 -:1009600061E0F5CF8AE791E00E94C50160E005C033 -:100970008FE791E00E94C50161E0C8010E94440434 -:1009800087EB91E00E94C50181E001C080E0CF913A -:100990001F910F9108950F931F93CF9380910001A2 -:1009A00081FF54C0C091000180910001857E809339 -:1009B0000001C4FF06C089E891E00E94C50180E003 -:1009C00001C081E0C3FF05C080EA91E00E94C5013B -:1009D00080E09091C001933060F09091E4019B35EC -:1009E00041F4E091C001F0E0EE51FE4F90819D3561 -:1009F00049F01092C0018AEA91E0CF911F910F91C6 -:100A00000C94C501882311F1E091C001F0E0EC5194 -:100A1000FE4F108285EE91E00E94D9028C01FC010C -:100A20008081823399F4C091C0011092C00184EE9C -:100A300091E00E94C501EC2FF0E0EE51FE4F1082D4 -:100A4000C801CF911F910F910C946304CF911F9116 -:100A50000F9108958BB18C6F8BB988B1807F88B965 -:100A60008CEF8AB9CFE0C7B985B1876085B98FE3CC -:100A700084B91092C50087E68093C4008091C000BD -:100A80008D7F8093C00086E08093C20088E98093C8 -:100A9000C10085B5826085BD80916E0081608093C4 -:100AA0006E000E945E00789488E190E00FB6F894A2 -:100AB000A895809360000FBEC0936000A8958091B8 -:100AC000BA0181110E946E018091000181FFF6CF71 -:100AD0000E94CB04F3CFAA1BBB1B51E107C0AA1F86 -:100AE000BB1FA617B70710F0A61BB70B881F991FCF -:100AF0005A95A9F780959095BC01CD010895A1E282 -:100B00001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F87 -:100B1000FF1FA217B307E407F50720F0A21BB30BD2 -:100B2000E40BF50B661F771F881F991F1A9469F74E -:100B300060957095809590959B01AC01BD01CF01AA -:100B40000895052E97FB1EF400940E94B80557FDEA -:100B500007D00E947F0507FC03D04EF40C94B80523 -:100B600050954095309521953F4F4F4F5F4F0895D9 -:100B700090958095709561957F4F8F4F9F4F089509 -:100B80000E94CB05A59F900DB49F900DA49F800D52 -:100B9000911D11240895A29FB001B39FC001A39F8E -:100BA000700D811D1124911DB29F700D811D1124A6 -:080BB000911D0895F894FFCF98 -:100BB80001141414080C0406020301095370656536 -:100BC80064206368616E67656420746F2000426109 -:100BD800642073706565642076616C75650A005BD6 -:100BE8003220302053743D305D0A004D6F76652009 -:100BF8006D6F746F72200020666F722000737465C9 -:100C080070730A005B32204E2053743D315D0A0038 -:100C180072657374617274005368757474657200D8 -:100C28004E656F6E00466C6174004C454431004C53 -:100C3800454432004C45443300496E707574206257 -:100C48007566666572206F766572666C6F770A00E6 -:100C58005278206572726F720A00456E7465722050 -:0A0C6800225B636D645D220A000048 +:1000000014C02EC02DC02CC02BC02AC041C328C094 +:1000100027C04DC325C084C1B6C122C021C020C0A5 +:100020001FC01EC01DC01CC01BC011241FBECFE5B9 +:10003000D2E0DEBFCDBF11E0A0E6B0E0E0EEFAE036 +:1000400002C005900D92AC36B107D9F721E0ACE6BD +:10005000B1E001C01D92A73BB207E1F7A1D43EC5B4 +:10006000CFCF2091600020FFFCCF209160002A7F3D +:100070002093600010926C0110926D01DC01809160 +:100080006D01803278F48D91882361F0E0916D01EB +:10009000F0E0E159FE4F808380916D018F5F809386 +:1000A0006D01EDCF80916D01803251F410926D01A0 +:1000B0008091600081608093600081E090E008950D +:1000C000559A80E090E008958F929F92AF92BF92F0 +:1000D000DF92EF92FF920F931F93CF93DF93CDB7F1 +:1000E000DEB72C970FB6F894DEBF0FBECDBF1C86CF +:1000F00097FF0AC090958095709561957F4F8F4FBF +:100100009F4FDD24D39401C0D12C0BE03AE0832E25 +:10011000912CA12CB12C1FEF100FEE24E394F12CA5 +:10012000EC0EFD1EE10EF11CA5019401A5D4605D4D +:10013000F7016083B901CA01611571058105910557 +:1001400021F0012F1111E7CF0EC0112361F0DD2046 +:1001500051F01EEF100FE1E0F0E0EC0FFD1FE10F9A +:10016000F11D8DE2808381E090E08C0F9D1F810F57 +:10017000911D77DF2C960FB6F894DEBF0FBECDBF72 +:10018000DF91CF911F910F91FF90EF90DF90BF9083 +:10019000AF909F908F9008958F929F92AF92BF9251 +:1001A000CF92DF92FF920F931F93CF93DF93CDB740 +:1001B000DEB72B970FB6F894DEBF0FBECDBFDC01C4 +:1001C000633009F448C08FEF860F843008F043C0D5 +:1001D000FE013196CE010C968F0111928E179F076A +:1001E000E1F7623039F0643051F0613069F46C91BC +:1001F00070E002C06D917C9180E090E008C06D914C +:100200007D918D919C9103C060E070E0CB016E0107 +:100210002BE0C20ED11C29E0F22E3AE0832E912C65 +:10022000A12CB12CFA94A501940104D4605DF601CF +:1002300062936F01B901CA016115710581059105CC +:1002400019F0FFEFFF12EECF8F2DFF0C990B0196E7 +:10025000800F911F06DF2B960FB6F894DEBF0FBEFE +:10026000CDBFDF91CF911F910F91FF90DF90CF9085 +:10027000BF90AF909F908F900895FC012081203215 +:1002800011F40196FACF37EF320F3230D0F32D3020 +:10029000C1F308950F931F93CF93DF93EB01FC01FC +:1002A00020812D3219F4019611E001C010E0FC010B +:1002B00020E030E0A90181E0019190ED900F9A30AB +:1002C000B8F4AAE0B0E0F4D3DC01CB01800F911DBB +:1002D000A11DB11D9C01AD012053310941095109F6 +:1002E00080E0211590E83907410551052CF310C035 +:1002F00081110EC0112339F050954095309521950C +:100300003F4F4F4F5F4F209729F03983288302C01A +:1003100080E001C081E0DF91CF911F910F9108959E +:100320001F920F920FB60F9211248F939F93EF930A +:10033000FF939CB18BB18C71C1F4E0916E0181E0AF +:100340008E0F80936E01F0E0EC56FE4F90839A3052 +:1003500021F48091600082600BC080916E01803238 +:1003600049F480916000826103C0809160008A60DE +:1003700080936000FF91EF919F918F910F900FBE3E +:100380000F901F9018951F920F920FB60F92112485 +:100390008F939F93EF93FF9380916D018823A9F032 +:1003A000E0916C0181E08E0F80936C01F0E0E159E7 +:1003B000FE4F80818CB990916C0180916D019813F2 +:1003C0000AC010926C0110926D01559880916000E6 +:1003D000816080936000FF91EF919F918F910F90CA +:1003E0000FBE0F901F90189583B384FF04C085FF44 +:1003F00004C080E0089581E0089582E008958EB5FC +:1004000088608EBD80ED97E09BBD8ABD8EB5826011 +:100410008EBD89B7806189BF85B3806385BB089530 +:10042000CF93DF9300D000D0CDB7DEB7BE016D5FB4 +:100430007F4F30DF882351F16B817C81683F8FEFE4 +:1004400078070CF16F3F8FE77807E9F0665F7F4F21 +:100450008FEF9FEFDBD27A83698389B78F7E89BF65 +:1004600089819A819BBD8ABD1DBC1CBC89B78061F6 +:1004700089BF86EA90E0F5DD62E0CE0101968CDE70 +:1004800089E691E002C088EB90E0EBDD80E00F9020 +:100490000F900F900F90DF91CF910895CF93DF933E +:1004A000CDB7DEB72C970FB6F894DEBF0FBECDBF29 +:1004B0009FEF980F973010F592B39C6F92BB92B359 +:1004C00022E030E0082E01C0220F0A94EAF72095BE +:1004D000292322BB9CE0E9ECF0E0DE0111960190BB +:1004E0000D929A95E1F7805D8C837EDF811101C0CA +:1004F00083E0805D8987CE010196B3DD2C960FB62F +:10050000F894DEBF0FBECDBFDF91CF9108958091EB +:100510009001C4DF82B38C6F82BB85B38F6085BBD3 +:1005200089B78F7E89BF10928F011092B601109209 +:10053000B501109292011092900108951F93CF93EC +:10054000DF93182FEB018FEF810F863008F040C04A +:100550002097F1F18091B5019091B601892BC1F5F9 +:1005600089B78F7E89BF82B38C6F82BB85B38F6062 +:1005700085BB22B382E090E0012E01C0880F0A946F +:10058000EAF78095822382BB2FDF109390018823A6 +:1005900079F0813021F41C161D0664F018C0D7FFD5 +:1005A00016C0D195C195D10981E08093910104C015 +:1005B000D7FDF7CF10929101D093B601C093B5014A +:1005C0001DBC1CBC89B7806189BF81E002C09FDF70 +:1005D00080E0DF91CF911F91089510928F0185B334 +:1005E00090919201E0916100F0916200E90FF11D9C +:1005F00097FDFA95807F9081892B85BBF5DE209150 +:100600009101909192012223B1F0915097FD03C086 +:10061000909392010DC097E0909392012091B501C3 +:100620003091B601215031093093B6012093B501C4 +:100630008130A9F46CCF9F5F98301CF490939201A5 +:100640000CC0109292012091B5013091B601215059 +:1006500031093093B6012093B501823059F380916E +:10066000B5019091B601892B29F308959FE9980F60 +:10067000983060F428E08202C0011124825A92402E +:10068000909362008093610081E0089580E0089576 +:100690001F920F920FB60F9211248F9381E08093D7 +:1006A0008F018F910F900FBE0F901F9018951F9282 +:1006B0000F920FB60F9211248F939F938091930105 +:1006C000811103C08BB387608BBB909163008091D5 +:1006D0009301981301C0D898909164008091930180 +:1006E000981301C0D9989091650080919301981357 +:1006F00001C0DA98809193018F5F809393019F915D +:100700008F910F900FBE0F901F901895CF93DF938E +:1007100000D01F92CDB7DEB7FC01908180ED890F2C +:100720008B839153963030F5CF010196A6DDBE0143 +:100730006F5F7F4FAFDD8823E9F08DEE90E091DCB5 +:1007400061E0CE01039628DD89EF90E08ADC6981C3 +:100750007A81072E000C880B990BB6DC8FEF90E0A6 +:1007600080DC69817A818B816115710511F0E6DE8B +:1007700002C094DE80E00F900F900F90DF91CF9138 +:100780000895CF93DF93CDB7DEB72C970FB6F894CB +:10079000DEBF0FBECDBFFC0180818D3299F48CE0AD +:1007A000E6E0F1E0DE01119601900D928A95E1F705 +:1007B0004C838BB3682311F080E38987CE010196C7 +:1007C00050DC0BC0803319F48BB3682B05C0813328 +:1007D00031F48BB3609568236BBB81E001C080E08E +:1007E0002C960FB6F894DEBF0FBECDBFDF91CF9130 +:1007F00008951F93CF93DF9300D0CDB7DEB7162FA8 +:10080000BE016F5F7F4F46DD882359F089819A8151 +:100810008F3F910509F028F4E12FF0E0ED59FF4FEB +:1008200080830F900F90DF91CF911F9108950F93C8 +:100830001F93CF93019621DDFC01C0812FEC2C0F7B +:10084000263020F4CF911F910F9160CF019615DDD6 +:100850008C01C93359F154F4C733D1F0FCF4C033DF +:10086000D9F582E191E0FDDB52DE31C0C23621F1E3 +:1008700034F4C13689F5CF911F910F91D1CDC33694 +:1008800001F1C43649F586E391E0EBDB62E01DC07F +:100890008AE191E0E6DB47E360E805C082E291E0AF +:1008A000E0DB48E360E4C8016CDF11C087E291E05F +:1008B000D8DB49E360E2F7CF8CE291E0D2DB60E085 +:1008C00004C081E391E0CDDB61E0C80192DF89E6FD +:1008D00091E0C7DB81E001C080E0CF911F910F91D3 +:1008E00008950F931F93CF938091600081FF54C0B0 +:1008F000C091600080916000857E80936000C4FF9D +:1009000005C08BE391E0ADDB80E001C081E0C3FF77 +:1009100004C082E591E0A5DB80E090916E01933008 +:1009200060F0909194019B3541F4E0916E01F0E00C +:10093000EE56FE4F90819D3571F084E991E091DB98 +:100940008091940193DE811103C08CE591E089DBF5 +:1009500010926E0121C08823F9F0E0916E01F0E061 +:10096000EC56FE4F108285E991E087DC8C01FC019A +:100970008081823389F4C0916E0110926E0184E906 +:1009800091E06FDBEC2FF0E0EE56FE4F1082C801D5 +:10099000CF911F910F914BCFCF911F910F91089540 +:1009A00082B38C6F82BB85B38F6085BB8CEF81BBBC +:1009B000CFE0C4BB8BB3806E8BBB87EE8ABB5998EC +:1009C0008FE780BD81E089B986E080BD88E98AB97A +:1009D00083B7826083BF89B7816089BF10DD789457 +:1009E00088E190E00FB6F894A89581BD0FBEC1BD17 +:1009F00085ED90E036DBA89580918F018111EDDDCA +:100A00008091600081FFF7CF6CDFF5CFAA1BBB1B85 +:100A100051E107C0AA1FBB1FA617B70710F0A61BFE +:100A2000B70B881F991F5A95A9F780959095BC011F +:100A3000CD010895A1E21A2EAA1BBB1BFD010DC01A +:100A4000AA1FBB1FEE1FFF1FA217B307E407F5077E +:100A500020F0A21BB30BE40BF50B661F771F881F5A +:100A6000991F1A9469F760957095809590959B01F0 +:100A7000AC01BD01CF010895052E97FB16F400943B +:100A80000FD057FD05D0D6DF07FC02D046F408C0D2 +:100A900050954095309521953F4F4F4F5F4F0895AA +:100AA00090958095709561957F4F8F4F9F4F0895DA +:100AB00009D0A59F900DB49F900DA49F800D911D0E +:100AC00011240895A29FB001B39FC001A39F01D03C +:100AD000B29F700D811D1124911D0895F894FFCFD0 +:100AE000016600141414080C04060203010902062E +:100AF000040C08090103080901030206040C080A92 +:100B000002060405010907030B090D0C0E060D0969 +:100B10000B0307060E0C07060E0C0D090B03070549 +:100B20000D090B0A0E065370656564206368616EDB +:100B300067656420746F200042616420737065658E +:100B4000642076616C75650A005B32203020537436 +:100B50003D305D0A0053636F7270696F20706C6185 +:100B600074666F726D2072656164790A004D6F76EC +:100B700065206D6F746F72200020666F72200073A5 +:100B8000746570730A005B32204E2053743D315DF2 +:100B90000A007265737461727400536875747465C9 +:100BA00072004E656F6E00466C6174004C454431B6 +:100BB000004C454432004C45443300496E70757416 +:100BC00020627566666572206F766572666C6F77F7 +:100BD0000A005278206572726F720A00456E746561 +:0C0BE0007220225B636D645D220A00003D :00000001FF diff --git a/stepper.c b/stepper.c index c09975b..c957346 100644 --- a/stepper.c +++ b/stepper.c @@ -57,8 +57,21 @@ // [1324] = 1000, 1010, 0010, 0110, 0100, 0101, 0001, 1001 - bipolar // 1000, 1010, 0010, 0110, 0100, 0101, 0001, 1001 - half-step // 1010, 0110, 0101, 1001 - full step -static const uint8_t usteps[8] = {8, 12, 4, 6, 2, 3, 1, 9}; // ULN - unipolar, active 1 +//static const uint8_t usteps[8] = {8, 12, 4, 6, 2, 3, 1, 9}; // ULN - unipolar, active 1 //static const uint8_t usteps[8] = {7, 3, 11, 9, 13, 12, 14, 6}; // unipolar, active is 0 +static const uint8_t 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] +}; + +uint8_t const *usteps = usteps_matrix[0]; static int8_t Ustep = 0; // current microstep count uint16_t Steps_left; // steps left to proceed (absolute value) @@ -67,8 +80,6 @@ static uint8_t cur_motor = 0; // current motor number volatile uint8_t stepper_pulse = 0; // interrupt flag, used in main.c -static void stop_motors(); - void stepper_setup(){ TCCR1B |= _BV(WGM12); // configure timer1 for CTC mode, TOP is OCR1A OCR1A = 2000; // set the CTC compare value - 1kHz @@ -145,7 +156,7 @@ uint8_t stepper_move(uint8_t Nmotor, int16_t Nsteps){ return 1; } -static void stop_motors(){ +void stop_motors(){ stepper_get_esw(cur_motor); // turn off all pulses to place motor in free state & prevent undesirable behaviour STPRS_OFF(); @@ -202,9 +213,21 @@ void stepper_get_esw(uint8_t Nmotor){ usart_send(str); } +/** + * User can change current stepper phases table + * N - position in table from 'a' (0) to 'h' (7) + * return 1 if all OK + */ +uint8_t chk_stpr_cmd(char N){ + if(N < 'a' || N > 'h') return 0; + usteps = usteps_matrix[N-'a']; + return 1; +} + /** * Timer 1 used to generate stepper pulses */ ISR(TIMER1_COMPA_vect){ stepper_pulse = 1; // say that we can generate next microstep } + diff --git a/stepper.h b/stepper.h index 26a4410..0c4ff0e 100644 --- a/stepper.h +++ b/stepper.h @@ -36,7 +36,9 @@ void stepper_process(); uint8_t stepper_ch_speed(char *spd); uint8_t stepper_move(uint8_t Nmotor, int16_t Nsteps); +void stop_motors(); void stepper_get_esw(uint8_t Nmotor); +uint8_t chk_stpr_cmd(char N); #endif // __STEPPER_H__