Bakgrund:
Ideérna om just denna typ av belysning har funnits länge men det var inte förrän jag fick tag i rätt lysdioder som jag kom till skott, har tidigare provat med 5mm runda men anser att de syns för mycket.
Funktion/krav:
Varje trappsteg ska kunna styras individuellt i alla färger. Någon slags styrning där man kan välja färg.
Till det roliga:
(Alla bilder nedan är klickbara)
Först tar jag en diod och löder på 3 st motstånd enligt nedan:


Sen gör jag om proceduren 68 gånger


Därefter fäster jag dem på 4 st koppartråd:


Dessa limmas med limpistol under trappnosen så diskret det bara går:

Det senaste kretskortet

kopplar jag in i ett ormbo av kablar nämligen 16st koppartrådar och 6st vanliga. Såhär ser det då ut under trappen: (bara lite provisoriskt



Lite kod och vips så ser det ut såhär:
Punkterna syns väl mycket men dioderna går på väldigt hög effekt också, normalt är det tänkt att de ska gå i den lägre delen av registret. Hela trappen drar 0,45A vid 5V (troligen lite spänningsfall pga långa sladdar från hobbyrummet men..)
Processorn är en 18F4221 och koden kan ni ta del av nedan. LED:arna är kopplade till port B & D. PORTC styr färgFET:arna
Kommentarer är felaktiga osv men det "bjuckar" jag på

Kod: Markera allt
LIST P=18F4221, F=INHX32 ;directive to define processor and file format
#INCLUDE <P18F4221.INC> ;processor specific variable definitions
;******************************************************************************
; Oscillator Selection:
CONFIG OSC=INTIO2, FCMEN=OFF, IESO=OFF ;CONFIG1H Options
CONFIG PWRT=OFF, BOR=OFF, BORV=0 ;CONFIG2L Options
CONFIG WDT=OFF, WDTPS=1 ;CONFIG2H Options
CONFIG MCLRE=ON, LPT1OSC=OFF, PBADEN=DIG, CCP2MX=RC1 ;CONFIG3H Options
CONFIG STVREN=ON, LVP=OFF, BBSIZ=BB256, XINST=OFF, DEBUG=OFF ;CONFIG4L Options
CONFIG CP0=OFF, CP1=OFF ;CONFIG5L Options
CONFIG CPB=OFF, CPD=OFF ;CONFIG5H Options
CONFIG WRT0=OFF, WRT1=OFF ;CONFIG6L Options
CONFIG WRTB=OFF, WRTC=OFF, WRTD=OFF ;CONFIG6H Options
CONFIG EBTR0=OFF, EBTR1=OFF ;CONFIG7L Options
CONFIG EBTRB=OFF ;CONFIG7H Options
ERRORLEVEL +302
;******************************************************************************
;Macros
Compare_LED MACRO Color, Diode, PORT
CPFSGT Color+Diode ; Compare if RED diode is to be put out
BSF PORT, Diode
ENDM
;******************************************************************************
;Variable definitions
Main_Vars_Shared UDATA_ACS
WREG_TEMP RES 1 ;variable in RAM for context saving
STATUS_TEMP RES 1 ;variable in RAM for context saving
BSR_TEMP RES 1 ;variable in RAM for context saving
z1 RES 1
z2 RES 1
z3 RES 1
RED RES 16 ;RED LED Array
GREEN RES 16 ;GREEN LED Array
BLUE RES 16 ;BLUE LED Array
LoopVar RES 4 ;LOOP calculation variable
Mode RES 1 ;RGB Mode
;******************************************************************************
;EEPROM data
DATA_EEPROM CODE 0xf00000
;******************************************************************************
;Reset vector
RESET_VECTOR CODE 0x0000
GOTO Init ;go to start of Init code
;******************************************************************************
;High priority interrupt vector
; This code will start executing when a high priority interrupt occurs or
; when any interrupt occurs if interrupt priorities are not enabled.
HI_INT_VECTOR CODE 0x0008
bra HighInt ;go to high priority interrupt routine
;******************************************************************************
;Low priority interrupt vector
; This code will start executing when a low priority interrupt occurs.
; This code can be removed if low priority interrupts are not used.
LOW_INT_VECTOR CODE 0x0018
bra LowInt ;go to low priority interrupt routine
;******************************************************************************
;High priority interrupt routine
; The high priority interrupt code is placed here.
Highint_CODE CODE
HighInt
; *** high priority interrupt code goes here ***
RETFIE FAST
;******************************************************************************
;Low priority interrupt routine
; The low priority interrupt code is placed here.
; This code can be removed if low priority interrupts are not used.
LowInt
MOVFF STATUS,STATUS_TEMP ;save STATUS register
MOVFF WREG,WREG_TEMP ;save working register
MOVFF BSR,BSR_TEMP ;save BSR register
; *** low priority interrupt code goes here ***
MOVFF BSR_TEMP,BSR ;restore BSR register
MOVFF WREG_TEMP,WREG ;restore working register
MOVFF STATUS_TEMP,STATUS ;restore STATUS register
RETFIE
;******************************************************************************
; Init code starts here
Init_CODE CODE
Init
MOVLW B'01110000' ;8Mhz internal OSC.
MOVWF OSCCON
BSF OSCTUNE, PLLEN ;Enable PLL (4xOscillator)
BCF ADCON0, ADON ;Turn A/D off
MOVLW B'00001111' ;Use all ports as digital ones
MOVWF ADCON1
MOVLW B'00000111' ;Use all ports as digital ones
MOVWF CMCON
CLRF TRISA ;Clear all TRIS registers
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
CLRF PORTA ;Clear all ports
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
MOVLW D'0'
MOVWF RED+0
MOVWF GREEN+0
MOVLW D'0'
MOVWF RED+1
MOVWF GREEN+1
MOVLW D'0'
MOVWF RED+2
MOVWF GREEN+2
MOVLW D'0'
MOVWF RED+3
MOVWF GREEN+3
MOVLW D'0'
MOVWF RED+4
MOVWF GREEN+4
MOVLW D'0'
MOVWF RED+5
MOVWF GREEN+5
MOVLW D'0'
MOVWF RED+6
MOVWF GREEN+6
MOVLW D'0'
MOVWF RED+7
MOVWF GREEN+7
MOVLW D'255'
MOVWF BLUE+0
MOVWF BLUE+1
MOVWF BLUE+2
MOVWF BLUE+3
MOVWF BLUE+4
MOVWF BLUE+5
MOVWF BLUE+6
MOVWF BLUE+7
MOVLW D'1'
MOVWF Mode ;RESETS Mode
LFSR 0, BLUE ;Decreases
LFSR 1, RED ;Increases
MOVLW D'255'
MOVWF LoopVar+3
GOTO Main
; Main code starts here
Main_CODE CODE
Main
; RRCF PORTB
; CALL Delay_Long
; RGB Loop
MOVLW D'8'
MOVWF LoopVar
RGB_Outer_Loop
CLRF PORTD
CLRF PORTB
MOVLW D'255'
MOVWF LoopVar+1
MOVLW B'110'
MOVWF PORTC
RGB_Inner_Loop_1
MOVF LoopVar+1, W
SUBLW D'255' ; Move value to WREG
Compare_LED RED, 0, PORTD ; Compare if RED diode is to be put out
Compare_LED RED, 1, PORTD
Compare_LED RED, 2, PORTD
Compare_LED RED, 3, PORTD
Compare_LED RED, 4, PORTD
Compare_LED RED, 5, PORTD
Compare_LED RED, 6, PORTD
Compare_LED RED, 7, PORTD
Compare_LED RED, 0, PORTB ; Compare if RED diode is to be put out
Compare_LED RED, 1, PORTB
Compare_LED RED, 2, PORTB
Compare_LED RED, 3, PORTB
Compare_LED RED, 4, PORTB
Compare_LED RED, 5, PORTB
Compare_LED RED, 6, PORTB
Compare_LED RED, 7, PORTB
DECFSZ LoopVar+1, F
GOTO RGB_Inner_Loop_1
CLRF PORTD
CLRF PORTB
MOVLW D'255'
MOVWF LoopVar+1
MOVLW B'101'
MOVWF PORTC
RGB_Inner_Loop_2
MOVF LoopVar+1, W
SUBLW D'255' ; Move value to WREG
Compare_LED GREEN, 0, PORTD ; Compare if RED diode is to be put out
Compare_LED GREEN, 1, PORTD
Compare_LED GREEN, 2, PORTD
Compare_LED GREEN, 3, PORTD
Compare_LED GREEN, 4, PORTD
Compare_LED GREEN, 5, PORTD
Compare_LED GREEN, 6, PORTD
Compare_LED GREEN, 7, PORTD
Compare_LED GREEN, 0, PORTB ; Compare if RED diode is to be put out
Compare_LED GREEN, 1, PORTB
Compare_LED GREEN, 2, PORTB
Compare_LED GREEN, 3, PORTB
Compare_LED GREEN, 4, PORTB
Compare_LED GREEN, 5, PORTB
Compare_LED GREEN, 6, PORTB
Compare_LED GREEN, 7, PORTB
DECFSZ LoopVar+1, F
GOTO RGB_Inner_Loop_2
CLRF PORTD
CLRF PORTB
MOVLW D'255'
MOVWF LoopVar+1
MOVLW B'011'
MOVWF PORTC
RGB_Inner_Loop_3
MOVF LoopVar+1, W
SUBLW D'255' ; Move value to WREG
Compare_LED BLUE, 0, PORTD ; Compare if RED diode is to be put out
Compare_LED BLUE, 1, PORTD
Compare_LED BLUE, 2, PORTD
Compare_LED BLUE, 3, PORTD
Compare_LED BLUE, 4, PORTD
Compare_LED BLUE, 5, PORTD
Compare_LED BLUE, 6, PORTD
Compare_LED BLUE, 7, PORTD
Compare_LED BLUE, 0, PORTB ; Compare if RED diode is to be put out
Compare_LED BLUE, 1, PORTB
Compare_LED BLUE, 2, PORTB
Compare_LED BLUE, 3, PORTB
Compare_LED BLUE, 4, PORTB
Compare_LED BLUE, 5, PORTB
Compare_LED BLUE, 6, PORTB
Compare_LED BLUE, 7, PORTB
DECFSZ LoopVar+1, F
GOTO RGB_Inner_Loop_3
DECFSZ LoopVar, F
GOTO RGB_Outer_Loop
Mode_SET
;Mode 1
MOVLW D'1'
CPFSEQ Mode, 0
GOTO Not_Mode_1
LFSR 0, BLUE ;Decreases
LFSR 1, RED ;Increases
GOTO Mode_DONE
Not_Mode_1
;Mode 2
MOVLW D'2'
CPFSEQ Mode, 0
GOTO Not_Mode_2
LFSR 0, RED ;Decreases
LFSR 1, GREEN ;Increases
GOTO Mode_DONE
Not_Mode_2
;Mode 3
MOVLW D'3'
CPFSEQ Mode, 0
GOTO Not_Mode_3
LFSR 0, GREEN ;Decreases
LFSR 1, BLUE ;Increases
GOTO Mode_DONE
Not_Mode_3
Mode_DONE
RGB_Change
MOVLW D'8'
MOVWF LoopVar+2
;[
RGB_Change_Loop
DECF POSTINC0, F
INCF POSTINC1, F
DECFSZ LoopVar+2, F
GOTO RGB_Change_Loop
;]
DECF LoopVar+3, F ;Change mode
BTFSS STATUS, Z
GOTO Main
; BNZ Main
INCF Mode, F
DECF LoopVar+3, F
MOVLW D'3' ;Reset mode
CPFSGT Mode, 0
GOTO Main
MOVLW D'1'
MOVWF Mode
GOTO Main
;******************************************************************************
;End of program
Subroutines_CODE CODE
SUBTITLE "Delayroutine"
Delay_Long
MOVLW 0x16
MOVWF z3
MOVLW D'80'
MOVWF z2
Hopp1
DECFSZ z1,1
GOTO Hopp1
DECFSZ z2,1
GOTO Hopp1
DECFSZ z3,1
GOTO Hopp1
RETURN
END
Kopplingsschemat till "drivkortet":

Om du klarat att läsa såhär långt så har du gjort det bra!

Kommentarer/funderingar/idéer
