-         

Ergebnis 1 bis 5 von 5

Thema: EncoderInit beeinflusst LineData

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    28
    Beiträge
    184

    EncoderInit beeinflusst LineData

    Anzeige

    Hi, wenn ich EncoderInit starte und LineData abfrage, bekomm ich immer unterschiedliche werte, wenn aber EncoderInit nicht gestartet ist, dann ist es normal. Hat jemand idee?
    Gruß Raid

    Der ^^ Mann

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    encoder init beeinflusst die interrupts. evtl wird dadurch während einer linedata-messung der prozessor unterbrochen, der adc wird vom encoder ausgemessen (dadurch werden die werte der linedata versaut) und dann rechnet linedata halt mist aus.. könnte ich mit vorstellen. mach mal folgendes:

    EncoderInit starten

    cli(); //deaktiviert alle interrupts.
    Jetzt Linedata messen
    sei(); //aktiviert die interrupts wieder

    achtung: zwischen cli() und sei() darf nichts benutzt werden, was auf interrupts basiert. also encoder-irgendwas, sleep, msleep usw. sind verboten, ansonsten bleibt der asuro hier in einer endlosschleife hängen.

    deshalb sollte zwischen cli und sei so wenig wie möglich stehen!
    kleinschreibung ist cool!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    28
    Beiträge
    184
    Hi,

    Ich hab es auch versucht, anschein hilf es nicht viel, man hat immer noch diese schwankung
    Gruß Raid

    Der ^^ Mann

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo Raid,

    da schlummert wohl noch ein Bug in der Asuro Lib. RN-User Thowil hatte mich schon vor einiger Zeit darauf aufmerksam gemacht. Leider konnte ich den Bugfix bisher weder testen noch einspielen. Deshalb weis ich auch niocht, ob dein Problem damit gelöst ist.Der Fix bezieht sich noch auf die V2.70rc2 oder älter (ohne Benutzung der my_asuro.h).

    Hier der geänderte Code zum Selbertesten (ohne Gewähr):

    Code:
    SIGNAL (SIG_ADC)
    {
      static unsigned char tmp [2], flag [2], toggle = FALSE;
      
      if (autoencode)
      {
        // Übernehme nur Werte, die von den Odometriesensoren stammen...
        if ( (ADMUX & 0x0F) == WHEEL_LEFT || (ADMUX & 0x0F) == WHEEL_RIGHT ){
        
          tmp [toggle] = ADCH;
    
          if ((tmp [toggle] < 140) && (flag[toggle] == TRUE))
          {
              encoder [toggle] ++;
              flag [toggle] = FALSE;
          }
          if ((tmp [toggle] > 160) && (flag [toggle] == FALSE))
          {
              encoder [toggle] ++;
              flag [toggle] = TRUE;
          }
            
        } else {
          //War ein anderer Channel eingestellt, dann reinitialisiere den Wandler (zusammen mit Zeile #)
          ADCSRA &= ~(1<<ADEN);
        }
        
        if (toggle)
          ADMUX = (1 << ADLAR) | (1 << REFS0) | WHEEL_RIGHT;
        else
          ADMUX = (1 << ADLAR) | (1 << REFS0) | WHEEL_LEFT;
    
        ADCSRA |= (1<<ADEN)|(1<<ADSC); // #
        
        toggle ^= 1;
      }
      
    }

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo Raid,

    ich habe versucht, den Fehler zu verifizieren, kann aber keine Abweichung entdecken. Die Werte der Liniensensoren werden bei mir nicht durch EncoderInit beeinflußt (weder mit V2.7 und auch nicht bei V2.6). Vielleicht hat da noch etwas anderes einen Einfluß.

Berechtigungen

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