- LiFePO4 Speicher Test         
Ergebnis 1 bis 3 von 3

Thema: Mieser Fehler

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242

    Mieser Fehler

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich hoffe, ihr empfindet meine Frage nicht als Zumutung.

    Ich habe ein etwas kompliziertes Programm aber schon auf das Wesentliche reduziert , um meine Frage zu stellen.

    Das ist der (so nicht lauffähige Code) ; meine Anmerkungen dazu sind fett

    Code:
    #include <CustomStepper.h>
    
    CustomStepper stepper_M2(22, 24, 26, 28);  // Anschlusspinne der Motortreiber
    CustomStepper stepper_M3(32, 34, 36, 38);             //
    
    #include <SimpleTimer.h>    // einbinden der Library
    
    SimpleTimer timer1;      // Benennung der Timer
    
    
    
    
    boolean M1solldrehen = false;             // für UP Justierung
    boolean M2solldrehen = true;             // für UP Justierung
    
    boolean Zeitaus1 = true;                 // Wird false, wenn Zeit von SimpleTimer 1 abgelaufen ist
    
    int JustPin = 14;                    // mit digital Eingang 14 wird die jeweilige Motorbewegung gestoppt
    int zeitId;                          // für den SimpleTimer
    
    
    void setup() {
      Serial.begin (250000);    //  diese Buadrate muss auch in der Konsole (Serieller Monitor) eingestellt sein
      while (!Serial);
    
      pinMode (JustPin, INPUT);               // wird nur im UP Justierung benötigt
      digitalWrite(JustPin, HIGH);            //schaltet den PullUp-Widerstand ein
    }
    
    
    void loop() {
    
        Justierung();   
    
    //  stepper_M2.run();
    //  stepper_M3.run();
      
      timer1.run();
    
    }   //*************   ENDE  loop
    
    
    
    //  **************************************   UP Justierung   **************************************
    
    void Justierung() {
      static boolean Start_war = false;
    
      if (Zeitaus1 == false)  {    
        M1solldrehen == true;            wird nach Ablauf des Timers durchlaufen
        M2solldrehen == false;
        goto M2_Sprung;   
      }
      //  11111111111111111111111
      if (digitalRead (JustPin) == HIGH  && M1solldrehen == false)   {
    
                                          hier wird Spindelstepper eingeschaltet
    
      }
      //  2222222222222222222222222
      else if (digitalRead (JustPin) == LOW  && M1solldrehen == false)  {    //    Motor 1 justieren
        Serial.print (" 163 ");           Die Ausgabe erfolgt im Seriellen Monitor  ca. 1 s lang und ist  "163 0"
        Serial.println (Start_war);
    
        //  2a2a2a2a2a2a2a2a2a2a2a2a
        if (Start_war == false)  {    
          zeitId =  timer1.setInterval(1000, Zeitablauf1);    hier wird der Timer gestartet
        }
        // 2b2b2b2b2b2b2b2b2b2b2b2b2b
        else if (Start_war == true)  {                                               // Endposition erreicht
          
          Serial.println (" 170 ");      hier kommt das Programm nicht hin
        }
      }
    
    M2_Sprung:
     
     if (stepper_M2.isDone() &&   M2solldrehen == false  &&  Zeitaus1 == false) {    //Motor 2 justieren
    
       Serial.println (" M2_Sprung ");
    
      }
    
    }   //*************     ENDE  UP Justierung
    
    
    
    //****************************     UP Zeitablauf1   **************************************
    void Zeitablauf1() {    //  wird ausgeführt, wenn SimpleTimer timer 1 abgelaufen ist
    
      Zeitaus1 = false;    //
    
      Serial.println (" 255 ");
    
    
    }     //   ***********  ENDE   UP
    
    
    
    
    
    
    void  M2_fahren()  {
        
    }


    Ohne meine fetten Kommentare tut das Programm, was es soll. Die Konsole zeigt dann:

    für 1 s

    163
    0
    Zeitaus1 = 1
    163
    0
    Zeitaus1 = 1
    163
    0
    Zeitaus1 = 1
    163

    nach der Sekunde

    163
    0
    255
    Zeitaus1 = 0
    255
    255
    Zeitaus1 = 0


    So weit so gut!

    Jetzt mein Problem:

    Sobald ich diese Zeilen scharf mache:

    // stepper_M2.run();
    // stepper_M3.run();

    funktioniert das so nicht mehr, obwohl ich sonst nichts ändere und alles was mit den Steppern M2 und M3 zu tun hat, gelöscht habe. Auf der Konsole erscheint nur noch :
    Zeitaus1 = 1
    163
    0
    und das nur einmal.

    Kann es sein, dass die Librarys sich beeinflussen? Was könnte man denn dagegen tun?

    Gruß
    fredyxx

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    55
    Beiträge
    2.198
    Hm- möglich wärs.
    Du hantierst auch recht -ich nenns mal offenherzig- mit diversen Timern da herum.
    Denn _irgendwas_ timerähnliches brauchen die Stepper ganz sicher auch....
    Da hilft nur, die eine oder andere Funktion mal deaktivieren, und schauen, was passiert.

    Eventuell würde ich mal, bei so einem Vorhaben, über eine vernünftige Zeitscheiben-Steuerung nachdenken, das riecht mir stark nach der Notwendigkeit für echtes Multitasking.
    Aber dann nimm bitte nen echten Timer-Interrupt für, die funktionieren auch zuverlässig (zeitkritisches kann man da immer noch abfangen).
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Hallo,

    Da hilft nur, die eine oder andere Funktion mal deaktivieren, und schauen, was passiert.
    Was soll ich da noch deaktivieren? In dem kurzen Testprogramm kommt es ja gar nicht dazu, dass ein Steppertreiber einen Auftrag erhält.
    Es spielt auch keine Rolle, ob ich nur einen oder beide stepper_....run() - Befehle aktiviere.
    Eventuell würde ich mal, bei so einem Vorhaben, über eine vernünftige Zeitscheiben-Steuerung nachdenken
    Wie geht das ? Aber was kann das nützen, wenn man nicht weiß, was in der CustomStepper - Library wann passiert?

    Gruß und Dank

    fredyxx

Ähnliche Themen

  1. Pro-Bot 128 Fehler
    Von TimonMi im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 11
    Letzter Beitrag: 07.04.2013, 10:51
  2. avr-gcc fehler
    Von che im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 30.07.2008, 15:01
  3. Wo ist der Fehler??
    Von damaltor im Forum Asuro
    Antworten: 17
    Letzter Beitrag: 01.02.2007, 21:38
  4. wo ist der fehler??? please help!
    Von Robotik84 im Forum Asuro
    Antworten: 4
    Letzter Beitrag: 28.11.2006, 16:22
  5. ISP Fehler
    Von Thetis im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 04.10.2006, 16:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad