PDA

Ver la versión completa : Mis primeros proyectos en ASM para el 16F84



navegante 420
11/04/2010, 14:21
Lavafaros

Este proyecto nacio al querer instalar unos lavafaros a nuestros coches que inicialmente no llevaban, cuando fuimos a preguntar por el rele que se tenia que cambiar y su precio, nos quedamos de piedra, y de ahí que me pusiera a programar este PIC para realizar esa función.

Para aquellos que usen una bomba de limpia para el lavar el faro, dado que la presión que dan es menor, programamos el PIC para que que primero limpie un faro y después el otro.

He aquí el esquema.

https://anterior.webcampista.com/foro/attachment.php?attachmentid=27923&stc=1&d=1270984607

Y este el código ASM

;=========================
; ***** Encabezado *****
;=========================

list p=16F84A ; Microcontrolador utilizado.-
#include P16F84A.inc ; Definicion de registros SFR.-
__CONFIG _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF

;======================================
; ***** Definicion de Variables *****
;======================================

CBLOCK 0x0C ; En esta posicion se declaran los registros de usuario (GPR)
STATUS_Temp ; Registro para guardar temporalmete STATUS
W_Temp ; Registro para guardar temporalmete W
PDel0
PDel1
PDel2
ENDC

;==========================================
; ***** Inicio del Microcontrolador *****
;==========================================

Reset
org 0x00
goto Inicio ; Salto a inicio del programa.-

;=====================================
; ***** Vector de Interrupcion *****
;=====================================

org 0x04
goto Inicio_ISR ; Atiendo Interrupcion.-

;=================================
; ***** Programa principal *****
;=================================

org 0x05

Inicio

;==============================
; ----- Configuraciones -----
;==============================

bsf STATUS,RP0 ; Banco 1.-
movlw 0xE0
movwf TRISA ;sssss
movlw b'00000011'
movwf TRISB ;sssssee
movlw 0xDF
movwf OPTION_REG ; Pull-Up deshabiltado, , Timer0|interno, 1:1
bsf OPTION_REG,INTEDG ; Interrupcion RB0 por flanco ascendente
bcf STATUS,RP0 ; Banco 0.-
bcf INTCON,INTF ; Limpiamos bandera
bsf INTCON,INTE ; Habilitamos interrupcion RB0
;bsf INTCON,T0IE ; Habilitamos interrupcion por Timer0
bsf INTCON,GIE ; Habilitacion general de interrupciones

;=====================
; ***** Código *****
;=====================

sueño
clrf PORTB
clrf PORTA
sleep
goto sueño

;=================================================
; ***** Rutina de servicio de Interrupcion *****
;=================================================

Inicio_ISR
;==============================================
; ----- Guardado de registro W y STATUS -----
;==============================================

movwf W_Temp ; Copiamos W a un registro Temporario
swapf STATUS,W ; Invertimos nibles de STATUS
movwf STATUS_Temp ; Guardamos STATUS en un registro temporal

;=============================
; ----- Interrupciones -----
;=============================

; btfsc INTCON,T0IF ; Interrupcion por TMR0?
; goto ISR_TMR0 ; Si, se trata interrupcion

;.............................

btfsc INTCON,INTF ; Interrupcion por RB0?
goto ISR_RB0 ; Si, se trata interrupcion

;.............................

Fin_ISR

;---- Restauramos los valores de W y STATUS ----
swapf STATUS_Temp,W
movwf STATUS
swapf W_Temp,f
swapf W_Temp,W
retfie
;.......................
;ISR_TMR0
; Tratamiento de Interrupcion
; bcf INTCON,T0IF ; Limpiamos bandera
; goto Fin_ISR
;.......................
ISR_RB0
; Tratamiento de Interrupcion
btfsc PORTB,0
goto ISR_RB0
btfss PORTB,1
goto Fin_ISR
movlw b'00000011'
movwf PORTA
call demora
movlw b'00000101'
movwf PORTA
call demora
movlw b'00000000'
movwf PORTA
bcf INTCON,INTF ; Borramos bandera
goto Fin_ISR
;.......................

;=========================
; ***** Subrutinas *****
;=========================
demora
movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.

end

Haber quien es primero que ve una pequeña cagadita en el código, que se ha convertido en una pijada muy chula.....

navegante 420
11/04/2010, 14:34
Emular funcionamiento de los faros daylight de audi

Este proyecto nacio cuando un buen día me dio por comprar unas ópticas nuevas para mi viejo leon, las cuales levan la luz de posición mediante una tira de leds.

https://anterior.webcampista.com/foro/attachment.php?attachmentid=27924&stc=1&d=1270985399

Estos leds plcc2 de luminosidad media, se nos ocurrio cambiarlos por unos plcc4 de alta luminosidad y programarlo para que emularan el funcionamiento de los actuales audis.

Con motor encendido, Leds a maxima luminosidad
con posición encendido, Leds bajan de intensidad
Si se pone cualquier intermitente, Los leds de ese faro, bajan de intensidad.

Inicialmente realize este proyecto con puertas lógicas, pero la necesidad de tres integrados por faro y la imposibilidad de realizar retardos, me llevo, encuanto pude a programar un PIC.

Actualmente el programa funciona mediante interupciones, y carga los resultados mediante tablas.

; ========================
; ***** Encabezado *****
; ========================

list p=16F84A ; Microcontrolador utilizado.-
#include P16F84A.inc ; Definicion de registros SFR.-
__CONFIG _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF

; =====================================
; ***** Definicion de Variables *****
; =====================================

CBLOCK 0x0C ; En esta posicion se declaran los registros de usuario (GPR)
STATUS_Temp ; Registro para guardar temporalmete STATUS
W_Temp ; Registro para guardar temporalmete W
PDel0
PDel1
PDel2
INTERMEDIO
ENDC
#define motor PORTB,4
#define posicion PORTB,7
; =========================================
; ***** Inicio del Microcontrolador *****
; =========================================

Reset
org 0x00
goto Inicio ; Salto a inicio del programa.-

; ====================================
; ***** Vector de Interrupcion *****
; ====================================

org 0x04
goto Inicio_ISR ; Atiendo Interrupcion.-

; ================================
; ***** Programa principal *****
; ================================
org 0x05
Inicio

; =============================
; ----- Configuraciones -----
; =============================

bsf STATUS,RP0 ; Banco 1.-
movlw 0xE0
movwf TRISA ;sssss
movlw 0xF1
movwf TRISB ;eeeessse
movlw 0xDF
movwf OPTION_REG ; Pull-Up deshabiltado, , Timer0|interno, 1:1
bsf OPTION_REG,INTEDG ; Interrupcion RB0 por flanco ascendente
bcf STATUS,RP0 ; Banco 0.-
bcf INTCON,INTF ; Limpiamos bandera
bsf INTCON,INTE ; Habilitamos interrupcion RB0
movf PORTB,1 ;Lectura/Escritura del puerto
bcf INTCON,RBIF ; Limpiamos bandera
bsf INTCON,RBIE ; Habilitamos Interrupcion por RB4-RB7
bsf INTCON,GIE ; Habilitacion general de interrupciones


;AQUI CODIGO DE USUARIO
movlw 0x03
movwf PORTA
sueño
SLEEP
goto sueño



; ================================================
; ***** Rutina de servicio de Interrupcion *****
; ================================================

Inicio_ISR

; =============================================
; ----- Guardado de registro W y STATUS -----
; =============================================

movwf W_Temp ; Copiamos W a un registro Temporario
swapf STATUS,W ; Invertimos nibles de STATUS
movwf STATUS_Temp ; Guardamos STATUS en un registro temporal

; ============================
; ----- Interrupciones -----
; ============================

btfsc INTCON,INTF ; Interrupcion por RB0?
goto ISR_RB0 ; Si, se trata interrupcion

;.............................

btfsc INTCON,RBIF ; Interrupcion por RB4-RB7?
goto ISR_RB4_RB7 ; Si, se trata interrupcion

;.............................

Fin_ISR

; ===================================================
; ----- Restauramos los valores de W y STATUS -----
; ===================================================

swapf STATUS_Temp,W
movwf STATUS
swapf W_Temp,f
swapf W_Temp,W
retfie

;.......................

ISR_RB0

; Tratamiento de Interrupcion

btfsc PORTB,0 ;Mira si hemos soltado el mando
goto ISR_RB0 ;como lo lo hemos hecho, vuelve a comprobarlo hasta que lo soltemos
btfss posicion ;comprueba si tenemos las luces de posición encendidas
goto fin1 ;como no las tenemos encendidas no hacen nada
bsf PORTA,4 ;Activa rele lavafaros
call demora ;demora de un segundo.
bcf PORTA,4 ;Desactiva rele lavafaros
fin1
bcf INTCON,INTF ; Borramos bandera
goto Fin_ISR

;.......................

ISR_RB4_RB7

; Tratamiento de Interrupcion

