- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 23

Thema: Erfahrungen und Erfahrungsaustausch mit Arexx Robot-Arm-mini

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2008
    Beiträge
    6
    Hallo zusammen,

    ich schließe mich dann auch mal mit einem Erfahrungsbericht an:

    Der Fuß war bei mir aehnlich schwergaengig, hab jedoch alle schrauben mit nur geringen problemen rein bekommen.
    Die Teile sind ansonsten in ordnung, bis auf ein Steckverbindungskabel - was ich dann durch verwunderung feststellen musste als ich den angeschlossenen Motor ansteuern wollte - war aber sehr einfach zu beheben.
    Das Geraet funktioniert ansonsten einwandfrei.
    Die tastatur hatte ich auch einmal dran und aehnliche Erfahrungen gemacht, das eine Taste nicht funktioniert aber nicht weiter beachtet, da man mit der mitgelieferten racs software auch alle motoren testen kann. (das kommt dann wohl wenn ich von der tastatur mal gebrauch machen will^^ weis jetzt ja aber wonach ich gucken muss bzw. das es durchaus an Baufehlern an der Tastatur liegt.

    Mehr faellt mir grad nicht ein wie gesagt er funktioniert und hebt momentan in einem ersten Testprogramm ein Bierdeckel durch die gegend. Demnach werd ich jetzt mal weiter diesen Thread durchstoebern, unter anderem zum Thema Motor- (bzw. Gelenk-) werte. Moecht mir nach Moeglichkeit ne inverse Kinematik bauen, hab aber noch anfaengliche Probleme mit der Umsetzung, da ich das nur mit winkel Berechnung kenne, ma schaun.

    korrigiere:
    die tastatur hat 4 funktionierende tasten aber wie ich sehe sind wohl die dioden an den nicht funktionierenden tasten garnicht richtig angeloetet^^ naja... ziehmlicher kaese, aber is nun wirklich nicht sonderlich schlimm. nur frag ich mich wer die dinger zusammen loetet wenns in nem arexx forum heisst die sind per hand geloetet...
    Geändert von Mizu (23.03.2011 um 13:59 Uhr)
    Gruß Mizu

  2. #2
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    @Dirk
    "Man könnte da einfach einen TSOP z.B. an PD7 (ist frei!) anschliessen. Eine Lib dafür kriegen wir hier schon hin ! "

    Habe mir jetzt ein IR-Empfänger besorgt und angeschlossen --- kleines Testprogramm "---bei erkannter Fernbedienung Umleitung auf LED "
    hardwaremäßig also o.k. .
    Die Einbeziehung der Programme vom RP6 brachte aber nichts ---schon beim übersetzen viele Fehler.
    RC5-Struktur ist mir schon einigermaßen klar -- aber die seriellen Daten zu übernehmen und dann in ..code, adresse umzusetzen ,da komm ich nicht richtig klar.
    Habe zwar Programme gefunden ,untersucht (ASURO oder "RC5-Decoder für ATMega" hier im Netz) aber die müssen erstmal verstanden und dann angepaßt werden.
    Wo setze ich da am besten an ? Gibt es Proramme, die nur leicht umgesetzt werden müssen ?

    Gruß Ralf

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Ralf:
    Ok, ich würde den RC5-Code in die Lib in die ISR(TIMER2_COMP_vect), also in den 100us Interrupt einklinken.
    Beispiel:
    Code:
    // Dies VOR die ISR:
    volatile RC5data_t RC5_newdata;  // Decoded RC5 data
     
    // Dies hier IN die ISR (ans Ende!):
    // ----------------------------------------------------------------------------
     // RC5 reception code (adapted for Robot Arm from Asuro Lib):
     #define F_ISR   10e3   // 10kHz (100µs)
     #define RC5_TIME   1.778e-3  // 1.778ms
     #define RC5_SAMPLES_PER_BIT_MIN  (uint8_t)(F_ISR * RC5_TIME * 0.4)
     #define RC5_SAMPLES_PER_BIT_EARLY (uint8_t)(F_ISR * RC5_TIME * 0.75)
     #define RC5_SAMPLES_PER_BIT_LATE (uint8_t)(F_ISR * RC5_TIME * 1.25)
     #define RC5_PAUSE_SAMPLES   250 // 25ms (RC5 pause: 88.889ms)
     static uint8_t RC5_lastsample = 0;  // Last read sample
     static uint8_t RC5_timecounter = 0;  // Bit time counter
     static uint16_t RC5_bitstream = 0;  // RC5 bit stream
     static uint8_t RC5_bitcounter = 0;  // RC5 bit counter
     uint8_t sample = 1;
     if(PIND & RESERVE_PD7)      // Read RC5 input (PD7)
      sample = 0;
     if(RC5_timecounter < 255)    // Time counter limited to 8 bit
      RC5_timecounter++;
     if(RC5_lastsample != sample) {   // Detect edges
      if(RC5_timecounter <= RC5_SAMPLES_PER_BIT_MIN)
       RC5_bitcounter = 0;    // Edge to early
      else {
       if(RC5_bitcounter == 0) {  // RC5 start bit
        if((sample == 1)
         && (RC5_timecounter > RC5_PAUSE_SAMPLES)) {
         RC5_bitstream = 1;  // Store start bit
         RC5_bitcounter++;
        }
        else
         RC5_bitstream = 0;  // To long pause: Error
        RC5_timecounter = 0;  // Reset bit time counter
       }
       else {       // RC5 bits 2..14:
        if(RC5_timecounter >= RC5_SAMPLES_PER_BIT_EARLY) {
         if(RC5_timecounter <= RC5_SAMPLES_PER_BIT_LATE) {
          RC5_bitstream = (RC5_bitstream << 1) | sample;
          RC5_bitcounter++;
         }
         else
          RC5_bitcounter = 0; // To late: Error
         RC5_timecounter = 0; // Reset bit time counter
        }
       }
      }
     }
     else {
      if(RC5_timecounter > RC5_SAMPLES_PER_BIT_LATE) { // No edge in bit?
       if(RC5_bitcounter == 14) {  // All 14 RC5 bits read?
        RC5_newdata.data = RC5_bitstream;
        RC5_Ready = 1;    // New data received!
       }
       RC5_bitcounter = 0;    // Reset RC5 bit counter
      }
     }
     RC5_lastsample = sample;    // Store sample in sample buffer
    // ----------------------------------------------------------------------------
    Dazu müßte man im Header der Lib die Variablen definieren:
    Code:
    typedef union {
     uint16_t data;     // RC5 data structure (14 bits):
     struct {
      unsigned key_code : 6; // RC5 key code        C0..C5
      unsigned device  : 5; // RC5 device address  A0..A4
      unsigned toggle_bit : 1; // RC5 toggle bit      F
      unsigned key_codeC6 : 1; // RC5 key code bit 6  !(C6)
      unsigned start_bit : 1; // RC5 start bit       1
      unsigned notused : 2;
     };
    } RC5data_t;
    // RC5data_t RC5_data;     // Received RC5 data
    volatile uint8_t RC5_Ready;   // RC5 data ready (true/false)
    Probier das mal! Wenn RC5_Ready true (1) wird, wurden Daten in RC5_newdata empfangen. Das Hauptprogramm müßte also RC5_Ready ständig pollen (z.B. in einer task_RC5 in der Hauptschleife). Nachdem die Daten aus RC5_newdata gelesen wurden, muss man noch RC5_Ready false setzen, damit die nächsten Daten empfangen werden können.
    Als Eingangspin habe ich PD7 genommen.
    Geändert von Dirk (27.03.2011 um 13:29 Uhr)
    Gruß
    Dirk

  4. #4
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    Hallo Dirk,
    vielen Dank für dein Programmvorschlag. Meine Wochenendversuche haben leider noch keinen Erfolg gebracht.

    --"Nachdem die Daten aus RC5_newdata gelesen wurden" RC5_newdata wird leider nicht gefunden , habe es auch mit RC5_newdata.data versucht
    Prinzipiell scheint es aber bei mir auch nicht zu funktionieren, da RC5_Ready nicht true (1) wird.

    Mal eine Fage zum Einlesen -" if (PIND & RESERVE_PD7 ) " - was ist RESERVE_PD7 ? ( ich nutze z.B. x=PIND; x=mask & x; ....)

    Ich bleibe weiter dran ( du schreibst " in den Timer Interrupt einklinken " ok. habe ich gemacht. Ist der dann mit initRobotBase(); automat. aktiv ? )

    Gruß Ralf

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Ralf,
    ... RC5_newdata wird leider nicht gefunden ...
    Ok, man könnte RC5_newdata im Header als extern definieren oder die Definition überhaupt in den Header verschieben.

    ... was ist RESERVE_PD7 ?
    Das ist so:
    #define RESERVE_PD7 (1 << PIND7) //EXTERN PIN PD7, (SPI)
    ... in der RobotArmBase.h definiert. Du kannst auch 1<<PD7, 1<<PinD7, 128 o.ä verwenden.

    ... Timer Interrupt ... Ist der dann mit initRobotBase(); automat. aktiv ?
    Ja, du inkludest ja die RobotArmBaseLib in das Hauptprogramm und du hast ja vorher den RC5-Code in die RobotArmBaseLib.c eingefügt.
    Wenn du die Lib verändert hast und neu kompilierst, müßtest du immer vorher die .o und .lst Dateien löschen, weil die Lib sonst u.U. nicht neu kompiliert wird.
    Gruß
    Dirk

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Ralf,



    mich würde interessieren, ob die IR-Fernsteuerung jetzt bei dir läuft ... ?
    Gruß
    Dirk

  7. #7
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    Hallo Dirk,

    die IR-Fernsteuerung läuft nicht.
    Ich habe nach vielen Versuchen und vielen Fluchen ( ) die Sache etwas entnervt aufgegeben.
    Nun, da das Wetter etwas frühlingshafter wird, ist man auch öfter draußen und nicht nur stundenlang am Computer/Arm.
    Trotzdem vielen Dank für deine Tips, vielleicht mache ich mich später noch mal daran.


    Gruß Ralf

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests