hi,
ich versuche gerade einen Gleichstrommotor mit Hilfe einer herkömmlichen
Multi-Fernbedienung, einem IR-Sensor (TSOP 1736, Datenblatt:
http://www.scribd.com/doc/13663771/tsop1736) 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:
1 | CSEG AT 0
|
2 |
|
3 | ; IR-Signal-Auswertung
|
4 | IRinput BIT P1.3
|
5 | IRCode DATA 7fh
|
6 | IRempfadr DATA 7eh
|
7 |
|
8 | ; Zuweisung der Fernbedinung
|
9 |
|
10 | IRrechts EQU 00101110b
|
11 | IRlinks EQU 00101011b
|
12 | IRvor EQU 00101101b
|
13 | IRzurueck EQU 00101100b
|
14 | IRstopp EQU 00101111b
|
15 |
|
16 | ; Gleichstrom-Motor-Steuerung
|
17 | Motoren DATA P2
|
18 | Mstopp EQU 00000000b
|
19 | Mvor EQU 11001100b
|
20 | Mzurueck EQU 10101010b
|
21 | Mrechts EQU 11001000b
|
22 | Mlinks EQU 10001100b
|
23 |
|
24 | LEDs DATA P0
|
25 |
|
26 | start:
|
27 | MOV Motoren,#Mstopp
|
28 |
|
29 | ;RC5-Empfang
|
30 |
|
31 | ireinlesen:
|
32 | JB IrInput, ireinlesen
|
33 | CLR A
|
34 | LCALL Zeit34
|
35 | MOV B, #7
|
36 | loopAdr:
|
37 | MOV C, IrInput
|
38 | RLC A
|
39 | LCALL Zeit
|
40 | DJNZ B, loopAdr
|
41 | ANL A, #00111111b
|
42 | MOV IRempfadr, A
|
43 | CLR A
|
44 | MOV B, #6
|
45 | loopDaten:
|
46 | MOV C, IrInput
|
47 | RLC A
|
48 | LCALL Zeit
|
49 | DJNZ B, loopDaten
|
50 | MOV IRcode, A
|
51 | CALL zeit
|
52 | CALL zeit
|
53 |
|
54 | ; Ende RC5-Empfang
|
55 | MOV A, IRempfadr
|
56 | ANL A, #11011111b
|
57 | JNZ IReinlesen
|
58 |
|
59 | ; Motorsteuerung
|
60 | MOV A, IRcode
|
61 | CJNE A, #IRrechts,m1
|
62 | MOV motoren, #Mrechts
|
63 | SJMP anzeigen
|
64 | m1:
|
65 | CJNE A, #IRlinks,m2
|
66 | MOV motoren, #Mlinks
|
67 | SJMP anzeigen
|
68 | m2:
|
69 | CJNE A, #IRvor,m3
|
70 | MOV motoren, #Mvor
|
71 | SJMP anzeigen
|
72 | m3:
|
73 | CJNE A, IRzurueck,m4
|
74 | MOV motoren, #Mzurueck
|
75 | SJMP anzeigen
|
76 | m4:
|
77 | CJNE A, IRstopp,anzeigen
|
78 | MOV motoren, #Mstopp
|
79 | SJMP anzeigen
|
80 |
|
81 | ;LED-Anzeige
|
82 | anzeigen:
|
83 | MOV LEDs, IRCode
|
84 | SJMP IReinlesen
|
85 |
|
86 | ;Zeitverzögerung 1768us
|
87 | Zeit:
|
88 | MOV R6, #5
|
89 | loop1:
|
90 | MOV R7, #172
|
91 | loop0:
|
92 | DJNZ R7, loop0
|
93 | DJNZ R6, loop1
|
94 | RET
|
95 |
|
96 | ;Zeitverzögerung 1328us
|
97 |
|
98 | Zeit34:
|
99 | MOV R6, #5
|
100 | loop3:
|
101 | MOV R7, #131
|
102 | loop2:
|
103 | DJNZ R7, loop2
|
104 | DJNZ R6, loop3
|
105 | RET
|
106 |
|
107 | 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:
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