desktop

Equipos de iluminacion (efectos, roboticas, algo de dmx, y mucho DIY)

Gracias, lo necesario para armarlas creo que lo subi mas atras...

Saludos--

subiste el pcb?


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
 
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
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.
 
Hola amigo gervit


muy buen trabajo con tu proyecto de 8 canales con pic16f628 lo arme y esta funcionando perfecto solo tengo una duda colo puedo poner mas modulos para controlar mas luces.

es decir cambiar la dirección dmx con la que funciona ya que ahorita funciona con los primeros canales del 1 al 8 y quisiera modificar el programa para que funcione en 9-17 ...18-27 etc .

ya que ya leí casi todo el foro y no encontré como hacer la modificación solo vi que comentabas que cambiando una linea del programa pero no se cual.

de antemano muchas gracias

también estoy fabricando unas luces tipo scanner con motores a pasos y ya los tengo funcionando mas tarde subo imágenes para que vean como están quedando.


saludos a todos
 
Hola amigo Fernandoae

el mensaje es el #1163

adjunto el archivo asm para que veas cual es
-----------------------------------------------------------------------------------------------------


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
-----------------------------------------------------------------------------------------------------
de antemano muchas gracias

saludos

Hola amigo Fernandoae

el mensaje es el #1163

adjunto el archivo asm para que veas cual es
-----------------------------------------------------------------------------------------------------


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
-----------------------------------------------------------------------------------------------------
de antemano muchas gracias

saludos
 
jajajja macho fuerte texto y ademas repetido jajaja

si te fijas arriba en la barra de herramientas cuando vas a escribir , existe una cosa llamada codigo(code) y puede quedar muchisimo mas corto, y mejor mira:

Código:
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

;)(y)



djwash -felicidades por tu proyecto amigo en el video a quedado genial, yo lo habia intentado con 1 lupa comun y no me ha funcionado, el haz de luz del led se abria y no se veia redondito como el tuyo sino que todos los colores se mesclaban por no clavar el haz de luz, no se como haz puesto las 2 lupas para crear ese efecto tan precioso, se te agradeceria si pudieramos ver unas fotos de tu proyecto he indicar las distancias si es posible , se te agradeceria amigo.

Un saludo compañero.
 
Última edición:
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.
 
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.

Gracias compañero, realmente he realizado estos experimentos pero ni forma .... todos se me mezclaban y no sacaban el color deseado ni mostrando asi los puntos, muchas gracias amigo.

Un saludo ¡:aplauso:
 
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.


solo requiero de su ayuda para modifica las direcciones dmx Para que funcione con otras direcciones ya que actualmente funciona solo con los primeros 8 canales este fue publicado en el mensaje #1163 el autor es el amigo gervit.



saludos a todos
 

Adjuntos

  • Receptor Dmx16f628 y lm324.rar
    11.6 KB · Visitas: 76
hola compañeros, mensaje para djwash jjajaaja, haber sobre lo de las lupas, yo he utilizado una lupa de los chinos y no me ha funcionado como queria, el tema que he desarmado un foco que tengo que lleva una lupa mas pequeña delante, le he sacado la lupa y la he comprobado y esta lupa si funciona como las tuyas, la cosa es conseguirlas asi de sueltas y poder realizar foco con efectos y varios..

ahora la pregunta, ¿por que con las lupas chinas no funcionan igual? (ojo,son de cristal y de 75mm y cumplen su funcion)

saludos compañeros ¡
 
Toma unos 6 led de 5mm, los conectas a tres pilas AA, cada uno con su resistencia, te vas con ese aparatito a recorrer locales, lo pegas a la lupa a probar, y lo vas separando teniendo en cuenta que esten alineados siempre, lo ideal para lugares chicos es que a 3-4 metros forme puntos nitidos correspondientes a los leds, de unos 10cm o un poco menos, la distancia entre la lupa y el led dependera de los grados de aumento de la lupa.

Si la idea e usar la maquina en lugares grandes/largos, lo que se busca es proyectar una imagen definida a unos 12-15 metros, comparando el caso anterior con este, ambos arreglos proyectando a una misma distancia, digamos 7 metros, daran como resultado "figuras" de distinto tamaño, la de tiro corto figura grande, y la de tiro largo figura pequeña, con figura me refiero al tamaño del punto o conjunto de puntos.

Es medio tarde, mañana subo fotos con ejemplos...

Saludos.
 
Ok muchas gracias djwash, , yo realmente no creo que lo utilice para 15 metros XD porque tengo en mi sótano una zona para fiestas y como mucho 4 o 5 metros va a enfocar.

Por cierto otra pregunta : compre por ebay led de 10mm rgb pero claro pensaba que yo eligia el color y me equivoque porque son como automáticos, le pones la tensión y ellos solos cambian de color a su antojo y a la velocidad que quieren, el problema es, que tengo 100 de estos y no se que fabricar,¿ un foco aunque ellos cambien solo de color ?

un saludo compañero
 
YO tambien en un principio compre 100 de esos, nunca les encontre un uso, para fin de año armare una luz de navidad...

Esos leds no sirven para usar con lupa, olvidate.

Los unicos que sirven para maquinas con lupas son los de 5mm de 20º y los de 10mm pero de 825000mcd, los que serian de 1/4w o algo asi, los de 10mm de 20mA no sirven, de ahi en adelante los de potencia, 1W, 3W, 5W o mas, los flat en 5mm sirven para bañadores (140º)...
 
Atrás
Arriba