Webcampista.com

mucho más que un foro

Mis primeros proyectos en ASM para el 16F84

navegante 420

la nave nodriza
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.


attachment.php


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.....
 

Archivos adjuntos

  • esquema labafaros megan.jpg
    esquema labafaros megan.jpg
    18,3 KB · Visitas: 0
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.

attachment.php


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.

attachment.php


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
 

Archivos adjuntos

  • DSCF0007foro.JPG
    DSCF0007foro.JPG
    33,5 KB · Visitas: 0
  • esquema faro leon.jpg
    esquema faro leon.jpg
    29,3 KB · Visitas: 0
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.
 
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.......
 
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...
 
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.
 
Los leds que voy a usar son plcc4 de alta luminosidad, 8 por faro con su resitencia conectados en paralelo,
 
El esquema de los leds del faro seria algo así

attachment.php
 

Archivos adjuntos

  • esquema leds.jpg
    esquema leds.jpg
    26,6 KB · Visitas: 0
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.
 
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.
 
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.
 
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

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
 
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....
 
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:
Ver el archivos adjunto Circuit1.pdf

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
 
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.
 
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:
Ver el archivos adjunto 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.....
 
¿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....
 
Sus vais a reir de mi pero no soy capaz de que me funcione un esquema tan sencillito como este.


attachment.php


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

Archivos adjuntos

  • esquema.jpg
    esquema.jpg
    29,7 KB · Visitas: 0
Sus vais a reir de mi pero no soy capaz de que me funcione un esquema tan sencillito como este.


attachment.php


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.
 
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.
 
¿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.
 
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
30394d1276609422-mis-primeros-proyectos-en-asm-para-el-16f84-puertob-jpg


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.

30397d1276609446-mis-primeros-proyectos-en-asm-para-el-16f84-puertoa42-jpg


30396d1276609439-mis-primeros-proyectos-en-asm-para-el-16f84-puertoa4-jpg



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

Archivos adjuntos

  • puertoB.jpg
    puertoB.jpg
    62,1 KB · Visitas: 0
  • PuertoB2.jpg
    PuertoB2.jpg
    97,5 KB · Visitas: 0
  • PuertoA4.jpg
    PuertoA4.jpg
    43,8 KB · Visitas: 0
  • puertoA42.jpg
    puertoA42.jpg
    24,6 KB · Visitas: 0
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???
 
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.

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.
 

Archivos adjuntos

  • corrienteF84.jpg
    corrienteF84.jpg
    86,4 KB · Visitas: 0
Arriba
© 2004-2024 Webcampista.com