This commit is contained in:
eddyem 2017-06-13 21:42:11 +03:00
parent 7de4c0f78f
commit 3c1b544489
7 changed files with 275 additions and 221 deletions

View File

@ -10,29 +10,29 @@ DEFS = -DBAUD=9600
DEFS += -DEBUG DEFS += -DEBUG
LIBS = LIBS =
SRC=$(wildcard *.c)
HEX = $(NAME).hex
ELF = $(NAME).elf
OBJECTS = $(SRC:%.c=%.o)
# controller # controller
DEVICE = atmega328p DEVICE = atmega8535
#atmega8535 #Тактовая частота 8 МГц
CLOCK = 8000000
# partno (for avrdude)
PARTNO = m8535
CFLAGS = -g -Wall $(OPTIMIZE) $(DEFS) CFLAGS = -g -Wall $(OPTIMIZE) $(DEFS)
LDFLAGS = -Wl,-Map,$(NAME).map LDFLAGS = -Wl,-Map,$(NAME).map
# programmer (for avrdude) # programmer (for avrdude)
PROGRAMMER = arduino PROGRAMMER = avrisp
# partno (for avrdude)
PARTNO = m328p
# serial port device (for avrdude) # serial port device (for avrdude)
SERPORT = /dev/ttyUSB0 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 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) COMPILE = $(CC) $(CFLAGS) -mmcu=$(DEVICE) -DF_CPU=$(CLOCK)
@ -40,7 +40,7 @@ all: $(HEX) lst
$(ELF): $(OBJECTS) $(ELF): $(OBJECTS)
@echo "ELF" @echo "ELF"
@$(COMPILE) -o $(ELF) $(OBJECTS) $(LIBS) @$(COMPILE) $(LDFLAGS) -o $(ELF) $(OBJECTS) $(LIBS)
$(HEX): $(ELF) $(HEX): $(ELF)
@echo "HEX" @echo "HEX"
@ -65,7 +65,7 @@ lst: $(NAME).lst
flash: all flash: all
@echo "Flash" @echo "Flash"
@$(AVRDUDE) -U flash:w:$(HEX):i $(AVRDUDE) -U flash:w:$(HEX):i
clean: clean:
@echo "Clean" @echo "Clean"

View File

@ -48,6 +48,27 @@
#define STPRS_OFF() do{PORTD |= 0xfc; PORTC |= 0x0f;}while(0) #define STPRS_OFF() do{PORTD |= 0xfc; PORTC |= 0x0f;}while(0)
#define DDRAB DDRA #define DDRAB DDRA
#define PORTAB PORTA #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 LED1_PIN (_BV(0))
#define LED2_PIN (_BV(1)) #define LED2_PIN (_BV(1))
#define LED3_PIN (_BV(2)) #define LED3_PIN (_BV(2))

11
main.c
View File

