Autor Tema: Problema con PIC 12F675  (Leído 4194 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Problema con PIC 12F675
« en: 10 de Julio de 2014, 13:11:29 »
Hola gente. Tengo un problema que si parece estupido creo yo con este pic. El programa es digamos sencillo no, lo siguiente. Aquí va el código:

Código: [Seleccionar]
'--------------------------------------------------------
'REGISTROS
ADCON0 = %00000000
CMCON = %00000111
ANSEL = %00000000
'--------------------------------------------------------
'FUSES
@ Device PIC12F675
@ Device INTRC_OSC_NOCLKOUT, WDT_OFF, MCLR_OFF, PROTECT_OFF, BOD_OFF, PWRT_ON
'--------------------------------------------------------
'VELOCIDAD DEL OSCILADOR
DEFINE OSC 4 'Oscilador de 4mhz de velocidad
'--------------------------------------------------------
'CONFIGURACION DE PUERTOS
GPIO = %00000000 'Valor inicial de los puertos.
TRISIO = %00100000 'GPIO.5 como entrada. El resto como salidas.
'--------------------------------------------------------

'*********************************************************************************************************************************************************************
'***********************************************************************COMIENZO DEL PROGRAMA*************************************************************************
'*********************************************************************************************************************************************************************

'--------------------------------------------------------
Standby: 'Inicio del programa cuando conecto la corriente
HIGH GPIO.0 'Enciendo el led del boton
PAUSE 10 'Pausa de 10 milisegundos
LOW GPIO.0 'Apago el led del boton
PAUSE 1000 'Pausa de 1000 milisegundos
IF GPIO.5=1 THEN 'Si pulso el boton de encendido hago
        PAUSE 100                                                                                'Pausa de 100 milisegundos para antirrebote
        HIGH GPIO.0                'Enciendo permanentemente el led del boton de encendido
HIGH GPIO.1 'Activo el rele de encendido del ordenador 1 (Pulso boton)
PAUSE 600 'Pausa de 600 milisegundos
LOW GPIO.1 'Desactivo el rele de encendido del ordenador 1 (Suelto boton)
PAUSE 10000                                                                     'Pausa de 10000 milisegundos
HIGH GPIO.2 'Activo el rele de encendido del ordenador 2 (Pulso boton)
PAUSE 600 'Pausa de 600 milisegundos
LOW GPIO.2 'Desactivo el rele de encendido del ordenador 2 (Suelto boton)
PAUSE 1000
Poweron: 'Entro en el bucle mientras los equipos estan encendidos
IF GPIO.5=1 THEN 'Si pulso el boton de encendido hago
                                PAUSE 100                                                        'Pausa de 100 milisegundos para antirrebote
HIGH GPIO.1 'Activo el rele de encendido del ordenador 1 (Pulso boton)
PAUSE 600 'Pausa de 600 milisegundos
LOW GPIO.1 'Desactivo el rele de encendido del ordenador 1 (Suelto boton)
pause 1000                                                       'Pausa de 1000 milisegundos
HIGH GPIO.2 'Activo el rele de encendido del ordenador 2 (Pulso boton)
PAUSE 1000 'Pausa de 600 milisegundos
LOW GPIO.2 'Desactivo el rele de encendido del ordenador 2 (Suelto boton)
Goto Standby 'Vuelvo al principio del programa
ENDIF
GOTO Poweron 'Vuelvo a Poweron si no pulso el boton de encendido
ENDIF
GOTO Standby
'--------------------------------------------------------

'*********************************************************************************************************************************************************************
'**************************************************************************FIN DEL PROGRAMA***************************************************************************
'*********************************************************************************************************************************************************************

'--------------------------------------------------------
END 'Fin del programa

Bien el programa lo único que hace es hacer parpadear un led cuando recibe corriente de 5 vsb de una fuente de alimentación de pc. Cuando pulso el botón, se supone que debería de dejar el led fijo y encender primero el rele 1 y luego el rele 2 pasados 10 segundos, y se debería quedar en el bucle Poweron pero no, sale y continua con la ejecucion del programa y vuelve al principio cuando mas le apetece. Se os ocurre alguna cosa que a mi no se me haya ocurrido?

Adjunto una captura de proteus en el cual SI funciona perfectamente.

Un saludo electrónicos. :)
« Última modificación: 10 de Julio de 2014, 14:55:56 por JORGITO_YKE »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problema con PIC 12F675
« Respuesta #1 en: 10 de Julio de 2014, 17:02:01 »
Pues por lo que comentas parece que los reles te esten metiendo ruido y ese ruido te lo esta resteando, la mejor manera de aislarlos es poniendo un optoacoplador entre el PIC y los transistores.

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 209
Re: Problema con PIC 12F675
« Respuesta #2 en: 10 de Julio de 2014, 18:12:55 »
En la conexión real no te olvides de colocar el condensador de "desacople"  en el Vdd del pic...
tampoco deberías prescindir de los diodos en paralelo con las bobinas de los relés, para que se las vean con el transitorio, terrible interferencia se genera ahí.

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema con PIC 12F675
« Respuesta #3 en: 10 de Julio de 2014, 19:32:51 »
Eso hice despues. Tengo dos diodos 1n4001 y el condensador entre los pines de alimentacion del pic. Los reles son realmente pequeños creo yo como para meter ruido. Son los tq2-5v si poneis esto en google os salen. Lo curioso es que al principio de encenderlo no lo hace hasta que luego de un rato empieza y no para. Un saludo.

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema con PIC 12F675
« Respuesta #4 en: 11 de Julio de 2014, 04:55:00 »
He probado a desconectar fisicamente los reles de la pcb y hace exactamente lo mismo asi que reles descartados. El pic es nuevo y no se le hizo ningun tipo de inversion de corriente ni de sobrevoltaje ni nada. Solamente empieza a hacerlo despues de tenerlo un tiempo encendido.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problema con PIC 12F675
« Respuesta #5 en: 11 de Julio de 2014, 06:08:30 »
Citar
En la conexión real no te olvides de colocar el condensador de "desacople"  en el Vdd del pic...
tampoco deberías prescindir de los diodos en paralelo con las bobinas de los relés, para que se las vean con el transitorio, terrible interferencia se genera ahí.

