- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: problem mit erstem eigenen programm

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Anzeige

    Praxistest und DIY Projekte
    Interessant.

    Also ich hab immer noch die Vermutung dass du nicht das aktuelle Programm flasht. Andernfalls müsste sich nämlich zumindest _irgendwas_ tun.

    Wenn nur die grüne LED leuchtet deutet das drauf hin dass im Asuro ein 'leeres' Programm ist, sprich, es wird nur der bootloader durchlaufen und eventuell noch die Init Funktion, das wars dann aber auch schon.


    Flash mal das angehänge Programm, da sollte sich dann was tun bei der StatusLED.
    Schau vor allem beim Flashtool ob du im Dateipfad die richtige Datei ausgewählt hast.
    Angehängte Dateien Angehängte Dateien
    Grüße,
    Harri

  2. #12
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    ja, das kann gut sein, zB scheint delphi u.a. sich damit nicht zu vertragen. mach folgendes:

    öffne eine konsole (dosbox unter windows)
    wechsle mit cd in das entsprechende verzeichnis, in dem dein quelltext liegt.
    mit z.B. nano test.c (unter win: edit test.c) kannst du jetzt kontrollieren ob du wirklich den richtigen quellcode hast.
    dann gib nacheinander
    make clean
    make all
    ein. jetzt sollte am ende stehen "Errors: none"
    dann kannst du flashen.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #13
    hallo,
    also ich hab ne neue version von programmers notepad heruntergeladen und jetzt funktioniert alles. \/ \/
    ich hätt noch ne kurze Frage:
    wie kann ich ich eigentlich den Motor so programmieren, dass er nur 3s fährt und danach etwas anderes macht.
    komm nich ganz klar mit der sleep funktion??

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    23.08.2007
    Beiträge
    61
    Hi rocketman123

    Du kannst Asuro eine Millisikunde warten lassen, indem du Sleep(72); aufrufst. Wenn du die Funktion 3000mal (mittels einer Schleife) aufrufst, wartet Asuro 3 Sekunden lang.
    Alternativ kannst du auch die Funktion Msleep aus der akuellen Lib benutzen. Da gehts dann mit Msleep(3000);
    Weitere Möglichkeit (welche ich bevorzuge): Du schreibst dir eine eigene Funktion Msleep(unsigned int time)

    Gruß Farratt

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    18.09.2007
    Ort
    Handewitt
    Alter
    48
    Beiträge
    8
    Hallo rocketman123,

    Benutzt Du die aktuelle AsuroLib ?
    Wenn ja, schau die mal die Funktion Msleep an.
    Als Parameter wird die Wartezeit in Millisekunden erwartet.
    Also 1 Sekunde = 1000 ms
    Wenn du 3 Sekunden warten willst, versuch mal folgendes...
    Code:
    void main (void)
    {
          Init();
          Msleep(3000);
          while(1) {
              // .....irgendwas anstellen.....
          }
          return 0;
    }
    Falls Du die originale asuro.c benutzt, versuch folgendes.
    Code:
    {
        int z;
        for (z = 0; z < dauer; z++)
        Sleep (36);
    }
    Hab ich kurzerhand aus der AsuroLib kopiert.
    Der Parameter "dauer" beinhaltet dann die Anzahl der Wiederholungen,
    für 3 Sec wären das dann 3000,

    Hiebei ist zu beachten, das die ursprüngliche c-Datei eine Taktfrequenz von 72 kHz benutzt, d.h du mußt die Wartezeit mal 72 nehmen.
    1 ms wäre dann Sleep(72).
    In der AsuroLib wird, wenn Du diese nutzt, ein Takt von 36 kHz verwendet,
    sprich 1 ms = Sleep(36)

    Gruss Fionn

  6. #16
    habs ausprobiert in mein Programm einzufügen. dies hab ich in text.c
    Code:
    #include "asuro.h"
    
    /* Um eventuelle Unterschiede zwischen linken und rechtem Motor auszugleichen 
     * definieren wir 2 Werte für fullspedd links und rechts
     */
    #define FULL_L 250    /* Fullspeed linker Motot */
    #define FULL_R 220    /* Fullspeed rechter Motor */
    
    /* Motor vorwärts */
    void MotorFwd(void)
    {
      MotorDir(FWD,FWD);
      MotorSpeed(FULL_L,FULL_R);
    }
    
    /* Motor rückwärts */
    void MotorRwd(void)
    {
      MotorDir(RWD,RWD);
      MotorSpeed(FULL_L,FULL_R);
    }
    
    /* Motor rückwärts Links */
    void MotorRwdL(void)
    {
      MotorDir(RWD,RWD);
      MotorSpeed(FULL_L,0);
    }
    
    /* Motor rückwärts Rechts */
    void MotorRwdR(void)
    {
      MotorDir(RWD,RWD);
      MotorSpeed(0, FULL_R);
    }
    
    /* Motor stop */
    void MotorStop(void)
    {
      MotorSpeed(0,0);
    }
    
    void Msleep(void)
    { 
        int z; 
        for (z = 0; z < 3000; z++) 
        Sleep (36); 
    } 
    
    int main(void)
    {
      unsigned char t1, t2;
    
      Init();
      while(1)
      {
        t1 = PollSwitch();
        t2 = PollSwitch();
        if(t1 == 0 && t2 == 0)         /* keine Taste */
        {
          MotorFwd();          /* vorwärts fahren */
          FrontLED(ON);
          BackLED(OFF,OFF);
        }
        else if (t1 && t2 && t1 == t2)
        {
          MotorStop();
          if(t1 & 0x07) /* Tasten links gedrückt? */
          {
            MotorRwdL();       /* Rückwärtskurve links fahren */
            FrontLED(OFF);
            BackLED(ON,OFF);
          }
          if (t1 & 0x38) /* Tasten rechts gedrückt? */
          {
            MotorRwdR();       /* Rückwärtskurve rechts fahren */
            FrontLED(OFF);
            BackLED(OFF,ON);
          }
          Msleep;        /* 1 Sekunde fahren */
        }
      }
      return 0;
    }
    funktioniert leider nicht. hab auch schon nach msleep einen wert in klammern angefügt. hilft aber nix

  7. #17
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    da fehlt ein semikolon DIREKT hinter der for schleife in der funktionsdeklaration.das ist eine leere schleife, deshalb ohne die klammern {}. dafür ein semikolon

    for(.....);

    ausserdem musst du die zeile
    "int z;" löschen, und die zeile
    void Msleep(void)
    durch folgendes ersetzen:
    void Msleep(int z)

    beim aufrufen der funktion nicht einfach Msleep schreiben, sondern
    Msleep(Millisekunden);
    also z.B.
    Msleep(1000);
    für eine sekunde.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  8. #18
    funktioniert immer noch nicht mit dem zeitabhängigen fahren des asuro.
    msleep funktioniert nicht. wo krieg ich die aktuelle AsuroLib her.
    [-o<

  9. #19
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    schau mal in den ersten thread (ganz oben bei den ankündigungen...) "die wichtigsten dateien und downloads"
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress