-         

Ergebnis 1 bis 7 von 7

Thema: Asuru fährt nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2010
    Beiträge
    14

    Asuru fährt nicht

    Anzeige

    Hallo,
    mit diesem Code

    Code:
     #include "asuro.h"
    
    int main(void)
    {
       Init ();
    
       while (1)
       {
        MotorDir (FWD, FWD);
        MotorSpeed (150, 150);
        StatusLED (GREEN);
       }
       
       while (1);
       return 0;
    }
    sollte Asuru eigentlich geradeausfahren, aber er macht einfach...nix

    mfg Fleix

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Funktioniert der Selbsttest? Nach der Fehlerbeschreibung in deinem anderen Thread stimmt etwas mit deiner Hardware nicht ...

    mfG
    Markus

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Habst du den .c Datei gespeichert vor dem du das Make Kommando gegeben hat. Vermutlich habst du ein hex Datei geflashed das den FirstTry program Gehört.

    Genau was markusj sagt. Erst sicher machen das deine Kommunikationsstelle richtig arbeitet.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    die motorrichtung und geschwindigkeit in einer endlosschleife dauernd einzustellen kann schon das problem sein, denn meines wissens nach stoppt das ändern den drehrichtung ständig den motor und danach VERSUCHST du ihn wieder anlaufen zu lassen, was aber durch die folgende richtungsänderung gleich wieder verhindert wird!


    das while(1) am ende des programm soll nur verhindern, dass die main() methode verlassen wird, was zu undefinierten zuständen im µC führen kann!!

    wenn du eine ÄNDERUNG der zustände des asuro (speed richtung oder sonstwas) erreichen willst, solltest du IMMER kontrollieren, ob sich der neue zustand vom alten unterscheidet und nur DANN die änderung herbeiführen! sonst einfach weiterschleifen ^^

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Einspruch, Ceos!
    Wenn er den Zustand nicht ändert macht es auch nichts wenn er zum hundertsten Mal MotorDir aufruft.

    Problematisch sind dagegen eher große Änderungen in hoher Frequenz, weil dann das Risiko besteht dass diese überschrieben werden ehe sie sich auswirken können.

    mfg
    Markus

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    okay ich gestehe, dass meine kenntnisse über die asurolib veraltet sind, ich wusste nicht dass dort bereits eine derartige zustandsüberwachung integriert ist (ist sie doch oder??)
    denn meines wissens nach stoppt das ändern den drehrichtung ständig den motor
    man kann sich ja auch mal irren ^^

    dennoch sollte man über die unsinnigkeit des while(1) im oberen teil des programms informiert sein (oder des while(1) am ende, da es eh nicht erreicht wird)

    meckert der compiler denn da garnicht ? nicht mal ne warnung ?

    EDIT: in nem anderen thread hab cih schonmal den overhead der methoden erwähnt, den sollte man auch nchit verachten und der rechenzeit wegen unnötige methodenaufrufe sparen ^^ (ein reiner designhinweis)

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Zitat Zitat von Ceos
    okay ich gestehe, dass meine kenntnisse über die asurolib veraltet sind, ich wusste nicht dass dort bereits eine derartige zustandsüberwachung integriert ist (ist sie doch oder??)
    denn meines wissens nach stoppt das ändern den drehrichtung ständig den motor
    Nö, die Geschwindigkeitswerte werden direkt in die Output-Compare-Register (PWM) geschrieben, die Richtungswerte gehen direkt auf die Konfigurationspins der H-Brücken. Das ganze ist komplett unabhängig vom alten Zustand.

    Der Inhalt von MotorDir() aus der DLR-Lib:
    Code:
        PORTD = (PORTD &~ ((1 << PD4) | (1 << PD5))) | left_dir;
        PORTB = (PORTB &~ ((1 << PB4) | (1 << PB5))) | right_dir;
    Der Code aus der RN-Lib macht genau das gleiche, meine Lib ebenso.

    mfG
    Markus

Berechtigungen

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