PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR-Steuerung von Roboter (Gleichstrommotor)



slimer
26.03.2009, 16:57
hi,

ich versuche gerade einen Gleichstrommotor mit Hilfe einer herkömmlichen Multi-Fernbedienung, einem IR-Sensor (TSOP 1736, Datenblatt (http://www.anonym.to/?http://www.scribd.com/doc/13663771/tsop1736)) und einem Microcontroller-Board (AT89S8253) zu realisieren. Die Fernbedienung hab ich auf den RC5-Code (http://www.sprut.de/electronic/ir/rc5.htm) 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:


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:


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

uffi
12.04.2009, 20:34
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