Si exacto, se me habia pasado, porque ademas te pueden cascar los transistores.

Pon el pulsador para que funcione cuando se suelta, es decir detecta pulsacion y espera hasta que se suelta, cuando se suelta ejecuta el bucle, tambien seria bueno darles un poco mas de tiempo a los reles, en vez de 600mS dales un par de segundos, supongo que estos reles pequeños son rapidos pero bueno, a las cosas electromecanicas les gustan mas los segundos que los milisegundos :lol: :lol:

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema con PIC 12F675
« Respuesta #6 en: 11 de Julio de 2014, 06:28:57 »
Citar
En la conexión real no te olvides de colocar el condensador de "desacople"  en el Vdd del pic...
tampoco deberías prescindir de los diodos en paralelo con las bobinas de los relés, para que se las vean con el transitorio, terrible interferencia se genera ahí.

Si exacto, se me había pasado, porque ademas te pueden cascar los transistores.

Pon el pulsador para que funcione cuando se suelta, es decir detecta pulsación y espera hasta que se suelta, cuando se suelta ejecuta el bucle, también seria bueno darles un poco mas de tiempo a los reles, en vez de 600mS dales un par de segundos, supongo que estos reles pequeños son rápidos pero bueno, a las cosas electromecánicas les gustan mas los segundos que los milisegundos :lol: :lol:

Con respecto al tiempo de los reles tiene que ser poco ya que son para encender dos ordenadores y si la pulsación es muy larga puede que no funcione.

En el software cambie IF GPIO.5=1 por GPIO.5=0 Y cambie pulldown por pullup en la resistencia de 10k.

Lo que me comentas del pulsador entonces es que al pulsar no active sino que desactive y el pic que lo detecte no?

No sera problema de software o configuración de algo? Sin conectar el botón a través e la resistencia de 10k conectada a positivo (pullup), en el pin me da unos 4,60 voltios eso es un estado alto así que no se porque el h********a xd dice que por ese pin ahí hay un cero lógico, eso no puede ser. Adjunto el esquema modificado de como lo tengo en la realidad. También hay un condensador 104 en los pines del pic.
« Última modificación: 12 de Julio de 2014, 17:36:56 por JORGITO_YKE »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problema con PIC 12F675
« Respuesta #7 en: 11 de Julio de 2014, 07:38:46 »
Citar
Lo que me comentas del pulsador entonces es que al pulsar no active sino que desactive y el pic que lo detecte no?

No, no desactiva, simplemente detecta la pulsacion, pero hasta que se suelta no "activa", casi todos los pulsadores estan configurados de esta manera, hasta que se sueltan no hacen nada.