btfss motor ;compruba como se ha quedado rb4 despues de la interrupción.
goto apagar ;como esta a 0 eso es que hemos quitado la llave del claustador. Así que lo apagamos todo
movf PORTB,W ;guardamos las entradasn en W
andlw b'11100000' ;Realizamos la multiplicación lógica para quedarnos con los 3 bits que necesitamos.
movwf INTERMEDIO ;Realizamos movimientos para que los tres bit que nos interesa esten en los tres de menos peso
swapf INTERMEDIO,F
bcf STATUS,C
rrf INTERMEDIO,0
call tablaverdad ;llamamos a la tabla para ver que ha pasado y que salida tenemos que activar.
movwf PORTA

fin2
movf PORTB,f ; Lectura/escritura del Puerto
bcf INTCON,RBIF ; Borramos bandera
goto Fin_ISR
apagar
movlw b'00000000'
movwf PORTA
goto fin2
;.......................

; ========================
; ***** Subrutinas *****
; ========================

demora
movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.

tablaverdad
addwf PCL,F
retlw b'00000011'
retlw b'00000110'
retlw b'00001001'
retlw b'00001100'
retlw b'00001100'
retlw b'00001100'
retlw b'00001100'
retlw b'00001100'

end

Y este el esquema en proteus.

https://anterior.webcampista.com/foro/attachment.php?attachmentid=27925&stc=1&d=1270985634

Ahora bien, el las salidas que me recomendais que ponga??? teóricamente habia pensado harcelo mediante reles y transistores como interuptores, pero se os ocurre algo más económico y fácil?????

Muchas gracias

Dedalo
11/04/2010, 22:47
Para la salida pon integrados ULN2803 que pueden excitar reles o MOSFET de potencia. Para dar corriente a los LEDS, si utilizas transitores MOSFET en lugar de reles, puedes utilizar tecnologia PWM para variar el brillo.

navegante 420
13/04/2010, 09:27
Para la salida pon integrados ULN2803 que pueden excitar reles o MOSFET de potencia.

Del integrado este ya habiamos hablado en otra ocasión pero.... como lo conecto?????

La patilla 9 lo tengo claro, pero el resto........

en la 10 que va?

de la 1 a la 8 supongo que serán las salidas del pic y del 11 al 18 los reles.

De los MOSFET, lo único que me han eseñado de ellos es que son transistores, pero poco más.....



Para dar corriente a los LEDS, si utilizas transitores MOSFET en lugar de reles, puedes utilizar tecnologia PWM para variar el brillo.


En cuanto a esto, apesar de parecerme super interesante lo poco que he entendido, me he quedado igual. Ande puedo recurrir para obtener algo más de info??? lo digo por no estar machacandote a preguntas siempre......





Entre que esto me gusta, que mi tutor y mi compi me están dando la vara, y lo que hablo con vosotros......... dentro de dos años me veo en la uni.......

Aunolose
13/04/2010, 16:18
Primero mira lo que consumen los LED's con la luminosidad que quieres, nosotros trabajamos con unos que admiten 1A... se calientan un web y parte del otro, son de 3 a 5W en un espacio muy pequeño.

Si pones series de 3 (para la tensión) y una resistencia adecuada, hasta 500mA te sirve una pata del ULN2803, si juntas dos patas, 1A, creo que con 500mA por Led tendrás suficiente, si son como los que digo (quizá no lo sean) y no están debidamente refrigerados, se estropean enseguida, haz pruebas. Estos Leds que hablo pueden costar desde 6 a 18 Euros cada uno, si no cuestan eso, probablemente no hablemos de lo mismo...

Los MOSFET son transistores pero su uso más potente es cuando se usan como interruptores todo/nada, pues su resistencia en corto es muy, muy baja (los hay de 0.03 ohmios) eso hace que aunque pasen 5A, (ó 10A, ó 40A) no se calienten, pues 0.03 x 5 son 0.15 W, eso es la teoría, en la practica, y sobre todo si los haces funcionar en PWM, en el instante de cambio (de abierto a cerrado) la resistencia ya no es 0.03, y se calientan. También los hay peores y más baratos con Ron de 0.4 ohmios, pero para circuitos así, con uno o dos transistores, por 3 euros tienes uno "de los buenos", frente a 50 ctm de uno de los malos.
Ojo con conectar directamente los Leds a la batería, o con una resistencia no adecuada, polarizados en directo actúan como un zener de 3.3V-3.5V, si le metes más tensión la corriente crece exponencialmente y... a tomar viento... esto pasa con todos los LED's, caros o baratos...

Aunolose
13/04/2010, 16:22
Ah, muy importante, para que los MOSFET se cierren del todo, hay que aplicarle en la puerta 10V, si solo les metes 5V del PIC, no se cierran del todo, y la resistencia sube, dependiendo de la corriente, no es critico, pero si es importante, o se trata de motores, conviene tener en cuenta este detalle.

navegante 420
14/04/2010, 00:45
Los leds que voy a usar son plcc4 de alta luminosidad, 8 por faro con su resitencia conectados en paralelo,

navegante 420
14/04/2010, 01:02
El esquema de los leds del faro seria algo así

https://anterior.webcampista.com/foro/attachment.php?attachmentid=28080&stc=1&d=1271196114

Aunolose
14/04/2010, 15:51
Para hacerlo así yo usaría un MOSFET, se controlan prácticamente igual que un relé.
Preguntas:
¿el faro ya lo tienes o tienes que construirlo tu? si ya lo tienes hecho, solo tendrás que buscar la alimentación del faro y olvidarte de las R, creo yo, salvo que lo indique en alguna parte...
¿sabes la corriente que soportan los leds? tal y como lo has puesto, con solo 33 ohmios a 12V, deben estar preparados, o bien para mucha corriente, o bien para soportar cada uno los 12V, con estos últimos no he trabajado, así que no sé la corriente que soportan.

¿por que 2 relés? Por cierto, con el relé no puedes hacer lo del contraste con el intermitente, aunque no sé si es prioritario.

Dedalo
14/04/2010, 17:50
Para hacerlo así yo usaría un MOSFET, se controlan prácticamente igual que un relé.
Preguntas:
¿el faro ya lo tienes o tienes que construirlo tu? si ya lo tienes hecho, solo tendrás que buscar la alimentación del faro y olvidarte de las R, creo yo, salvo que lo indique en alguna parte...
¿sabes la corriente que soportan los leds? tal y como lo has puesto, con solo 33 ohmios a 12V, deben estar preparados, o bien para mucha corriente, o bien para soportar cada uno los 12V, con estos últimos no he trabajado, así que no sé la corriente que soportan.

¿por que 2 relés? Por cierto, con el relé no puedes hacer lo del contraste con el intermitente, aunque no sé si es prioritario.

Segun el esquema, uno de los reles conecta los LEDS a 12V y el otro rele los conecta a 9V, asi se hace la variacion de brillo.

Si pones un MOSFET puedes encender los leds el 100% del tiempo o solo un 50% cortando la corriente cada mS, asi consigues la variacion de brillo sin tener que poner ningun regulador de voltaje a 9 V.

Si los leds van a masa tienes que poner un MOSFET de canal P, y son mas caros y mas raros de encontrar que los de canal N. Yo pondria los leds conactados a positivo y cerraria circuito a masa a traves de un MOSFET de canal N.

Si pones en la puerta del MOSFET una resistencia de 100K a positivo tendras los leds encendidos, y si conectas una salida del ULN2803 tambien a la puerta apagas los LEDS derivando a masa la resistencia de 100K.

Si el PIC no tiene PWM (como es el caso del PIC16F84) puedes simularlo programando una interrupcion de tiempo de un periodo de 1 mS. En las interrupciones pares enciendes el LED si tiene que estar encendido, en las impares lo apagas si el LED debe estar a medio brillo. De esa forma, si debe estar apagado nunca se enciende, si debe estar a medio brillo solo recibira corriente la mitad de los ciclos, y si debe estar a todo brillo recibira corriente permanentemente.

Aunolose
14/04/2010, 18:45
Segun el esquema, uno de los reles conecta los LEDS a 12V y el otro rele los conecta a 9V, asi se hace la variacion de brillo.

Si pones un MOSFET puedes encender los leds el 100% del tiempo o solo un 50% cortando la corriente cada mS, asi consigues la variacion de brillo sin tener que poner ningun regulador de voltaje a 9 V.

Si los leds van a masa tienes que poner un MOSFET de canal P, y son mas caros y mas raros de encontrar que los de canal N. Yo pondria los leds conactados a positivo y cerraria circuito a masa a traves de un MOSFET de canal N.

Si pones en la puerta del MOSFET una resistencia de 100K a positivo tendras los leds encendidos, y si conectas una salida del ULN2803 tambien a la puerta apagas los LEDS derivando a masa la resistencia de 100K.

Si el PIC no tiene PWM (como es el caso del PIC16F84) puedes simularlo programando una interrupcion de tiempo de un periodo de 1 mS. En las interrupciones pares enciendes el LED si tiene que estar encendido, en las impares lo apagas si el LED debe estar a medio brillo. De esa forma, si debe estar apagado nunca se enciende, si debe estar a medio brillo solo recibira corriente la mitad de los ciclos, y si debe estar a todo brillo recibira corriente permanentemente.

Es que con esa letra no veía lo de los 9V... :oops:

Lo que dices de los MOSFET P es cierto, pero ahora no son tan difíciles de encontrar, ni tan caros, pensando que solo compramos uno, aunque tienen peor comportamiento (más resistencia en cerrado), eso si.

Luego comento algo, que ahora me tengo que ir.

Aunolose
14/04/2010, 19:46
He vuelto.

Lo de la resistencia, mejor de 1K, porque así la subida es más abrupta, eso le quita disipación al transistor, suponiendo que lo hagas con PWM, si es siempre encendido, o siempre apagado, "la que pongas" vale.

Lo bueno de este método que dice Dedalo es que "conviertes" los 5V del PIC en 12V en la resistencia, que son mejores para cerrar el transistor por completo

Algunos transistores MOSFET P

Your Search Results | Farnell España (http://es.farnell.com/jsp/search/browse.jsp?N=500001+1005366+157894+5324435+5324438+5324457+157865+157866+157893&Ns=PRICE_PLS_016_PRICE1|0&Ntk=gensearch_001&Ntt=canal+p&Ntx=mode+matchallpartial&locale=es_ES&appliedparametrics=true&getResults=trueó
riginalQueryURL=/jsp/search/browse.jsp%3FN%3D500001%2B1005366%26Ntk%3Dgensearch_001%26Ntt%3Dcanal%2Bp%26Ntx%3Dmode%2Bmatchallpartial%26No%3D0%26getResults%3Dtrue%26appliedparametrics%3Dtrue%26locale%3Des_ES%26catalogId%3D%26prevNValues%3D500001%2B1005366)

De todas maneras yo me iría a la tienda de componentes y le pediría con humildad "¿que MOSFET de canal P tienes?" y, como siempre tienen por lo menos uno, pues miraría si me vale, por corriente y demás.

L

navegante 420
15/04/2010, 01:17
Puffff!!!!!, madre mia......... estoy más perdido que una chiva en un garaje......


Cada día tengo más claro que tengo que acabar apuntandome en la uni, si quiero seguiros..........


Vamos por partes, lo del PWM, eso que es???? es un regulador del pic para por controlar la velocidad, intensidad, al 100%, 75%, etc desdel pic?????, si es eso me suena haber leido algo en el manual del pic que se podia programar. pero si consigo programarlo.... como deberia conectarlo?????



El tema de los mosfet, si alguien puede cojer el workwenk, layaut, eagle, o algo similar para ponerme un esquemita, por que por texto no me acabo de enterar....

Dedalo
15/04/2010, 09:17
PWM es el acronimo de Pulse Width Modulation. Regulando la anchura del pulso regulas la energia que le llega a la carga, pero en lugar de regular el voltaje lo que regulas es el tiempo efectivo que le esta llegando energia.


Un ejemplo:

Si alimentas un LED con 12V CC tienes el brillo 100%

Si alimentas un LED con pulsos de 250 uS repetidos cada mS, le llega energia solo un 25% del tiempo, por lo que su brillo será del 25%

Si alimentas ese mismo LED con pulsos de 750 uS repetidos cada mS le estas dando un 75% de la energia que le darias si fuese CC, por lo que brilla al 75%

Si lo alimentas con onda cuadrada de 1 Khz de frecuencia, le das pulsos de 500 uS repetidos cada mS, y por lo tanto le llega corriente el 50% del tiempo.

Hay PIC's que lo tienen ya implementado, tu llenas un registro con un valor y el se encarga de generar los pulsos, pero el 16F84 no tiene generador PWM, por lo que tu tienes que fabricar los pulsos de la anchura adecuada por programa.

Un ejemplo de circuito con MOSFET:
28147

La diferencia fundamental es que uno de ellos alimenta por positivo y el otro alimenta por negativo, pero hay otro efecto mas. Si pones el de canal N, para alimentar los leds tienes que poner 12V en la puerta para activarlo, por lo que se enciende con un 0 en la salida del PIC. Con el MOSFET de canal P hay que poner 0V en la puerta para activarlo, Eso quiere decir que se encienden con un 1 en la salida del PIC

Aunolose
15/04/2010, 17:16
No seré yo el que te desanime para entrar en la uni, pero todavía estamos en lo divertido, y mientras te guste, aprenderás.

Ah. ayer no lo dije, el motivo de usar el de canal P frente al N es que lo normal en los coches es que el negativo esté a masa, para poner el de canal N, debes aislar los leds del negativo e "insertar" en medio el transistor, según como sea el faro, no es difícil, pero si es puñetero, puede serlo.

Aunolose
15/04/2010, 17:17
¿Ya sabes si los Led's son de 12V?

navegante 420
15/04/2010, 23:14
PWM es el acronimo de Pulse Width Modulation. Regulando la anchura del pulso regulas la energia que le llega a la carga, pero en lugar de regular el voltaje lo que regulas es el tiempo efectivo que le esta llegando energia.


Un ejemplo:

Si alimentas un LED con 12V CC tienes el brillo 100%

Si alimentas un LED con pulsos de 250 uS repetidos cada mS, le llega energia solo un 25% del tiempo, por lo que su brillo será del 25%

Si alimentas ese mismo LED con pulsos de 750 uS repetidos cada mS le estas dando un 75% de la energia que le darias si fuese CC, por lo que brilla al 75%

Si lo alimentas con onda cuadrada de 1 Khz de frecuencia, le das pulsos de 500 uS repetidos cada mS, y por lo tanto le llega corriente el 50% del tiempo.

Hay PIC's que lo tienen ya implementado, tu llenas un registro con un valor y el se encarga de generar los pulsos, pero el 16F84 no tiene generador PWM, por lo que tu tienes que fabricar los pulsos de la anchura adecuada por programa.

Un ejemplo de circuito con MOSFET:
28147

La diferencia fundamental es que uno de ellos alimenta por positivo y el otro alimenta por negativo, pero hay otro efecto mas. Si pones el de canal N, para alimentar los leds tienes que poner 12V en la puerta para activarlo, por lo que se enciende con un 0 en la salida del PIC. Con el MOSFET de canal P hay que poner 0V en la puerta para activarlo, Eso quiere decir que se encienden con un 1 en la salida del PIC


Me gusta mucho el tema de los pulsos......

Voy a mirarme el manual, haber si soy capaz de hacerlo........


Iros preparando que en cuanto acabe con esto y la insoladora nos pondremos con la centralita de la caravana y me gustaria complicarme un poco más la vida y usar un pic mas potente.....

navegante 420
15/04/2010, 23:17
¿Ya sabes si los Led's son de 12V?

Los leds ahora mismo estan conectados a 13,8 V obiamente llevan sus resistencias.....


Hoy me ha comentado mi vecino que tiene un juego de faros para el leon y me los dejara para poder sacarlos y estudiarlos con detenimiento y hacer las prubas pertinentes....

navegante 420
14/06/2010, 23:04
Sus vais a reir de mi pero no soy capaz de que me funcione un esquema tan sencillito como este.


https://anterior.webcampista.com/foro/attachment.php?attachmentid=30355&stc=1&d=1276545796

Comentar que los leds son de alta luninosidad. que es lo que he hecho mal?????

Aunolose
15/06/2010, 12:16
Sus vais a reir de mi pero no soy capaz de que me funcione un esquema tan sencillito como este.


https://anterior.webcampista.com/foro/attachment.php?attachmentid=30355&stc=1&d=1276545796

Comentar que los leds son de alta luninosidad. que es lo que he hecho mal?????


Uno de los primeros errores típicos de los pic es configurar mal el reloj, por ejemplo en la figura no pones cristal ¿lo has configurado como interno?, si lo has hecho, ¿la frecuencia es la correcta?
Otro error es el reset, también falta la resistencia a Vcc, ¿has configurado el PIC para que no sea necesaria?

Y luego el poner los pines a masa, es algo que no me gusta hacer en la placa real, salvo que sea necesario, pues después en el futuro no los puedes aprovechar, pero sobre todo porque un error de programación donde mandas un uno a esos puertos hace que hagas un corto y se reinicie el circuito, o se queme, que es peor...

Menos probable es que tengas configurado el puerto B como entrada, fallarían todos, o como alguna función especial que tenga, en ese caso solo fallarían los de esa función.

Dedalo
15/06/2010, 12:41
Mas causas de fallos pueden ser por ejemplo:

A) El puerto B del 16F84 es de colector abierto, aunque lleva unas resistencias internas de Pull-Up que hay que activar por software. Eso se hace en el bit RBPU del registro OPTION. Creo que es el bit 7. SI fuese eso, los leds te funcionarian conectados a positivo, pero no te funcionarian puestos a masa.

B) que la cargabilidad de salida del PIC16F84 no de bastante corriente para que se iluminen los leds, segun creo son unos 3 mA en estado alto y 8,5 en estado bajo. Tu utilizas la configuracion mas desfavorable, que es utilizar la corriente en estado alto.

Aunolose
15/06/2010, 16:30
¿en ese pic también está la opción de las resistencias pull up?

Creo que son de varios "kas", entonces los led se encenderían pero poco.

Aunolose
15/06/2010, 16:44
He estado mirando y creo que la resistencia de pull up solo está disponible en modo entrada, para la salida es TTL normal.

