PDA

View Full Version : My code for TV remote and MIBAM for RGB control



idtat
- 22nd February 2009, 17:06
Hi all, I made a RGB LED lamp with super bright RGB LEDs from sparkfun and control the color from my TV remote. I use 16F628s X2 because I couldnt get pulsein to work with MIBAM (inturupt timming issue) Here is the code if it will help anyone. Its not real clean but it works well

Aaron

IR CODE

'************************************************* ***************
'* Name : IR_RGB_ControlV2
'* Author : Aaron E.Wilson
'* Notice : Copyright (c) 2009
'* : All Rights Reserved
'* Date : 2/21/2009
'* Version : 1.0
'* Notes : Sets RGB select ports and UP/DN ports from IR remote
'* :
'************************************************* ***************



define osc 4
CMCON = 7 ' PortA = digital I/O
VRCON = 0 ' A/D Voltage reference disabled
TRISA = %00000010 ' Set PortA I/O
TRISB = %00000000 ' Set PortB I/O
PORTA = 0 ' Clear PortA
PORTB = 0 ' Clear PortB


IRpulse_length var word(13)
xx var Byte
Command Var Byte
Device Var Byte 'IR Chip---------RGB Chip
IR_IN var PORTA.1 'Pin 18 N/A
RED_SEL var PORTB.1 'Pin 7 Pin 18
BLUE_SEL var PORTB.2 'Pin 8 Pin 3
GREEN_SEL var PORTB.3 'Pin 9 Pin 17
UP var PORTB.5 'Pin 11 Pin 1
DN var PORTB.4 'Pin 10 Pin 2

pause 500

Main:
gosub ReadIr
if command = 1 then RED_Adj
if command = 2 then BLUE_Adj
if command = 3 then GREEN_Adj

goto Main

Red_Adj:
blue_sel = 0
Green_sel = 0
red_sel = 1
gosub ReadIr
if command = 17 then
dn = 0
up = 1
pause 100
up = 0
endif
if command = 18 then
up = 0
dn = 1
pause 100
dn = 0
endif
if command = 2 then BLUE_Adj
if command = 3 then GREEN_Adj
goto red_adj

BLUE_Adj:
red_sel = 0
green_sel = 0
blue_sel = 1
gosub ReadIr
if command = 17 then
dn = 0
up = 1
pause 100
up = 0
endif
if command = 18 then
up = 0
dn = 1
pause 100
dn = 0
endif
if command = 1 then red_Adj
if command = 3 then GREEN_Adj
goto blue_adj

GREEN_Adj:
red_sel = 0
Blue_sel = 0
green_sel = 1
gosub ReadIr
if command = 17 then
dn = 0
up = 1
pause 100
up = 0
endif
if command = 18 then
up = 0
dn = 1
pause 100
dn = 0
endif
if command = 2 then BLUE_Adj
if command = 1 then red_Adj
goto green_adj

ReadIR:
PuLSIN IR_IN,0,IRpulse_length(0)
if IRpulse_length(0) < 200 then
goto ReadIR
Endif

for xx=1 to 12
pulsin ir_in,0,IRpulse_length(xx)
next xx

if IRpulse_length(1) < 100 then
Command.bit0 = 0
Else
Command.bit0 = 1
endif

if IRpulse_length(2) < 100 then
Command.bit1 = 0
Else
Command.bit1 = 1
endif

if IRpulse_length(3) < 100 then
Command.bit2 = 0
Else
Command.bit2 = 1
endif

if IRpulse_length(4) < 100 then
Command.bit3 = 0
Else
Command.bit3 = 1
endif

if IRpulse_length(5) < 100 then
Command.bit4 = 0
Else
Command.bit4 = 1
endif

if IRpulse_length(6) < 100 then
Command.bit5 = 0
Else
Command.bit5 = 1
endif

if IRpulse_length(7) < 100 then
Command.bit6 = 0
Else
Command.bit6 = 1
endif

Command.bit7 = 0
Command = Command + 1
If Command = 10 then
Command = 0
Endif

if IRpulse_length(8) < 100 then
Device.bit0 = 0
Else
Device.bit0 = 1
endif

if IRpulse_length(9) < 100 then
Device.bit1 = 0
Else
Device.bit1 = 1
endif