Citar
En el software cambie IF GPIO.5=1 por GPIO.5=0 Y cambie pulldown por pullup en la resistencia de 10k.

Vale, es lo mismo, cuando se pulsa detecta 0, hasta que se suelte y detecte un 1 no empezara.

Citar
No sera problema de software o configuración de algo? Sin conectar el botón a través e la resistencia de 10k conectada a positivo (pullup), en el pin me da unos 4,60 voltios eso es un estado alto así que no se porque el h********a xd dice que por ese pin ahí hay un cero lógico, eso no puede ser. Adjunto el esquema modificado de como lo tengo en la realidad. También hay un condensador 104 en los pines del pic.

En el data sheet por el final trae la caracteristicas electricas de cada PIC, pero generalmente entre 2 y 5,5V es un 1 logico. Ahora el esquema debe funcionar...pero casi seguro que de vez en cuando falle, porque los reles aunque sean pequeños meteran ruido a traves de los transistores, con un opto se soluciona, pero bueno de momento prueba asi, ya que no es logico que falle siempre??? o si. Es que con cargas inductivas se debe aislar siempre el PIC de las cargas, cuidado tambien con la alimentacion esto lo debe solucionar el condensador, ¿Lo tienes entre + y - del PIC? a traves del aire tambien meten ruido que el PIC recibe, los reles son un poco cabrones  :D :D

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema con PIC 12F675
« Respuesta #8 en: 11 de Julio de 2014, 07:44:34 »
Okey. Lo del botón sigo sin verlo en mi cabeza jaja me podrías poner un ejemplo? es que no lo doy entendido. Como puse antes, los extraños los hace sin rele también, es decir desconecte la alimentación de los reles y hace exactamente lo mismo. Saludos y muchas gracias por molestarte :)

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema con PIC 12F675
« Respuesta #9 en: 11 de Julio de 2014, 10:39:44 »
He probado mil y una cosas reescribí el código, cambie los if por button, pero nada hace lo que le conviene. A veces entra en bucle seguido y se salta los if con rele sin rele, con botón sin botón y con el led y sin led y con condensador en la alimentación del pic y sin el y tambien con o sin los diodos de protección. No hay cortos en la pcb por ende tiene que ser algo con el software. Alguna idea mas?

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema con PIC 12F675
« Respuesta #10 en: 11 de Julio de 2014, 11:48:36 »
Creo que lo he solucionado. Voy a probar a dejarlo unas horas funcionando a ver que sucede. La clave fue "creo" en poner un capacitor 104 del pin del boton a masa y un toroide en el cable del led y del boton.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problema con PIC 12F675
« Respuesta #11 en: 11 de Julio de 2014, 12:34:44 »
Bien como diria Jack el destripador vayamos por partes.

Creo que te falta una cosa en la configuracion, solo creo porque no se si el compilador te lo hace, ya que yo de basic no se mucho, mirate esta configuracion que hicimos para el el 16f629 que creo que es el hermano menor de este:

INICIO   
clrf   GPIO   
movlw   07h   
movwf   CMCON         ; todos los pines en modo digital   
bsf   STATUS,5      ; activa la página 138.   
movlw   b'111100'      ; GP0 y 1 salidas 2, 3, 4 y 5 entradas.39.   
movwf   TRISIO            
call   CALIBRAOSC   
movwf   OSCCAL
   
clrf   INTCON         ; deshabilitar interrupciones.43.   
movlw   0X07         ; TIMER con prescaler de 256, para 50ms44.   
movwf   OPTION_REG   
movlw   0X20         ; habilitamos desborde de TIMER pero sin interrupción46.   
movwf   INTCON         ; cada 50ms nos seteara el flag TOIF de INTCON47.   
bcf   STATUS,5      ; volvemos a la página 048.   
clrf   GP0         ; apagamos led D49.   
clrf   GP1   

Esto que hicimos hace unos años con un PIC muy parecido a este, lo puedes ver en este enlace, es un modulo de intermitentes para una Harley Davidson, tambien hay un par de consejos a tener en cuenta cuando se graba el PIC:

http://www.todopic.com.ar/foros/index.php?topic=32966.0

Tambien tengo una duda con tu programa, como yo de basic se poco, solo pregunto, ¿esto del final estara bien?

Goto Standby                      'Vuelvo al principio del programa
          ENDIF   
       GOTO Poweron                            'Vuelvo a Poweron si no pulso el boton de encendido
    ENDIF
GOTO Standby

