Autor Tema: A partir de pulsos de entrada generar pulso continuo de salida  (Leído 3359 veces)

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

Desconectado palarcom

  • PIC10
  • *
  • Mensajes: 30
A partir de pulsos de entrada generar pulso continuo de salida
« en: 02 de Diciembre de 2015, 14:25:35 »
Buenas,

necesito hacer una aplicación que a partir de un tren de pulsos de entrada (50 ms arriba, 50 ms abajo) me mantenga una salida en alto el tiempo que dura el tren de pulsos y me paso un magen de guarda (5 sg), no necesito ser muy exacto al cerrar el pulso continuo de salida. He hecho el siguiente programa:

#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)

int8 giEnciende = 0;

#int_EXT
void  EXT_isr(void)
{
   giEnciende = 1;
}

void main()
{
   ext_int_edge(L_TO_H); // interrupcion para comparacion flanco de subida
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);
   
   while(true) {
      if (giEnciende == 1){
         giEnciende = 0;
         output_high(PIN_B1); //enciende el led
         delay_ms(5000); //espera 5000 ms
      }
      else {
         output_low(PIN_B1); //enciende el led
      }
   };

}

Lo que observo es que genero el tren del pulsos y salta la interrupción, pero cuando paro el tren de pulsos, en la salida veo que a los 5 sg me hace un parpadeo para apagar la salida pero no termina de hacerlo y asi varias veces cada 5 sg (no siempre las mismas, unas veces 9 otras veces 13...) y finalmente en una de ellas se apaga, hasta el siguiente tren de pulsos.

Que me falta?

Gracias.

Desconectado uZYNQ

  • PIC16
  • ***
  • Mensajes: 123
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #1 en: 02 de Diciembre de 2015, 14:36:38 »
 No conozco mucho el CCS pero en cualquier lenguaje siempre se debe borrar la bandera de interrupcion al salir de la rutina de interrupcion, viendo en internet creo que la que tu utilizas es: clear_Interrupt(INT_EXT);

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #2 en: 02 de Diciembre de 2015, 21:09:32 »
Si unicamente necesitas eso, podrias hacerlo sin interrupciones:

Código: C
  1. void main()
  2. {
  3.         ext_int_edge(L_TO_H); // interrupcion para comparacion flanco de subida
  4.         // No activo las interrupciones, solo leo el flag
  5.  
  6.  
  7.         while(true)
  8.         {
  9.                 if ( interrupt_active(INT_EXT) )
  10.                 {
  11.                         output_high(PIN_B1); //enciende el led
  12.                 }
  13.                 else
  14.                 {
  15.                         output_low(PIN_B1);
  16.                 }
  17.                 delay_ms(120); // 120ms sufiente para que suceda si o si un flanco ascendende nuevamente
  18.         }
  19. }

Desconectado palarcom

  • PIC10
  • *
  • Mensajes: 30
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #3 en: 03 de Diciembre de 2015, 13:50:10 »
Lo que me pasas es bastante sencillo, sí. Simulando he visto que faltaría desactivar la interrupción, después de la línea output_high(PIN_B1); habría que añadir
clear_interrupt(INT_EXT);

Creo que el problema es mas hardware quiero activar la entrada a partir de un Buz11 con la patilla negativa y me hace cosas raras. Esquema de arriba.

También lo he intentado con mosfet P en la salida pero tampoco, esquema de abajo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #4 en: 03 de Diciembre de 2015, 14:17:25 »
Es correcto lo del clear_interrupt() me olvide.

Ese circuito es lo peor que podrias haber realizado, es mas no se que quisiste hacer. Tu problema ahora esta en el circuito.

Por que razon enviarias la señal al MCLR ? estarias reseteando el micro continuamente... Envia solo la señal a RB0. Ademas te das cuenta que estas enviando 12V al pin de entrada del PIC y al MCLR? Y lo que es peor SIN resistencia entre medio lo del RB0 ? , Ese circuito solo pide a gritos que se queme el PIC

Hubiera sido mas simple:

- una resistencia a VDD ( 5V ) en el MCLR,
- una resistencia 10K a Rb0 + switch + señal. Todo en serie.

Y listo, solo tomo 2 resistencias y tenes funcionando tu circuito. Pero realmente no se que quisiste hacer ahi.
A pesar que supuestamente tenes alta impedancia en la entrada del PIN, esa resistencia de 10K te va a servir si es que pones una fuente de 12V, ya que el resto de voltaje se va a recortar por los diodos de clamping del mismo micro, y esa resistencia va a limitar la corriente que atravizen por los mismos, no destruyendo el pin/puerto/PIC, aunque deberias intentar que la señal de entrada sea de maximo 5V

Si quisieras usar el MOSFET, entonces podrias activar las resistencias de Pull-up del PORTB, o agregar una resistencia a 5V desde Rb0 y el mosfet que lo conecte a GND. Aunque creo que no tiene sentido gastarse en un MOSFET, a no ser que tengas una buena razon para hacerlo.

Tampoco entiendo por que esto esta en el foro de dsPIC  :mrgreen:
« Última modificación: 03 de Diciembre de 2015, 14:32:35 por KILLERJC »

Desconectado palarcom

  • PIC10
  • *
  • Mensajes: 30
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #5 en: 03 de Diciembre de 2015, 15:12:38 »
Ok, me explico.

La parte izquierda del circuito es de donde yo parto y no puedo tocar, es decir me viene dado a través de un aparato que genera un tren de pulsos, pero con el botón puedes parar dicho tren, y con el Buz11 me da una salida. Unicamente tengo dos terminales a los que tengo acceso por medio de dos cables externos, uno con +12 fijo y el 0V a partir del Buz11 cuando se activa. Además añade un led en el que se pueden observar los pulsos.

