TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: cocibolca en 13 de Enero de 2008, 22:37:15
-
Hola a todos amigos de TODOPIC, como indica el encabezado de este tema tengo un gran problema para hacer funcionar un circuito que tome prestado de la pagina web de PABLIN (http://www.pablin.com.ar/electron/proyecto/plink/index.htm), para presentarlo como proyecto para una clase en particular a continuacion adjunto el esquema del circuito
(http://www.pablin.com.ar/electron/proyecto/plink/circuito.gif)
Este circuito accionara los reles mediante una orden enviada desde el puerto serial RS-232 de una PC, con ayuda de una interfaz grafica implementada en visual basic VB 6.0, la cuestion es que ya monte el circuito y logre realizar la interfaz grafica con la ayuda de unos colaboradores del foro de "Programacion en Visual Basic", pero al momento de enviar una orden por el puerto no se acciona ningun LED, NOTA: (Estoy utilizando leds en lugar de los reles) , he intentado de todo, no se si es la programacion del PIC o la interfaz grafica la que esta ocasionando el problema o en ultima instancia es la configuracion del propio circuito.
Estoy desesperado :cry: , tengo que entregar los resultados dentro de poco y aun no lo he resuelto, estare muy agradecido si logran ayudarme en esta travesia electronica, cualquier sugerencia o correccion de su parte sera BIENVENIDA!!! :)
A continuacion les adjunto el programa del PIC y de la interfaz grafica en Visual Basic:
Programa del PIC
--------------------------------------------------------------------------------------------------------------------------------------------------
LIST p=16F84A
processor PIC16F84A
#include "P16F84A.INC"
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
ERRORLEVEL -302
#DEFINE rx 2 ; bit de recepcion de datos en serie
CBLOCK 0x0C
r0d ; registro de proposito general
r0e ; registro de proposito general
conta ; registro de proposito general(contador)
recep ; buffer de entrada
ENDC
org 00h ;vector de reset
goto inicio ;salta al comienzo del programa
org 05h ;saltea el vector de interrupcion
start movlw .124 ;retardo para generar bit de arranque
goto startup
delay movlw .83 ;retardo para generar bit de datos
startup movwf r0e
redo nop ;pierde 12 microsegundos
nop
decfsz r0e,F ;resta 1 al retardo
goto redo ;si falta el tiempo itera
retlw 0 ;si termino retorna limpiando w
recibir nop ;recibe un byte por RS232
clrf recep ;limpia el buffer de recepcion
btfss PORTA,rx ;mira el estado de la linea serie
goto $-1 ;si esta inactiva queda a la espera
call start ;retardo para bit de arranque
rec movlw .8 ;carga cantidad de bits a recibir
movwf conta
rnext bcf STATUS,C ;limpia el carry
btfss PORTA,rx ;mira la linea de recepcion
bsf STATUS,C ;si esta en alto sube el carry
rrf recep,W ;rota el buffer de recepcion
call delay ;retardo entre bits
decfsz conta,F ;resta 1 a la cantid. de bits a recibir
goto rnext ;si faltan bits para recibir itera
retlw 0 ;si termino sale y limpia w
inicio bsf STATUS,RP0 ;selecciona la pagina 1 de memoria
movlw 0ffh ;programa el puerto "a" como entradas
movwf TRISA
movlw 00h ;programa el puerto "b" como salidas
movwf TRISB
bcf STATUS,RP0 ;selecciona la pagina 0 de memoria
clrf recep ;limpia el buffer de recepcion
clrf PORTB ;apaga todas las salidas
ciclo call recibir ;queda a la espera de recibir datos
movf recep,w ;carga en w el dato recibido
movwf PORTB ;manda el dato a las salidas
goto ciclo ;itera indefinidamente
end
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
INTERFAZ GRAFICA
Option Explicit
Dim Salida As Byte
Private Sub CmdGo_Click()
Dim i As Integer
Salida = 0
For i = Chk.LBound To Chk.UBound
Salida = Salida + Chk(i).Value * 2 ^ i
Next
'Salida contiene el valor a enviar
MsgBox Salida
End Sub
Private Sub ENVIAR_Click()
MSComm1.Output = Salida
End Sub
Private Sub conectar_Click()
'comprueva que el puerto este cerrado para poder abrirlo
If MSComm1.PortOpen = False Then
'determina el puerto que seleccionado
MSComm1.CommPort = 1
MSComm1.PortOpen = True
Else
MSComm1.CommPort = 2
End If
'determina: 9600-Velocidad en Baudios, N-No utiliza ninguna paridad,
'8-Cantidad de bits de envio y recepcion por paquete,
'1-Determina los bits de parada
MSComm1.Settings = "9600,N,8,1"
'lee todo el buffer de entrada para que quede vacio
MSComm1.InputLen = 0
'Abre el puerto seleccionado
MSComm1.PortOpen = True
Me.Caption = "Conectado por el puerto " & MSComm1.CommPort
End Sub
Private Sub Desconectar_Click()
If MSComm1.PortOpen Then
'cierra el puerto
MSComm1.PortOpen = False
Me.Caption = "Desconectado"
End If
End Sub
Private Sub Form_Load()
Dim i As Integer
'Insertar números a los pulsadores
For i = Chk.LBound To Chk.UBound
Chk(i).Caption = i
Next
End Sub
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Por ultimo les adjunto el programa en VB
GRACIAS POR MOLESTARSE EN LEER MI GRAN INCONVENIENTE!!!!
-
Como conectaste los leds??? :mrgreen:
-
Los leds los conecte de forma inversa a la que se muestra en el diagrama, ya que el anodo y el catodo no coincidian.
-
creo que el ULN no acepta la otra conexion, lee bien el datasheet.. :mrgreen:
-
Que tal cocibolca,
Si conectas los les en en forma invertida obviamente que los leds nunca encenderan, ya que los estarias polarizando en forma invertida (electronica basica, anodo a positivo, catodo a negativo). El diagrama que se muestra es correcto, asi qeu si tu cambias la posicion de los leds, estos nunca encenderan. Ahora bien me imagino que estas usando un arreglo de leds encapsulado, y estos tienen una conexcion interna de catodo comun, si es asi ese arrelo no te servira, necesatas usar uno con conexion de anodo comun, o bien utilizar leds de forma individual.
Saludos.
Elreypic.
-
Tienes toda la razon elreypic2, pero antes de montarlo tuve mucho cuidado para colocar los leds, para ello use el probador de diodos de un multimetro digital. :mrgreen:
Me falto aclarar que estoy utilizando un transformador con TAP central de 2A, alimentado con 110V y un integrado que contiene el puente de diodos de 2A, para disminuir el espacio requerido.
Gracias por tu sugerencia!!!
-
Hola Cocibolca,
Yo recomendaría para descartar el problema con la conexión de los LEDs (que parece ser el problema) que verifiques primero esa etapa del circuito de manera independiente, si conectar el PIC le metes 5 voltios a las entradas del ULN y a la salida se deben encender los LEDs correspondientes a esas entradas.
Ten en cuenta (como ya te han dicho) que este ULN es un arreglo de transistores NPN, por lo tanto la conexión obligada es conectar el cátodo del LED a la salida del ULN y el ánodo al positivo de la fuente, obvianmente con su respectiva resistencia en serie, de ninguna otra forma va a funcionar.
Saludos,
Diego.
-
Gracias por molestarte en responder mis inquietudes dhmejia (Diego), tu sugerencia me parece muy util, intentare hacer esa prueba, mas luego publico los resultados. De esta forma descartaria el problema en el ULN2803 y los leds, y me enfocaria en la programacion del PIC o la interfaz grafica.
Saludos !!!
-
Hola a todos, ya realice la prueba unicamente con el ULN2803 y los leds, pero aun no se activan, las entradas del ULN2803 los polarice con 5V y no hubo resultados.
SALUDOS!!!
-
Ya tienes la pista donde buscar el error... :mrgreen: :mrgreen:
-
Puedes subir el diagrama de la conexión que estas haciendo, con fuente y todo. No el Pablin, sino el que verdaderamente estas usando.
Saludos,
Diego