Despues ¿Estara mal el pulsador y se te quedara a veces enclavado? si no tienes uno a mano ponle dos cables y haces con ellos de pulsador.

Lo del pulsador seria asi, voy omitir los antirrebotes para no liarte, porque no se si te manejas en ensamblador y si te lo hago yo en basic no funciona ni de coña  :lol: :lol::

CHEQUEAR

         btfsc    BUTTON      ;miramos si pulsador esta a 0, osea pulsado, si esta a 0 salta la siguiente instruccion
         goto    $-1              ;si viene aqui es que esta sin pulsar, por tanto sigue aqui
         btfss    BUTTON       ;si vene aqui es porque se pulso, tenia 0, esperamos hasta que se suelte y tenga un 1
         goto     $-1              ;esta a 0, espera aqui, hasta que se suelte y sea 1

SECUENCIA                     

         goto   .......                         ;si llego aqui es que se pulso y se solto, por tanto realiza la secuencia

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problema con PIC 12F675
« Respuesta #12 en: 11 de Julio de 2014, 12:38:07 »
Vaya estaba sin internet, y cuando volvi a tenerla y publique ya estaba tu respuesta. Bueno me alegro que ya funcione.

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema con PIC 12F675
« Respuesta #13 en: 11 de Julio de 2014, 13:20:31 »
No obstante gracias por molestarte esto muy agradecido con las ideas aportadas. Por lo que fui comprobando, al conectar el pulsador a la pcb digamos ese chisporroteo que hace al conectar ya era suficiente para que el maldito me la liara (no va soldado). Entonces puse el capacitor y no volvió a tener mas problemas. Tambien soldé a masa dos pines libres del pic por si acaso. Volví a modificar el programa de nuevo y utilice IF otra vez en vez de BUTTON que me suponía seria así el tema de los botones. Lo único ahora que hizo así raro es dejar un rele enclavado cuando lo conectas al standby de la fuente con el equipo en marcha. Supongo que tendré que filtrar mas la entrada de 5vsb al circuito. Un saludo. Cuando este listo lo pegare por aquí por si alguien le es necesario.

PD: yo de asm tampoco tengo ni idea jeje. Empece a programar pics hace un mes y un poco en plan autodidacta y estoy de hecho desarrollando una insoladora que casi finalice. Poco a poco como se suele decir aunque a veces te atasques :)

Si lo del ENDIF lo pones para cerrar el IF de arriba. Es necesario sino no te deja compilar sino recuerdo mal.
« Última modificación: 11 de Julio de 2014, 13:31:23 por JORGITO_YKE »

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema con PIC 12F675
« Respuesta #14 en: 11 de Julio de 2014, 17:36:16 »
El circuito parece que funciona salvo que después de un buen rato (mas que antes por suerte) se activa solo. Sera también problema de ruidos? Lo digo porque estoy sacando la corriente directamente de la fuente de un pc e igual eso no esta bien filtrado. La corriente es estable a 5,07 voltios es decir ni pestañea.

Edito: Uno de los transistores en su base tiene un voltaje de 0.6, sin embargo, en la resistencia que sale del pic y va a ese transistor me marca 0 v? WTF? Sera que ese transistor esta mal y deriva voltaje del colector hacia la base? Un saludo

Edito 2: Problema de suciedad entre pistas se ve que igual hacia un pequeño corto o algo. Uno de los reles estaba mal (esta bien a veces lo reciclar pero no siempre  :mrgreen:) Todo testeado y funcionando perfectamente por lo menos durante 4 horas no fallo jaja.

Lo dicho. Posteo aquí todo por si a alguien le sirve. Esta muy bien comentado así que cualquier modificación es sencilla.

Dispositivo                                     
      PIC12F675                                    
      Esquema de conexiones                            
      GPIO.0 - LED DE ESTADO                           
      GPIO.1 - SALIDA RELE 1                           
      GPIO.2 - SALIDA RELE 2                           
      GPIO.3 - NC                                    
      GPIO.4 - NC                                      
      GPIO.5 - ENTRADA BOTON

Código: [Seleccionar]

'--------------------------------------------------------
'REGISTROS
ADCON0 = %00000000 'Apago los conversores A/D
CMCON = %00000111 'Apago los comparadores
ANSEL = %00000000 'Puertos digitales
'--------------------------------------------------------
'FUSES
@ Device PIC12F675
@ Device INTRC_OSC_NOCLKOUT, WDT_OFF, MCLR_OFF, PROTECT_OFF, BOD_OFF, PWRT_ON
'--------------------------------------------------------
'VELOCIDAD DEL OSCILADOR
DEFINE OSC 4 'Oscilador de 4mhz de velocidad
'--------------------------------------------------------
'CONFIGURACION DE PUERTOS
GPIO = %00000000 'Valor inicial de los puertos.
TRISIO = %00100000 'GPIO.5 como entrada. El resto como salidas.
'--------------------------------------------------------