if IRpulse_length(10) < 100 then
Device.bit2 = 0
Else
Device.bit2 = 1
endif

if IRpulse_length(11) < 100 then
Device.bit3 = 0
Else
Device.bit3 = 1
endif
return

DebugInfo:
SEROUT2 PORTA.0,16780,[13]
pause 100
SEROUT2 PORTA.0,16780,[10]
pause 100
SEROUT2 PORTA.0,16780,["Device ", dec Device, " Command ", dec command]
pause 100
return

end





MIBAM CODE

'************************************************* ***************
'* Name : Adj_Color
'* Author : Aaron E.Wilson
'* Notice : Copyright (c) 2009
'* : All Rights Reserved
'* Date : 2/22/2009
'* Version : Final
'* Notes :
'* :
'************************************************* ***************
;_________________________Interrupt Context save locations]_________________

wsave var byte $20 SYSTEM ' location for W if in bank0
wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1
wsave2 VAR BYTE $120 SYSTEM ' location for W if in bank2
ssave VAR BYTE BANK0 SYSTEM ' location for STATUS register
psave VAR BYTE BANK0 SYSTEM ' location for PCLATH register

;----[ MIBAM Setup ]--------------------------------------------------------

BAM_COUNT CON 3 ; How many BAM Pins are used?
INCLUDE "MIBAM.pbp" ; Mirror Image BAM module

RED VAR BYTE
GREEN VAR BYTE
BLUE VAR BYTE

ASM
BAM_LIST macro ; Define PIN's to use for BAM
BAM_PIN (PORTB,0, GREEN) ; Pin 6
BAM_PIN (PORTB,1, BLUE) ; Pin 7
BAM_PIN (PORTB,2, RED) ; Pin 8
endm
BAM_INIT BAM_LIST ; Initialize the Pins
ENDASM
;----[ Chip Setup ]--------------------------------------------------------
define osc 4
CMCON = 7 ' PortA = digital I/O
VRCON = 0 ' A/D Voltage reference disabled
TRISA = %00011111 ' Set PortA I/O
TRISB = %11111000 ' Set PortB I/O
PORTA = 0 ' Clear PortA
PORTB = 0 ' Clear PortB

;----[ Adjustment Setup ]-------------------------------------------------

RED_VAL var byte
GREEN_VAL var byte
BLUE_VAL var byte
UP_SEL var bit
DN_SEL var bit

RED_PORT var PORTA.1 'Pin 18
GREEN_PORT var PORTA.0 'Pin 17
BLUE_PORT var PORTA.4 'Pin 3
UP_PORT var PORTA.2 'Pin 1
DN_PORT var PORTA.3 'Pin 2

;----[ Inital Settings ]--------------------------------------------------

RED_VAL = 0
GREEN_VAL = 0
BLUE_VAL = 0

;----[ Program ]----------------------------------------------------------

Main:
gosub led
gosub Adjust


goto main


Adjust:
if PORTA = 0 then main

Red_Up:
if red_val > 250 then red_dn
if red_port = 1 and up_port = 1 then
red_val = red_val +1
pause 100
endif

Red_Dn:
if red_val = 0 then green_up
if red_port = 1 and dn_port = 1 then
red_val = red_val -1
pause 100
endif

Green_Up:
if green_val > 250 then green_dn
if green_port = 1 and up_port = 1 then
green_val = green_val +1
pause 100
endif

Green_Dn:
if green_val = 0 then blue_up
if green_port = 1 and dn_port = 1 then
green_val = green_val -1
pause 100
endif

Blue_Up:
if Blue_val > 250 then BLue_dn
if Blue_port = 1 and up_port = 1 then
Blue_val = Blue_val +1
pause 100
endif

Blue_Dn:
if Blue_val = 0 then main
if BLue_port = 1 and dn_port = 1 then
Blue_val = Blue_val -1
pause 100
endif
goto main

LED:
red = red_val
pause 20
blue = blue_val
pause 20
green = green_val
pause 20
return
end

idtat
- 22nd February 2009, 17:08
Great stuff Darryl

Aaron

omer
- 25th February 2009, 14:30
schematic

My code for TV remote and MIBAM for RGB control

idtat
- 24th August 2009, 23:25
I didnt mean to sugest I wrote all the code
I just put stuff together to make something fun

kotan04
- 12th January 2013, 20:52
shematic ?