|
Mostrar Mensajes
|
Páginas: [1]
|
1
|
Informática / Electrónica / ayuda para medir ancho de pulso con ccp
|
en: 3 Noviembre 2009, 02:13 am
|
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????
|
|
|
2
|
Informática / Electrónica / Re: Introduccion a la programacion de PICS en lenguaje C (CCS)
|
en: 2 Noviembre 2009, 03:54 am
|
Insertar Cita Hola Marco_recargado. mira me interesa el programa de:
////////////ESTE PROGRAMA UTILZA EL CIRCUITO DS1307 PARA MOSTRAR LA //////////// //////////HORA EN TIEMPO REAL A TRAVEZ DE UNOS DISPLAY´S DE 7 SEGMENTOS///////// //////////EL PROGRAMA PARA SIMULARLO EN PROTEUS SE LLAMA RELOJ TIEMPO REAL//////
y no veo el archivo .dns para simularlo en el proteus. Lo podrias subir porfa.
Bye.
|
|
|
3
|
Informática / Electrónica / Re: Introduccion a la programacion de PICS en lenguaje C (CCS)
|
en: 2 Noviembre 2009, 03:51 am
|
Hola Marco_recargado. mira me interesa el programa de:
////////////ESTE PROGRAMA UTILZA EL CIRCUITO DS1307 PARA MOSTRAR LA //////////// //////////HORA EN TIEMPO REAL A TRAVEZ DE UNOS DISPLAY´S DE 7 SEGMENTOS///////// //////////EL PROGRAMA PARA SIMULARLO EN PROTEUS SE LLAMA RELOJ TIEMPO REAL//////
y no veo el archivo .dns para simularlo en el proteus. Lo podrias subir porfa.
Bye.
|
|
|
4
|
Media / Juegos y Consolas / Re: Tutorial 2 emuladores GameCube: Dolphin y Dolwin
|
en: 28 Diciembre 2008, 00:36 am
|
Socio, tengo un problema con el emulador dolphin, quiero correr el resident evil 0 y me corre bien al principio(la parte de la memory card) y luego se escucha pero no se ve nada, ademas esa parte de poner en japones y luego a ingles no me aparece en la opcion de lenguaje, en todo caso si lo puedo cambiar a español(ya q aparece). Hago esto opciones==> configuraciones==>la pestaña general==> y me voy a idioma "español"(me dice para q surga efecto esto debo reiniciar el emulador) hasta ahi bien, luego corro el juego me aparece lo q te digo y no sale la opcion japones e ingles, porfa me podrias dar una solucion o subir de nuevo el emulador . Te agradeceria un monton si me ayudaras. Bye
|
|
|
5
|
Media / Juegos y Consolas / Re: Tutorial 2 emuladores GameCube: Dolphin y Dolwin
|
en: 28 Diciembre 2008, 00:33 am
|
Socio, tengo un problema con el emulador dolphin, quiero correr el resident evil 0 y me corre bien al principio(la parte de la memory card) y luego se escucha pero no se ve nada, ademas esa parte de poner en japones y luego a ingles no me aparece en la opcion de lenguaje, en todo caso si lo puedo cambiar a español(ya q aparece). Hago esto opciones==> configuraciones==>la pestaña general==> y me voy a idioma "español"(me dice para q surga efecto esto debo reiniciar el emulador) hasta ahi bien, luego corro el juego me aparece lo q te digo y no sale la opcion japones e ingles, porfa me podrias dar una solucion o subir de nuevo el emulador . Te agradeceria un monton si me ayudaras. Bye
|
|
|
|
|
|
|