Fijaros lo que pone en el datasheet del puerto B
http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/30394d1276609422-mis-primeros-proyectos-en-asm-para-el-16f84-puertob-jpg

http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/30395d1276609431-mis-primeros-proyectos-en-asm-para-el-16f84-puertob2-jpg

En comparación con el puerto A4, que si es colector abierto para la salida.

http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/30397d1276609446-mis-primeros-proyectos-en-asm-para-el-16f84-puertoa42-jpg

http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/30396d1276609439-mis-primeros-proyectos-en-asm-para-el-16f84-puertoa4-jpg


http://ww1.microchip.com/downloads/en/DeviceDoc/30430c.pdf

navegante 420
16/06/2010, 11:50
Me he quedado casi igual......

1º en proteus me funcina el programa prefectamente.

2º en programa lo he probado en una entrenadora original de microchip y funciona.

3º Al ponerlo en protoboard, con los leds de alta luninosidad es cuando empieza ha hacer el tonto

- RA y reset al aire, se encienden 2 leds

- RA y reset conectados a masa, se enciende 1 led o ninguno.

Si estas dos pruebas no afectan, lo único que se me ocurre es el tema da la cargabilidad, no???

Aunolose
16/06/2010, 17:27
Me he quedado casi igual......

1º en proteus me funcina el programa prefectamente.

2º en programa lo he probado en una entrenadora original de microchip y funciona.

3º Al ponerlo en protoboard, con los leds de alta luninosidad es cuando empieza ha hacer el tonto

- RA y reset al aire, se encienden 2 leds

- RA y reset conectados a masa, se enciende 1 led o ninguno.

Si estas dos pruebas no afectan, lo único que se me ocurre es el tema da la cargabilidad, no???


-En simulación todo el hardware funciona, no vale,
-La entrenadora tiene bien el reset, y el hardware, tampoco vale,
-Si cambia de cuando está de una manera a otra, mira lo del reset, no tiene que estar a masa, sino a positivo mejor a través de una resistencia de 1k, por ejemplo.
-Si estas en protoboard revisa bien las conexiones que cuando tienen un tiempo fallan más que una escopeta de feria... ¿está bien conectado el oscilador?

Cada pata soporta mínimo 20mA, no creo que sea la cargabilidad, más cuando dos leds se encienden sin problemas.

http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/30451d1276698429-mis-primeros-proyectos-en-asm-para-el-16f84-corrientef84-jpg


Sigue los pasos que te decimos, el reset, la configuración del oscilador... etc.

navegante 420
21/06/2010, 22:15
Pues na... que me estoy volviendo loco, y seguro que es una chorrada de nada.......

Para eliminar los herrores que me comentavais, he montada lo entrenadora, he comprobado las continuidades, y na que sigue sin ir...... pero por mis vemoles que lo hago andar.....


https://anterior.webcampista.com/foro/attachment.php?attachmentid=30580&stc=1&d=1277147687

Aunolose
22/06/2010, 16:28
¿esta conectada la masa del entrenador a la protoboard?

Tal y como están colocados los leds hace falta hacer un puente de uno a uno, para la masa,
¿que tal si pruebas otra zona de la board y colocas todos los anodos de los leds a una de las tiras externas?, así ya tienes colocada la masa (recuerda que debes conectarla a la de el entrenador)

También puedes empezar por un programa más sencillo que solo encienda y apague uno de ellos.

¿has colocado bien el TRISB? es el registro que le dice al PIC que pines son de salida y cuales de entrada, si no le dices nada, quedan como entrada y no funcionará.

navegante 420
01/07/2010, 10:14
Al final he decidio hacer esto con el faro daylight, Ya que sustituyo 4 transistores y 4 reles por dor transistores mosfet, y quiero tenerlo acabado antes del 19 de julio que me toca pasar la ITV y quiero hacelo con estos faros modificados, haber que pasa.


PWM es el acronimo de Pulse Width Modulation. Regulando la anchura del pulso regulas la energia que le llega a la carga, pero en lugar de regular el voltaje lo que regulas es el tiempo efectivo que le esta llegando energia.


Un ejemplo:

Si alimentas un LED con 12V CC tienes el brillo 100%

Si alimentas un LED con pulsos de 250 uS repetidos cada mS, le llega energia solo un 25% del tiempo, por lo que su brillo será del 25%

Si alimentas ese mismo LED con pulsos de 750 uS repetidos cada mS le estas dando un 75% de la energia que le darias si fuese CC, por lo que brilla al 75%

Si lo alimentas con onda cuadrada de 1 Khz de frecuencia, le das pulsos de 500 uS repetidos cada mS, y por lo tanto le llega corriente el 50% del tiempo.

Hay PIC's que lo tienen ya implementado, tu llenas un registro con un valor y el se encarga de generar los pulsos, pero el 16F84 no tiene generador PWM, por lo que tu tienes que fabricar los pulsos de la anchura adecuada por programa.

Un ejemplo de circuito con MOSFET:
28147

La diferencia fundamental es que uno de ellos alimenta por positivo y el otro alimenta por negativo, pero hay otro efecto mas. Si pones el de canal N, para alimentar los leds tienes que poner 12V en la puerta para activarlo, por lo que se enciende con un 0 en la salida del PIC. Con el MOSFET de canal P hay que poner 0V en la puerta para activarlo, Eso quiere decir que se encienden con un 1 en la salida del PIC

Pero tengo un par de dudas.

1.- Al trabajar por pulsos, no tendriamos que trabajar con el positivo y poner un filtro en C para estabilizar el pulso para evitar pequeños parpadeos del led?

2.- Al funcionar el programa por interrupciones, cuando entrar una inetrupción, una vez detectado cual a sido, puedo habilitar la entrada de nuevas y quedarme allí a la espera de una nueva interrupción???? Si no es así que diagrama de flujo me sugeriis para solucionar la programación.

gracias.

Aunolose
01/07/2010, 17:57
No hace falta filtro, si la frecuencia es suficientemente alta, el ojo y la persistencia del led lo filtran y no te enteras, así se hace de siempre con la tele... (bueno con la tele en tubo de rayos catódicos, TRC) para que te hagas una idea esta frecuencia "alta" de la tele son 50 hercios...

Lo normal en las interrupciones es tratarla, activarla de nuevo e inmediatamente después salir al bucle principal, por eso se llaman interrupciones, si "te quedas" en la interrupción no las estás usando "bien", y seguramente desbordes la pila, y el programa se ralle...

El uso "normal" de las interrupciones es el que sigue.
En el bucle del programa principal se ejecutan las instrucciones "normales", cuando sucede una interrupción, se guarda en la pila la dirección actual (en una "pila") y se salta a la rutina de interrupción, que está en otro sitio, cuando se acaba, se recupera (y borra de la "pila") la dirección guardada y se continua con el programa "normal".

Si dentro de la rutina de interrupción recibes otra interrupción y le haces caso, vuelves a guardar la dirección en la pila, esto pasará tantas veces como lo permitas, llegando un momento en que la pila se desborda.

Como puedes suponer, "pila" aquí no es "batería", si no una pila de direcciones, similar a una pila de platos, se llama así porque tienes que sacar la primera dirección (plato) guardada para poder llegar a la siguiente. Y en cualequie momento solo puedes sacar la primera, ninguna más.


http://upload.wikimedia.org/wikipedia/commons/1/17/Pila_de_datos.jpg

Cuando se trata de interrupciones esto lo hace el solo, al interrumpir "apila" y al salir de la interrupción "desapila".



Ahora no recuerdo lo del faro, ¿estaba en otro hilo?

Aunolose
01/07/2010, 18:51
Joe, si este mismo :oops:

navegante 420
02/07/2010, 11:33
Lo normal en las interrupciones es tratarla, activarla de nuevo e inmediatamente después salir al bucle principal, por eso se llaman interrupciones, si "te quedas" en la interrupción no las estás usando "bien", y seguramente desbordes la pila, y el programa se ralle...




Cierto Oscar, no habia caido en el tema de la pila......

Pues si que estoy espeso, pues no se como programarlo.... quien me ha visto y quien me ve.....

Aunolose
02/07/2010, 17:12
Vale, me he releido el tema, quieres hacer un PWM con un PIC que no lo tiene. ok.

Para esta aplicación puede hacerse sin interrupciones, aquí va un ejemplo.
http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/30884d1278079934-mis-primeros-proyectos-en-asm-para-el-16f84-codigofrenoposicion-jpg

Aunolose
02/07/2010, 17:29
Ahora con interrupciones.
Lo tengo hecho para controlar precisamente un tira de LED's de potencia, de los de 3W cada uno...

Primero hay que entender como se hace, uso dos temporizadores TM0 y TM1.
Con el temporizador 0 marco el final del ciclo, cuando interrumpe por desbordamiento:
-si el led debe estar apagado (duty=0) no hago nada y me voy, activando las interrupciones, claro
-si el led no debe estar apagado, (en mi aplicación el led se debe controlar linealmente de 0 a tope) pongo a uno la pata del transistor (en mi caso es Canal N) el led se enciente
-muy importante, activo el otro temporizador, para que empiece a contar, marcará el final del duty.
-activo las interrupciones y me voy.

Este primer contador va a piñon, tiene una cuenta determinada, como el valor exacto de la frecuencia no es crítico, el solo se recarga y me ahorro calculos y tiempo, nunca se para.

El segundo temporizador solo empieza a contar cuando se activa en la interrupción del primero, y la cuenta es el valor de duty, este valor debe ser menor que el ciclo del otro, para que sirva de algo, si es igual o superior, no funcionará bien.
Cuando interrumpe este temporizador, hago varias cosas:
-si el led tiene que estar a tope, activo las interrupciones y me voy
-si el led no está a tope, pongo a cero la pata del transistor, el led se apaga (recordad que en mi caso es un transistor N y que se debe controlar según un valor variable)
-recargo el contador a la cuenta correspondiente, en mi caso es variable, pero para esta aplicación podría ser fija.
-Paro el contador, empezará a contar cuando lo diga el otro.
-activo las interrupciones y me voy.





No encuentro el código, lo buscaré porque tiene que estar en alguna parte (es del otro trabajo, y no lo tengo a mano...)

Aunolose
02/07/2010, 17:30
No he puesto el código escrito del otro, a ver como queda...



#define pedalfreno PORTAbits.RA3 //entrada pedal freno,
// a través de una resistencia para limtar la corriente, viene de 12V
// mejor si también se añade un zener de 5V1

unsigned char cont= 0; //tendrá el valor duty de PWM (de 0a 255)

#define salidaPWM PORTBbits.RB3 // controla la pata del transistor MOSFET,
// uede ser necesario una resistencia a +12V si es canal N
// o algo más si es canal P

#define valorposicion 128
// de este valor dependerá la luminosidad cuando no esté pisado el freno
// 128 es la mitad de 256, si el led fuera lineal, se iluminaría la mitad.
// este valor habrá que calcularlo a ojimetro, para que ilumine como "posición"
// teniendo en cuenta que, por ejemplo
// 25% = 64
// 50% = 128
// 75% = 192
// 100% = 255

void main()
{

TRISABits.TRISA3= 1; // pedal de freno, como entrada
TRISBbits.TRISB3= 0; // salida de PWM al transistor

while (1) // bucle infinito
{
if (!pedalfreno)
{
cont= 0; // esto hace que se ilumine a tope,
//porque no alcanza nunca el valor asignado a valor posición
}
else
{
cont++; // incremento contador pwm,
// notar que el solo se pone a cero cuando desborda
}
if (cont> valorposicion) // si el valor de cont supera el valor de luminosidad
{ // calculado para la luz de posición
salidaPWM= 0;
}
else
{
salidaPWM= 1;
}
} // del while
} // del main

Aunolose
07/07/2010, 18:23
Aquí tengo el código con interrupciones:




/* Para utilizar con compilador CCS y el pic16F873A */
#include <16f876.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT
#use delay(clock=20000000,restart_wdt)


#define pedalfreno PIN_C7 //entrada pedal freno,
// a través de una resistencia para limtar la corriente, viene de 12V
// mejor si también se añade un zener de 5V1
#define PWM3 PIN_B5 // controla la pata del transistor MOSFET,
// puede ser necesario una resistencia a +12V si es canal N
// o algo más si es canal P

unsigned long duty3, dutyPWM3; // como la interrupción puede venir en culquier momento,
// y el temporizador son 2 bytes, quizá pille a medias el cambio,
// por eso es necesario usar dos variables para lo mismo, una solo se usa para la interrupción
// la otra es la que gastamos "normal"
#define valorposicion 0x200
// de este valor dependerá la luminosidad cuando no esté pisado el freno
// 0x200 es la mitad de 0x3FF, si el led fuera lineal, se iluminaría la mitad.
// este valor habrá que calcularlo a ojimetro, para que ilumine como "posición"
// teniendo en cuenta que, por ejemplo
// 25% = 0x100
// 50% = 0x200
// 75% = 0x300
// 100% = 0x3FF ó más


#INT_TIMER0 // esta directiva le dice al compilador que se trata de la función que se debe ejecutar cuando
void overflowTM0(void) // interrumpa el timer0, es el que marca la frecuencia PWM
{
if (duty3!= 0) // si está a cero, nada
{
output_high(PWM3); // si tiene algún valor, activo la salida y empiezo a contar el duty
set_timer1(dutyPWM3); // el duty lo fijo aquí
ArrancaTimer1(); // y el timer (empiezo a contar) aquí
BorraIRQT1(); // por si se ha metido una interrupción mientras estamos aquí, la borro
enable_interrupts(INT_TIMER1); // para que no interrumpa y gaste tiempo, la paramos cada vez,
} // hay que ponerla en marcha otra ves, rendundante, pues al parar el timer no interrumpirá
} // al salir de la interrupción, el propio compilador borra el flag correspondiente.

#INT_TIMER1 // lo mismo que antes, en esta ocasión para el timer1, que marca el duty
void overflowTM1(void)
{
if (duty3<=0x3FF) // en realidad no es necesario, por un truco que explico después,
{ // pero si está a tope, no hay que tocar nada
output_low(PWM3); // lo pongo a cero, se acabo el duty
disable_interrupts(INT_TIMER1); // desactivo la interrupcion del timer, a la espera de un nuevo valor.
ParaTimer1(); // y lo paro, redundante.
}
} // al salir de la interrupción, el flag correspondiente se borra solo.

// estas funciones se pueden hacer también con ordenes en C, pero para que se vea que el ensamblador se puede usar también.

void BorraIRQT1(void) // es una función muy simple, que borra el bit correspondiente al timer 1, en ensamblador
{
#asm
BCF 0xc, 0 ; Borro la interrupción del timer1
#endasm
}
void ParaTimer1(void) // en este caso, paro el timer1
{
#asm
BCF 0x10, 0 ; Paro el Timer1
#endasm
}
void ArrancaTimer1(void) // y aquí lo arranco
{
#asm
BSF 0x10, 0 ; Arranco el Timer1
#endasm
}


void set_pwm3_duty(unsigned long duty)
{
disable_interrupts(GLOBAL); // esto debe hacerse para que no cambie a medias, al ser dos bytes, no se puede hacer en una instrucción.
dutyPWM3= (0xFFF0)-(duty3); // como el timer cuenta hacía arriba, a más valor de duty3, mayor será la resta, y más tarde interrumpirá
enable_interrupts(GLOBAL); // esto es para que coincida que a más valor, más luz.
//Minimo Valor, 0xFFE0, que asegura que podrá volver antes de que se acabe la cuenta
}

void main (void)
{
output_low(PWM3);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); // Este controla el corte del PWM, 16 bits, con reloj interno
ParaTimer1(); // Para no activar la salida, será el timer 0 el que la active, si toca
duty3= 0x00; // empezamos a 0.
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32); // Este controla el inicio de la cuenta, salen unos 1000 hercios, aunque sea de 8 bits.
// nunca se para.
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while (1)
{
if (!pedalfreno)
{
duty3= 0x3FF; // esto hace que se ilumine a tope,
//porque no alcanza nunca el valor asignado a valor posición
}
else
{
duty3= valorposicion; // valor calculado para que se encienda más o menos a medias.
}
set_pwm3_duty(duty3);
}
// este bucle se puede mejorar bastante, no es necesario cambiar cada vez el valor de duty, se puede dejar "dormido"
// con los valores de "posición" y que se despierte cuando se pise el pedal de freno.
// he aprovechado mucho código de la otra aplicación, por eso está en otro compilador, y tiene nombres diferentes.

}

Aunolose
07/07/2010, 18:23
Joe, que mierda, se desbarata todo el sangrado :banghead:

navegante 420
09/07/2010, 00:51
Mañana me lo miro bien todo y haber si este finde liquiedo el tema....


Muchas gracias oscar por la ajuda y el tiempo.

Dedalo
10/07/2010, 16:26
La mejor forma de hacer la entradaal PIC desde el freno es un diodo y una resistencia. La resistencia va desde la patilla de entrada al positivo, pon una ed 10K. El diodo con el catodo hacia el pedal y el anodo hacia la entrada del PIC.

Cuando el freno esta suelto, en el borne del pedal hay 12V a traves de la bombilla de freno, el diodo queda polarizado inversamente y la resistencia de 10K pone un 1 logico en el pin del PIC.

Al pisar el freno la tension en el borne del pedal se hace cero, pues se pone a masa, y el diodo se polariza directamente, conduce y te deja en el pin del PIC un 0 logico.

navegante 420
13/07/2010, 09:57
La mejor forma de hacer la entradaal PIC desde el freno es un diodo y una resistencia. La resistencia va desde la patilla de entrada al positivo, pon una ed 10K. El diodo con el catodo hacia el pedal y el anodo hacia la entrada del PIC.

Cuando el freno esta suelto, en el borne del pedal hay 12V a traves de la bombilla de freno, el diodo queda polarizado inversamente y la resistencia de 10K pone un 1 logico en el pin del PIC.

Al pisar el freno la tension en el borne del pedal se hace cero, pues se pone a masa, y el diodo se polariza directamente, conduce y te deja en el pin del PIC un 0 logico.

