-
        

Ergebnis 1 bis 6 von 6

Thema: probleme mit hinderniserkennung [gelöst]

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344

    probleme mit hinderniserkennung [gelöst]

    Anzeige

    hi allerseits,

    mit folgendem progrämmchen, welches ich zusammengestückelt habe gibt es probleme:

    Code:
    #include "asuro.h" 
    
    int main(void) 
    { 
      Init(); 
    
      DDRD  |= (1 << DDD1);        // Port D1 als Ausgang 
      PORTD &= ~(1 << PD1);        // PD1 auf LOW 
      
    //  OCR2  = 0xEF;                // Pulsbreite 16 
    
    //  MotorSpeed(255,255);         // volle Kraft
    
    //  MotorDir(FWD,FWD);           // voraus 
    
      StatusLED(YELLOW); 
      Msleep(400);
      while (1) 
      { 
          if (PIND & (1 << PD0)) { // wenn kein IR-Echo 
          BackLED(OFF,OFF); 
    //      MotorDir(FWD,FWD);     // dann vorwärts 
    	  StatusLED(GREEN);
    	  Msleep(400);
    	  StatusLED(YELLOW);
          } 
          else {                   // sonst 
          BackLED(ON,ON); 
    //      MotorDir(RWD,FWD);     // nach links 
    	  StatusLED(RED);
          }  
      }
    
      return 0; 
    }
    die statuslED leuchtet kurz gelb auf, wird grün und bleibt es. wechselt nicht wieder zu gelb, was sie m.e. nach sollte. Auch beim simulieren eines hindernisses wechselt sie nicht zum rot...
    ausprobiert mit zwei normalen AM 8 (kein asurochip), an zwei asuros abwechselnd, was auf sodftware schliessen lässt (?)

    was mich iritiert ist, dass mit dem original asuro prozessor auch die übertragung zum hyperterminal zwar funktioniert, aber beim selbsttest kommen die vom asuro gesendeten zeichen eher sporadisch, eine verbindung zum flaschen mit USB-adapter lässt sich nicht ausfbauen. nach dem versuch die seite 1 zu flaschen ist schluss (asuro dead)...

    könnt ihr mir bitte helfen?


    edit: nochmaliger versuch beim flaschen über USB-IR ging bei beiden asuros, bleibt also ein softwarefehler. Aber wo?

    noch etwas seltsames: wenn ich den eingeschalteten asuro (statusLED grün) in den lichtkegel meiner tischlampe eintauche, wird die statusLED rot! beim rausholen aus dem licht wird sie wieder grün...
    gruß inka

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    StatusLED(GREEN);
    Msleep(400);
    StatusLED(YELLOW);
    Ohne empfangenes IR-Signal gibt der TSOP ein High aus (er invertiert das Signal), deshalb wird die StatusLED im Wechsel 400ms auf Grün und einen Progammschleifendurchlauf auf Gelb geschaltet.

    Auf den ersten Blick sollte es so funktionieren. Wenn du OCR2 nicht änderst (auskommentiert) wird das orginale 36kHz-Setup aus der Library verwendet. Was fehlt:

    UCSRB = 0; // schaltet den USART aus

    Denn sonst kann man PD1 nicht steuern! Das Ganze funkioniert nur mit den moderneren Libs die den Timer2 im PWM-Mode betreiben. Hier mein Versuch die Funktion zu erklären:

    http://www.roboternetz.de/phpBB2/viewtopic.php?t=51380

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    hi mic,
    vielen dank, dein ungetestetes beispiel in der erklärung der funktion funktioniert so weit, bedeutet, meine hardware ist ok, auch die erklärung habe ich denke ich halbwegs verstanden...

    beim versuch einer kompilierung mit der 8.1 lib bekomme ich allerdings folgende fehlermeldung:
    ------------------
    ../../../_asuro_lib/2_8_rc1/lib/asuro.c:145: error: `F_CPU' undeclared (first use in this function)
    ------------------

    die bedeutet das da was feht, fehlt da außer den lib-dateien noch etwas? In AVR - sources habe ich zum schluss alle lib´s hinzugefügt, die meldung kommt immer noch...
    gruß inka

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    F_CPU kann im Makefile definiert werden oder direkt im Programm:

    #define F_CPU 8000000

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    hi mic,

    danke, habe doch schon lange (zu lange) nichts am asuro und umgebung gemacht. War einfach eine einstellung im avr-studio...
    gruß inka

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    hi allerseits,

    Code:
    /*******************************************************************************
    *
    * Description: asuro linksausweicher
    *
    *****************************************************************************/
    
    #include "asuro.h"
    #include <stdlib.h>
    #include "inka.h"
    
    static unsigned char ocr2 = 0x91; // Wert für 50:50 Pulsweite laden
    
    void InitIRDetect(void)
    {
       UCSRB = 0;                    // USART ausschalten
       DDRD |= (1 << DDD1);          // Port D1 als Ausgang
       PORTD &= ~(1 << PD1);          // PD1 auf LOW
    }
    
    void InitUart(void)
    {
       OCR2 = 0x91;                   // duty cycle fuer 36kHz
    }
    
    int main(void)
    {
    
      unsigned char sw;
    
       Init();                       // Library initialisieren
       InitIRDetect();               // IR-Funktion initialisieren
       WaitforStart();
    
    
       while (1)
       {
          OCR2 = ocr2;               // Puls-Pause-Verhältniss setzen
          Sleep(10);                 // kurz warten bis TSOP genügend Flanken erkennt
          
          if (PIND & (1 << PD0))     // TSOP-Eingang auf IR Echo überprüfen
          {
    	  StatusLED(GREEN);          // kein Echo
          BackLED(OFF,OFF);
    	  //MotorSpeed(255,255);         // volle Kraft
          //MotorDir(FWD,FWD);           // voraus
    	  }
          else
          {
    	  StatusLED(RED);            // Echo!
     	  BackLED(ON,ON);
          //MotorDir(RWD,RWD);     // rückwärts
          //Msleep(100);
          //MotorDir(RWD,FWD);     // nach links
    	  }
          sw = PollSwitch();
          if (sw & 0x01)              // K6 neben Schalter
             ocr2 = 0xFE;             //Pulsbreite 1
          if (sw & 0x02)
             ocr2 = 0xFD;             //Pulsbreite 2
          if (sw & 0x04)
             ocr2 = 0xFB;             //Pulsbreite 4
          if (sw & 0x08)
             ocr2 = 0xF7;             //Pulsbreite 8
          if (sw & 0x10)
             ocr2 = 0xEF;             //Pulsbreite 16
          if (sw & 0x20)
             ocr2 = 0x90;             //Pulsbreite 110
    
    /*      if (sw)                    // bei Tastendruck Wert zum Terminal senden
          {
             InitUart();             // Pulsbreite für IR-Kommunikation setzen
             PrintInt(sw);
             SerWrite(" ",1);
             PrintInt(ocr2);
             SerWrite("\r\n",2);
             InitIRDetect();         // Abstandsmessung aktivieren
             Msleep(100);
          }*/
       }
       return 0;
    }
    habe jetzt das programm etwas modifiziert, die entfernungen kann ich auch mit hilfe der schalter einstellen, die StatusLED wird bei annäherung an ein hindernis rot, wenn ich aber versuche die motorfunktionen zu aktivieren, fährt der asuro an, aber reagiert nicht mehr auf hindernisse...
    habe versucht die aktivierung der IR abfrage in die while-schleife zu setzen (hinter den motorstart) bringt aber auch nichts...
    bewirkt die aktivierung der motoren eine deaktivierung der IR-sensoren? Muss alles neu initialisiert werden "Init()"?

    edit:
    letztlich lag es am nicht vorhandenem kurzschlussjumper an der (accu)-spannungsversorgung - jetzt gehts...
    gruß inka

Berechtigungen

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