- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: RC5-Signal auswerten!?

  1. #11
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    Powerstation Test
    Hallo

    Bild hier  

    Das Bild dient echt der Verwirrung, aber trotz gründlicher Suche habe ich leider kein besseres gefunden. Was mich daran stört, und Einsteiger sicher verwirrt, ist die Zählung der Bits. Hier ist die Reihenfolge dargestellt, in der die Bits gesendet werden, es ist ein klassisches MSB zuerst. Der Aufbau der RC5-Daten sieht aber so aus:

    Code:
       // Aufbau der RC5-Daten:
       // Bitnummer: 1111110000000000
       //            5432109876543210
       // Funktion:  --sstaaaaacccccc
    RC5_Command = RC5_Read() & 0x3F;

    Wer die Darstellung von Werten in verschiedenen Zahlensystemen schon kennt, kann diesen Abschnitt überspringen. Für alle anderen ein ganz kurzer Ausflug in die Welt der Hex-Darstellung: Neben einigen anderen Vorteilen ist die Hex-Schreibweise sehr einfach in binäre Schreibweise umwandelbar. Jede Stelle in Hex steht für 4 Bits, die je Stelle mit 1,2,4 oder 8 angesprochen werden. 0x02 ist 0b0000 0010, 0x40 ist 0b0100 0000 und 0xF0 ist entsprechend 0b1111 0000. 0x3f ist deshalb einfach gleich 0b0011 1111.

    Durch den &-Operator werden die Bits 15 bis 6 ausgeblendet (=gelöscht!), übrig bleiben die 6 Kommandobits in Bit0 bis 5.

    RC5_ExtCommand = RC5_Command | ((RC5_Read() & 0x1000) >> 6);

    0x1000 ist 0b0001 0000 0000 0000 und zeigt damit auf das zweite Startbit RC5-Bit12. Dieses kennzeichnet den erweiterten RC5-Code. (blöderweise fällt mir aber grad nicht ein, wie es das macht ;) Das Ergebniss-Bit nach dem UND wird noch um 6 Stellen nach rechts geschoben und mit RC5_Command verODERt, somit enthält RC5_ExtCommand ebenfalls die 6 Kommandobits und zusätzlich in Bit6 das ExtendetRC5-Bit. Die RC5-Adresse fällt völlig under den Tisch.

    In RC5-Bit11 ist übrigends das Togglebit:

    RC5_ToggleBit = RC5_Read() & 0x0800; // 0b0000 1000 0000 0000

    Das ToggleBit wechselt, wenn die selbe Taste erneut gedrückt wurde:
    (btw: Den nächsten Satz hatte ich bisher überlesen: "The toggle bit will retain the same logical level during all of these repeated messages." Bedeutet also, nur toggeln, wenn Taste erneut gedrückt wurde. Das ist dann oben bei meinem letzten Vorschlag nicht richtig)
    Wann wird eigentlich das Signal eingelesen? Funktioniert das im Hintergrund oder ist RC5_Read() blockierend und wartet bis zu nächsten RC5-Zeichen? Wäre das nicht sicherer:

    Code:
    word RC5_Empfang;
    word RC5_ToggleBit;
    word RC5_Command;
    word RC5_ExtCommand;
    
    void main(void)
    {
        PRO_BOT128_INIT();
        RC5_Init(26);
    
        while(true){
            RC5_Empfang = RC5_Read();
            RC5_ToggleBit = (RC5_Empfang & 0x0800) >> 11;  // EDIT!
    		  RC5_Command =  RC5_Empfang & 0x3F;
            RC5_ExtCommand = RC5_Command | ((RC5_Empfang & 0x1000) >> 6);
    
            Msg_WriteWord(RC5_Command);
            Msg_WriteText(":");
            Msg_WriteWord(RC5_ExtCommand);
            Msg_WriteText(":");
            Msg_WriteWord(RC5_ToggleBit);
            Msg_WriteChar(13);
        }
    }
    Scheint mir sinnvoll bei der Beschreibung von RC5_Read():
    http://www.c-control-pro.de/documentation/rc5_read.htm

    Gruß

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

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von bnitram
    ... erhält man ... Commando Bit und einen zweiten wo ich nicht ganz weiß welcher der ist ...
    Das ist vermutlich das erweiterte Kommandobit. Die sechs Bit Breite - entsprechend 64 Befehlen - wurden durch komplexere Steueraufgaben zu wenig. Also ersetzte man das zweite Startbit durch ein invertiertes 7. Kommandobit - und - simsalabim - waren es schon 128 unterscheidbare Befehle. Sicherlich läuft Dein Code auf diese Erweiterung hinaus.
    Ciao sagt der JoeamBerg

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    739
    Hallo Nohmal,
    Also den Oben geposteten Code, der funktioniert.
    RC5_Read() ist schon die omplette auslesefunktion.
    Hier noch ein Porgramm was auch funzt, wo ich mit dem fünf Tasten (oben,unten,rechts,links und OK) den Bot fahren lassen kann:
    Code:
    word RC5_Command;
    word RC5_ExtCommand;
    
    void main(void)
    {
        PRO_BOT128_INIT();
        RC5_Init(26);
        DRIVE_ON();
    
    
        while(true){
            RC5_Command = RC5_Read() &0x3F;
            RC5_ExtCommand = RC5_Command | ((RC5_Read() &0x1000) >> 6);
    
            if((RC5_Command == 40) && (RC5_ExtCommand == 104)){
                DRIVE(128,128);
            }
            if((RC5_Command == 28) && (RC5_ExtCommand == 92)){
                DRIVE(255,255);
            }
            else{
            if((RC5_Command == 27) && (RC5_ExtCommand == 91))
                DRIVE(1,1);
            }
            if((RC5_Command == 37) && (RC5_ExtCommand == 101)){
                DRIVE(50,205);
            }
            else{
            if((RC5_Command == 36) && (RC5_ExtCommand == 100))
                DRIVE(205,50);
            }
        }
    }
    Mfg
    bnitram

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen