diff --git a/firmware/stepper_nano_zero/board.h b/firmware/stepper_nano_zero/board.h index d195b3e..26a5986 100644 --- a/firmware/stepper_nano_zero/board.h +++ b/firmware/stepper_nano_zero/board.h @@ -6,6 +6,11 @@ //define this if you are using the Mechaduino //#define MECHADUINO_HARDWARE +//define this if your step, dir and error input are 3.3v instead of 5v (Smoothie) +//IMPORTANT NOTE: The pin labeled "D3" is STEP, the pin labeld "TX" is DIR and the pin labeled "RX" is ERROR. +//The original STEP, DIR and ERROR pins will have no function +#define USE_3_3V_SIGNAL + #define NZS_FAST_CAL // define this to use 32k of flash for fast calibration table #define NZS_FAST_SINE //uses 2048 extra bytes to implement faster sine tables @@ -44,15 +49,23 @@ #else #define SerialUSB Serial #endif - +#ifdef USE_3_3V_SIGNAL +#define PIN_STEP_INPUT (3) // D3 +#define PIN_DIR_INPUT (30) // TX +#else #define PIN_STEP_INPUT (0) #define PIN_DIR_INPUT (1) +#endif #ifdef MECHADUINO_HARDWARE #define PIN_ERROR (19) //analogInputToDigitalPin(PIN_A5)) #else +#ifdef USE_3_3V_SIGNAL +#define PIN_ERROR (31) // RX +#else #define PIN_ERROR (10) #endif +#endif #define PIN_AS5047D_CS (16)//analogInputToDigitalPin(PIN_A2)) #ifndef MECHADUINO_HARDWARE @@ -169,4 +182,4 @@ static void inline RED_LED(bool state) #endif//__BOARD_H__ - + diff --git a/firmware/stepper_nano_zero/stepper_controller.cpp b/firmware/stepper_nano_zero/stepper_controller.cpp index 0a8239b..15d5203 100644 --- a/firmware/stepper_nano_zero/stepper_controller.cpp +++ b/firmware/stepper_nano_zero/stepper_controller.cpp @@ -401,10 +401,10 @@ void StepperCtrl::LCDShow(char *str) #ifdef MECHADUINO_HARDWARE //mech does not have LCD return; #else - display.clearDisplay(); - display.setTextSize(2); + clearAndShowHeader(); + display.setTextSize(DISPLAY_TEXT_SIZE); display.setTextColor(WHITE); - display.setCursor(0,0); + display.setCursor(0,DISPLAY_LINE(0)); display.println(str); #endif } @@ -424,12 +424,12 @@ void StepperCtrl::UpdateLcd(void) int32_t d; bool state; - display.clearDisplay(); + clearAndShowHeader(); //sprintf(str,"uSteps %d", numMicroSteps); - display.setTextSize(2); + display.setTextSize(DISPLAY_TEXT_SIZE); display.setTextColor(WHITE); state=TC5_ISR_Enabled; @@ -490,7 +490,7 @@ void StepperCtrl::UpdateLcd(void) sprintf(str, "%dRPM open",RPM); } - display.setCursor(0,0); + display.setCursor(0,DISPLAY_LINE(0)); display.println(str); @@ -502,7 +502,7 @@ void StepperCtrl::UpdateLcd(void) y=abs(err-x*100); sprintf(str,"%01d.%02d err", x,y); - display.setCursor(0,20); + display.setCursor(0,DISPLAY_LINE(1)); display.println(str); //LOG("%s %d %d %d", str, err, x, y); // @@ -519,7 +519,7 @@ void StepperCtrl::UpdateLcd(void) //LOG("deg is %d, %d, %d",deg, x, y); sprintf(str,"%03d.%01ddeg", x,y); - display.setCursor(0,40); + display.setCursor(0,DISPLAY_LINE(2)); display.println(str); display.display(); @@ -546,43 +546,43 @@ void StepperCtrl::menu(void) while (!done) { - display.clearDisplay(); - display.setTextSize(2); + clearAndShowHeader(); + display.setTextSize(DISPLAY_TEXT_SIZE); display.setTextColor(WHITE); if (menuItem==0) { sprintf(str,"*Run Cal"); - display.setCursor(0,0); + display.setCursor(0,DISPLAY_LINE(0)); display.println(str); }else { sprintf(str," Run Cal"); - display.setCursor(0,0); + display.setCursor(0,DISPLAY_LINE(0)); display.println(str); } if (menuItem==1) { sprintf(str,"*Check Cal"); - display.setCursor(0,20); + display.setCursor(0,DISPLAY_LINE(1)); display.println(str); }else { sprintf(str," Check Cal"); - display.setCursor(0,20); + display.setCursor(0,DISPLAY_LINE(1)); display.println(str); } if (menuItem==2) { sprintf(str,"*Exit"); - display.setCursor(0,40); + display.setCursor(0,DISPLAY_LINE(2)); display.println(str); }else { sprintf(str," Exit"); - display.setCursor(0,40); + display.setCursor(0,DISPLAY_LINE(2)); display.println(str); } @@ -612,24 +612,24 @@ void StepperCtrl::menu(void) switch(menuItem) { case 0: - display.clearDisplay(); - display.setTextSize(2); + clearAndShowHeader(); + display.setTextSize(DISPLAY_TEXT_SIZE); display.setTextColor(WHITE); - display.setCursor(0,0); + display.setCursor(0,DISPLAY_LINE(0)); display.println("Running"); - display.setCursor(0,20); + display.setCursor(0,DISPLAY_LINE(1)); display.println("Cal"); display.display(); calibrateEncoder(); break; case 1: { - display.clearDisplay(); - display.setTextSize(2); + clearAndShowHeader(); + display.setTextSize(DISPLAY_TEXT_SIZE); display.setTextColor(WHITE); - display.setCursor(0,0); + display.setCursor(0,DISPLAY_LINE(0)); display.println("Testing"); - display.setCursor(0,20); + display.setCursor(0,DISPLAY_LINE(1)); display.println("Cal"); display.display(); int32_t error,x,y,m; @@ -637,14 +637,14 @@ void StepperCtrl::menu(void) x=(error*100 *360)/ANGLE_STEPS; m=x/100; y=abs(x-(m*100)); - display.clearDisplay(); - display.setTextSize(2); + clearAndShowHeader(); + display.setTextSize(DISPLAY_TEXT_SIZE); display.setTextColor(WHITE); - display.setCursor(0,0); + display.setCursor(0,DISPLAY_LINE(0)); display.println("Error"); sprintf(str, "%02d.%02d deg",m,y); - display.setCursor(0,20); + display.setCursor(0,DISPLAY_LINE(1)); display.println(str); display.display(); while (digitalRead(PIN_SW3)); @@ -669,15 +669,15 @@ void StepperCtrl::showCalError(void) #else char str[100]; - display.clearDisplay(); - display.setTextSize(2); + clearAndShowHeader(); + display.setTextSize(DISPLAY_TEXT_SIZE); display.setTextColor(WHITE); sprintf(str,"Calibration"); - display.setCursor(0,0); + display.setCursor(0,DISPLAY_LINE(0)); display.println(str); sprintf(str,"Error"); - display.setCursor(0,20); + display.setCursor(0,DISPLAY_LINE(1)); display.println(str); display.display(); #endif @@ -691,21 +691,48 @@ void StepperCtrl::showSplash(void) char str[100]; display.clearDisplay(); - display.setTextSize(2); + display.setTextSize(DISPLAY_TEXT_SIZE); display.setTextColor(WHITE); - sprintf(str,"Misfit"); - display.setCursor(0,0); + sprintf(str,"Misfit Tech"); + display.setCursor(0,DISPLAY_LINE(0)); display.println(str); - sprintf(str,"Tech"); - display.setCursor(0,20); + sprintf(str,"http://misfittech.net"); + display.setCursor(0,DISPLAY_LINE(1)); + display.println(str); + sprintf(str,"Nano Zero Stepper"); + display.setCursor(0,DISPLAY_LINE(2)); display.println(str); - display.setCursor(0,40); + display.setCursor(0,DISPLAY_LINE(3)); display.println(VERSION); display.display(); #endif //no mechaduino } +void StepperCtrl::clearAndShowHeader(void) +{ +#ifdef MECHADUINO_HARDWARE //mech does not have LCD + return; +#else + char str[100]; + + display.clearDisplay(); + display.setTextSize(1); + display.setTextColor(WHITE); + + sprintf(str,"Misfit Tech"); + display.setCursor(0,0); + display.println(str); + sprintf(str,"Nano Zero Stepper"); + display.setCursor(0,8); + display.println(str); + + + display.setCursor(72,0); + display.print(VERSION); +#endif //no mechaduino +} + int StepperCtrl::begin(void) { @@ -1526,4 +1553,4 @@ void StepperCtrl::printData(void) if (state) enableTCInterrupts(); -} +} diff --git a/firmware/stepper_nano_zero/stepper_controller.h b/firmware/stepper_nano_zero/stepper_controller.h index c34a317..23d4cd8 100644 --- a/firmware/stepper_nano_zero/stepper_controller.h +++ b/firmware/stepper_nano_zero/stepper_controller.h @@ -14,6 +14,14 @@ #define N_DATA (1024) +#define DISPLAY_TEXT_SIZE 1 +#define DISPLAY_LINE_HEIGHT (10*DISPLAY_TEXT_SIZE) + +// the Yellow/Blue SDD1306 has 19 pixels at the top that are for the yellow section +#define DISPLAY_HEADER_OFFSET 19 + +#define DISPLAY_LINE(LINENUM) (LINENUM*DISPLAY_LINE_HEIGHT)+DISPLAY_HEADER_OFFSET + typedef enum { CTRL_OFF =0, CTRL_SIMPLE = 1, //simple error controller @@ -89,6 +97,7 @@ class StepperCtrl //these are LCD functions void showSplash(void); + void clearAndShowHeader(void); void menu(void); void showCalError(void); int32_t measureMeanEncoder(void); @@ -143,4 +152,4 @@ class StepperCtrl }; #endif //__STEPPER_CONTROLLER_H__ - + diff --git a/firmware/stepper_nano_zero/stepper_nano_zero.ino b/firmware/stepper_nano_zero/stepper_nano_zero.ino index 5523c7f..bdbdfd9 100644 --- a/firmware/stepper_nano_zero/stepper_nano_zero.ino +++ b/firmware/stepper_nano_zero/stepper_nano_zero.ino @@ -36,9 +36,10 @@ void setup() { boardSetupPins(); int to=20; SerialUSB.begin(460800); - + #ifndef USE_3_3V_SIGNAL Serial5.begin(460800); SysLogInit(&Serial5,LOG_DEBUG); //use SWO for the sysloging + #endif LOG("Power up!"); while (!SerialUSB) { @@ -51,7 +52,9 @@ void setup() { }; //wait for serial //return; + #ifndef USE_3_3V_SIGNAL SysLogInit(&Serial5,LOG_DEBUG); //use SWO for the sysloging + #endif LOG("SErial up!"); SerialUSB.println("starting begin"); stepperCtrl.begin(); //start controller before accepting step inputs @@ -108,4 +111,4 @@ void loop() { } return; -} +}