O yo soy corto o estoy intentando aplicar esto a algo que no se puede, porque vosotros hablais del freno, pero claro yo no necesito el freno, sino posicion he intermitencia, y en vez de pinchar el coche, la idea es pinchar del mazo de cables que hay en mismo faro, Ademas mi coche ya va con ecu, con lo que en el pedal llevo un captador que va a 5v para dar las señales pertinentes a la ecu.

como dice la cancion "me estoy volviendo loco, poco a poco"

navegante 420
13/07/2010, 10:07
Joe, que mierda, se desbarata todo el sangrado :banghead:

Vaya diferencia, de leer el programa con o sin sangrados.....

ya tengo descifrado el programa un par de preguntas....

Primero y las mas importante, que programa usas para copilar en C???? Este es uno de los temas que tenia que trabajar este verano por mi cuenta, pues en clase de copilador en c para el pic nada y menos....

y como ya entenderas hay muchas de las intrucciones que son especificas del pic que no he entendido, pero mi duda es otra.

Si estamos en estado de PWM del 70% por ejemplo, y dejamos de pisar el freno como se entera??? como salta a PWM del 100%, porque mientras realiza esa operacion deja de mandar el pulso, y depende de como se haya quedado o te lo aunemta o telo disminuye, no???

Aunolose
13/07/2010, 18:56
El problema ha sido mío, entendí que querías compartir la luz de posición y frenos, y se trataba de "day ligth" es decir que la de posición de día va encendida "un poco" y de noche del todo

¿de que código estás hablando? ¿del de sin interrupciones o el que si las tiene?

Salvo que me haya equivocado, en ninguno de los dos la luz aumenta poco a poco, o se pone a tope, o se pone al 70%.

Lo detecta por la pata RA3 que en 16F876 y el 18F2550 es la ¿5? pero puede ser por cualquiera, cambiando el bit correspondiente.

El primer ejemplo usa el compilador MCC18, versión estudiantes, gratuito en microchip.com, y ahora que lo pienso, tal vez no sea compatible con el 16F876 :oops: el segundo usa el CCS (el PICC) este si es compatible con ese chip. está disponible "por ahí"... también es gratuito el HITEC, viene con el MPLAB, y también lo soporta.

navegante 420
13/07/2010, 22:35
Yo tengo por aqui el ccs 4.104 y si te he de ser sincero no he sido capaz de crear un solo proyecto... teneis por ahi en mano algun pequeño tutorial para crear proyectos????


Gracias....

navegante 420
14/07/2010, 00:27
El problema ha sido mío, entendí que querías compartir la luz de posición y frenos, y se trataba de "day ligth" es decir que la de posición de día va encendida "un poco" y de noche del todo




Y yo que pense que como buen profesor, me estabas montando un ejemplo parecido, para que yo me currase el programa que necesito...... por eso no te habia corregido antes.....


Haber lo que necesito.

Arranco motor Led al 100%
Enciendo posicion o intermitencia led a 70%

Obiamente por dos, que hay dos faros que controlar, jejejejeje

Aunolose
14/07/2010, 16:22
Y yo que pense que como buen profesor, me estabas montando un ejemplo parecido, para que yo me currase el programa que necesito...... por eso no te habia corregido antes.....


Haber lo que necesito.

Arranco motor Led al 100%
Enciendo posicion o intermitencia led a 70%

Obiamente por dos, que hay dos faros que controlar, jejejejeje


:oops: tenía que haberme callado :D

El principio del programa es el mismo, la entrada del pedal de freno se sustituye por la señal "intermitente" y "posición" pueden ser la misma pata si usas diodos o patas diferentes que hagan lo mismo (acuérdate de las resistencias limitadoras)

Y la salidas, si usas dos MOSFET, puedes usar la misma para los dos, si usas bipolares (los de toda la vida) mejor una salida para cada uno.

navegante 420
15/07/2010, 23:00
La mejor forma de hacer la entradaal PIC desde el freno es un diodo y una resistencia. La resistencia va desde la patilla de entrada al positivo, pon una ed 10K. El diodo con el catodo hacia el pedal y el anodo hacia la entrada del PIC.

Cuando el freno esta suelto, en el borne del pedal hay 12V a traves de la bombilla de freno, el diodo queda polarizado inversamente y la resistencia de 10K pone un 1 logico en el pin del PIC.

Al pisar el freno la tension en el borne del pedal se hace cero, pues se pone a masa, y el diodo se polariza directamente, conduce y te deja en el pin del PIC un 0 logico.

lo veis lo que yo decia, tengo que ir a la uni...

me podrias hacer un pequeño diagama del tema, es que llevo toda la tarde intentandolo hacer en proteus y no ha manera....

gracias...

navegante 420
15/07/2010, 23:48
Bueno quien me mandaria a mi complicarme la vida......

Volviendo al tema del faro.....

Ya los tengo abiertos, para cambiar los leds plcc2 que llevan por unos plcc4 de alta luninosidad, de entre 10.000 y 15.000 mcd a 5400K.

Pues bien 1º sorpresa, los leds estan conectados en serie...

https://anterior.webcampista.com/foro/attachment.php?attachmentid=31098&stc=1&d=1279225946

Eso quiere decir que el dia que se funda uno, a divertirse para saber cual a fallado. pero bueno, sigo desmontando y segunda sorpresa.
https://anterior.webcampista.com/foro/attachment.php?attachmentid=31095&stc=1&d=1279225905

El led no tiene resistencia, con lo que... pienso, es posible que la petaca que hay en la entrada baje el voltaje a lo necesario del led....

https://anterior.webcampista.com/foro/attachment.php?attachmentid=31096&stc=1&d=1279225922

https://anterior.webcampista.com/foro/attachment.php?attachmentid=31097&stc=1&d=1279225931

Pues vamos a ver que voltaje es el que da y asi pido los leds directos a ese voltaje... y me encuentro con esta lectura.
31099

con una bateria que da 11.96v una lectura de 30,1v???????

por que no me confundo????

entonces???? ha leds a 30v o es que al estar en serie es voltaje se reparte entre los 8 leds????

si me hachais una manita ha enterdelo os lo agradecere, y de paso podré pedir los leds que necesito

gracias...

Dedalo
16/07/2010, 00:02
Leve explicacion de como funciona un LED.

Un LED es un diodo que tiene la particularidad de que cuando circula corriente por el emite luz visible.

Lo que es determinante en el LED es la intensidad, pero el voltaje no es muy exacto, puede haber grandes diferencias entre leds de la misma marca y modelo, incluso del mismo lote de fabricacion. Nunca los veras en serie, se suelen montar en serie y alimentarlos con una resistencia para limitar la intensidad.

Una idea, ¿Y si ponemos todos en serie y fabricamos una fuente de alimentacion de intensidad constante?. Fantastico, y generas un voltaje en vacio de 30 V, y ese voltaje se modula para estabilizar la intensidad.

¿Has medido con los leds conectados? si has medido en vacio y es una fuente de intensidad constante se habrá ido al maximo voltaje. Si conectas los leds y estan en serie, el voltaje baja hasta que la intensidad sea la apropiada, puede que se quede en 18V, calcula entre 2 y 3 V por LED. El voltaje se reparte entre todos ellos y la intensidad será constante.

P.D. Yo solo he ido a la universidad un par de veces a llevar a mi hijo en alguna ocasion en la que ha perdido el bus...

navegante 420
16/07/2010, 00:16
La medición ha sido con los leds conectados, ya que en vacio no me dava lectura, con lo que me sale un voltaje de 3,7 por led.

si solo has ido un par de veces a la uni, espero que algun día yo, con uni o sin ella, pueda tener los conocimentos y la soltura que tienes tu en esto....

Dedalo
16/07/2010, 09:57
La medición ha sido con los leds conectados, ya que en vacio no me dava lectura, con lo que me sale un voltaje de 3,7 por led.

si solo has ido un par de veces a la uni, espero que algun día yo, con uni o sin ella, pueda tener los conocimentos y la soltura que tienes tu en esto....

Esos 3,7 V son un valor bastante coherente. Ahora tienes un problema, pues tu no puedes alimentar esa caja con un PWM. Vas a tener que prescindir de la caja y buscar otra forma de alimentar los leds directamente.

Tambien puedes abrir esa cajita y buscar donde toma la referencia de intensidad el circuito interior. Con un poco de suerte localizas la resistencia que sirve de shunt para esa medida y puedes poner otra en serie, y con un simple transistor solucionas el problema. A veces las soluciones mas simples son las mas efectivas.

Casi con toda seguridad esa cajita lleva un convertidor DC-DC step-up, y una resistencia en serie con los leds o un optoacoplador que devuelven una realimentacion al oscilador para estabilizar la intensidad en los leds.

Si funciona estabilizando la intensidad, lo tienes facil, pones un transistor con una resistencia en colector en paralelo con los leds, asi, cuando satures el transistor estaras consumiendo una parte de la intensidad. Escojes una resistencia que consuma un 30% de la intensidad, y a los leds solo les llegará el 70% restante.

Te adjunto el esquema de la entrada desde la luz de posicion al PIC, van dos esquemas, segun si la luz se alimenta por +12 o por masa, los dos funcionan perfectamente.