'*********************************************************************************************************************************************************************
'***********************************************************************COMIENZO DEL PROGRAMA*************************************************************************
'*********************************************************************************************************************************************************************

'--------------------------------------------------------
standby:                                                      'Inicio del programa cuando conecto la corriente
    IF GPIO.5=1 THEN                                     'Si pulso el boton de encendido hago
     GOSUB turnpcon                                   'Voy a la subrutina turnpcon
     GOTO poweron                                     'Voy al bucle poweron
    ENDIF
HIGH GPIO.0 'Enciendo el led del boton
PAUSE 10 'Pausa de 10 milisegundos
LOW GPIO.0 'Apago el led del boton
PAUSE 1000 'Pausa de 1000 milisegundos
GOTO standby                                           'Si no pulso el boton vuelvo a standby
poweron:                                               'Me quedo en el bucle poweron mientras los equipos estan encendidos
    IF GPIO.5=1 THEN                                    'Si pulso el boton de encendido hago
     GOSUB turnpcoff                                 'Voy a la subrutina turnpcoff
     GOTO standby                                    'Voy al bucle standby
    ENDIF
GOTO poweron                                           'Si no lo pulso vuelvo a poweron
'--------------------------------------------------------

'*********************************************************************************************************************************************************************
'*****************************************************************************SUBRUTINAS******************************************************************************
'*********************************************************************************************************************************************************************

'--------------------------------------------------------
turnpcon:          'Inicio de la subrutina de encendido de los ordenadores
HIGH GPIO.0    'Enciendo permanentemente el led del boton de encendido
HIGH GPIO.1    'Activo el rele del ordenador 1 (Pulso boton)
PAUSE 800            'Pausa de 800 milisegundos
LOW GPIO.1    'Desactivo el rele del ordenador 1 (Suelto boton)
PAUSE 10000    'Pausa de 10000 milisegundos
HIGH GPIO.2    'Activo el rele del ordenador 2 (Pulso boton)
PAUSE 800    'Pausa de 800 milisegundos
LOW GPIO.2    'Desactivo el rele del ordenador 2 (Suelto boton)
PAUSE 1000
RETURN
turnpcoff:                                                                                      'Inicio de la subrutina de apagado de los ordenadores
   HIGH GPIO.2                            'Activo el rele del ordenador 2 (Pulso boton)
   PAUSE 800                    'Pausa de 800 milisegundos
   LOW GPIO.2                    'Desactivo el rele del ordenador 2 (Suelto boton)
   PAUSE 10000                        'Pausa de 1000 milisegundos
   HIGH GPIO.1                            'Activo el rele del ordenador 1 (Pulso boton)
   PAUSE 800                    'Pausa de 800 milisegundos
   LOW GPIO.1                    'Desactivo el rele del ordenador 1 (Suelto boton)
   PAUSE 1000
RETURN
'--------------------------------------------------------

'*********************************************************************************************************************************************************************
'**************************************************************************FIN DEL PROGRAMA***************************************************************************
'*********************************************************************************************************************************************************************

'--------------------------------------------------------
END 'Fin del programa

Este circuito se esta usando para encender dos pc con una misma fuente de alimentación y es para automatizar la secuencia de encendido y no tener que usar dos botones. Dependiendo los equipos hay que cambiar el PAUSE de arranque de 10000 ms.

Adjunto el esquema definitivo.

Los componentes son:

Cualquier rele de 5 voltios es valido (Lo interesante es utilizar microreles)
Una resistencia de 10Kohm
Dos resistencias de 4.7Kohm
Dos BC547
Dos diodos 1N4001
Un pulsador con led integrado
Cuatro condensadores de 100nF cerámicos (numero 104) En el esquema no aparece pero entre los pines de alimentación del pic hay que colocar uno lo mas próximo posible a este.
Un pic 12F675 (También se puede usar uno equivalente pero hay que modificar el programa)

Nota: Si se invierte la polaridad de la conexión al pc este arrancara solo por los condensadores.

Un saludo gente :)
« Última modificación: 12 de Julio de 2014, 17:47:08 por JORGITO_YKE »


 

anything