;SIC PROJECT 056 LOW-COST PCB MILLING MACHINE ;INITIAL VERSION FOR MIT COURSE 2 BACHELOR'S THESIS "Rapid Prototyping of Rapid Prototyping Machines" SUPERVISED BY NEIL GERSHENFELD, DIRECTOR, MIT CBA ;--REVISION HISTORY----------------------------------------------------------------------- ; ; --------------------------------------------------------------------------------- ; | DATE | MODIFICATIONS | NAME |FILENAME | ; |--------|---------------------------|-------------------|-----------------------| ; |03/09/08| CREATED |ILAN E MOYER |i0.smc.03.asm | ; |--------|---------------------------|-------------------|-----------------------| ; |12/31/08| SPIFFIFIED |ILAN E MOYER |056-054.asm | ; |--------|---------------------------|-------------------|-----------------------| ; |3/20/09 | ADDED HALF-STEPPING |ILAN E MOYER |056-054b.asm | I changed the format of motorpositions to allow 8 half-positions ; |--------|---------------------------|-------------------|-----------------------| ; |3/20/09 | FIXED SINGLE-STEP ISSUE |ILAN E MOYER |056-054c.asm | ; |--------|---------------------------|-------------------|-----------------------| ; |11/29/09| MODIFIED FOR NETWORKING |ILAN E MOYER |056-054d.asm | ; |--------|---------------------------|-------------------|-----------------------| ; |12/08/09| ADDED VM URL RESPONSE |ILAN E MOYER |056-054e.asm | ; |--------|---------------------------|-------------------|-----------------------| ; |12/13/09| ADDED 3-AXIS MOTION |ILAN E MOYER |056-054f.asm | ; |--------|---------------------------|-------------------|-----------------------| ; |01/06/10| REFACTORED FOR FABINABOX |ILAN E MOYER |076-001a.asm | ; |--------|---------------------------|-------------------|-----------------------| ; |01/07/10| ADDED RX PULLUP, LEDS OFF |ILAN E MOYER |076-001a.asm | RX pullup is necessary to avoid tripping rcv watchdog. Also turned off ind leds after move. ; |--------|---------------------------|-------------------|-----------------------| ; |01/10/10| FIXED MOTION CODE |ILAN E MOYER |076-001b.asm | ; |--------|---------------------------|-------------------|-----------------------| ; |01/12/10| ADDED STATUS RESPONSE |ILAN E MOYER |076-001c.asm | Also fixed push/pop temp3 and temp4 in motion interrupt. ; |--------|---------------------------|-------------------|-----------------------| ; |01/16/10| ADDED BACKLASH COMP. |ILAN E MOYER |076-001c.asm | Also added SEI/CLI when accessing 16 bit registers in main loop ; |--------|---------------------------|-------------------|-----------------------| ; |02/19/10| NOW SERVO CONTROL CODE |ILAN E MOYER |076-007a.asm | ; ---------------------------------------------------------------------------------- ; ; ; ; ;--HARDWARE CONFIGURATION (076-007 REV1)--------------------------------------------- ; ; ; ; D C ; ; I I ; N N ; D D ; I I ; T C C ; X A A ; T T ; E _ O O ; N R R R ; A E ; B T R S P P L L ; L X X E C C E E ; E D D T 5 4 D D ; --------------- ; LED| | B INDICATOR LED ; BUTTON| | A INDICATOR LED ; GND| | ADC7 ; VCC| ATMEGA88 | GND ; GND| | AREF ; VCC| | ADC6 ; XTAL1| | AVCC ; XTAL2| | SCK/SERVO 8 ; --------------- ; S S S S S S M M ; E E E E E E O I ; R R R R R R S S ; V V V V V V I O ; O O O O O O / ; S ; 1 2 3 4 5 6 E ; R ; V ; O ; ; 7 ; ; ; ;--PORT B ASSIGNMENTS-------------------------------------------------------------- ; ; PB0 = SERVO 4 ; PB1 = SERVO 5 ; PB2 = SERVO 6 ; PB3 = SERVO 7 ; PB4 = MISO ; PB5 = SCK / SERVO 8 ; PB6 = XTAL1 ; PB7 = XTAL2 ; ;--PORT C ASSIGNMENTS-------------------------------------------------------------- ; ; PC0 = A INDICATOR LED ; PC1 = B INDICATOR LED ; PC2 = C INDICATOR LED ; PC3 = D INDICATOR LED ; PC4 = N/C ; PC5 = N/C ; PC6 = /RESET ;--PORT D ASSIGNMENTS-------------------------------------------------------------- ; PD0 = RXD ; PD1 = TXD ; PD2 = RS485 TX ENABLE ; PD3 = LED ; PD4 = BUTTON ; PD5 = SERVO 1 ; PD6 = SERVO 2 ; PD7 = SERVO 3 ;--INCLUDE FILES------------------------------------------------------------------- ; .DEVICE ATMega88 .include "m88def.inc" ;--DEFINITIONS--------------------------------------------------------------------- ;PORT DIRECTION MASKS ;PACKET LOCATIONS .equ rx_packet_location = 0x0100 ;SRAM start location for rx packet .equ tx_packet_location = 0x0200 ;SRAM start location for tx packet ;PAcKET OFFSETS .equ packet_startbyte = 0 .equ packet_srcaddress0 = 1 .equ packet_srcaddress1 = 2 .equ packet_srcport = 3 .equ packet_destaddress0 = 4 .equ packet_destaddress1 = 5 .equ packet_destport = 6 .equ packet_length = 7 .equ packet_payload = 8 ;PACKET STANDARD VALUES .equ packet_unicast_startbyte = 74 .equ packet_broadcast_startbyte = 138 ;NODE OFFSETS .equ node_address_location = 0x0300 ;SRAM start location for node address ;NODE VALUES .equ node_address0 = 165 .equ node_address1 = 134 ;RECEIVER WATCHDOG CONSTANTS .equ watchdog_trip = 253 ;PORTS: UI .equ button_input = PIND .equ led_output = PORTD .equ led_toggle = PIND ;PORTS: COMM .equ comm_port = PORTD .equ comm_dir = DDRD ;PORTS: SERVO CONTROL .equ servo1_ddr = DDRD .equ servo1_port = PORTD .equ servo2_ddr = DDRD .equ servo2_port = PORTD .equ servo3_ddr = DDRD .equ servo3_port = PORTD .equ servo4_ddr = DDRB .equ servo4_port = PORTB .equ servo5_ddr = DDRB .equ servo5_port = PORTB .equ servo6_ddr = DDRB .equ servo6_port = PORTB .equ servo7_ddr = DDRB .equ servo7_port = PORTB .equ servo8_ddr = DDRB .equ servo8_port = PORTB ;PORTS: INDICATOR LEDS .equ indicator_ddr = DDRC .equ indicator_port = PORTC .equ indicator_toggle = PINC ;PINS: UI .equ button = PD4 .equ led = PD3 ;PINS: COMM .equ rx_pin = PD0 .equ tx_pin = PD1 .equ tx_enable = PD2 ;PINS: SERVO CONTROL .equ servo1 = PD5 .equ servo2 = PD6 .equ servo3 = PD7 .equ servo4 = PB0 .equ servo5 = PB1 .equ servo6 = PB2 .equ servo7 = PB3 .equ servo8 = PB4 ;PINS: INDICATOR LED .equ ind_a = PC0 .equ ind_b = PC1 .equ ind_c = PC2 .equ ind_d = PC3 ;DIRECTION MASKS .equ portb_directions = (1 << servo4)|(1 << servo5)|(1 << servo6)|(1 << servo7) | (1 << servo8) .equ portc_directions = (1 << ind_a)|(1 << ind_b)|(1 << ind_c)|(1<