Aunolose
16/07/2010, 12:22
No tengo tiempo de leerme detenidamente los post nuevos, pero no te extrañe (vamos, seguro) que es lo que dice Dedalo del convertidor DC/DC; para sacarle provecho a los leds lo mejor es controlarlos por intensidad, por eso están en serie, para medir una sola, la vida de los leds (bien refrigerados y controlados) es mucho mayor que la de cualquier bombilla, no tengas miedo por que estén en serie, antes se romperán las soldaduras.

De momento, sin leerlo detenidamente, me apunto a la opción de Dedalo, nosotros lo hacemos mucho: se busca el convertidor en la red, se busca la resistencia que mide la corriente y se actúa sobre ella, es posible que no te haga falta ni el PWM, solo cambiar el valor de la resistencia.


Para no romper nada, limita la corriente de la fuente a lo mínimo durante las pruebas. si son 30V a ¿350? ¿500? miliamperios, son unos 16W, que en 12V serán unos 1,5A como mucho, contando las perdidas.

Aunolose
16/07/2010, 16:13
Vale ya me lo he leído, por la mañana curro en un sitio donde (con la crisis) se dedican casi en exclusiva a los leds, te lo ha explicado Dedalo, aunque creo que un sitio se le ha deslizado un gazapo, al decir que "nunca veras led en serie, se suelen montar en serie" :D se refiere a que no se suelen poner en paralelo.

Los convertidores "están de moda" y eso que el principio es tan antiguo como la electrónica, cuando los materiales (de las bobinas) han permitido construirlas baratas y fiables, pues al mercado a saco.

Reitero lo dicho anteriormente que ya decía Dedalo: abrir la caja.

Te digo algunos trucos para encontrar la resistencia shunt. lo primero medir la intensidad que circula por los leds, para saber cuanto tienen que aguantar los que compres, no le pidas más al convertidor, menos si, más no, no sabemos las características. Nosotros gastamos unos que soportan desde 350mA (1W por led) a 1A (3W y pico) no creo que sean los de 1A, se calientan un web...

Buscar el circuito convertidor, si tienes suerte será un encapsulado legible, lo buscas en farnell, o en sitio donde tengan su datasheet, allí tendrás la pata donde buscar la resistencia, incluso el circuito entero. Si haciendo esto la localizas, la mides, suele ser muy, muy baja, tal vez miliohmios, así que asegúrate que el polímetro está bien... más preciso es medir la tensión en sus extremos (estando conectado el circuito) con cuidado de no hacer ningún corto (recuerda la limitación de la fuente) como sabes la intensidad y sabes la tensión, ya tienes la resistencia. Para confirmar que lo es lo más fácil será soldar otra en paralelo, pon una que sea unas 10 veces más grande, de esta manera aumentaras la corriente un 10%, si solo lo haces un momento, no se romperá nada, pero solo un momento, antes de conectar coloca el amperimetro para medir si cambia, si cambia ese 10% (o lo que toque) ¡Bingo! la has encontrado.

Ahora queda saber como está conectada, lo mejor sería que un extremo estuviera conectado a masa (negativo) entonces sería tan fácil como quitar esa resistencia y sustituirla por algo así. Si está de otra manera, la cosa cambia bastante, pero aún es posible...

Aunolose
16/07/2010, 16:33
El circuito. Se puede usar un MOSFET en Q1, según la tensión de shunt será mucho mejor.

http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/31113d1279287255-mis-primeros-proyectos-en-asm-para-el-16f84-leds-jpg


R5 es la resistencia de seguridad para que en caso de error no pase nada raro, además sirve para compensar la caída de tensión en el transistor, pues reducirá la corriente a través de R1. Según el rango de tensión puede que la reduzca demasiado...

Aunolose
17/07/2010, 10:37
Entro casi adrede para decir que hay una manera mejor de controlar el convertidor, puesto que de la manera que puse ayer, la caida de tensión en el transistor será demasiado alta, se trata de meter a través de un diodo y una resistencia la salida del PIC, directamente en el punto de medida, de esta manera le metemos tensión al convertidor, engañándolo y haciendo que corte la corriente, lo hemos probado con varios circuitos y funciona en la mayoría (y en los que no, es que hicimos algo mal..., la frecuencia a de ser baja en este caso, unos 100 Hercios son suficientes, en cualquier caso no conviene que coincida con un multiplo de la frecuencia que use el convertidor.

Como se trata de meter tensión para apagarlo en vez de encenderlo , el duty (ciclo activo) del PWM debe ser el 30%, así estará encendido el 70% del tiempo.

Desde casa no me es tan fácil dibujar el circuito pero es una chumina, y lo que es más importante, no hace falta dessoldar la resistencia shunt.

Aunolose
19/07/2010, 16:38
Aquí está el circuito.

http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/31163d1279546726-mis-primeros-proyectos-en-asm-para-el-16f84-pwm-jpg


Es posible que haya que retocar R2 y ponerla de 100 ohmios, este miercoles que vuelvo a ir por la mañana a ver si le hago una foto a un circuito que modificamos así, para que te animes.

navegante 420
23/07/2010, 13:57
Esos 3,7 V son un valor bastante coherente. Ahora tienes un problema, pues tu no puedes alimentar esa caja con un PWM. Vas a tener que prescindir de la caja y buscar otra forma de alimentar los leds directamente.

Tambien puedes abrir esa cajita y buscar donde toma la referencia de intensidad el circuito interior. Con un poco de suerte localizas la resistencia que sirve de shunt para esa medida y puedes poner otra en serie, y con un simple transistor solucionas el problema. A veces las soluciones mas simples son las mas efectivas.

Casi con toda seguridad esa cajita lleva un convertidor DC-DC step-up, y una resistencia en serie con los leds o un optoacoplador que devuelven una realimentacion al oscilador para estabilizar la intensidad en los leds.

Si funciona estabilizando la intensidad, lo tienes facil, pones un transistor con una resistencia en colector en paralelo con los leds, asi, cuando satures el transistor estaras consumiendo una parte de la intensidad. Escojes una resistencia que consuma un 30% de la intensidad, y a los leds solo les llegará el 70% restante.

Ya estamos otra vez con palabras raras.... shunt, convertidor DC/DC step-up.... hay que joerse, jejejejejejeje, al final no sabre si me estais enseñando electronica o metiendoos conmigo, jejejejeje

voy ha estudiar que es esto nuevo que me enseñais.



adjunto el esquema de la entrada desde la luz de posicion al PIC, van dos esquemas, segun si la luz se alimenta por +12 o por masa, los dos funcionan perfectamente.


Muchas gracias, entiendo que con este circuito no hace falta bajar los voltajes a 5V, si no que ya hacemos 1 y 0 lógicos.

Esta tarde lo simularé en otro proyecto que estamos haciendo, aver que tal.

navegante 420
23/07/2010, 14:06
Vale ya me lo he leído, por la mañana curro en un sitio donde (con la crisis) se dedican casi en exclusiva a los leds, te lo ha explicado Dedalo, aunque creo que un sitio se le ha deslizado un gazapo, al decir que "nunca veras led en serie, se suelen montar en serie" :D se refiere a que no se suelen poner en paralelo.

Los convertidores "están de moda" y eso que el principio es tan antiguo como la electrónica, cuando los materiales (de las bobinas) han permitido construirlas baratas y fiables, pues al mercado a saco.

Reitero lo dicho anteriormente que ya decía Dedalo: abrir la caja.

Va a ser que eso no va a ser posible pues por un lado si es caja, pero al darle la vuelta la caja esta rellena de una resina dura donde esta el cicuito.


Te digo algunos trucos para encontrar la resistencia shunt. lo primero medir la intensidad que circula por los leds, para saber cuanto tienen que aguantar los que compres, no le pidas más al convertidor, menos si, más no, no sabemos las características. Nosotros gastamos unos que soportan desde 350mA (1W por led) a 1A (3W y pico) no creo que sean los de 1A, se calientan un web...

Supongo que te refieres a los 8 leds o que mida uno por uno???


Buscar el circuito convertidor, si tienes suerte será un encapsulado legible, lo buscas en farnell, o en sitio donde tengan su datasheet, allí tendrás la pata donde buscar la resistencia, incluso el circuito entero. Si haciendo esto la localizas, la mides, suele ser muy, muy baja, tal vez miliohmios, así que asegúrate que el polímetro está bien... más preciso es medir la tensión en sus extremos (estando conectado el circuito) con cuidado de no hacer ningún corto (recuerda la limitación de la fuente) como sabes la intensidad y sabes la tensión, ya tienes la resistencia. Para confirmar que lo es lo más fácil será soldar otra en paralelo, pon una que sea unas 10 veces más grande, de esta manera aumentaras la corriente un 10%, si solo lo haces un momento, no se romperá nada, pero solo un momento, antes de conectar coloca el amperimetro para medir si cambia, si cambia ese 10% (o lo que toque) ¡Bingo! la has encontrado.

Ahora queda saber como está conectada, lo mejor sería que un extremo estuviera conectado a masa (negativo) entonces sería tan fácil como quitar esa resistencia y sustituirla por algo así. Si está de otra manera, la cosa cambia bastante, pero aún es posible...

Voy a ver si encuentro algo de informacion sobre esto porque me parece super, super interesante.

Dedalo
23/07/2010, 15:17
Va a ser que eso no va a ser posible pues por un lado si es caja, pero al darle la vuelta la caja esta rellena de una resina dura donde esta el cicuito.

Otra sugerencia:

Colocas la caja alimentando los leds, y suponemos que es un regulador de intensidad, eso quiere decir que la intensidad de salida de la caja es constante, si en paralelo con los leds ponemos un consumo, esa intensidad ya no pasa por los leds, asunto resuelto, la propia caja reduce el voltaje para que la intensidad sea la adecuada.

Te adjunto un esquema:

31326

Modificando R1 regulas la cantidad de corriente que le quitas a los diodos. Si los diodos consumen 200 mA, le tienes que quitar un 30% para dejar la iluminacion al 70%.

1) Mide el voltaje en los leds. (P.Ej. 30V)
2) restale 1V por la base del transistor de potencia y la Vsat del optoacoplador.
3) Calcula la resistencia con ese voltaje y esa intensidad (60 mA en el ejemplo).
4) Multiplica la resistencia por la beta del transistor utilizado. alrededor de unos 47 K si utilizas un transistor de Beta=100



