-         

Ergebnis 1 bis 9 von 9

Thema: asuro infrarotsteuerung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.03.2008
    Beiträge
    9

    asuro infrarotsteuerung

    Anzeige

    hallo zusammen!
    ich bin relativ neu hier und habe da noch ein wohl kleines verständinsproblem. aus den examples der asurolib2.8 im rc5 test programmcode befindet sich unter anderem:

    #define TUNERRWD 0x1021
    #define TUNERFWD 0x1020
    #define TUNERLEFT 0x1011
    #define TUNERRIGHT 0x1010
    #define TUNERSTOP 0x1025

    die tabelle für die rc5 codierung hab ich mir schon angeschaut unter: http://www.roboternetz.de/wissen/index.php/RC5-Code

    aber meine frage jetzt wäre: wie kommt man auf die 0x1021 für TUNERRWD oder die 0x1020 für TUNERFWD?

    danke für euer hilfe!
    gruß tape

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

    in dem Beispiel RC5Test werden die empfangenen RC5 Codes über die serielle Schnittstelle ausgegeben. So kannst du dir im Hyperterminal die empfangenen Codes ansehen und die Defines für TUNERRWD usw. an deine Fernbedienung anpassen. Falls keine Codes empfangen werden, dann sendet deine Fernbedienung wahrscheinlich keine RC5 Codes.
    Code:
      while (1)
      {
        cmd = ReadRC5();
        if (cmd)
        {
           cmd &= RC5_MASK;
           itoa(cmd, text, 16);
           SerPrint(text);
           SerPrint("\r\n");
         ...

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    22.03.2008
    Beiträge
    9
    hallo m.a.r.v.i.n.!
    das geht mit meiner fernbedienung, ist eine hauppauge von einer alten tv karte. was ich daran nicht verstanden hab ist was mit: 0x1021 gemeint ist? bzw. eher wie kommt man auf 0x1021? aus was setzt sich das zusammen?

  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 tape,

    die Werte für die RC5 Codes bestehen lediglich aus den 7 Kommando Bits, ohne Adress und Toggle Bits eines 14-Bit RC5 Code.
    Siehe Abb. in http://www.roboternetz.de/wissen/index.php/RC5-Code
    C0..5 entspricht Bit 0..5
    C6 entspricht Bit 12

    auf C6 könnte man natürlich auch verzichten. Dises Kommando Bit wurde später zur RC5 Norm dazugenommen, als man mit 64 Codes nicht mehr auskam.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    22.03.2008
    Beiträge
    9
    hallo m.a.r.v.i.n.!
    erstmal danke für deine antwort, hat mir sehr weitergeholfen und ich konnte jetzt mal die tasten für funktionen des asuro so legen, wie ich das haben wolllte . bloß für was das 0x gut sein soll, ist mir noch nicht klar. bloß ohne dieses 0x gehts ja auch nicht.

    gruß tape

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    hallo tape

    das 0x zeigt dem compiler an, dass jetzt eine hexadezimale zahl folgt

    wenn nichts davor steht ist es eine dezimalzahl, und bei 0b folgt ein binäre zahl ( das wird jedoch nicht von alle compiler akzeptiert!)
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  7. #7
    Neuer Benutzer
    Registriert seit
    23.04.2008
    Ort
    Bochum
    Beiträge
    3
    Ich misch mich mal mir meinem eigenen Problem ein!

    Ich hab mir hier aus dem Forum einen Beispielcode auf den asuro geflasht, und zwar den aus der Test.zip in diesem Thread:
    http://www.roboternetz.de/phpBB2/zei...ag.php?t=13478
    Der funktionierte auch wunderbar, aber ich wollte die Tastenbelegung ändern und stoße auf Probleme!

    Nachdem ich die alten Codes ersetzt hab mit den Codes für die Tasten die ich verwenden will lief erstmal nichts. Daraufhin hab ich was geändert und es funktioniert, aber die Reaktionszeiten sind ganz fies nach unten gegangen!

    Das hier hab ich geändert:
    cmd = rxdata; // (rxdata & 0x3F);

    Code:
    #include "asuro.h"
    #include <stdlib.h>
    
    #define IRFWD     0x1794
    #define IRRWD     0x1795
    #define IRLEFT    0x1796
    #define IRRIGHT   0x1797
    #define IROK      0x17A5
    #define IRSTOP    0x1786
    
    #define OFFSET 100
    #define STEP   60
    
    int speedLeft, speedRight;
    volatile unsigned int rxdata;
    volatile unsigned char rxbits;
    
    SIGNAL (SIG_OVERFLOW0)
    {
       rxbits++;
       rxdata<<=1;
       rxdata |= (PIND & (1 << PD0)); // liest Datenbits
       TCNT0 = 34; // Timer auf 1778µs
       if(rxbits==14)
       {
          TCCR0 &= ~((1 << CS01) | (1 << CS00)); // stoppt Timer
       }
    }
    
    void Driver(void)
    {
       unsigned char leftDir= FWD, rightDir= FWD;
    
       leftDir = rightDir = FWD;
       if (speedLeft < 0)
          leftDir = RWD;
       if (speedRight < 0)
          rightDir = RWD;
    
       if (speedLeft > 240)
          speedLeft = 240;
       if (speedLeft < -240)
          speedLeft = -240;
       if (speedRight > 240)
          speedRight = 240;
       if (speedRight < -240)
          speedRight = -240;
    
       MotorDir(leftDir, rightDir);
       MotorSpeed(abs(speedLeft),abs(speedRight));
    }
    
    void IRFwd(void)
    {
       speedRight += STEP;
       speedLeft += STEP;
       if (abs(speedLeft) < OFFSET)
       {
          speedRight += STEP;
          speedLeft += STEP;
       }
       FrontLED(ON);
       BackLED(OFF,OFF);
    }
    
    void IRRwd(void)
    {
       speedRight -= STEP;
       speedLeft -= STEP;
       if (abs(speedLeft) < OFFSET)
       {
          speedRight -= STEP;
          speedLeft -= STEP;
       }
       FrontLED(OFF);
       BackLED(ON,ON);
    }
    
    void IRLeft(void)
    {
       FrontLED(OFF);
       BackLED(ON,OFF);
       if (speedLeft != 0)
       {
          speedLeft /= 4;
          Driver();
          Msleep(80);
          speedLeft *= 4;
       }
       else
       {
          speedLeft = -150;
          speedRight = 150;
          Driver();
          Msleep(80);
          speedLeft = speedRight = 0;
       }
    }
    
    void IRRight(void)
    {
       FrontLED(OFF);
       BackLED(OFF,ON);
       if (speedRight != 0)
       {
          speedRight /= 4;
          Driver();
          Msleep(80);
          speedRight *= 4;
       }
       else
       {
          speedLeft = 150;
          speedRight = -150;
          Driver();
          Msleep(80);
          speedLeft = speedRight = 0;
       }
    }
    
    void IRStop(void)
    {
       speedRight = speedLeft = 0;
       FrontLED(OFF);
       BackLED(OFF,OFF);
    }
    
    int main(void)
    {
       static unsigned int cmd;
    
       Init();
       while (1)
       {
          rxbits = 1;
          rxdata = 0;
          TIMSK |= (1 << TOIE0);
          // Interrupt scharf
          while (PIND & (1 << PD0))
             ; // warte auf 1. Flanke
          TCNT0 = 90;
          // Timer auf 1333µs
          TCCR0 = (1 << CS01) | (1 << CS00);
          // Start Timer
          while (rxbits < 14)
             ; // warte bis alle Bits empfangen
    
          cmd = rxdata;      //      (rxdata & 0x3F);
          // 6 Command-Bits werden verwertet
    
          switch (cmd)
          {
          case IRRWD:
             IRRwd();
             break;
          case IRFWD:
             IRFwd();
             break;
          case IRLEFT:
             IRLeft();
             break;
          case IRRIGHT:
             IRRight();
             break;
          case IRSTOP:
          case IROK:
             IRStop();
             break;
          }
          Driver();
       }
       return 0;
    }
    MfG
    mr_johnson

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    hallo mr_johnson

    wenn ich es richtig verstanden habe willst du doch die tastenbelegung ändern, dafür wären aber die #defines am anfang gedacht. damit wird festgelegt, mit welcher taste du vorwärts, rückwärts, usw. fahren willst.

    um andere tasten benutzen zu können musst du diese werte entsprechend ändern
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  9. #9
    Neuer Benutzer
    Registriert seit
    23.04.2008
    Ort
    Bochum
    Beiträge
    3
    das habe ich auch getan nur ging danach erstmal nichts!
    IRFWD war vorher als 0x21 (ch_up) definiert. erst nachdem ich die änderung in main() vorgenommen habe ging die steuerung wieder, aber die reaktionszeit war danach viel höher!

    Jetzt funktioniert es, aber ich bin trotzdem völlig verwirrt!
    Ich benutze jetzt den Code aus dem RC5Test Beispiel, habe meine Tasten erfolgreich angepasst und die Latenzprobleme sind auch verschwunden, aber ich wundere mich über die Funktionierenden Codes an sich!

    Wenn irgendwer hier eine silberne hauppauge a415-hpg-we-a oder ähnliches hat, würde ich gern wissen was für Codes er benutzt!

    Ich habe meine Codes nämlich aus einer lirc config datei und die sind alle nach dem Schema 0x17Yx und wenn ich sie nach 0x10(Y-x ändere funktionieren sie.
    (Wobei die 0x17xx Codes auch funktionierten, wenn ich im alten Code den ich oben gepostet habe die kleine erwähnte änderung vorgenommen habe).

    Alles sehr verwirrend.
    MfG
    mr_johnson

Berechtigungen

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