-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: asuro+taster = eigenartig

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2007
    Ort
    Hamburg
    Alter
    38
    Beiträge
    16

    asuro+taster = eigenartig

    Anzeige

    hallo leute,

    ich wollte das Beispielprogramm aus der Anleitung gerade probieren, das folgendes aussieht
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();
    	MotorDir(FWD,FWD); // Beide Motoren auf vorwärts
    	MotorSpeed(120,120); // Beide Motoren etwa halbe Kraft voraus
    	StatusLED(YELLOW); // Status-Leuchtdiode auf grün schalten
    	while (PollSwitch()==0) 
    	{ // Solange keine Kollision erfolgte...
    		SerWrite("Alles OK!\n",10); // ... Euphorie verbreiten
    	}
    	MotorSpeed(0,0); // Kollision! Sofort anhalten!
    	StatusLED(RED); // Statusleuchtdiode rot schalten
    	while (1) 
    	{
    		SerWrite("Aua!\n",5); // und weinen!	
    	}
    	return 0;
    }
    nun, das komische ist, dass asuro mal losfährt bis es hindernis trifft, dann bleibt er stehen. aber ein anderes mal fährt er nur irgendwie eine sekunde oder nicht mal und dann steht er, als ob ein der taster gedruckt würde. hat es mit dem berüchtigten C7 zu tun? kann man es irgendwie umgehen, dass es gleich zu anfang entladen ist?

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

    PollSwitch() ist eine der übelsten asuro-Funktionen. Benutze mal die Suche-Funktion des Forums mit z.B. diesen Begriffen: "asuro AND tasten AND pollswitch AND problem" und du findest Threads wie diesen:

    http://www.roboternetz.de/phpBB2/zei...ag.php?t=25323

    Gruß

    mic

    [Edit]
    Es ist schon erstaunlich, wie oft das Rad hier schon neu erfunden wurde. Nach 5 Min. RN-Forumsuche findet man echte Juwelen:
    http://www.roboternetz.de/phpBB2/vie...=107255#107255
    Wenn man Glück hat beim Suchen...

    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 Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    61
    Beiträge
    674
    Die sechs taktilen Sensoren - genannt "Taster" - werden raffiniert über Widerstände über einen Analog-Digital-Konverter (ADC4) ausgewertet. Hierbei muss man unbedingt die Werte 1,2,4,8,16,32 erhalten, wenn der entsprechende Taster gedrückt wird.

    Folgendes ist hierbei zu beachten, damit das richtig funktioniert:

    1) Kalibration in myasuro.h vornehmen:

    Code:
    /* Tastaturabfrage */
    /*! Faktor zur Berechnung der gedrueckten Tasten.\n
          Der Originalwert ist \b 61L und koennten im Bereich zwischen ca. 58L und
          65L schwanken. Dieser Wert gleicht Toleranzen der Widerstaende an den
          Tastern aus.
    */
    #define MY_SWITCH_VALUE           61L   /*!< Multiplikator fuer Tasterwerte */
    Beginnen Sie mit 61 und testen Sie entsprechend dem unter 3) angehängten Programm.

    2) Der Wert aus myasuro.h wird in Pollswitch(...) in der Datei switches.c verwendet:

    Code:
    unsigned char PollSwitch (void)
    {
      unsigned int i;
      int ec_bak = autoencode;              // Sichert aktuellen Zustand
    
      /*
         Autoencode-Betrieb vom ADC-Wandler unterbinden.
      */
      autoencode = FALSE;
    
      DDRD |= SWITCHES;                     // Port-Bit SWITCHES als Output
      SWITCH_ON;                            // Port-Bit auf HIGH zur Messung
      ADMUX = (1 << REFS0) | SWITCH;        // AVCC reference with external capacitor
      Sleep (10);
    
      ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
      while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
        ;
      ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
    
      i = ADCL + (ADCH << 8);               // Ergebnis als 16-Bit-Wert
    
      SWITCH_OFF;                           // Port-Bit auf LOW
      Sleep (5);
    
      /*
         Autoencode-Betrieb vom ADC-Wandler wiederherstellen.
      */
      autoencode = ec_bak;
    
      /*
        Die Original Umrechenfunktion von Jan Grewe - DLR wurder ersetzt durch
        eine Rechnung ohne FLOAT-Berechnungen.
      return  ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 61.0 + 0.5));
    
        Wert 61L evtl. anpasssen, falls fuer K1 falsche Werte zurueckgegebn werden.
      */
      return ((10240000L / (long)i - 10000L) * MY_SWITCH_VALUE + 5000L) / 10000;
    }
    3) Mit folgendem Programm kann getestet werden:
    Code:
    #include "asuro.h"
    
    int main(void)
    {
      int radix = 10;
      int poll  =  0;
      char wert[3];
    
      Init();
    
      while(1)
      {
    
        poll = PollSwitch();
        int i;
        for(i=0;i<3;++i)
            wert[i]=' ';
        itoa (poll, wert, radix);
        SerWrite (wert, 3);
        SerWrite ("\n\r", 2);
      }
    }
    4) Einzeltaster 1,2,4,8,16,32 - alles o.k.?

    5) Jetzt mehrere Taster drücken. Summe muss stimmen. Nein? Go to 1)

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

    Fehlt vielleicht noch der Hinweis, dass die Datei myasuro.h nur in der asuro-Lib ab Version 2.7 vorhanden ist. Benutzer der orginalen CD-Libary bzw. Versionen vor 2.7 müssen die Anpassung direkt in der PollSwitch-Funktion in asuro.c ändern.

    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 Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    61
    Beiträge
    674
    Ja, das ist richtig. Ich bin implizit davon ausgegangen, dass niemand mehr daran interessiert ist, alte Versionen der ASURO-Lib zu verwenden.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2007
    Ort
    Hamburg
    Alter
    38
    Beiträge
    16
    moment, mal ganz langsam für mich als abslute anfänger, woher weiss ich welche version die bibliothek ist (obwohl wahrscheinlich stimmt es, was ihr sagt, dass die version < 2.7 ist). ich werd dann nachher mit dem taster test probieren, hab grad wenig zeit

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    61
    Beiträge
    674
    Wenn Du das File asuro.h öffnest, findest Du eine ausgefeilte Versionsinformation mit allen Änderungen. Lenkung der Dokumente gemäß Qualitätsmanagement vom Allerfeinsten.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2007
    Ort
    Hamburg
    Alter
    38
    Beiträge
    16
    nun ich habe in asuro.h und asuro.c reingeguckt und da steht als letzte änderung version 2.10, datum 17.10.2003. das ist doch wohl neuer als 2.7? oder heißt 2.7 = 2.70 ? dann ist 2.10 << 2.7(0).

    und muss ich die datei myasuro.h erst erstellen? und switch.c? all die hab ich nicht. oder soll ich einfach in asuro.c die noch nicht vorhandenen Zeilen einfach reinschreiben? bin noch so völlig aufm schlauch

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    61
    Beiträge
    674
    und muss ich die datei myasuro.h erst erstellen? und switch.c? all die hab ich nicht. oder soll ich einfach in asuro.c die noch nicht vorhandenen Zeilen einfach reinschreiben? bin noch so völlig aufm schlauch oh Gott
    Aha, Du scheinst noch wenig Ahnung vom Programmieren in C zu haben. Daher lässt Du am besten die Finger von den Dateien in der Bibliothek bzw. besorgst Dir zuerst mal die aktuelle Version.

    version 2.10, datum 17.10.2003
    2.70 ist die aktuelle Version von 2007. Das Datum steht übrigens dabei!
    Also besorge Dir - zu Deinem eigenen Vorteil - die neueste Version der ASURO-Lib.

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

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2007
    Ort
    Hamburg
    Alter
    38
    Beiträge
    16
    ooooo..........man.....warum habe ich bloß das gefühl dass ich in dieses thematik nie richtig reinkommen würde. muss man dafür informatik studieren? ich habe e-technik gemacht, könnte das jemals hinbekommen?

    also ich habe die neue lib runtergeladen und ich hoffe dass ich irgendwie durchsteige. programmieren war / ist noch nie meine stärke. aber was nicht ist, kann ja (vielleicht) noch werden

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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