TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: MADKazuya en 14 de Agosto de 2009, 21:39:07
-
Buenas de nuevo compañeros!
Acudo de nuevo a vosotros con la esperanza de ke me ayudeis con un problema ke tengo ke no se bien como solventarlo. Estoy usando mosfets BS170 a las salidas de un 16f84. Todo funciona correctamente, los problemas son dos: el primero ke este trt me lo vendieron en la tienda, asesorado por el vendedor y poco me imaginaba yo ke se activarian al reves de lo esperado. Logicamente la solucion es tan sencilla como invertir las salidas del pic mediante soft y se acabo el problema. El segundo problema y este si, mas serio, es ke al activar la alimentacion del pic se encienden durante un parpadeo todos los leds ke vayan controlados por dichos trt's, como si de un pico de voltaje se tratara. Hay alguna manera de solventarlo ya sea mediante hard o soft? es un efecto muy molesto y me gustaria erradicarlo. Gracias de antemano!:-)
-
Nadie me puede echar un cable?? :cry: :cry: :8} :8}
-
Hola Madkazuya, bienvenido al foro! :mrgreen:
Primero que nada... leiste las reglas del foro?, allí se aclára, que en lo posible , no se escriba tipo SMS... has probado a escribir un programa como BKF Klrf...
no funcionaria :D
En cuanto a tu problema, tendria que ver el programa.... lo primero seria setear las entradas salidas... colocarlas en cero o uno segun corresponda... pues alli se puede producir el pulso que mencionas ok?
coloca el programa asi se analiza
Norberto
-
MADKazuya. Los relays son componentes que suelen inyectar ruido en las lineas. Esto puede hacer que el uC se comporte de modo extraño. Prueba utilizando optoacolpadores entre la etapa de potencia y el uC.
Saludos
-
MADKazuya. Los relays son componentes que suelen inyectar ruido en las lineas. Esto puede hacer que el uC se comporte de modo extraño. Prueba utilizando optoacolpadores entre la etapa de potencia y el uC.
Saludos
Antetodo, gracias por las respuestas.
BrunoF, estoy usando transistores BS170, supuestamente no tiene los inconvenientes de los relays. No se si cambia mucho.
todopic, procurare evitar las "k", es la costumbre...asi escribo mas rapido :lol: :mrgreen:
Aqui dejo el codigo del programa, a ver que me podeis recomendar...gracias de antemano!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Autor:Kazu
;
; Fecha:11 agosto 2009
;
; Version:1.0
;
; Titulo:Cluster control
;
; Descripcion:Encendido paulatino de agujas
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
list p=16F84A ; list directive to define processor
#include <p16F84a.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
; '__CONFIG' directive is used to embed configuration data within .asm file. En el propio datasheet del PIC encontraremos mas informacion al respecto.
; CP= code protection, WDT = watchdog, PWRTE = power delay on turn on, XT = oscillator type (xt quartz cristal)
; The lables following the directive are located in the respective .inc file. Listado disponible en fichero 16f84a.inc en este caso.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x0C ; variable used for context saving. Guarda las constantes importantes en el momento de una interrupcion para ke no se pierda el PC
status_temp EQU 0x0D ; variable used for context saving. Igual ke el anterior
STATUS equ 03h ; Direccion del registro STATUS
TRISB equ 86h ; Direccion del registro triestado para el Puerto B.
PORTB equ 06h ; Direccion del Puerto B.
PDel0 equ 0Ch ; Primer contador para nuestros bucles de retardo.
PDel1 equ 0Dh ; Segundo contador para nuestros bucles de retardo.
PDel2 equ 0Eh ; Tercer contador para nuestros bucles de retardo.
;**********************************************************************
RESET_VECTOR CODE 0x0000 ; processor reset vector. Punto de partida del programa si se hace un reset (direccion 0000)
goto start ; go to beginning of program
ISR CODE 0x0004 ; interrupt vector location. Punto de inicio si se produce una interrupcion (direccion 0004)
Interrupt:
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
; Place ISR Here
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
start:
;
;****Configuracion del Puerto B****
clrwdt ; Limpia el watchdog de cualkier intervencion anterior
bsf STATUS,5 ; Cambiamos al banco 1Switch to Bank 1
CLRF TRISB ; Configuramos el puerto B como salidas poniendo todos sus bits a 0 (todo salidas)
bcf STATUS,5 ; Volvemos al Banco 0.
movlw b'11111000' ; Apagamos todas las salidas del puerto B exceptuando la salida 3, ke al haber un trt Nmos ha de estar activada
movwf PORTB ; Mandamos al puerto B la informacion arriba descrita (20h)
;****Encendido del LED RB7****
call Retraso ; Llama la subrutina retraso y la ejecuta
BCF PORTB,7 ; Transmitimos una senal alta al bit 7 del puerto B
call Retraso ; Llama la subrutina retraso y la ejecuta
;****Encendido del LED RB6****
BCF PORTB,6 ; Transmitimos una senal alta al bit 6 del puerto B
call Retraso ; Llama la subrutina retraso y la ejecuta
;****Encendido del LED RB5****
BCF PORTB,5 ; Transmitimos una senal alta al bit 5 del puerto B
call Retraso ; Llama la subrutina retraso y la ejecuta
;****Encendido del LED RB4****
BCF PORTB,4 ; Transmitimos una senal alta al bit 4 del puerto B
call Retraso ; Llama la subrutina retraso y la ejecuta
;****Encendido del LED RB3****
BCF PORTB,3 ; Apagamos todas las salidas (esto activara el MOSFET y kedaran todos los leds encendidos a traves de el)
Bucle
goto Bucle
;****Inicio del buble de retardo****
Retraso
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.
;****Termina el Programa****
end ; Algunos compiladores necesitan esta instruccion.
-
Prueba colocando una resistencia de 10k entre el pin que controla el BS170 y Vcc.
Saludos!
-
Me quito el sombrero...poco mas puedo hacer ante un foro que esta yendo mucho mas alla de mis expectativas. La ayuda ofrecida no tiene precio!!!!!
Suky, una vez mas me has ilustrado y ayudado sobremanera!gracias de veras!
Ahora viene la parte en la que me gustaria que me comentases muy por encima el porque de la resistencia, para asi aprender a razonar la proxima vez y procurar espabilarme yo solo la proxima vez :)
Si no me equivoco es una resistencia de pull-up, cierto? ya que el nMOS se activa con un valor bajo de tension, la R pull-up asegura un valor estable de Vdd y evita que este fluctue; me equivoco?
Una cosa mas, tras haberlo probado en la proto, el efecto ha disminuido infinitamente, pero aun puedo apreciar algun leve pico tras encender y apagar varias veces la fuente de alimentacion con la que trabajo. Si se aumenta la R disminuiran aun mas? si es asi, porque entonces hemos usado una de 10k en particular?
Muchiiiiiiiiiiiiisimas gracias...sois de inmensa ayuda :)
-
Jejeje! Lo que has expuesto es correcto. Evita el problema de falta de tensión el instante anterior a la configuración del puerto, que por lo visto su efecto en este caso es apreciable :mrgreen: O por lo menos esa fue mi idea :D
El porque de 10k, simplemente para que no tenga efecto en la carga que presente y no se si se podrá obtener un mejor resultado que eso, solo habrá que probar :mrgreen:
Saludos!
-
Me alegra que te sea de ayuda el foro....
Una consulta, los mosfet, activan alguna otra carga, o solo los led?
porque si solo colocas los led, puedes hacerlo directamente al pic, con una r limitadora...
Norberto
-
Hare mas pruebas suky. De nuevo, gracias :mrgreen:
Todopic: solo activa leds, lo que pasa es que usare leds de alta luminosidad tipo SMD PLCC2, que consumen 30 mA cada uno, y quiero conectar unos 15 (5 por pin). Es pues evidente que no puedo conectarlos directamente porque el PIC no puede suministrar semejante demanda. Gracias por el aporte, no obstante! :)