Fräsmotor stockt / Frästisch

Hallo Zusammen,

ich habe einen Frästisch mit automatischer Höhenverstellung gebaut.
Mein Problem ist, dass der Antrieb in der Bewegung stockt sobald ein Wert an das I2C Display übermittelt wird.

Ich habe versucht das Problem in dem Video darzustellen.

Danke vorab für die Hilfestellung.

Hier ist der Code

#include <AH_EasyDriver.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  
AH_EasyDriver stepper(200,8,9);   

int StepCounter = 0;
int Stepping = false;
int counter = 0;
long previousMillis = 0;
long interval = 1000;

void setup() {


lcd.init();                     
lcd.init();
lcd.backlight();

pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(10, OUTPUT);
stepper.setSpeedRPM(50);       
}



void loop() {{

if (digitalRead(4) ==  HIGH and digitalRead(2) == LOW)

{stepper.setSpeedRPM(50); 
stepper.move(1);            
counter = counter + 1;}

if (digitalRead(5) ==  HIGH and digitalRead(3) == LOW)
{stepper.setSpeedRPM(50);  
stepper.move(-1);             
counter = counter  - 1;}
  
if (digitalRead(7) ==  HIGH and digitalRead(2) == LOW)

{stepper.setSpeedRPM(50);  
stepper.move(1);               
//lcd.setCursor(0,0);
//lcd.print(" FRAESERWECHSEL ");
//lcd.setCursor(0,1);
//lcd.print("    WARTEN      ");
}

unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) 
{
previousMillis = currentMillis;
{
lcd.setCursor(7,1);
lcd.print("    ");
lcd.setCursor(0,0);
lcd.print("   Routerlift   ");
lcd.setCursor(0,1);
lcd.print("Hoehe :");
lcd.setCursor(8,1);
lcd.print(counter/100);
lcd.setCursor(11,1);
lcd.print("mm   ");
}  }
  
if (digitalRead(6) ==  HIGH)
 {
lcd.setCursor(0,0);
lcd.print("  KALIBRIERUNG  ");
delay(100);
lcd.setCursor(0,1);
lcd.print(".               ");
delay(100);
lcd.setCursor(0,1);
lcd.print("..");
delay(100);
lcd.setCursor(0,1);
lcd.print("...");
delay(100);
lcd.setCursor(0,1);
lcd.print("....");
delay(100);
lcd.setCursor(0,1);
lcd.print(".....");
delay(100);
lcd.setCursor(0,1);
lcd.print("......");
delay(100);
lcd.setCursor(0,1);
lcd.print(".......");
delay(100);
lcd.setCursor(0,1);
lcd.print("........");
delay(100);
lcd.setCursor(0,1);
lcd.print(".........");
delay(100);
lcd.setCursor(0,1);
lcd.print("..........");
delay(100);
lcd.setCursor(0,1);
lcd.print("...........");
delay(100);
lcd.setCursor(0,1);
lcd.print("............");
delay(100);
lcd.setCursor(0,1);
lcd.print(".............");
delay(100);
lcd.setCursor(0,1);
lcd.print("..............");
delay(100);
lcd.setCursor(0,1);
lcd.print("...............");
delay(100);
lcd.setCursor(0,1);
lcd.print("................");
delay(100);
lcd.setCursor(0,0);
stepper.move(-100);           
delay(100);
stepper.move(+100);             
delay(100);
lcd.print("     BEREIT     ");
delay(1000);
counter =  0  ;} 

   
if (digitalRead(7)==  HIGH and digitalRead(2) ==  HIGH )
 
 {digitalWrite(10, HIGH);
 lcd.setCursor(0,0);
 lcd.print("  FRAESERWECHSEL  ");
 lcd.setCursor(0,1);
 lcd.print("    BEREIT      ");
 delay(10000);}
 
else 
 {digitalWrite(10, LOW);} 

  
}}

Wieso initialisiert Du das LCD 2 mal?

delay() bremst den Code. Während delay() wird nichts anderes gemacht. Da steht der Schrittmotor.
Grüße Uwe

hallo Uwe,

danke für die Rückmeldung.

an welcher Stelle bremst Delay den Code?
Delay wird doch erst bei Kalibrierung aktiviert.

Im normalen Hubprogramm befindet ich kein Delay

Die Kommunikation mit dem LCD braucht rel. viel Zeit, in der kein Step ausgegeben wird. Das wirkt auch wie ein delay().
Versuch mal die MobaTools für die Stepperansteuerung zu verwenden ( installierbar über den Bibliotheksmanager). Die erzeugen die Pulse per Timerinterupt, was auch während der I2C Kommunikation funktioniert.

Kann ich die Moba Tool auch in Verbindung mit dem tb6600 verwenden?

Ja, die funktionieren mit jedem Treiber, der einen Step und Dir Eingang hat.

reicht es den Treiber einzubinden oder muss ich den Sketch neu programmieren?

Ich kenne die Easydriver Lib nicht. Aber die Methodenaufrufe sind sicher anders als bei den MobaTools. Insbesondere, da es bei den MobaTools keine direkten Aufrufe gibt um die Steps zu erzeugen. Das passiert ja im Hintergrund per Interrupt. Man gibt nur an, was der Motor machen soll, dann werden die dazu notwendigen Signale (Step/Dir) erzeugt. Unabhängig davon, was im Sketch weiter passiert. Sogar während einem delay dreht der Motor weiter (solange er das vorgegebene Ziel noch nicht erreicht hat).