??? 08/22/08 10:12 Read: times |
#157656 - 8052 based Controller for 1KW MOSFET POWER AMP |
Hi Everyone,
My name is Ravi and I am hoping to build a Controller to provide functionality like IR,TEMPERATURE CONTROL OF HEATSINK, MONITORING FOR DC COMPONENT IN OUTPUTS, FAN CONTROL and remote control for switching ON/OFF my 500W MOSFET POWER AMP (which is also built by me).... Some background .... I have already a working P89C51RD2 based SBC with a modified MCS BASIC interpretter( with the ISP suitably wired so that I can readily develop code-using Flash Magic) I have subsequently interfaced it to a 16X2 LCD display and have the driver written and working. I have 64K CODE and 32K Data spaces on my board.Clock @ 11.059200MHz Now I am struggling with the remote control portion and cant seem to get it working... I am using a TSOP1738 module and have it connected to the INT0 pin(12) and I am trying to understand the operation... Can any body guide me a proper way in which to know if I am decoding the RC5 correctly? I have lifted code from Juergen Putzger that i found on the net...am including it for you here ..; ---------==========----------==========---------=========--------- ; Interrupt Driven Receiving Routine for RC5 code ; written by Juergen Putzger (juergen.putzger@physik.uni-regensburg.de) ; ---------==========----------==========---------=========--------- INPUT EQU P3.2 ; Port3,Bit2 is used as input. The demodulated signal ; with active low level is connected to this pin LF EQU 0AH ; Linefeed CR EQU 0DH ; Carriage return SPC EQU 20H ; Space RB0 EQU 000H ; Select Register Bank 0 RB1 EQU 008H ; Select Register Bank 1 ...poke to PSW to use DSEG ; This is internal data memory ORG 20H ; Bit adressable memory FLAGS: DS 1 CONTROL BIT FLAGS.0 ; toggles with every new keystroke NEW BIT FLAGS.1 ; Bit set when a new command has been received COMMAND: DS 1 ; Received command byte SUBAD: DS 1 ; Device subaddress BUFFER: DS 30 ; Buffer to store length of transmitted pulses STACK: DS 1 ; Stack begins here CSEG ; Code begins here ;---------==========----------==========---------=========--------- ; PROCESSOR INT0 vector set up by basic at 4003H ;---------==========----------==========---------=========--------- ORG 4003H ; Basic Branches here for INT0 Low going pulse LJMP RECEIVE ;redirect to the receive routine ; ---------==========----------==========---------=========--------- ;Interrupt routine is entered by the first high to low transition ;at Port3-Bit2.pin(12-INT0). Stores the length of all pulses occuring ;at this pin in buffer. Analyzes the timing of the startbits to calculate ;a threshold between short and long pulses. This routine is independent ;of CPU speed. The device address and command are ;extracted from the bit stream. Two flags are set upon exit, ;the control bit(FLIP bit) which toggles with every new keystroke and the ;NEW bit indicating that a new command has been received. ;---------==========----------==========---------=========--------- ORG 04400H RECEIVE: PUSH DPH PUSH DPL PUSH ACC PUSH PSW ; save current registerset MOV PSW,#RB1 MOV R0,#BUFFER MOV A,#38 CALL C_OUT MOV A,#CR CALL C_OUT MOV A,#LF CALL C_OUT MOV A,#39 CALL C_OUT REC: MOV A,#0 REC0: INC A ; Measure duration of low-level NOP NOP ; Delay NOP NOP JZ TIMEOUT ; End of transmission if duration exeeds 256 counts JNB INPUT,REC0 MOV @R0,A INC R0 MOV A,#0 REC1: INC A ; Measure duration of high-level NOP NOP ; Delay NOP NOP JZ TIMEOUT ; End of transmission if duration exceeds 256 counts JB INPUT,REC1 MOV @R0,A INC R0 JMP REC TIMEOUT: MOV A,BUFFER ; calculate threshold between short and long pulses INC R0 ; length of first low-pulse ADD A,BUFFER+1 ; plus length of first high-pulse CLR C RRC A ; divided by two MOV R1,A CLR C RRC A ; plus half of the time ADD A,R1 MOV R5,A ; yields threshold MOV R0,#BUFFER MOV R1,#1 ; initial value MOV R2,#13 ; Number of bits to decode DECODE: MOV A,@R0 INC R0 CLR C SUBB A,R5 ; compare length with threshold MOV A,#0 CPL C ; short=1 RLC A JNZ NOSKIP INC R0 ; if short skip over next pulse NOSKIP: XRL A,R1 ; new bit is calculated by XOR with previous bit MOV R1,A ; Store new bit RRC A MOV A,R3 ; Store new Bit in R3/R4 by rotating RLC A MOV R3,A MOV A,R4 RLC A MOV R4,A DJNZ R2,DECODE MOV A,R3 ANL A,#00111111B ; extract command from R3 MOV COMMAND,A MOV A,R3 RLC A ; do some rotating to extract XCH A,R4 RLC A ;device address XCH A,R4 RLC A XCH A,R4 RLC A CLR CONTROL JNB ACC.5,TZ ; Check control bit SETB CONTROL TZ: ANL A,#00011111B ; mask device address MOV SUBAD,A ; POP ACC ; Restore old registerset ; POP PSW SETB NEW ; Set flag to indicate the new command POP PSW POP ACC POP DPL POP DPH RETI ; ---------==========----------==========---------=========--------- ;Main routine. ;Program execution starts here. ;The Main loop waits until a command has been received. ;Then the control bit, subaddress ;and command byte ;are printed separated by spaces. Leading zeroes are not suppressed. ;When a standby command (12) has been received, the main loop is ;terminated and the program returns to the monitor. ; ---------==========----------==========---------=========--------- MAIN: PUSH DPH PUSH DPL PUSH ACC PUSH PSW MOV TCON,#00H ;MAKE SURE TIMERS ARE SHUT DOWN. MOV PSW,#RB0 ;Select register bank 0 MOV SP,STACK SETB EX0 ;Enable external Interrupt0 CLR IT0 ;triggered by a high to low transition SETB EA CLR NEW MOV A,#31H CALL C_OUT MOV A,#32H CALL C_OUT MOV A,#33H CALL C_OUT MOV A,#34H CALL C_OUT LOOP: JNB NEW,LOOP ;Wait until a command has been received MOV A,#CR CALL C_OUT ;Ouput carriage return and linefeed MOV A,#LF CALL C_OUT MOV A,FLAGS ANL A,#00000001B CALL BIN2BCD ;Output control Bit MOV A,#SPC CALL C_OUT MOV A,SUBAD CALL BIN2BCD ;Output subaddress MOV A,#SPC CALL C_OUT MOV A,COMMAND CALL BIN2BCD ;Output command MOV A,COMMAND CLR C SUBB A,#0CH ;compare for standby command CLR NEW JNZ LOOP ;go on receiving CLR EX0 ;stop receiving CLR EA ;and POP PSW ;Restore the Registers POP ACC POP DPL POP DPH RET ;return to Basic N_OUT: ADD A,#30H ;Convert BCD number to ASCII C_OUT: JNB TI,$ ;Wait until transmission completed. CLR TI ;Clear interrupt flag. MOV SBUF,A ;Write out character to serial port. RET BIN2BCD: ;Convert 8 bit value in Acc to 3 digit BCD MOV B,#100 DIV AB CALL N_OUT XCH A,B MOV B,#10 DIV AB CALL N_OUT XCH A,B CALL N_OUT RET END |
Topic | Author | Date |
8052 based Controller for 1KW MOSFET POWER AMP | 01/01/70 00:00 | |
Curious... | 01/01/70 00:00 | |
RC5 decoding![]() | 01/01/70 00:00 |