Autor Tema: incremento y visualizaciòn  (Leído 5136 veces)

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

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: incremento y visualizaciòn
« Respuesta #15 en: 05 de Agosto de 2008, 18:46:21 »
Gracias por las respuestas. ¿Como sería la declaración de la interrupción por el RB0 en el encabezado del programa?. De esa manera cada vez que haya un cambio de 0 a 5 se Incremente una variable que es la que se muestra por el lcd.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: incremento y visualizaciòn
« Respuesta #16 en: 05 de Agosto de 2008, 19:43:33 »
Hola

Seria algo asi:

Código: [Seleccionar]
#int_EXT
void pulses_isr(void)
{
 .... // codigo de la interrupcion
}

y en el programa principal:

Código: [Seleccionar]
void main(void)
{
 ext_int_edge(L_TO_H);//Capturamos el flanco ascendente
 enable_interrupts(INT_EXT);
 enable_interrupts(GLOBAL);
 while(true)
 {
  //evaluo el flag de la interrupcion
 }
}

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: incremento y visualizaciòn
« Respuesta #17 en: 05 de Agosto de 2008, 22:50:28 »
Este es el programa que tengo que modificar para que la variable se incremente por la interrupción por RB0.
#include <16F877.h>
 #fuses HS,NOWDT,NOPROTECT,NOLVP
 #use delay(clock=20000000) 
 #include <lcd.c> 
 long int Watts_Hora=0;
 #define in_pulsos pin_c0
 void main()
 {   
  Lcd_init(); 
  lcd_putc("\Potencia Activa/Hora");   
  while(TRUE) 
   {
  while(!input_state(in_pulsos));//Espero hasta que el pulsador sea presionado 
  delay_ms(200);//antirrebotes     
Watts_Hora++;
lcd_gotoxy(1,2);
  printf(lcd_putc,"Watts_Hora=%lu",watts_hora); 
  delay_ms(50);//una pulsacion por segundo   
   }
 }

La pregunta es :
1-  Cúal sería el codigo de la interrupción
2- Cuando pregunto por la bandera , estaría esta línea? -while(!input_state(in_pulsos));//Espero hasta que el pulsador sea presionado 
O como se preguntaría por la bandera?

De nuevo muchas gracias

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: incremento y visualizaciòn
« Respuesta #18 en: 05 de Agosto de 2008, 23:11:54 »
Hola.

 :? Veamos seria algo asi:

Código: C
  1. #include <16F877.h>
  2. #fuses HS,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock=20000000)
  4. #include <lcd.c>
  5.  
  6. unsigned int16 Watts_Hora=0;
  7.  
  8. #int_EXT
  9. void pulses_isr(void)
  10. {
  11.         ++Watts_Hora;                                                   //Incremento la variable con cada interrupcion
  12. }
  13. void main()
  14. {
  15.         ext_int_edge(L_TO_H);                                   //Activamos la deteccion del flanco ascendente
  16.         enable_interrupts(INT_EXT);                             //Activo interrupcion en RB0
  17.         enable_interrupts(GLOBAL);                              //Activo interrupciones globales
  18.         lcd_init();
  19.         lcd_putc("\fPotencia Activa/Hora");
  20.         while(TRUE)
  21.         {
  22.                 lcd_gotoxy(1,2);
  23.                 printf(lcd_putc,"Watts_Hora=%lu",watts_hora);//Muestro el valor de la variable
  24.         }
  25. }

No lo he compilado, prueba y me dices.

Si fuera con un flagg quedaria algo asi:
Código: C
  1. #include <16F877.h>
  2. #fuses HS,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock=20000000)
  4. #include <lcd.c>
  5.  
  6. unsigned int16 Watts_Hora=0;
  7. int1 flagg_pulso=0;
  8.  
  9. #int_EXT
  10. void pulses_isr(void)
  11. {
  12.         flagg_pulso=true;
  13. }
  14. void main()
  15. {
  16.         ext_int_edge(L_TO_H);                                   //Activamos la deteccion del flanco ascendente
  17.         enable_interrupts(INT_EXT);                             //Activo interrupcion en RB0
  18.         enable_interrupts(GLOBAL);                              //Activo interrupciones globales
  19.         lcd_init();
  20.         lcd_putc("\fPotencia Activa/Hora");
  21.         while(TRUE)
  22.         {
  23.                 if(flagg_pulso)
  24.                 {
  25.                         ++Watts_Hora;
  26.                         flagg_pulso=false;
  27.                 }
  28.                 lcd_gotoxy(1,2);
  29.                 printf(lcd_putc,"Watts_Hora=%lu",watts_hora);//Muestro el valor de la variable
  30.         }
  31. }

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: incremento y visualizaciòn
« Respuesta #19 en: 07 de Agosto de 2008, 23:39:23 »
Gracias por la colaboración. La compilación Ok!. Veré como responde con el hard. Hasta otro Post.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: incremento y visualizaciòn
« Respuesta #20 en: 08 de Agosto de 2008, 13:08:07 »
Hola.

