Autor Tema: Contar pulsos y mostrar duty lcd  (Leído 3385 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Contar pulsos y mostrar duty lcd
« Respuesta #15 en: 25 de Junio de 2016, 12:28:17 »
Pone el pin del CCP, el que detecta los flancos. Tu entrada de señal
« Última modificación: 25 de Junio de 2016, 12:30:35 por KILLERJC »

Desconectado callecuatro1976

  • PIC12
  • **
  • Mensajes: 85
Re:Contar pulsos y mostrar duty lcd
« Respuesta #16 en: 25 de Junio de 2016, 13:43:23 »
Se hizo un lio ahora se me mezcló todo tendría  que usar otro pin c7 y como modificó el código?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Contar pulsos y mostrar duty lcd
« Respuesta #17 en: 25 de Junio de 2016, 14:08:56 »
En serio me estas preguntando eso ?, RC2 es el pin CCP1 el cual estas haciendo ingresar la señal y que deberias leer, Bueno por las dudas aca tenes la otra forma:

Este es el caso que simplemente cambias la condicion de los flancos, tal ves te sea mas facil ya que no tenes que leer ningun puerto.
Código: C
  1. bool Flanco = 0;
  2.  
  3. // En el setup comenzar seteado con flanco DESCENDENTE! es decir:               setup_ccp1(CCP_CAPTURE_FE);
  4.  
  5. #int_CCP1
  6. void  CCP1_isr(void)
  7. {
  8.         tiempo=ccp_1;
  9.         if(Flanco == 0)
  10.         {
  11.                 setup_ccp1(CCP_CAPTURE_RE);
  12.                 Flanco = 1;
  13.                 ton=tiempo-tiempo2;
  14.                
  15.         }
  16.         else
  17.         {
  18.                 setup_ccp1(CCP_CAPTURE_FE);
  19.                 Flanco = 0;
  20.                 toff=tiempo-tiempo2;
  21.         }
  22.         tiempo2=tiempo;
  23. }

Ya mas seria hacerte el programa por completo, no se si los setups son correctos, no uso CCS.  en XC8 simplemente cambiaria 1 o 2 bit.

Desconectado callecuatro1976

  • PIC12
  • **
  • Mensajes: 85
Re:Contar pulsos y mostrar duty lcd
« Respuesta #18 en: 25 de Junio de 2016, 14:44:50 »
gracias killerjc!!!

funciona después de tantos idas y venidas solo tengo dos problemas que no puedo solucionar
1) cuando enciendo lcd no me aparecen los ceros, recién cuando recibe un pulso empieza a contar
2) cuando corto los pulsos queda el valor no vuelve a cero como lo cambio es el if (pulsonuevo) pero no se modificarlo de otra manera, gracias



#include <16f883.h>
#device ADC=10
#use delay (internal = 8MHz)
#define use_portb_lcd true
 #fuses NOFCMEN, NOIESO,INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT,
#include <lcd.c>
int1 nuevopulso=0;
int16 t_bajada_1=0,t_subida_1=0,t_on=0,t_total=0,t_subida_2=0;
float32  t=0,f,duty,periodo;
int flag;
#int_ccp1
void ccp1_int(void)
{
if(flag == 3)
{
flag = 0;
}
if (flag == 0 )
{
t_subida_1=ccp_1;
setup_ccp1(CCP_CAPTURE_FE);
}
if (flag ==1 )
{
t_bajada_1=ccp_1;
setup_ccp1(CCP_CAPTURE_RE);
}
if ( flag==2)
{
t_subida_2=ccp_1;
setup_ccp1(CCP_CAPTURE_RE);

if (nuevopulso==0)
{
nuevopulso=1;
}
}
flag++;
}

void main()
{
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_ccp1(CCP_CAPTURE_RE);
flag=0;

enable_interrupts(int_ccp1);
enable_interrupts(global);
nuevopulso=0;
lcd_init();
while(true)
{

if(nuevopulso)
{
t_on=(t_bajada_1-t_subida_1);

t_total=(t_subida_2-t_subida_1);

t=4.0*8.0/8000000.0;
   Periodo=T*t_total;
f=1/periodo;

duty=(float)t_on*100/t_total;

delay_ms(50);

 lcd_gotoxy(1,2);
printf(lcd_putc,"F=%3.0f",f);
    lcd_gotoxy(9,2);
printf(lcd_putc,"duty=%2.0f%%",duty);   
delay_ms(100);
nuevopulso=0;

}

}




}
« Última modificación: 28 de Junio de 2016, 17:06:34 por callecuatro1976 »