From 6d7e6a11fcce1c647230d1f5f28eb32a4aaf5573 Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Wed, 7 Mar 2012 17:41:29 -0500 Subject: [PATCH 1/3] Add create_speed_lookup --- Marlin/create_speed_lookuptable.py | 53 ++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 Marlin/create_speed_lookuptable.py diff --git a/Marlin/create_speed_lookuptable.py b/Marlin/create_speed_lookuptable.py new file mode 100755 index 0000000000..0272bdc9b3 --- /dev/null +++ b/Marlin/create_speed_lookuptable.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +""" Generate the stepper delay lookup table for Marlin firmware. """ + +import argparse + +__author__ = "Ben Gamari " +__copyright__ = "Copyright 2012, Ben Gamari" +__license__ = "GPL" + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument('-f', '--cpu-freq', type=int, default=16, help='CPU clockrate in MHz (default=16)') +parser.add_argument('-d', '--divider', type=int, default=8, help='Timer/counter pre-scale divider (default=8)') +args = parser.parse_args() + +cpu_freq = args.cpu_freq * 1000000 +timer_freq = cpu_freq / args.divider + +print "#ifndef SPEED_LOOKUPTABLE_H" +print "#define SPEED_LOOKUPTABLE_H" +print +print '#include "Marlin.h"' +print + +# Based on timer calculations of 'RepRap cartesian firmware' by Zack +# Smith and Philip Tiefenbacher. + +print "const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {" +a = [ timer_freq / ((i*256)+32) for i in range(256) ] +b = [ a[i] - a[i+1] for i in range(255) ] +b.append(b[-1]) +for i in range(32): + print " ", + for j in range(8): + print "{%d, %d}," % (a[8*i+j], b[8*i+j]), + print +print "};" +print + +print "const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {" +a = [ timer_freq / ((i*8)+32) for i in range(256) ] +b = [ a[i] - a[i+1] for i in range(255) ] +b.append(b[-1]) +for i in range(32): + print " ", + for j in range(8): + print "{%d, %d}," % (a[8*i+j], b[8*i+j]), + print +print "};" +print + +print "#endif" + From 96509494f0d0438fc4f85171b66ec2a598f00a62 Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Wed, 7 Mar 2012 17:58:35 -0500 Subject: [PATCH 2/3] stepper: Clarify comment on timer-counter configuration --- Marlin/stepper.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 55c09902bc..c3ea41b02d 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -740,7 +740,13 @@ void st_init() // output mode = 00 (disconnected) TCCR1A &= ~(3< Date: Wed, 7 Mar 2012 18:05:10 -0500 Subject: [PATCH 3/3] Add instructions to regenerate speed_lookuptable when changing F_CPU --- Marlin/Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Marlin/Makefile b/Marlin/Makefile index 9e41c28d33..955ccd5e33 100644 --- a/Marlin/Makefile +++ b/Marlin/Makefile @@ -23,7 +23,9 @@ # 3. Set the line containing "MCU" to match your board's processor. # Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth # or Diecimila have the atmega168. If you're using a LilyPad Arduino, -# change F_CPU to 8000000. +# change F_CPU to 8000000. If you are using Gen7 electronics, you +# probably need to use 20000000. Either way, you must regenerate +# the speed lookup table with create_speed_lookuptable.py. # # 4. Type "make" and press enter to compile/verify your program. # @@ -42,6 +44,8 @@ MCU = atmega1280 #Arduino install directory INSTALL_DIR = ../../arduino-0022/ +# Be sure to regenerate speed_lookuptable.h with create_speed_lookuptable.py +# if you are setting this to something other than 16MHz F_CPU = 16000000 UPLOAD_RATE = 115200