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
Lesezeichen