Autor
|
Tema: ayuda para medir ancho de pulso con ccp (Leído 3,253 veces)
|
eleazar83
Desconectado
Mensajes: 5
|
Hola a todos:
Miren tengo un problema para medir el ancho del pulso mediante el modulo ccp. Les envio 2 programa q tengo(en teoria hacen lo mismo), lo compilo y cero problemas, pero en el proteus no me muestra el valor del ancho del pulso.
#include <16f876.h> #fuses XT,NOWDT #use delay(clock=4000000) #include <lcd.c> #byte pir1=0x0c #include <math.h>
int1 nuevopulso=0; //Entra otro pulso int16 TFB=0; //Tiempo flancos int16 TFS=0; int16 TF=0; float AP; //Valor final del ancho de pulso int1 cambio=0; //Cambio de flanco de disparo
#int_ccp1 void ccp1_int(){ //Función interrupción if(cambio==0){ //Flanco de subida TFS=CCP_1; //Carga del valor del registro CCPR1 en flanco subida setup_ccp1(CCP_CAPTURE_FE); //Configuración modo Captura en flanco de bajada cambio=1; //Control de cambio de flanco } else { //Flanco de Bajada TFB=CCP_1; //Carga del valor del registro CCPR1 en flanco bajada setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subida cambio=0; //Control de cambio de flanco
if(nuevopulso==0){ //Fin de pulso... nuevopulso=1; //pulso a medir } } }
void main() {
lcd_init(); disable_interrupts(global); setup_timer_1(T1_INTERNAL); //Configuración TMR1 setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subida cambio = 0; //Control de cambio a 0
enable_interrupts(int_ccp1); //Habilitación interrupción modulo CCP enable_interrupts(global); //Habilitación interrupción global do { if(nuevopulso==1){ //¿Pulso nuevo? TF=(TFB-TFS); //Ancho de pulso. AP = TF*1.0; //Ancho de pulso en microsegundos (a 4MHz:1us) printf(lcd_putc,"\nPulso = %6.1fuS ", AP); nuevopulso=0; //Pulso ya medido, espera nuevo } } while (TRUE); }
--------------------------------------------------------------------------------------------------------------------
Este es el otro programa:
#include <16f876.h> #fuses XT,NOWDT #use delay(clock=4000000) #include <lcd.c> #byte PIR1=0x0C
float AP=0.0; //Valor final del ancho de pulso int1 nuevopulso=0;
long rise,fall; int16 TF=0; #int_ccp2 void isr() { rise = CCP_1; fall = CCP_2; nuevopulso=1; // CCP_1 is the time the pulse went high } // CCP_2 is the time the pulse went low // pulse_width/(clock/4) is the time
// In order for this to work the ISR // overhead must be less than the // low time. For this program the // overhead is 45 instructions. The // low time must then be at least // 9 us.
void main() { setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise setup_ccp2(CCP_CAPTURE_FE); // Configure CCP2 to capture fall setup_timer_1(T1_INTERNAL); // Start timer 1
enable_interrupts(INT_CCP2); // Setup interrupt on falling edge enable_interrupts(GLOBAL);
do { if(nuevopulso==1){ //¿Pulso nuevo? TF=(rise-fall); //Ancho de pulso. AP = TF*1.0; //Ancho de pulso en microsegundos (a 4MHz:1us) printf(lcd_putc,"\nPulso = %6.1fuS ", AP); nuevopulso=0; //Pulso ya medido, espera nuevo } } while (TRUE); }
Les adjunto tambien el archivo de proteus para q lo puedan simular. Ojala me puedan ayudar. Y decirme cual es mi error. lo raro es q al cambiar el #include<16f876> por #include <18f452> (hago el cambio del cto. en el proteus obvio) me muestra por pantalla. Porque sera????
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Medir el ancho de banda entre dos nodos en una LAN
Redes
|
madpitbull_99
|
2
|
13,371
|
3 Agosto 2011, 01:50 am
por Kasswed
|
|
|
Medir el ancho de banda de una conexión en tiempo real
Java
|
loandoer
|
4
|
3,928
|
5 Agosto 2014, 13:01 pm
por blackyer94
|
|
|
Banco británico medirá pulso con pulsera inteligente para identificar a sus ...
Noticias
|
wolfbcn
|
0
|
1,382
|
23 Marzo 2015, 21:57 pm
por wolfbcn
|
|
|
[Ayuda] Medir con multímetro.
Electrónica
|
ignorantev1.1
|
6
|
3,673
|
22 Noviembre 2015, 05:27 am
por ignorantev1.1
|
|
|
Duda con respecto al test para medir ancho de banda
Redes
|
virtualedu
|
1
|
2,012
|
16 Febrero 2019, 11:00 am
por warcry.
|
|