-
        

Ergebnis 1 bis 10 von 10

Thema: IR-FernbedienungsempfangsProblem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2009
    Beiträge
    10

    IR-FernbedienungsempfangsProblem

    Anzeige

    Hi!

    Ich wollte meinen Asuro mit einer fernbedienung steuern.

    Das geht ja mit

    Code:
    void SerRead(unsigned char *data, unsigned char length, unsigned int timeout)
    also z.B.:

    Code:
    SerRead(data, 18, 0)
    null für unendlich und 18 bei einer IR-Fernbedienung geht gut.


    wenn ich jetzt aber eine schleife

    Code:
    while(1){
                
    SerRead(data, x, y);
    
    if(data=="WWwxxc"){
             FrontLED(ON);
    }
    
    }
    eingebe, und für

    x einen wert z.B. 13 einsetze
    y einen Wert z.B. 2000, für 2 sek., oder 2 milliesek. (da is ja noch die while-schleife)


    klappt das nicht.



    die fernbedienung sendet zwar 13 zeichen, allerdings klappt es erst richtig wenn er's 2mal ausließt, also 28 zeichen. (es gibt auch tasten mit 12 oder 14 zeichen)


    außerdem klappt das mit

    SerRead(data, 28, y)

    nur, wenn y=0 ist.




    hat jemand eine idee, was ich tun könnte?
    (falls ichs unverständlich erklärt habe, bitte melden )


    Vielen Dank



    P.S.: Ich glaube, es könnte noch daran liegen, dass die schleife ja immer ein paar teusenstel sekunden dauert. Wenn die fernbedienung nicht exakt den auslesevorgang trifft, ließt der dann

    cwwwxx

    anstatt

    wwwxxc

    was ja falsch ist.

    ich hab auch schon versucht alles 2mal auszulesen, und mit einer schleife den anfang zu suchen.

    also so:

    cwwwxxcwwwxx

    das hat aber auch nicht richtig geklappt.

    könnte es daran liegen?

    Das allererste Zeichen in den empfangen Daten wird dabei mit ’T’ (Timeout)
    überschrieben.
    das heißt also, dass bei

    SerRead(data, 28, 2)


    in wirklichkeit nicht

    wwwxxc

    sondern

    Twwxxc

    empfangen wird??

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

    Bevor ich mich tiefer ins Thema reindenke würde ich gerne was klarstellen:

    Versuchst du mit voller Absicht den Fernbedienungscode mit der seriellen Schnittstelle einzulesen? Oder weißt du nicht, dass die gesendeten Daten einer Fernbedienung völlig anders codiert sind als die Daten einer RS232-Schnittstelle.

    Gruß

    mic

    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 Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Das mit den letzter wert im SerRead stimmt. Er wartet einer zeit die diesen anzahl von zeichen enspricht. Also 2000 ist den zeit von 2000 zeichen, das it 20.000 bits, und mit 2400 baud ubertragung gleich 8,33 sekunden bis er weiter geht in dem while schleife. (und dann den timeout zeichen "T" reinsteckt, was aber schwer zu entdecken ist, weil die "T" auch gewunscht ubergesendet ist, ... machts aber nichts in diesen fall)

    Deshalb geht SerRead(data,y,0); gut, weil es nur die anzahl von y abwartet.

    Aber mit ganzen worter ("WWxxc") ist das ein bischen fehlerhaft. Asuro muss den zeichen genau so in diesen folge empfangen. Wenn einer diesen zeichen nicht uberkommt wirdt wirdt das ganze empfangene wort geloscht (weil es nicht stimmt), und in dem nachtste SerRead gehts weiter. Besser ist es die einzelne zeichen zu empfangen und in deinem program die reihefolge zu uberwachen. Wenn es stimmt muss er etwas tun wie den led anschalten.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2009
    Beiträge
    10
    erst mal danke, für deinen nützlichen hinweis


    Besser ist es die einzelne zeichen zu empfangen und in deinem program die reihefolge zu uberwachen.
    wie soll ich das machen? Die Fernbedienung sendet ja ununterbrochen (bei knopfdruck)

    wwwxxcwwwxxcwwwxxcwwwxxc usw.

    also da geht nix einzeln.

    Kann man das irgendwie umgehen?

    (das problem ist ja, dass die Knöpfe verschiedene Längen senden.
    Einer sendet 27, einer 28, einer 29..)

    ansonsten wärs ja einfach..

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

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

    Mein Ansatz war alle Fernbedienungsbits direkt am TXD-Pin abzufragen:

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

    Die aktuelle asuro-Library (v2.7rc3?) kann auch Fernbedienungen auslesen:
    http://www.roboternetz.de/phpBB2/zei...ag.php?t=33174

    Gruß

    mic

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

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2009
    Beiträge
    10
    danke, durch deine links bin ich hierrauf gestoßen:

    http://www.roboternetz.de/phpBB2/vie...?p=87737#87737

    ich werd das mal testen und studieren.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2009
    Beiträge
    10
    Also irgendwie hat das nicht geklappt (meine fernbedienung scheint da nicht kompatibel zu sein).


    folgendes sendet meine fernbedienung:

    ]]]×ÝwuÕWWWUÝ€]]]×ÝwuÕWWWUÝ für links

    ]]]×ÝwuÕWWWÕ× €]]]×ÝwuÕWWWÕ× für rechts


    und da ist auch schon das erste Problem:

    der code für rechts ist ein zeichen länger als der für links.

    Und selbst wenn sie gleich lang wären, gings trotzdem nicht, da das timeout nicht klappt.


    Ich hab folgende Codes probiert:




    Code:
    ..
    int Z=0;
    unsigned char data;
    
    while(Z==0){
    SerRead(data, 1, 5);
    if (data=w){
    Z=1;
    }
    }
    FrontLED(ON);
    ..
    klappt aber nicht.
    dieser hingegen schon:

    Code:
    ..
    unsigned char data;
    
    SerRead(data, 1, 0);
    
    FrontLED(ON);
    
    ..

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Mit einer tv-fernbedienung geht das aucht nicht. Ein fernbedienung benutzt das RC5 protocol, ( oder rc4 oder rc6 nach wie modern es ist). Das iest einer complet andere art von codierung. Das stimmt nicht uberein mit das USART protocol fur SerRead und SerWrite. Deshalb hat Radbruch du diesen 4 links gegeben. Ich hatte gedacht du benutzt deine RS232 IR modul mit hyperterminal fur eingeben eines commando. Vielleicht hat deiner fernbedieunung auch einer andere tragerfrequenz der den ir empfanger auf deiner asuro nicht gut erkent.

    Erst mus du verstehen wie die RC5 code wirkt, und dan mus du den PD0 pin (das ist den RX eingang fur seriellen emphang) uberwacht werden auf signal anderungen. Und dein program muss selbst den bits in das signal herausforderen/entdecken. Nicht einfach fur einer anfanger.

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

    Die Links oben sollten dir eigentlich auf die Sprünge helfen. Es kann nicht funktionieren, weil im Datenstrom für die RS232-Schnittstelle nicht nur Daten sondern auch Steuerbits (Start-, Stop-, Parity-Bit) übertragenen werden. Die Fernbedienung sendet ihre Bits am Stück und wartet nicht nach 8 Bits bis der USART die Daten weggeschaufelt hat. Alles was du so "empfängst" solltest du eher unter Zufall denn unter Daten ablegen.

    Hier zeige ich am RC5-Code wie die einzelnen Bits der Fernbedienung gelesen und gemessen werden können:
    http://www.roboternetz.de/phpBB2/zei...=403101#403101

    Wenn die Trägerfrequenz nicht paßt (der asuro verwendet standartmässig 36kHz) sollte der Empfang schon bei geringem Abstand unmöglich sein.

    Gruß

    mic

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

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2009
    Beiträge
    10
    Es funktioniert doch.
    Aber nur, wenn die zeit auf unendlich eingestellt ist (was blöd ist, da man dann keine tastsensoren abfragen kann.)

Berechtigungen

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