Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Gracias, lo necesario para armarlas creo que lo subi mas atras...
Saludos--
Ta bueno!
Pero yo lo que haria es usar los leds pulsados, como es esto?... sencillo, la tecnica consiste en introducir pulsos de 100mA y 10uS de duración a una frecuencia de 1Khz... con esto conseguimos que se perciba un brillo 10 veces mas intenso que si se los alimenta con una corriente continua de 20mA.
aca encontre un articulo sobre eso http://www.piclist.com/techref/io/led/pulse.htm
Claro! es el mismo concepto, cuando me haga un tiempito hago el codigo para hacerlo con un pic y que se pueda variar la intensidad.fernandoae dijo:
Ta bueno!
Pero yo lo que haria es usar los leds pulsados, como es esto?... sencillo, la tecnica consiste en introducir pulsos de 100mA y 10uS de duración a una frecuencia de 1Khz... con esto conseguimos que se perciba un brillo 10 veces mas intenso que si se los alimenta con una corriente continua de 20mA.
aca encontre un articulo sobre eso http://www.piclist.com/techref/io/led/pulse.htm
algo de esto lo habia leido para leds infrarojos.. creo que aumentaban la distancia de una alarma infrarroja
dmx1_init_usart:
;dmx1.mbas,16 :: Sub procedure init_usart
;dmx1.mbas,17 :: SPBRG = 0x04
MOVLW 4
MOVWF SPBRG+0
;dmx1.mbas,18 :: TXSTA.BRGH = 1
BSF TXSTA+0, 2
;dmx1.mbas,20 :: TXSTA.SYNC = 0
BCF TXSTA+0, 4
;dmx1.mbas,21 :: PIE1=0
CLRF PIE1+0
;dmx1.mbas,22 :: PIE1.RCIE = 1
BSF PIE1+0, 5
;dmx1.mbas,23 :: RCSTA.RX9 = 1
BSF RCSTA+0, 6
;dmx1.mbas,25 :: nutteloos=RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,26 :: nutteloos=RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,27 :: nutteloos=RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,29 :: RCSTA.CREN = 1
BSF RCSTA+0, 4
;dmx1.mbas,30 :: RCSTA.SPEN = 1
BSF RCSTA+0, 7
;dmx1.mbas,31 :: INTCON.PEIE=1
BSF INTCON+0, 6
;dmx1.mbas,32 :: INTCON.GIE=1
BSF INTCON+0, 7
RETURN
; end of dmx1_init_usart
dmx1_init_timer0:
;dmx1.mbas,36 :: sub procedure init_timer0
;dmx1.mbas,37 :: counter = 0 ' Initialize counter
CLRF _counter+0
CLRF _counter+1
;dmx1.mbas,38 :: INTCON=0
CLRF INTCON+0
;dmx1.mbas,39 :: TMR0 = 160 ' load value TMR0
MOVLW 160
MOVWF TMR0+0
;dmx1.mbas,40 :: INTCON.GIE=1
BSF INTCON+0, 7
;dmx1.mbas,41 :: INTCON.T0IE=1 ' Enable TMRO interrupt
BSF INTCON+0, 5
;dmx1.mbas,42 :: INTCON.T0IF=0
BCF INTCON+0, 2
RETURN
; end of dmx1_init_timer0
dmx1_interrupt:
MOVWF R15+0
SWAPF STATUS+0, 0
CLRF STATUS+0
MOVWF ___saveSTATUS+0
MOVF PCLATH+0, 0
MOVWF ___savePCLATH+0
CLRF PCLATH+0
;dmx1.mbas,46 :: Sub procedure interrupt
;dmx1.mbas,47 :: if INTCON.T0IF=1 then
BTFSS INTCON+0, 2
GOTO L_dmx1_interrupt4
;dmx1.mbas,48 :: inc(counter) ' Increment value of counter on every cycle
INCF _counter+0, 1
BTFSC STATUS+0, 2
INCF _counter+1, 1
;dmx1.mbas,49 :: If counter <= led0 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt74
MOVF _counter+0, 0
SUBWF _led0+0, 0
L_dmx1_interrupt74:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt7
;dmx1.mbas,50 :: portb.4 = 1
BSF PORTB+0, 4
GOTO L_dmx1_interrupt8
;dmx1.mbas,51 :: else
L_dmx1_interrupt7:
;dmx1.mbas,52 :: portb.4 = 0
BCF PORTB+0, 4
;dmx1.mbas,53 :: end if
L_dmx1_interrupt8:
;dmx1.mbas,54 :: If counter <= led1 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt75
MOVF _counter+0, 0
SUBWF _led1+0, 0
L_dmx1_interrupt75:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt10
;dmx1.mbas,55 :: portb.5 = 1
BSF PORTB+0, 5
GOTO L_dmx1_interrupt11
;dmx1.mbas,56 :: else
L_dmx1_interrupt10:
;dmx1.mbas,57 :: portb.5 = 0
BCF PORTB+0, 5
;dmx1.mbas,58 :: end if
L_dmx1_interrupt11:
;dmx1.mbas,59 :: If counter <= led2 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt76
MOVF _counter+0, 0
SUBWF _led2+0, 0
L_dmx1_interrupt76:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt13
;dmx1.mbas,60 :: portb.6 = 1
BSF PORTB+0, 6
GOTO L_dmx1_interrupt14
;dmx1.mbas,61 :: else
L_dmx1_interrupt13:
;dmx1.mbas,62 :: portb.6 = 0
BCF PORTB+0, 6
;dmx1.mbas,63 :: end if
L_dmx1_interrupt14:
;dmx1.mbas,64 :: If counter <= led3 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt77
MOVF _counter+0, 0
SUBWF _led3+0, 0
L_dmx1_interrupt77:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt16
;dmx1.mbas,65 :: portb.7 = 1
BSF PORTB+0, 7
GOTO L_dmx1_interrupt17
;dmx1.mbas,66 :: else
L_dmx1_interrupt16:
;dmx1.mbas,67 :: portb.7 = 0
BCF PORTB+0, 7
;dmx1.mbas,68 :: end if
L_dmx1_interrupt17:
;dmx1.mbas,69 :: If counter <= led4 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt78
MOVF _counter+0, 0
SUBWF _led4+0, 0
L_dmx1_interrupt78:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt19
;dmx1.mbas,70 :: porta.0 = 1
BSF PORTA+0, 0
GOTO L_dmx1_interrupt20
;dmx1.mbas,71 :: else
L_dmx1_interrupt19:
;dmx1.mbas,72 :: porta.0 = 0
BCF PORTA+0, 0
;dmx1.mbas,73 :: end if
L_dmx1_interrupt20:
;dmx1.mbas,74 :: If counter <= led5 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt79
MOVF _counter+0, 0
SUBWF _led5+0, 0
L_dmx1_interrupt79:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt22
;dmx1.mbas,75 :: porta.1 = 1
BSF PORTA+0, 1
GOTO L_dmx1_interrupt23
;dmx1.mbas,76 :: else
L_dmx1_interrupt22:
;dmx1.mbas,77 :: porta.1 = 0
BCF PORTA+0, 1
;dmx1.mbas,78 :: end if
L_dmx1_interrupt23:
;dmx1.mbas,79 :: If counter <= led6 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt80
MOVF _counter+0, 0
SUBWF _led6+0, 0
L_dmx1_interrupt80:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt25
;dmx1.mbas,80 :: porta.2 = 1
BSF PORTA+0, 2
GOTO L_dmx1_interrupt26
;dmx1.mbas,81 :: else
L_dmx1_interrupt25:
;dmx1.mbas,82 :: porta.2 = 0
BCF PORTA+0, 2
;dmx1.mbas,83 :: end if
L_dmx1_interrupt26:
;dmx1.mbas,84 :: If counter <= led7 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt81
MOVF _counter+0, 0
SUBWF _led7+0, 0
L_dmx1_interrupt81:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt28
;dmx1.mbas,85 :: porta.3 = 1
BSF PORTA+0, 3
GOTO L_dmx1_interrupt29
;dmx1.mbas,86 :: else
L_dmx1_interrupt28:
;dmx1.mbas,87 :: porta.3 = 0
BCF PORTA+0, 3
;dmx1.mbas,88 :: end if
L_dmx1_interrupt29:
;dmx1.mbas,89 :: If counter <= led8 then
MOVF _counter+1, 0
SUBLW 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt82
MOVF _counter+0, 0
SUBWF _led8+0, 0
L_dmx1_interrupt82:
BTFSS STATUS+0, 0
GOTO L_dmx1_interrupt31
;dmx1.mbas,90 :: porta.4 = 1
BSF PORTA+0, 4
GOTO L_dmx1_interrupt32
;dmx1.mbas,91 :: else
L_dmx1_interrupt31:
;dmx1.mbas,92 :: porta.4 = 0
BCF PORTA+0, 4
;dmx1.mbas,93 :: end if
L_dmx1_interrupt32:
;dmx1.mbas,95 :: if counter = 255 then ' if counter is 255, then reset counter
MOVLW 0
XORWF _counter+1, 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt83
MOVLW 255
XORWF _counter+0, 0
L_dmx1_interrupt83:
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt34
;dmx1.mbas,96 :: counter = 0
CLRF _counter+0
CLRF _counter+1
;dmx1.mbas,98 :: led0 = dat[0]
MOVF _dat+0, 0
MOVWF _led0+0
;dmx1.mbas,99 :: led1 = dat[1]
MOVF _dat+1, 0
MOVWF _led1+0
;dmx1.mbas,100 :: led2 = dat[2]
MOVF _dat+2, 0
MOVWF _led2+0
;dmx1.mbas,101 :: led3 = dat[3]
MOVF _dat+3, 0
MOVWF _led3+0
;dmx1.mbas,102 :: led4 = dat[4]
MOVF _dat+4, 0
MOVWF _led4+0
;dmx1.mbas,103 :: led5 = dat[5]
MOVF _dat+5, 0
MOVWF _led5+0
;dmx1.mbas,104 :: led6 = dat[6]
MOVF _dat+6, 0
MOVWF _led6+0
;dmx1.mbas,105 :: led7 = dat[7]
MOVF _dat+7, 0
MOVWF _led7+0
;dmx1.mbas,106 :: led8 = dat[8]
MOVF _dat+8, 0
MOVWF _led8+0
L_dmx1_interrupt34:
;dmx1.mbas,108 :: TMR0 = 160 ' load value TMR0
MOVLW 160
MOVWF TMR0+0
;dmx1.mbas,109 :: INTCON.T0IE=1 ' Enable TMRO interrupt
BSF INTCON+0, 5
;dmx1.mbas,110 :: INTCON.T0IF=0
BCF INTCON+0, 2
;dmx1.mbas,111 :: portb.3=0
BCF PORTB+0, 3
L_dmx1_interrupt4:
;dmx1.mbas,114 :: if PIR1.RCIF=1 then
BTFSS PIR1+0, 5
GOTO L_dmx1_interrupt37
;dmx1.mbas,115 :: portb.3=1
BSF PORTB+0, 3
;dmx1.mbas,116 :: if (RCSTA.OERR) then
BTFSS RCSTA+0, 1
GOTO L_dmx1_interrupt40
;dmx1.mbas,117 :: RCSTA.SPEN=0
BCF RCSTA+0, 7
;dmx1.mbas,118 :: RCSTA.SPEN=1
BSF RCSTA+0, 7
;dmx1.mbas,119 :: nutteloos=RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,120 :: nutteloos=RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,121 :: nutteloos=RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,122 :: RCSTA.CREN=0
BCF RCSTA+0, 4
;dmx1.mbas,123 :: RCSTA.CREN=1
BSF RCSTA+0, 4
;dmx1.mbas,124 :: ch_count=0
CLRF _ch_count+0
CLRF _ch_count+1
;dmx1.mbas,125 :: brk=0
CLRF _brk+0
GOTO L_dmx1_interrupt41
;dmx1.mbas,126 :: else
L_dmx1_interrupt40:
;dmx1.mbas,127 :: if (RCSTA.FERR) then
BTFSS RCSTA+0, 2
GOTO L_dmx1_interrupt43
;dmx1.mbas,128 :: nutteloos=RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,129 :: ch_count=0
CLRF _ch_count+0
CLRF _ch_count+1
;dmx1.mbas,130 :: offset=0
CLRF _offset+0
CLRF _offset+1
;dmx1.mbas,131 :: brk=0xFF
MOVLW 255
MOVWF _brk+0
GOTO L_dmx1_interrupt44
;dmx1.mbas,132 :: else
L_dmx1_interrupt43:
;dmx1.mbas,133 :: if (brk = 0xFF) then
MOVF _brk+0, 0
XORLW 255
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt46
;dmx1.mbas,134 :: if (ch_count=0) then
MOVLW 0
XORWF _ch_count+1, 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt84
MOVLW 0
XORWF _ch_count+0, 0
L_dmx1_interrupt84:
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt49
;dmx1.mbas,135 :: startcode=RCREG
MOVF RCREG+0, 0
MOVWF _startcode+0
GOTO L_dmx1_interrupt50
;dmx1.mbas,136 :: else
L_dmx1_interrupt49:
;dmx1.mbas,137 :: if (adres<1) then
MOVLW 128
XORWF _adres+1, 0
MOVWF R0+0
MOVLW 128
SUBWF R0+0, 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt85
MOVLW 1
SUBWF _adres+0, 0
L_dmx1_interrupt85:
BTFSC STATUS+0, 0
GOTO L_dmx1_interrupt52
;dmx1.mbas,138 :: nutteloos = RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,139 :: for j=0 to aantalkanalen-1
CLRF _j+0
CLRF _j+1
L_dmx1_interrupt55:
;dmx1.mbas,140 :: dat[j]=0
MOVF _j+0, 0
ADDLW _dat+0
MOVWF FSR
CLRF INDF+0
;dmx1.mbas,141 :: next j
MOVLW 0
XORWF _j+1, 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt86
MOVLW 8
XORWF _j+0, 0
L_dmx1_interrupt86:
BTFSC STATUS+0, 2
GOTO L_dmx1_interrupt58
INCF _j+0, 1
BTFSC STATUS+0, 2
INCF _j+1, 1
GOTO L_dmx1_interrupt55
L_dmx1_interrupt58:
GOTO L_dmx1_interrupt53
;dmx1.mbas,142 :: else
L_dmx1_interrupt52:
;dmx1.mbas,144 :: if (ch_count >= adres) and (ch_count < (adres + aantalkanalen)) and (startcode = 0) then
MOVLW 128
XORWF _ch_count+1, 0
MOVWF R3+0
MOVLW 128
XORWF _adres+1, 0
SUBWF R3+0, 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt87
MOVF _adres+0, 0
SUBWF _ch_count+0, 0
L_dmx1_interrupt87:
MOVLW 255
BTFSS STATUS+0, 0
MOVLW 0
MOVWF R3+0
MOVLW 9
ADDWF _adres+0, 0
MOVWF R1+0
MOVF _adres+1, 0
BTFSC STATUS+0, 0
ADDLW 1
MOVWF R1+1
MOVLW 128
XORWF _ch_count+1, 0
MOVWF R0+0
MOVLW 128
XORWF R1+1, 0
SUBWF R0+0, 0
BTFSS STATUS+0, 2
GOTO L_dmx1_interrupt88
MOVF R1+0, 0
SUBWF _ch_count+0, 0
L_dmx1_interrupt88:
MOVLW 255
BTFSC STATUS+0, 0
MOVLW 0
MOVWF R0+0
MOVF R0+0, 0
ANDWF R3+0, 0
MOVWF R1+0
MOVF _startcode+0, 0
XORLW 0
MOVLW 255
BTFSS STATUS+0, 2
MOVLW 0
MOVWF R0+0
MOVF R1+0, 0
ANDWF R0+0, 1
BTFSC STATUS+0, 2
GOTO L_dmx1_interrupt60
;dmx1.mbas,145 :: dat[offset] = RCREG
MOVF _offset+0, 0
ADDLW _dat+0
MOVWF FSR
MOVF RCREG+0, 0
MOVWF INDF+0
;dmx1.mbas,146 :: offset= offset + 1
INCF _offset+0, 1
BTFSC STATUS+0, 2
INCF _offset+1, 1
GOTO L_dmx1_interrupt61
;dmx1.mbas,147 :: else
L_dmx1_interrupt60:
;dmx1.mbas,148 :: nutteloos = RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,149 :: end if
L_dmx1_interrupt61:
;dmx1.mbas,151 :: end if
L_dmx1_interrupt53:
;dmx1.mbas,152 :: end if
L_dmx1_interrupt50:
;dmx1.mbas,153 :: ch_count = ch_count + 1
INCF _ch_count+0, 1
BTFSC STATUS+0, 2
INCF _ch_count+1, 1
GOTO L_dmx1_interrupt47
;dmx1.mbas,154 :: else
L_dmx1_interrupt46:
;dmx1.mbas,155 :: nutteloos = RCREG
MOVF RCREG+0, 0
MOVWF _nutteloos+0
;dmx1.mbas,156 :: ch_count = 0
CLRF _ch_count+0
CLRF _ch_count+1
;dmx1.mbas,157 :: end if
L_dmx1_interrupt47:
;dmx1.mbas,158 :: end if
L_dmx1_interrupt44:
;dmx1.mbas,159 :: end if
L_dmx1_interrupt41:
;dmx1.mbas,160 :: PIR1.RCIF=0
BCF PIR1+0, 5
L_dmx1_interrupt37:
;dmx1.mbas,161 :: end if
L_dmx1_interrupt73:
MOVF ___savePCLATH+0, 0
MOVWF PCLATH+0
SWAPF ___saveSTATUS+0, 0
MOVWF STATUS+0
SWAPF R15+0, 1
SWAPF R15+0, 0
RETFIE
; end of dmx1_interrupt
_main:
;dmx1.mbas,165 :: main:
;dmx1.mbas,166 :: TRISA = 0xE0 ' PORTA is output
MOVLW 224
MOVWF TRISA+0
;dmx1.mbas,167 :: PORTA = 0x00 ' Initialize PORTA
CLRF PORTA+0
;dmx1.mbas,168 :: TRISB = 0x02 ' PORTB is output
MOVLW 2
MOVWF TRISB+0
;dmx1.mbas,169 :: PORTB = 0x00 ' Initialize PORTB
CLRF PORTB+0
;dmx1.mbas,170 :: CMCON = 0x07 ' comperators off
MOVLW 7
MOVWF CMCON+0
;dmx1.mbas,171 :: OPTION_REG = $80 ' Assign prescaler to TMR0
MOVLW 128
MOVWF OPTION_REG+0
;dmx1.mbas,186 :: PORTB.0 = 0 ' Set SN75176 to recieve data
BCF PORTB+0, 0
;dmx1.mbas,187 :: PORTB.3 = 1
BSF PORTB+0, 3
;dmx1.mbas,188 :: ch_count=0
CLRF _ch_count+0
CLRF _ch_count+1
;dmx1.mbas,189 :: brk=0
CLRF _brk+0
;dmx1.mbas,191 :: for j=0 to aantalkanalen-1
CLRF _j+0
CLRF _j+1
L__main64:
;dmx1.mbas,192 :: dat[j] = 0
MOVF _j+0, 0
ADDLW _dat+0
MOVWF FSR
CLRF INDF+0
;dmx1.mbas,193 :: next j
MOVLW 0
XORWF _j+1, 0
BTFSS STATUS+0, 2
GOTO L__main89
MOVLW 8
XORWF _j+0, 0
L__main89:
BTFSC STATUS+0, 2
GOTO L__main67
INCF _j+0, 1
BTFSC STATUS+0, 2
INCF _j+1, 1
GOTO L__main64
L__main67:
;dmx1.mbas,195 :: init_timer0
CALL dmx1_init_timer0+0
;dmx1.mbas,196 :: init_usart
CALL dmx1_init_usart+0
;dmx1.mbas,198 :: counter = 0 ' Initialize counter
CLRF _counter+0
CLRF _counter+1
;dmx1.mbas,200 :: while TRUE
L__main69:
;dmx1.mbas,201 :: adres = 1
MOVLW 1
MOVWF _adres+0
CLRF _adres+1
GOTO L__main69
;dmx1.mbas,204 :: wend
GOTO $+0
; end of _main
..........................Les dejo un video de unos equipos que arme este fin de semana.
http://www.youtube.com/watch?v=sciniEyUkJA
Disculpen la calidad pero queria cargarlo rapido...
Gracias.
Deltaeco: Pronto subire fotos del interior, la distancia depende de los grados de la lente, ahí use dos, porque con una la distancia entre los led y la lente era mucha, y la figura terminaba siendo muy pequeña, es cuestion de probar para que entiendas bien.
zeta_bola_1: tenes razon, pero la maquina del humo no la tengo aca, y el humo cigarrilo me hace doler la cabeza...
En estos dias termino dos mas, uno es doble, ahí voy a buscar la maquina de humo y subo otro video con mejor calidad.
Gracias, saludos.
Hoja a todos disculpen por el error del código fuente tan largo
Gracias por el consejo amigo Deltaeco no conocía esa opción.
Si sirven, yo hice la prueba en mi garage y tiene 13M se ven bien... y mas si los usas con altas corrientes pulsadas, les podes sacar una intensidad 10 veces mayor. Lo explique mas atras.los de 10mm de 20mA no sirven