A partir del dispositivo anterior yo quiero hacer la mia en la que cuando haya pulsos yo saco un pulso continuo.

Por otro lado lo que comentas MCLR y VDD, es como lo proporciona Proteux por defecto al definir un proyecto para un pic concreto, o por lo menos a mi me lo hace.

Según lo anterior al final en la solución del esquema pongo la resistencia de 10K entre VDD y RB0 con la idea de darle el nivel alto en reposo (pull-up), y después para darle el 0 junto la salida (Drenador) del buzz con también mi entrada. Pero como comenté hace cosas raras, y no termino de encajar lo que me indicas en tu mensaje anterior. Creo que lo tengo a partir de un MOSFET canal P, pero si tienes clara la alternativa a no utilizarlo te lo agradecería.

Lo puse en este foro pues en principio pensé que era problema de programación del PIC, de la interrupción que hacia cosas raras.

Desconectado palarcom

  • PIC10
  • *
  • Mensajes: 30
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #6 en: 03 de Diciembre de 2015, 20:07:14 »
He simulado el esquema adjunto y parece que funciona.

Podria valer para no utilizar mosfet P?

Gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #7 en: 03 de Diciembre de 2015, 20:49:32 »
Podrias utilizar un transistor NPN tranquilamente. El cual pienso que es mucho mas barato de conseguir

Ojo con ese diagrama que estas poniendo en corto los 12V cuando cerras el circuito. el diodo tiene muy poca resistenca en directa + la muy poca resistencia del MOSFET, espero que entiendas lo que digo. Ademas seguis sin incorporar resistencia a Rb0, lo cual estarian entrando 12V - Vdiodoled al pin.
Y con respecto a como conectar el las cosas ya te lo dije..

MCLR = Resisitencia a Vdd
Rb0 = Resistencia de 10K (1 pata de la resistencia al pin del PIC, la otra va a el colector del NPN y un extremo de la serie resistencia-diodo) , usa una resistencia de 330 ohms en serie con el diodo a VDD (1 extremo de la serie a la resistencia de 10K y otro a VDD) y del mismo punto que vaya al colector del transistor y el emisor directo a GND , ademas necesitarias una/dos resistencias de base para el transistor que elijas. ( transistor, Colector conectador a la union de la resistencia de 10K + serie diodo-resitencia, emisor a GND, base con una resistencia mas )

Empeza a guiarte menos por las simulaciones, o mirar mas las corrientes y potencias que estas usando y que se encuentren dentro de valores aceptables

Desconectado palarcom

  • PIC10
  • *
  • Mensajes: 30
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #8 en: 07 de Diciembre de 2015, 14:49:34 »
Ojo con ese diagrama que estas poniendo en corto los 12V cuando cerras el circuito. el diodo tiene muy poca resistenca en directa + la muy poca resistencia del MOSFET, espero que entiendas lo que digo. Ademas seguis sin incorporar resistencia a Rb0, lo cual estarian entrando 12V - Vdiodoled al pin.
Del esquema ultimo que propuse el diodo-led (que ya está en el circuito y no puedo tocar) es de 12V de activacion. Y por otro lado el mosfet cuando corta tiene los 10K para limitar la corriente de entrada a RB0 con lo cual entiendo que no necesitaría añadir mas resistencias. Encajaria más con estas indicaciones?

Podrias utilizar un transistor NPN tranquilamente. El cual pienso que es mucho mas barato de conseguir

MCLR = Resisitencia a Vdd
Rb0 = Resistencia de 10K (1 pata de la resistencia al pin del PIC, la otra va a el colector del NPN y un extremo de la serie resistencia-diodo) , usa una resistencia de 330 ohms en serie con el diodo a VDD (1 extremo de la serie a la resistencia de 10K y otro a VDD) y del mismo punto que vaya al colector del transistor y el emisor directo a GND , ademas necesitarias una/dos resistencias de base para el transistor que elijas. ( transistor, Colector conectador a la union de la resistencia de 10K + serie diodo-resitencia, emisor a GND, base con una resistencia mas )
Si entiendo bien las indicaciones el esquema que me indicas seria como el adjunto que pongo. Pero en este no se resuelve la conexión a la salida de la placa anterior. Si conecto a los 12 voltios el nuevo mosfet estará siempre activo pues por G tiene un +12V permanente frente a los 0V común a todo el esquema (conexión a (A)). Y si meto G a la salida del anterior pues directamente no polarizo con nada pues tengo o 0V o nada (conexión a (B))

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:A partir de pulsos de entrada generar pulso continuo de salida
« Respuesta #9 en: 07 de Diciembre de 2015, 19:42:22 »
El diagrama no es completamente lo que habia dicho (o lo que quiser transmitir), pense que querias si o si alimentarlo con 12V a esa entrada. y tambien pense que lo tenias de otra forma a esa "salida" por como hacias tu circuito.

Esta bien que corte GND es algo raro, peeero todo se puede?, si es otro sistema que puede que trabaje con mayores tensoiones te conviene mejor un optotransistor, ademas lo maximo que pediste es de 50Hz, asi que no creo que ningun opto sea lo suficientemente lento como para eso. Y te aseguras de que nada de esa salida te pueda quemar el PIC, a lo sumo se quema el opto pero no el PIC.

Al opto es mas simple aun, ya que lo conectas el diodo con una resistencia para esa tension ( 12V ), y a la salida, el colector al pin, y el emisor a GND,  Si no posee resistencia de pull-up interna esa salida, le agregas una externa, la cual ira de VCC/VDD al colector/pinPIC .
« Última modificación: 07 de Diciembre de 2015, 19:44:33 por KILLERJC »


 

anything