Y ya tienes la resistencia R1 calculada.

Es mejor utilizar un optoacoplador para no llevarnos una sorpresa con la masa del convertidor DC-DC

Dedalo
23/07/2010, 15:24
Otro dato:

Si consumes corriente por fuera de los leds, puesto que el circuito es un regulador de intensidad, bajará la tension un poco para que los leds no consuman tanto y asi cederle algo de intensidad al transistor "devorador de intensidad", eso quiere decir que la potencia entregada por el regulador será algo mas baja, pues la intensidad de salida es constante y el voltaje bajará un poco, el circuito, aunque parezca sospechoso, no aumenta la potencia consumida, en todo caso bajará ligeramente..

navegante 420
23/07/2010, 15:31
Otro dato:

Si consumes corriente por fuera de los leds, puesto que el circuito es un regulador de intensidad, bajará la tension un poco para que los leds no consuman tanto y asi cederle algo de intensidad al transistor "devorador de intensidad", eso quiere decir que la potencia entregada por el regulador será algo mas baja, pues la intensidad de salida es constante y el voltaje bajará un poco, el circuito, aunque parezca sospechoso, no aumenta la potencia consumida, en todo caso bajará ligeramente..

me pillas en proteus diseñando algo parecido a lo que dices.

navegante 420
23/07/2010, 15:40
Vamos por partes, como se nota que ya he arreglado todo el papeleo de la abogada y no hace el bochorno de dias atras, que ahora hasta pienso y todo....

Primero si es un conversor dc/dc step-up.

Con los leds conectados

Con los 12v de una bateria, tengo 30,1v en la salida

Con 5v en la entrada tengo 27,7 en la salida,

Vamos interpreto que la diferncia es irrisoria teniendo en cuenta que esos voltajes se reparten entre los 8 leds.

respecto al consumo si lo he hecho bien, los 8 leds consumen 0.02A

https://anterior.webcampista.com/foro/attachment.php?attachmentid=31327&stc=1&d=1279888819

navegante 420
23/07/2010, 15:55
Respecto a lo que comenta dedalo, yo estaba pensando más en un divisor de tensión.

https://anterior.webcampista.com/foro/attachment.php?attachmentid=31328&stc=1&d=1279889482

El primer transistor/rele controlaria si motor arrancado, alimenta, si motor apagado, corta corriente.

y el segundo transistor controla, la bajada de tensión cuando sea necesario.

Pero que pasa en este esquema con los consumos?????

Aunolose
23/07/2010, 16:12
No está mal esa idea tampoco, aunque creo que el calculo no será tan sencillo, pues los leds se comportan como zeners...

no encuentro el cable para poner la foto, pero ya veo que da igual, no puedes abrir la caja.

He pensado una cosa ¿esa cajita es la de tu vecino o es tuya? lo digo porque creo que el faro te lo había dejado tu vecino, en ese caso no podrás usarla ¿no? habría que pensar otro remedio entonces...

Creo que ya lo has averiguado, al estar en serie, solo hay que medir una intensidad= 20mA, como imaginaba no son los "gordos", tengo que acostumbrarme a no pensar en ellos...

Ah, los consumos de ese esquema que has puesto son los mismos, o menores cuando esté en marcha, por lo que comenta Dedalo, regula la intensidad, que siempre serán 20mA,
recuerda una formula derivada de la ley de ohm
V= I * R

W= I * V


W= I * I * R

si la intensidad permanece constante pero cambias la resistencia, bajándola al ponerla en paralelo, la potencia disminuye.

navegante 420
23/07/2010, 17:25
No está mal esa idea tampoco, aunque creo que el calculo no será tan sencillo, pues los leds se comportan como zeners...

no encuentro el cable para poner la foto, pero ya veo que da igual, no puedes abrir la caja.

He pensado una cosa ¿esa cajita es la de tu vecino o es tuya? lo digo porque creo que el faro te lo había dejado tu vecino, en ese caso no podrás usarla ¿no? habría que pensar otro remedio entonces...

Creo que ya lo has averiguado, al estar en serie, solo hay que medir una intensidad= 20mA, como imaginaba no son los "gordos", tengo que acostumbrarme a no pensar en ellos...

Ah, los consumos de ese esquema que has puesto son los mismos, o menores cuando esté en marcha, por lo que comenta Dedalo, regula la intensidad, que siempre serán 20mA,
recuerda una formula derivada de la ley de ohm
V= I * R

W= I * V


W= I * I * R

si la intensidad permanece constante pero cambias la resistencia, bajándola al ponerla en paralelo, la potencia disminuye.

pon, pon la foto, pues estoy buscando esquemas del circuito step-up pero no he encontrado nada de momento y me interesa mucho esto para otras posibles aplicaciones, como cambiar todas las luces de la caravana por leds sin tener que tocar la equ del coche, por ejemplo....

El faro es el mio, mi vecino me tenia que dejar unos, para poder quitar estos que estamos modificando.

Aunolose
23/07/2010, 17:48
pon, pon la foto, pues estoy buscando esquemas del circuito step-up pero no he encontrado nada de momento y me interesa mucho esto para otras posibles aplicaciones, como cambiar todas las luces de la caravana por leds sin tener que tocar la equ del coche, por ejemplo....

El faro es el mio, mi vecino me tenia que dejar unos, para poder quitar estos que estamos modificando.

No te va a servir de mucho, si buscas esquemas, en los datasheet tienes montones. Luego te busco alguno.

Las fotos no son muy buenas, el enfoque de los moviles es muy malo de cerca...

http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/31329d1279896476-mis-primeros-proyectos-en-asm-para-el-16f84-21072010188-jpg


http://www.webcampista.com/foro/attachments/electr%F3nica-y-microcontroladores/31330d1279896488-mis-primeros-proyectos-en-asm-para-el-16f84-21072010189-jpg


Se aprecian también algunos de los leds a los que me refiero, estos son de 350mA "poco".

Aunolose
23/07/2010, 18:06
Mira algunos circuitos con el TL494, el que llevan el 95% de las fuentes de PC, el resto llevan un SG que es compatible 100%...

tl494 step down - Buscar con Google (http://www.google.es/images?q=tl494+step+downó
e=utf-8&rls=org.mozilla:es-ES:official&client=firefox-aúm=1&ie=UTF-8&source=univ&ei=mK9JTJviOeeJ4gbBu6WaDA&sa=Xó
i=image_result_group&ct=title&resnum=4&ved=0CEcQsAQwAw)

Aunolose
23/07/2010, 18:07
y este al revés. step up


tl494 step up - Buscar con Google (http://www.google.es/images?um=1&hl=es&newwindow=1&client=firefox-a&rls=org.mozilla%3Aes-ES%3Aofficial&tbs=isch%3A1&sa=1&q=tl494+step+up&aq=f&aqi=&aql=ó
q=&gs_rfai=)

navegante 420
26/07/2010, 10:19
AAAAhhhhh!!!!! vale.....

que el conversor DC/DC step-up se hace mediante el integrado tl494.....

Asi pues es más fácil de lo que pensaba....

gracias...

Aunolose
27/07/2010, 18:31
Mira algunos circuitos con el TL494, el que llevan el 95% de las fuentes de PC, el resto llevan un SG que es compatible 100%...

tl494 step down - Buscar con Google (http://www.google.es/images?q=tl494+step+downó
e=utf-8&rls=org.mozilla:es-ES:official&client=firefox-aúm=1&ie=UTF-8&source=univ&ei=mK9JTJviOeeJ4gbBu6WaDA&sa=Xó
i=image_result_group&ct=title&resnum=4&ved=0CEcQsAQwAw)


Me equivoque, hoy he abierto una que lleva un KAnorecuerdo, también compatible 100%...




Navegante, Hay otros integrados más sencillo de usar, y con más rendimiento, puse este en concreto porque si tienes una fuente de PC estropeada, te servirá casi seguro, siempre caen los transistores o los diodos, casi nunca este integrado.