-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Problem mit Programm, es funktioniert, nur bei mir nicht !!!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2011
    Beiträge
    7

    Problem mit Programm, es funktioniert, nur bei mir nicht !!!

    Anzeige


    Hallo, habe ein Problem mit meinen Asuro, mit einem simplen Programm!

    Kurz vorweg, unsere Asuros sind neu, frisch zusammengebaut und es sind unsere ersten Gehversuche damit. Löten und Mechnik alles kein Problem, Programmieren geht so für den Anfang, aber irgenwo ist der Wurm in meinem Asuro!!!

    Es funktioniert super im Asuro meines Bruders, läuft bis die Akkus leer sind! Aber in meinem läuft es ca 15 Sekunden, dann hängt er sich irgendwie auf, es passiert nichts mehr, nur manchmal macht er das weiter wo er gerade war, also weiterfahren in irgend eine richtung! nach einem Neustart geht es wieder, für kurze zeit, dann wieder das selbe!

    Auch mein Chip funktioniert super im anderen Asuro, nur bei mir nicht!

    Also am Programm oder Chip kanns nicht liegen, funktioniert ja im anderen Asuro!
    Irgenwo ist der Fehler auf der Platine oder bei Bauteilen! Aber ich brauche wohl nicht zu erwähnen, das wir ALLES schon mind. 15x kontrolliert haben!

    Hat jemand ne Idee wo ich noch suchen könnte oder hatte jemand schonmal so eim Problem!

    Hier das einfache Programm einer Linienverfolgung:

    Code:
    #include "asuro.h"
    
    #define SPEED 175
    
    int speedLeft,speedRight;
    unsigned int lineData[2];
    int ADOffset;
    
    void LineLeft (void)
    {
      speedLeft  += 1;      /* links mehr Gas geben */
      speedRight -= 1;      /* rechts weniger Gas geben */
      if (speedLeft > 200) speedLeft = 200;
      if (speedRight < 75) speedRight = 75;
    }
    
    void LineRight (void)
    {
      speedRight  += 1;     /* rechts mehr Gas geben */
      speedLeft   -= 1;     /* links weniger Gas geben */
      if (speedRight > 200) speedRight = 200;
      if (speedLeft < 75) speedLeft = 75;
    }
    
    int main(void)
    {
      int i;
      unsigned char j;
    
      Init();
    
      for (j = 0; j < 255; j++);
      LineData(lineData);
      ADOffset = lineData[LEFT] - lineData[RIGHT];
      speedLeft = speedRight = SPEED;
      FrontLED(ON);
      StatusLED(GREEN);
      for (;;)
      {
        LineData(lineData);
        i = (lineData[LEFT] - lineData[RIGHT]) - ADOffset;
    		
        if ( i >= 4)
        {
          BackLED(OFF,ON);
    	  StatusLED(RED);
          LineLeft();
        }
        else if ( i <= -4)
        {
          BackLED(ON,OFF);
    	  StatusLED(RED);
          LineRight();
        }
        else
        {
          BackLED(OFF,OFF);
    	  StatusLED(GREEN);
          speedLeft = speedRight = SPEED;
        }
        MotorSpeed(speedLeft,speedRight);
      }
      
      
      while(1);
    Vielen Dank schonmal!

    Gruß aus Paderborn!

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    for (j = 0; j < 255; j++);
    Blödsinn, wird eventuell eh wegoptimiert. Dann spart ihr euch auch das Byte für "j".

    while(1);
    Auch Blödsinn, dort sollte er nie hinkommen.


    Zum Problem:
    Der µC funktioniert mit dem Programm im anderen Asuro tadellos... na dann solltet ihr euch ihn vll nochn 16tes mal anschauen.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Es fehlt noch etwas am ende von deinem Programm.

    Im Allgemeinheit, jeder Asuro wird mit andere werten anfangen zu laufen mit seine Motoren. Das ist wegen mechanische Verlusten, aber auch Bautoleranzen in dem Teilen der H-brucke, und den Batterie/Akku-spannung. Und natürlich gilt das auch fur den Sensoren. Die Asuro von deine Freund und deiner wird eine andere Empfindlichkeit haben. Deshalb solltest du die SpeedLeft und SpeedRight Entscheidungswerten in dem LineLeft und LineRight Funktionen nicht für Wahrheit halten. Eben so die Wert i das 'den Richtung der Linie' angebt. Vielleicht kommt das bei dir Asuro überhaupt nicht an den Wert 4 oder -4.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2011
    Beiträge
    7
    Hallo,
    das mit den unterschiedlichen Werten mag ja sein, aber auf unserer "Teststrecke" fährt meiner ja auch ca. 1,5 Runden,
    steigt dann aber aus, oft bleibt er einfach stehen, die Status-LED blinkt rot-grün, eine Back-LED ist an, Front-LED geht aus und er reagiert gar nicht mehr!

    Nach neuem starten das gleiche Spiel...

    Selten hängt er sofort nach den Start...

    Es kann nur was an der Hardware sein, aber wie gesagt, alles schon zigmal
    geprüft !!!

    Hatte noch niemand ein ähnliches Problem?

    Wo könnte ich "noch genauer" hinsehen?

    Danke!

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zur erkennen ob das ein Bord-Spannung induzierte Reset ist wurde ich dich empfehlen die StatusLED(RED); Befehlen raus zu nehmen. Wann es dann noch Rot-Grün wechselt (Gelb leuchtet) dann ist das wirklich ein Hardware/Spannung Problem. Wann es nur Grün bleibt dann geht das Programm irgendwie merkwürdig. Nächste Schritt wurde ich sagen ist einer Art von Telemetrie Funktion hin zu fügen, das die Aktuelle Messwerten zum Rechner sendet. (Zum Beispiel die Bordspannung und Linie-werten in deinem Fall)

    Außerdem ist mir noch etwas aufgefallen. Was aber wahrscheinlich nicht dein Problem verursacht. Den Ordnung der Befehlen zur Berechnung von ADOffset ist meines wissen nicht in eine Logische Folge. Du berechnet erst diese wert mit FrontLED aus, und danach schaltest du diese ein. Dann seit Linien-fahren mit FrontLED an berechnet er die Ist-wert i auf Basis der (Dunkle) ADOffset. Ist den Ist-wert mit FrontLED an immer noch 0 wann er nicht über eine Linie steht?

    Code:
      ...
      FrontLED(ON);
      LineData(lineData); 
      ADOffset = lineData[LEFT] - lineData[RIGHT]; 
      speedLeft = speedRight = SPEED; 
      // FrontLED(ON); //Nicht hier! Weil ADOffset auf Basis von leuchtende FronLED sein soll.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Hast du vll. beim PullUp für den Resetpin einen falschen Widerstand erwischt?

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Asuro hat kein Pull-up Widerstand an dem Reset-pin. (oder es ist nur den eingebaute im Atmega Den Reset-pin ist direkt an Vcc verbunden.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Stimmt, hab nicht dran gedacht das es garkeinen Programmer gibt der ihn gegen Masse ziehen müsste...

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2011
    Beiträge
    7
    hallo,

    hab versucht alle tips zu befolgen...

    hier der code:

    Code:
    #include "asuro.h"
    
    #define SPEED 150
    
    int speedLeft,speedRight;
    unsigned int lineData[2];
    int ADOffset;
    
    void LineLeft (void)
    {
      speedLeft  += 1;      /* links mehr Gas geben */
      speedRight -= 1;      /* rechts weniger Gas geben */
      if (speedLeft > 200) speedLeft = 200;
      if (speedRight < 100) speedRight = 100;
    }
    
    void LineRight (void)
    {
      speedRight  += 1;     /* rechts mehr Gas geben */
      speedLeft   -= 1;     /* links weniger Gas geben */
      if (speedRight > 200) speedRight = 200;
      if (speedLeft < 100) speedLeft = 100;
    }
    
    int main(void)
    {
      int i;
      
      Init();
      FrontLED(ON);
      LineData(lineData);
      ADOffset = lineData[LEFT] - lineData[RIGHT];
      speedLeft = speedRight = SPEED;
      for (;;)
      {
        LineData(lineData);
        i = (lineData[LEFT] - lineData[RIGHT]) - ADOffset;
    		
        if ( i >= 4)
        {
          BackLED(OFF,ON);
          LineLeft();
        }
        else if ( i <= -4)
        {
          BackLED(ON,OFF);
          LineRight();
        }
        else
        {
          BackLED(OFF,OFF);
          speedLeft = speedRight = SPEED;
        }
        MotorSpeed(speedLeft,speedRight);
      }
    }
    in bezug auf die leds...

    obwohl kein befehl status led grün drin steht ist die status led nach dem init grün die back leds leuchten je na sensor eingang auf, dann irgendwann flackert (in den meisten fällen) die satus led rot/grün, motoren aus und die front led glimmt schwach...

    nach nen neustrt das gleiche...

    noch jemand nen tip ?

    danke!

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von chido72
    ...
    obwohl kein befehl status led grün drin steht ist die status led nach dem init grün die back leds leuchten je na sensor eingang auf, dann irgendwann flackert (in den meisten fällen) die satus led rot/grün, motoren aus und die front led glimmt schwach..
    StatusLED(Green) steht schon im Init() Funktion im asuro.c datei. Deshalb leuchtet es um sonnst.

    Ich vermute das dein Asuro tätsachlich ein Reset-modus oder Unterspannung Situation erreicht. Was den Ursach ist habe ich kein genaue ahnung von. Vielleicht kannst du es noch etwas ausschliessen durch simmulieren von das linien-fahren, aber nun ohne Rad-belastung. Also mit den Rädern von den Boden und mit den Hand die Liniensensoren langsam über eine Linie schieben. Tritt das abschalten immer noch auf nach lange Zeit, oder nur mit Reibungslast? Weitere versuchen kannst du dann auch machen mit Komplett abgeschaltete Motoren. Also kein MotorSpeed Änderungen. Dann kannst du nur die Linien-erkennung laut das leuchten der BackLEDs erkennen. Tritt das Abschalten dann immer noch auf dann ist den Ursach vermutlich nicht den H-brucke.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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