Ok, mucha suerte ... no olvides colocar un buen antirrebotes en los pulsadores ...

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: incremento y visualizaciòn
« Respuesta #21 en: 11 de Agosto de 2008, 13:06:34 »
El programa que presento en post anetriores muestra mediante un display el incremento de una variable cuando aparece un nivel alto por un pin del micro. Este programa se inicializa cada vez que le saco la alimentación, es decir empieza su conteo desde cero. La idea es que no ocurra esto, para ello tengo que guardar esto en la eeprom del pic y cada vez que se intrrumpa la energia guardar el conteo de tal forma que cuando se lo energice empiece desde donde quedo. De que manera se podría implementar el programa con lo que ya llevo desarrollado. El almacenaje podría ser tbien en una 24lc256 mediante I2C. No se que tan complicado debe ser quisiera una sugerencia, Muchas gracias. 

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: incremento y visualizaciòn
« Respuesta #22 en: 11 de Agosto de 2008, 13:20:31 »
Si son pocas las variables a guardar, puedes utilizar la propia eeprom del PIC o la memoria de programa del PIC. Para ello el compilador CCS trae unas funciones desarrolladas que te permiten escribir y leer en dichas eeproms.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: incremento y visualizaciòn
« Respuesta #23 en: 11 de Agosto de 2008, 23:07:25 »
Encontre el driver en ccsc de la eeprom interna . De que manera lo utilizo en mi pograma. El f877a tiene 256 bytes por lo que dice en su hoja de caracteristicas.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: incremento y visualizaciòn
« Respuesta #24 en: 12 de Agosto de 2008, 10:47:07 »
Hola.

Es sencillo. En el ciclo de visualizacion de la variable debes guardar periodicamente el valor en la EEPROM:
Código: [Seleccionar]
write_eeprom(0, value_cont);
De esta manera guardamos un dato de 8bits (1byte) en la EEPROM (direccion 0x00) del PIC.

Y al iniciar tu programa lo primero que se debe hacer es cargar el valor guardado en la EEPROM en la variable global:
Código: [Seleccionar]
value_cont = read_eeprom(0);

Saludos
El papel lo aguanta todo

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: incremento y visualizaciòn
« Respuesta #25 en: 12 de Agosto de 2008, 11:26:30 »
Yo no lo guardaria toda vez que lo cambio, sino que lo mantendria en RAM mientras lo uso y lo guardaria cada vez que el PIC entre en RESET o cuando la tension baje de un umbral de tension determinado...
Sino la EEPROM la terminare muy rapido, no olvidemos que el numero de grabaciones, si bien es alto, no es ilimitado... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: incremento y visualizaciòn
« Respuesta #26 en: 12 de Agosto de 2008, 14:01:34 »
Hola.

Muy cierto MGLSOFT  :-/ :-/ hay que ser cuidadoso con el uso de la EEPROM del PIC.

Saludos.
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: incremento y visualizaciòn
« Respuesta #27 en: 14 de Agosto de 2008, 11:49:10 »
Crreo que lo mas adecuado para lo que estoy ttratando de llevar a cabo, es la de guardar en memoria EEPROM cuando la tensiòn la tensiòn de alimentaciòn baje de un umbral.¿Como lo implementarìa en el programas? Para verificar, lo guardado tendrìa que leerlo? comolo harìa?
muchas gracias

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: incremento y visualizaciòn
« Respuesta #28 en: 14 de Agosto de 2008, 12:09:17 »
Hola.

Pues habria que configurar el fuse del brown out reset a un valor bajo (2.7v) y para detectar la baja de tension, por medio de un comparador o el ADC se me ocurre.

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: incremento y visualizaciòn
« Respuesta #29 en: 20 de Agosto de 2008, 16:53:31 »
Seguirè con otro tema por el momento.
Tengo que adquirir datos analogicos con el pic 16f873 y mostrarlos via 232 en una pc. Como se configurarìa el pic para la señal analògica.en primer lugar me ocuparia de eso. Configurar y adquirir la señal
Desde ya muchas gracias


 

anything