@ -45,6 +45,7 @@ int main() {
/** USART config **/ /** USART config **/
// set baudrate (using macros from util/setbaud.h) // set baudrate (using macros from util/setbaud.h)
#if !defined (__AVR_ATmega8535__)
UBRR0H = UBRRH_VALUE; UBRR0H = UBRRH_VALUE;
UBRR0L = UBRRL_VALUE; UBRR0L = UBRRL_VALUE;
@ -53,6 +54,11 @@ int main() {
#else #else
UCSR0A &= ~(_BV(U2X0)); UCSR0A &= ~(_BV(U2X0));
#endif #endif
#else // __AVR_ATmega8535__
UCSRA &= ~(_BV(U2X0));
UBRRH = 0;
UBRRL = 51;
#endif
UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); // 8-bit data UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); // 8-bit data
UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0); // Enable RX and TX, enable RX interrupt UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0); // Enable RX and TX, enable RX interrupt
@ -70,7 +76,9 @@ int main() {
stepper_setup(); stepper_setup();
sei(); // enable interrupts sei(); // enable interrupts
wdt_enable(WDTO_2S); // start watchdog wdt_enable(WDTO_2S); // start watchdog
usart_send("Scorpio platform ready\n");
while(1){ while(1){
wdt_reset(); wdt_reset();
@ -104,4 +112,7 @@ ISR(TIMER0_OVF_vect){
if(shi_counter == LEDs[1]) PORTAB &= ~LED2_PIN; if(shi_counter == LEDs[1]) PORTAB &= ~LED2_PIN;
if(shi_counter == LEDs[2]) PORTAB &= ~LED3_PIN; if(shi_counter == LEDs[2]) PORTAB &= ~LED3_PIN;
++shi_counter; ++shi_counter;
// #if defined (__AVR_ATmega8535__)
// TCNT0 += 128;
// #endif
} }

10
proto.c
View File

@ -95,8 +95,9 @@ uint8_t process_commands(char *cmd){
char s = *cmd; char s = *cmd;
cmd = omit_whitespace(cmd + 1); cmd = omit_whitespace(cmd + 1);
switch(s){ switch(s){
case '0': case '0': // stop motors
DBG("restart"); DBG("restart");
stop_motors();
break; break;
case '7': case '7':
DBG("Shutter"); DBG("Shutter");
@ -145,9 +146,14 @@ void process_string(){
noerr = 0; noerr = 0;
} }
if(rx_bufsize < 3 || rx_buffer[0] != '[' || rx_buffer[rx_bufsize - 2] != ']'){ 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; } //if(rx_buffer[0] == 't'){ print_time(); return; }
rx_bufsize = 0; rx_bufsize = 0;
DBG("Enter \"[cmd]\"\n");
noerr = 0; noerr = 0;
} }
if(noerr){ // echo back given string if(noerr){ // echo back given string

View File

@ -1,201 +1,192 @@
:100000000C9434000C9451000C9451000C94510049 :1000000014C02EC02DC02CC02BC02AC041C328C094
:100010000C9451000C9451000C9451000C9451001C :1000100027C04DC325C084C1B6C122C021C020C0A5
:100020000C9451000C9451000C9451000C94B601A6 :100020001FC01EC01DC01CC01BC011241FBECFE5B9
:100030000C9451000C9451000C9451000C945100FC :10003000D2E0DEBFCDBF11E0A0E6B0E0E0EEFAE036
:100040000C9498030C9451000C942D030C946203AF :1000400002C005900D92AC36B107D9F721E0ACE6BD
:100050000C9451000C9451000C9451000C945100DC :10005000B1E001C01D92A73BB207E1F7A1D43EC5B4
:100060000C9451000C94510011241FBECFEFD8E026 :10006000CFCF2091600020FFFCCF209160002A7F3D
:10007000DEBFCDBF11E0A0E0B1E0E8EBFBE002C0E5 :100070002093600010926C0110926D01DC01809160
:1000800005900D92AA3BB107D9F722E0AAEBB1E0A7 :100080006D01803278F48D91882361F0E0916D01EB
:1000900001C01D92A530B207E1F70E942A050C9419 :10009000F0E0E159FE4F808380916D018F5F809386
:1000A000DA050C94000086B184FF04C085FF04C00B :1000A0006D01EDCF80916D01803251F410926D01A0
:1000B00080E0089581E0089582E00895E1E8F0E0AD :1000B0008091600081608093600081E090E008950D
:1000C00080818860808380ED97E0909389008093A1 :1000C000559A80E090E008958F929F92AF92BF92F0
:1000D0008800808182608083EFE6F0E0808182602A :1000D000DF92EF92FF920F931F93CF93DF93CDB7F1
:1000E000808388B1806388B90895CF93DF9300D06F :1000E000DEB72C970FB6F894DEBF0FBECDBF1C86CF
:1000F00000D0CDB7DEB7BE016D5F7F4F0E94E60234 :1000F00097FF0AC090958095709561957F4F8F4FBF
:100100008823B1F16B817C81683F8FEF780764F1C0 :100100009F4FDD24D39401C0D12C0BE03AE0832E25
:100110006F3F8FE7780741F1665F7F4F8FEF9FEF6B :10011000912CA12CB12C1FEF100FEE24E394F12CA5
:100120000E946B057A83698380916F008D7F809335 :10012000EC0EFD1EE10EF11CA5019401A5D4605D4D
:100130006F0089819A819093890080938800109242 :10013000F7016083B901CA01611571058105910557
:1001400085001092840080916F00826080936F0020 :1001400021F0012F1111E7CF0EC0112361F0DD2046
:100150008CE091E00E94C50162E0CE0101960E9410 :1001500051F01EEF100FE1E0F0E0EC0FFD1FE10F9A
:10016000660287EB91E002C08EE191E00E94C5013A :10016000F11D8DE2808381E090E08C0F9D1F810F57
:1001700080E00F900F900F900F90DF91CF91089536 :10017000911D77DF2C960FB6F894DEBF0FBECDBF72
:10018000CF93DF93CDB7DEB72C970FB6F894DEBFD1 :10018000DF91CF911F910F91FF90EF90DF90BF9083
:100190000FBECDBF9FEF980F973020F59BB19C6F9E :10019000AF909F908F9008958F929F92AF92BF9251
:1001A0009BB99BB122E030E0082E01C0220F0A94D7 :1001A000CF92DF92FF920F931F93CF93DF93CDB740
:1001B000EAF7209529232BB99CE0EFE2F1E0DE017C :1001B000DEB72B970FB6F894DEBF0FBECDBFDC01C4
:1001C000119601900D929A95E1F7805D8C830E94C3 :1001C000633009F448C08FEF860F843008F043C0D5
:1001D0005300811101C083E0805D8987CE010196C3 :1001D000FE013196CE010C968F0111928E179F076A
:1001E0000E94C5012C960FB6F894DEBF0FBECDBF9E :1001E000E1F7623039F0643051F0613069F46C91BC
:1001F000DF91CF9108958091BB010E94C0008BB127 :1001F00070E002C06D917C9180E090E008C06D914C
:100200008C6F8BB988B1807F88B9EFE6F0E0808190 :100200007D918D919C9103C060E070E0CB016E0107
:100210008D7F80831092BA011092E3011092E20167 :100210002BE0C20ED11C29E0F22E3AE0832E912C65
:100220001092BD011092BB0108951F93CF93DF93ED :10022000A12CB12CFA94A501940104D4605DF601CF
:10023000182FEB018FEF810F863008F04AC020970E :1002300062936F01B901CA016115710581059105CC
:1002400009F447C08091E2019091E301892B09F004 :1002400019F0FFEFFF12EECF8F2DFF0C990B0196E7
:1002500040C080916F008D7F80936F008BB18C6F59 :10025000800F911F06DF2B960FB6F894DEBF0FBEFE
:100260008BB988B1807F88B92BB182E090E0012EF4 :10026000CDBFDF91CF911F910F91FF90DF90CF9085
:1002700001C0880F0A94EAF7809582238BB90E9407 :10027000BF90AF909F908F900895FC012081203215
:1002800053001093BB01882379F0813021F41C16B0 :1002800011F40196FACF37EF320F3230D0F32D3020
:100290001D0664F01CC0D7FF1AC0D195C195D109C5 :10029000C1F308950F931F93CF93DF93EB01FC01FC
:1002A00081E08093BC0104C0D7FDF7CF1092BC0160 :1002A00020812D3219F4019611E001C010E0FC010B
:1002B000D093E301C093E201109285001092840074 :1002B00020E030E0A90181E0019190ED900F9A30AB
:1002C00080916F00826080936F0081E003C00E9484 :1002C000B8F4AAE0B0E0F4D3DC01CB01800F911DBB
:1002D000FB0080E0DF91CF911F9108951092BA0149 :1002D000A11DB11D9C01AD012053310941095109F6
:1002E00088B1E091BD010E2E000CFF0BEC5FFE4FBC :1002E00080E0211590E83907410551052CF310C035
:1002F000807F9081892B88B90E9453002091BC0196 :1002F00081110EC0112339F050954095309521950C
:100300009091BD012223B9F0915097FD03C09093C5 :100300003F4F4F4F5F4F209729F03983288302C01A
:10031000BD010DC097E09093BD012091E2013091A5 :1003100080E001C081E0DF91CF911F910F9108959E
:10032000E301215031093093E3012093E201813050 :100320001F920F920FB60F9211248F939F93EF930A
:10033000B1F40C94FB009F5F98301CF49093BD01C6 :10033000FF939CB18BB18C71C1F4E0916E0181E0AF
:100340000CC01092BD012091E2013091E3012150D7 :100340008E0F80936E01F0E0EC56FE4F90839A3052
:1003500031093093E3012093E201823051F380911F :1003500021F48091600082600BC080916E01803238
:10036000E2019091E301892B21F308951F920F92EE :1003600049F480916000826103C0809160008A60DE
:100370000FB60F9211248F9381E08093BA018F9171 :1003700080936000FF91EF919F918F910F900FBE3E
:100380000F900FBE0F901F9018952091000120FF35 :100380000F901F9018951F920F920FB60F92112485
:10039000FCCF209100012A7F209300011092BE0122 :100390008F939F93EF93FF9380916D018823A9F032
:1003A0001092BF01DC018091BF01803278F48D9101 :1003A000E0916C0181E08E0F80936C01F0E0E159E7
:1003B000882361F0E091BF01F0E0EF53FE4F8083AE :1003B000FE4F80818CB990916C0180916D019813F2
:1003C0008091BF018F5F8093BF01EDCF8091BF010E :1003C0000AC010926C0110926D01559880916000E6
:1003D000803251F41092BF018091000181608093BE :1003D000816080936000FF91EF919F918F910F90CA
:1003E000000181E090E008958091C10080628093D7 :1003E0000FBE0F901F90189583B384FF04C085FF44
:1003F000C10080E090E008958F929F92AF92BF92EB :1003F00004C080E0089581E0089582E008958EB5FC
:10040000DF92EF92FF920F931F93CF93DF93CDB7BD :1004000088608EBD80ED97E09BBD8ABD8EB5826011
:10041000DEB72C970FB6F894DEBF0FBECDBF1C869B :100410008EBD89B7806189BF85B3806385BB089530
:1004200097FF0AC090958095709561957F4F8F4F8B :10042000CF93DF9300D000D0CDB7DEB7BE016D5FB4
:100430009F4FDD24D39401C0D12C0BE03AE0832EF2 :100430007F4F30DF882351F16B817C81683F8FEFE4
:10044000912CA12CB12C1FEF100FEE24E394F12C72 :1004400078070CF16F3F8FE77807E9F0665F7F4F21
:10045000EC0EFD1EE10EF11CA50194010E94A10508 :100450008FEF9FEFDBD27A83698389B78F7E89BF65
:10046000605DF7016083B901CA01611571058105FD :1004600089819A819BBD8ABD1DBC1CBC89B78061F6
:10047000910521F0012F1111E6CF0EC0112361F07B :1004700089BF86EA90E0F5DD62E0CE0101968CDE70
:10048000DD2051F01EEF100FE1E0F0E0EC0FFD1F5A :1004800089E691E002C088EB90E0EBDD80E00F9020
:10049000E10FF11D8DE2808381E090E08C0F9D1FC4 :100490000F900F900F90DF91CF910895CF93DF933E
:1004A000810F911D0E94C5012C960FB6F894DEBFF6 :1004A000CDB7DEB72C970FB6F894DEBF0FBECDBF29
:1004B0000FBECDBFDF91CF911F910F91FF90EF90B5 :1004B0009FEF980F973010F592B39C6F92BB92B359
:1004C000DF90BF90AF909F908F9008958F929F92F2 :1004C00022E030E0082E01C0220F0A94EAF72095BE
:1004D000AF92BF92CF92DF92FF920F931F93CF9371 :1004D000292322BB9CE0E9ECF0E0DE0111960190BB
:1004E000DF93CDB7DEB72B970FB6F894DEBF0FBE04 :1004E0000D929A95E1F7805D8C837EDF811101C0CA
:1004F000CDBFDC01633009F44AC08FEF860F843032 :1004F00083E0805D8987CE010196B3DD2C960FB62F
:1005000008F045C0FE013196CE010C968F01119284 :10050000F894DEBF0FBECDBFDF91CF9108958091EB
:100510008E179F07E1F7623039F0643051F0613097 :100510009001C4DF82B38C6F82BB85B38F6085BBD3
:1005200069F46C9170E002C06D917C9180E090E084 :1005200089B78F7E89BF10928F011092B601109209
:1005300008C06D917D918D919C9103C060E070E049 :10053000B501109292011092900108951F93CF93EC
:10054000CB016E012BE0C20ED11C29E0F22E3AE065 :10054000DF93182FEB018FEF810F863008F040C04A
:10055000832E912CA12CB12CFA94A50194010E9418 :100550002097F1F18091B5019091B601892BC1F5F9
:100560007F05605DF60162936F01B901CA016115F3 :1005600089B78F7E89BF82B38C6F82BB85B38F6062
:1005700071058105910519F0FFEFFF12EDCF8F2D69 :1005700085BB22B382E090E0012E01C0880F0A946F
:10058000FF0C990B0196800F911F0E94C5012B96BD :10058000EAF78095822382BB2FDF109390018823A6
:100590000FB6F894DEBF0FBECDBFDF91CF911F9194 :1005900079F0813021F41C161D0664F018C0D7FFD5
:1005A0000F91FF90DF90CF90BF90AF909F908F9072 :1005A00016C0D195C195D10981E08093910104C015
:1005B0000895FC012081203211F40196FACF37EF23 :1005B000D7FDF7CF10929101D093B601C093B5014A
:1005C000320F3230D0F32D30C1F308950F931F93C3 :1005C0001DBC1CBC89B7806189BF81E002C09FDF70
:1005D000CF93DF93EB01FC0120812D3219F40196BA :1005D00080E0DF91CF911F91089510928F0185B334
:1005E00011E001C010E0FC0120E030E0A90181E051 :1005E00090919201E0916100F0916200E90FF11D9C
:1005F000019190ED900F9A30C0F4AAE0B0E00E9413 :1005F00097FDFA95807F9081892B85BBF5DE209150
:10060000C005DC01CB01800F911DA11DB11D9C0116 :100600009101909192012223B1F0915097FD03C086
:10061000AD01205331094109510980E0211590E8CD :10061000909392010DC097E0909392012091B501C3
:1006200039074105510524F310C081110EC0112373 :100620003091B601215031093093B6012093B501C4
:1006300039F050954095309521953F4F4F4F5F4F82 :100630008130A9F46CCF9F5F98301CF490939201A5
:10064000209729F03983288302C080E001C081E02F :100640000CC0109292012091B5013091B601215059
:10065000DF91CF911F910F9108951F920F920FB6C6 :1006500031093093B6012093B501823059F380916E
:100660000F9211248F939F93EF93FF939091C60065 :10066000B5019091B601892B29F308959FE9980F60
:100670008091C0008C71C1F4E091C00181E08E0FC7 :10067000983060F428E08202C0011124825A92402E
:100680008093C001F0E0EC51FE4F90839A3021F44A :10068000909362008093610081E0089580E0089576
:100690008091000182600BC08091C001803249F4DA :100690001F920F920FB60F9211248F9381E08093D7
:1006A00080910001826103C0809100018A60809383 :1006A0008F018F910F900FBE0F901F9018951F9282
:1006B0000001FF91EF919F918F910F900FBE0F90CE :1006B0000F920FB60F9211248F939F938091930105
:1006C0001F9018951F920F920FB60F9211248F93BF :1006C000811103C08BB387608BBB909163008091D5
:1006D0009F93EF93FF938091BF018823B1F0E09146 :1006D0009301981301C0D898909164008091930180
:1006E000BE0181E08E0F8093BE01F0E0EF53FE4F1C :1006E000981301C0D9989091650080919301981357
:1006F00080818093C6009091BE018091BF019813C4 :1006F00001C0DA98809193018F5F809393019F915D
:100700000EC01092BE011092BF018091C1008F7D7A :100700008F910F900FBE0F901F901895CF93DF938E
:100710008093C10080910001816080930001FF916E :1007100000D01F92CDB7DEB7FC01908180ED890F2C
:10072000EF919F918F910F900FBE0F901F90189592 :100720008B839153963030F5CF010196A6DDBE0143
:100730001F920F920FB60F9211248F939F93809167 :100730006F5F7F4FAFDD8823E9F08DEE90E091DCB5
:10074000E101811103C085B1886385B990910101F0 :1007400061E0CE01039628DD89EF90E08ADC6981C3
:100750008091E101981301C02B9890910201809142 :100750007A81072E000C880B990BB6DC8FEF90E0A6
:10076000E101981301C02C98909103018091E1015F :1007600080DC69817A818B816115710511F0E6DE8B
:10077000981301C02D988091E1018F5F8093E10172 :1007700002C094DE80E00F900F900F90DF91CF9138
:100780009F918F910F900FBE0F901F901895CF9350 :100780000895CF93DF93CDB7DEB72C970FB6F894CB
:10079000DF9300D01F92CDB7DEB7FC01908180EDD2 :10079000DEBF0FBECDBFFC0180818D3299F48CE0AD
:1007A000890F8B839153963078F5CF0101960E9483 :1007A000E6E0F1E0DE01119601900D928A95E1F705
:1007B000D902BE016F5F7F4F0E94E602882321F1BC :1007B0004C838BB3682311F080E38987CE010196C7
:1007C0008BE391E00E94C50161E0CE0103960E9497 :1007C00050DC0BC0803319F48BB3682B05C0813328
:1007D000660287E491E00E94C50169817A81072E53 :1007D00031F48BB3609568236BBB81E001C080E08E
:1007E000000C880B990B0E94FC018DE491E00E94A3 :1007E0002C960FB6F894DEBF0FBECDBFDF91CF9130
:1007F000C50169817A818B816115710519F00E94AB :1007F00008951F93CF93DF9300D0CDB7DEB7162FA8
:10080000150103C00E94C00080E00F900F900F9070 :10080000BE016F5F7F4F46DD882359F089819A8151
:10081000DF91CF910895CF93DF93CDB7DEB72C97BB :100810008F3F910509F028F4E12FF0E0ED59FF4FEB
:100820000FB6F894DEBF0FBECDBFFC0180818D32C4 :1008200080830F900F90DF91CF911F9108950F93C8
:10083000A1F48CE0E4E5F1E0DE01119601900D9267 :100830001F93CF93019621DDFC01C0812FEC2C0F7B
:100840008A95E1F74C8385B1682311F080E38987AD :10084000263020F4CF911F910F9160CF019615DDD6
:10085000CE0101960E94C5010BC0803319F485B109 :100850008C01C93359F154F4C733D1F0FCF4C033DF
:10086000682B05C0813331F485B16095682365B983 :10086000D9F582E191E0FDDB52DE31C0C23621F1E3
:1008700081E001C080E02C960FB6F894DEBF0FBE79 :1008700034F4C13689F5CF911F910F91D1CDC33694
:10088000CDBFDF91CF9108951F93CF93DF9300D019 :1008800001F1C43649F586E391E0EBDB62E01DC07F
:10089000CDB7DEB7162FBE016F5F7F4F0E94E60215 :100890008AE191E0E6DB47E360E805C082E291E0AF
:1008A000882359F089819A818F3F910509F028F4B6 :1008A000E0DB48E360E4C8016CDF11C087E291E05F
:1008B000E12FF0E0EF5FFE4F80830F900F90DF910C :1008B000D8DB49E360E2F7CF8CE291E0D2DB60E085
:1008C000CF911F9108950F931F93CF9301960E948C :1008C00004C081E391E0CDDB61E0C80192DF89E6FD
:1008D000D902FC01C0812FEC2C0F263028F4CF91D7 :1008D00091E0C7DB81E001C080E0CF911F910F91D3
:1008E0001F910F910C94C70301960E94D9028C01AD :1008E00008950F931F93CF938091600081FF54C0B0
:1008F000C93389F15CF4C733E9F01CF5C03309F062 :1008F000C091600080916000857E80936000C4FF9D
:1009000045C080E691E00E94C5013AC0C23651F16F :1009000005C08BE391E0ADDB80E001C081E0C3FF77
:100910003CF4C136D9F5CF911F910F910C9475001D :1009100004C082E591E0A5DB80E090916E01933008
:10092000C33631F1C43691F584E891E00E94C501E7 :1009200060F0909194019B3541F4E0916E01F0E00C
:1009300062E023C088E691E00E94C50147E364E0DD :10093000EE56FE4F90819D3571F084E991E091DB98
:1009400006C080E791E00E94C50148E362E0C8016B :100940008091940193DE811103C08CE591E089DBF5
:100950000E940B0415C085E791E00E94C50149E3A0 :1009500010926E0121C08823F9F0E0916E01F0E061
:1009600061E0F5CF8AE791E00E94C50160E005C033 :10096000EC56FE4F108285E991E087DC8C01FC019A
:100970008FE791E00E94C50161E0C8010E94440434 :100970008081823389F4C0916E0110926E0184E906
:1009800087EB91E00E94C50181E001C080E0CF913A :1009800091E06FDBEC2FF0E0EE56FE4F1082C801D5
:100990001F910F9108950F931F93CF9380910001A2 :10099000CF911F910F914BCFCF911F910F91089540
:1009A00081FF54C0C091000180910001857E809339 :1009A00082B38C6F82BB85B38F6085BB8CEF81BBBC
:1009B0000001C4FF06C089E891E00E94C50180E003 :1009B000CFE0C4BB8BB3806E8BBB87EE8ABB5998EC
:1009C00001C081E0C3FF05C080EA91E00E94C5013B :1009C0008FE780BD81E089B986E080BD88E98AB97A
:1009D00080E09091C001933060F09091E4019B35EC :1009D00083B7826083BF89B7816089BF10DD789457
:1009E00041F4E091C001F0E0EE51FE4F90819D3561 :1009E00088E190E00FB6F894A89581BD0FBEC1BD17
:1009F00049F01092C0018AEA91E0CF911F910F91C6 :1009F00085ED90E036DBA89580918F018111EDDDCA
:100A00000C94C501882311F1E091C001F0E0EC5194 :100A00008091600081FFF7CF6CDFF5CFAA1BBB1B85
:100A1000FE4F108285EE91E00E94D9028C01FC010C :100A100051E107C0AA1FBB1FA617B70710F0A61BFE
:100A20008081823399F4C091C0011092C00184EE9C :100A2000B70B881F991F5A95A9F780959095BC011F
:100A300091E00E94C501EC2FF0E0EE51FE4F1082D4 :100A3000CD010895A1E21A2EAA1BBB1BFD010DC01A
:100A4000C801CF911F910F910C946304CF911F9116 :100A4000AA1FBB1FEE1FFF1FA217B307E407F5077E
:100A50000F9108958BB18C6F8BB988B1807F88B965 :100A500020F0A21BB30BE40BF50B661F771F881F5A
:100A60008CEF8AB9CFE0C7B985B1876085B98FE3CC :100A6000991F1A9469F760957095809590959B01F0
:100A700084B91092C50087E68093C4008091C000BD :100A7000AC01BD01CF010895052E97FB16F400943B
:100A80008D7F8093C00086E08093C20088E98093C8 :100A80000FD057FD05D0D6DF07FC02D046F408C0D2
:100A9000C10085B5826085BD80916E0081608093C4 :100A900050954095309521953F4F4F4F5F4F0895AA
:100AA0006E000E945E00789488E190E00FB6F894A2 :100AA00090958095709561957F4F8F4F9F4F0895DA
:100AB000A895809360000FBEC0936000A8958091B8 :100AB00009D0A59F900DB49F900DA49F800D911D0E
:100AC000BA0181110E946E018091000181FFF6CF71 :100AC00011240895A29FB001B39FC001A39F01D03C
:100AD0000E94CB04F3CFAA1BBB1B51E107C0AA1F86 :100AD000B29F700D811D1124911D0895F894FFCFD0
:100AE000BB1FA617B70710F0A61BB70B881F991FCF :100AE000016600141414080C04060203010902062E
:100AF0005A95A9F780959095BC01CD010895A1E282 :100AF000040C08090103080901030206040C080A92
:100B00001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F87 :100B000002060405010907030B090D0C0E060D0969
:100B1000FF1FA217B307E407F50720F0A21BB30BD2 :100B10000B0307060E0C07060E0C0D090B03070549
:100B2000E40BF50B661F771F881F991F1A9469F74E :100B20000D090B0A0E065370656564206368616EDB
:100B300060957095809590959B01AC01BD01CF01AA :100B300067656420746F200042616420737065658E
:100B40000895052E97FB1EF400940E94B80557FDEA :100B4000642076616C75650A005B32203020537436
:100B500007D00E947F0507FC03D04EF40C94B80523 :100B50003D305D0A0053636F7270696F20706C6185
:100B600050954095309521953F4F4F4F5F4F0895D9 :100B600074666F726D2072656164790A004D6F76EC
:100B700090958095709561957F4F8F4F9F4F089509 :100B700065206D6F746F72200020666F72200073A5
:100B80000E94CB05A59F900DB49F900DA49F800D52 :100B8000746570730A005B32204E2053743D315DF2
:100B9000911D11240895A29FB001B39FC001A39F8E :100B90000A007265737461727400536875747465C9
:100BA000700D811D1124911DB29F700D811D1124A6 :100BA00072004E656F6E00466C6174004C454431B6
:080BB000911D0895F894FFCF98 :100BB000004C454432004C45443300496E70757416
:100BB80001141414080C0406020301095370656536 :100BC00020627566666572206F766572666C6F77F7
:100BC80064206368616E67656420746F2000426109 :100BD0000A005278206572726F720A00456E746561
:100BD800642073706565642076616C75650A005BD6 :0C0BE0007220225B636D645D220A00003D
:100BE8003220302053743D305D0A004D6F76652009
:100BF8006D6F746F72200020666F722000737465C9
:100C080070730A005B32204E2053743D315D0A0038
:100C180072657374617274005368757474657200D8
:100C28004E656F6E00466C6174004C454431004C53
:100C3800454432004C45443300496E707574206257
:100C48007566666572206F766572666C6F770A00E6
:100C58005278206572726F720A00456E7465722050
:0A0C6800225B636D645D220A000048
:00000001FF :00000001FF

View File

@ -57,8 +57,21 @@
// [1324] = 1000, 1010, 0010, 0110, 0100, 0101, 0001, 1001 - bipolar // [1324] = 1000, 1010, 0010, 0110, 0100, 0101, 0001, 1001 - bipolar
// 1000, 1010, 0010, 0110, 0100, 0101, 0001, 1001 - half-step // 1000, 1010, 0010, 0110, 0100, 0101, 0001, 1001 - half-step
// 1010, 0110, 0101, 1001 - full 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[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 static int8_t Ustep = 0; // current microstep count
uint16_t Steps_left; // steps left to proceed (absolute value) 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 volatile uint8_t stepper_pulse = 0; // interrupt flag, used in main.c
static void stop_motors();
void stepper_setup(){ void stepper_setup(){
TCCR1B |= _BV(WGM12); // configure timer1 for CTC mode, TOP is OCR1A TCCR1B |= _BV(WGM12); // configure timer1 for CTC mode, TOP is OCR1A
OCR1A = 2000; // set the CTC compare value - 1kHz OCR1A = 2000; // set the CTC compare value - 1kHz
@ -145,7 +156,7 @@ uint8_t stepper_move(uint8_t Nmotor, int16_t Nsteps){
return 1; return 1;
} }
static void stop_motors(){ void stop_motors(){
stepper_get_esw(cur_motor); stepper_get_esw(cur_motor);
// turn off all pulses to place motor in free state & prevent undesirable behaviour // turn off all pulses to place motor in free state & prevent undesirable behaviour
STPRS_OFF(); STPRS_OFF();
@ -202,9 +213,21 @@ void stepper_get_esw(uint8_t Nmotor){
usart_send(str); 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 * Timer 1 used to generate stepper pulses
*/ */
ISR(TIMER1_COMPA_vect){ ISR(TIMER1_COMPA_vect){
stepper_pulse = 1; // say that we can generate next microstep stepper_pulse = 1; // say that we can generate next microstep
} }

View File

@ -36,7 +36,9 @@ void stepper_process();
uint8_t stepper_ch_speed(char *spd); uint8_t stepper_ch_speed(char *spd);
uint8_t stepper_move(uint8_t Nmotor, int16_t Nsteps); uint8_t stepper_move(uint8_t Nmotor, int16_t Nsteps);
void stop_motors();
void stepper_get_esw(uint8_t Nmotor); void stepper_get_esw(uint8_t Nmotor);
uint8_t chk_stpr_cmd(char N);
#endif // __STEPPER_H__ #endif // __STEPPER_H__