-         

Ergebnis 1 bis 2 von 2

Thema: IR-Steuerung von Roboter (Gleichstrommotor)

  1. #1

    IR-Steuerung von Roboter (Gleichstrommotor)

    Anzeige

    hi,

    ich versuche gerade einen Gleichstrommotor mit Hilfe einer herkömmlichen Multi-Fernbedienung, einem IR-Sensor (TSOP 1736, Datenblatt) und einem Microcontroller-Board (AT89S8253) zu realisieren. Die Fernbedienung hab ich auf den RC5-Code programmiert. Glaub ich zumindest, das Signal der Taste 1 entspricht laut Oszi auf jeden Fall dem des RC5-Codes. Den Empfänger hab entsprechend dem Datenblatt aufgebaut, allerdings hab ich den 10k-Widerstand durch einen 1k-Widerstand ersetzt, da es trotzdem noch zu Schwingungen beim Signal gekommen ist, wenn der Empfänger mit dem Microcontroller verbunden war. Den Empfängerausgang hab ich an einem beliebigen PIN angeschlossen. NUN zur Programmierung:

    Code:
    CSEG AT 0
    
    ; IR-Signal-Auswertung
    IRinput        BIT        P1.3
    IRCode        DATA    7fh
    IRempfadr    DATA    7eh
    
    ; Zuweisung der Fernbedinung
    
    IRrechts    EQU       00101110b
    IRlinks        EQU       00101011b
    IRvor        EQU       00101101b
    IRzurueck    EQU       00101100b
    IRstopp        EQU       00101111b
    
    ; Gleichstrom-Motor-Steuerung
    Motoren        DATA    P2
    Mstopp        EQU        00000000b
    Mvor        EQU        11001100b
    Mzurueck    EQU        10101010b
    Mrechts        EQU        11001000b
    Mlinks        EQU        10001100b
    
    LEDs        DATA     P0
    
    start:
    MOV Motoren,#Mstopp
    
    ;RC5-Empfang
    
    ireinlesen:
    JB         IrInput,    ireinlesen
    CLR     A
    LCALL     Zeit34
    MOV     B,            #7
    loopAdr:
    MOV     C,            IrInput
    RLC     A
    LCALL     Zeit
        DJNZ    B,        loopAdr
    ANL     A,            #00111111b
    MOV     IRempfadr,    A
    CLR     A
    MOV     B,            #6
    loopDaten:
    MOV     C,            IrInput
    RLC     A
    LCALL     Zeit
    DJNZ     B,            loopDaten
    MOV     IRcode,        A
    CALL     zeit
    CALL     zeit
    
    ; Ende RC5-Empfang
    MOV     A,            IRempfadr
    ANL     A,            #11011111b
    JNZ        IReinlesen
    
    ; Motorsteuerung
    MOV     A,            IRcode
    CJNE    A,            #IRrechts,m1
    MOV     motoren,    #Mrechts
    SJMP     anzeigen
    m1:
    CJNE     A,            #IRlinks,m2
    MOV        motoren,    #Mlinks
    SJMP    anzeigen
    m2:
    CJNE    A,            #IRvor,m3
    MOV        motoren,    #Mvor
    SJMP    anzeigen
    m3:
    CJNE    A,            IRzurueck,m4
    MOV        motoren,    #Mzurueck
    SJMP    anzeigen
    m4:
    CJNE    A,            IRstopp,anzeigen
    MOV        motoren,    #Mstopp
    SJMP    anzeigen
    
    ;LED-Anzeige
    anzeigen:
    MOV        LEDs,        IRCode
    SJMP    IReinlesen
    
    ;Zeitverzögerung 1768us
    Zeit:
    MOV        R6,            #5
    loop1:
    MOV        R7,            #172
    loop0:
    DJNZ    R7,            loop0
    DJNZ    R6,            loop1
    RET
    
    ;Zeitverzögerung 1328us
    
    Zeit34:
    MOV        R6,            #5
    loop3:
    MOV        R7,            #131
    loop2:
    DJNZ    R7,            loop2
    DJNZ    R6,            loop3
    RET
    
    END
    Das Programm ist äußerst schlecht kommentiert, ich weiß! Aber wer fragen hat kann diese ruhig stellen. Wenn ich das Programm auf den Microcontroller (Flashspeicher) spiel, passiert aber an den Ausgängen vom Motortreiber nichts, nada! Hardware-Fehler dürften es nicht mehr sein, darum Suche ich jetzt Fehler in der Software. Vllt kann mir ja einer von euch bei der Suche helfen. Ganz bin ich aus dem Programm auch nicht schlau geworden. Soll dieses Programm nur abändern, hab es nicht selbst geschrieben. Zu den einzelnen Stellen. Die Zeitverzögerungen sind klar, LEDAnzeige auch, Motorsteuerung und auslesen der 6 Kommandobits auch. Nur wie kommt der Autor des Programms auf z.B. diese Zuweisung:

    Code:
    IRrechts    EQU       00101110b
    Diese entspricht nach einer Überprüfung des Signals mit dem Oszi nicht den 6 Kommandobits. Bin für jede Hilfe dankbar.

    so long, lg slimer

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    54
    Beiträge
    198
    Du mußt zunächst mal feststellen, mit welcher RC5 Adresse Deine Fernbedienung sendet. Dann diese Adresse im Code eingeben bei

    IRempfadr DATA 7eh

    statt der 7eh.

    Dann solltest Du die Zuordnung Deiner Codes zu den Tasten ermitteln, d.h. Taste drücken, Code am Oszi analysieren, Tastencode ins Programm eintragen usw.:

    IRrechts EQU 00101110b

    Der Autor des og Programms hatte sicher eine andere Fernbedienung als Du.

    Außerdem kannst Du den IR-Empfänger nicht an einen beliebigen Pin des µC anschließen, wenn im Program P1.3 dafür erwartet wird.

    Hier ein paar mehr Infos, wie man sowas macht:

    http://freenet-homepage.de/uffmann/RemoteControl.html

Berechtigungen

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