Autor Tema: cruce por cero y lcd en i2c  (Leído 8023 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado omibaya

  • PIC12
  • **
  • Mensajes: 57
cruce por cero y lcd en i2c
« en: 09 de Diciembre de 2005, 20:40:00 »
Amigos, tengo una pregunta, estoy usando un 16f877, con un lcd controlado por i2c, pero quiero controlar la intensidad de un foco, el problema es que el cruce por cero lo estoy poniendo por RB0 como una interrupcion, por lo tanto esta llega cada 8.33ms(medio ciclo de 60 hz) y me parece que el tiempo es corto, y a veces me corta los datos que aparecen en mi lcd, como puedo hacer para que no afecte, tal vez hacer esto con un pic16f84 que sea el que reciba la interrupcion? creen que hay otra manera?

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
RE: cruce por cero y lcd en i2c
« Respuesta #1 en: 10 de Diciembre de 2005, 02:07:00 »
Hola, si quieres regular la intensidad de un foco/bombilla prueba con una señal PWM, de esta manera podras controlar la cantidad de energia que le llega en cada momento a el foco.

No se como tienes el programa configurado de todas las maneras, pero si tu escribes en I2c y te viene una interrupcion por RB0 no deberias tener problema en el retorno de la interrupcion (creo yo, si no que me corrija algun otro compañero), y seguiria el micro por donde lo habia dejado.

Un saludo.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: cruce por cero y lcd en i2c
« Respuesta #2 en: 10 de Diciembre de 2005, 02:51:00 »
Creo que lo del PWM no le servirá porque el foco trabaja en alterna.
Ciertamente necesitarás detectar el cruce por 0 para activar el foco en la parte de la onda que te convenga.
Respecto a que la interrupción te corte la transmisión I2C, me resulta extraño que te afecte, pero dependerá de la velocidad a la que tengas trabajando el micro, de la velocidad que necesite el I2C y del tiempo que dure la interrupción del foco.
Sólo se me ocurre que habría que analizar eso para ver si tu micro puede atender la interrupción externa y continuar el I2C por donde fuera sin problemas.
Todo eso salvo que algún forista aporte una solución mejor.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: cruce por cero y lcd en i2c
« Respuesta #3 en: 10 de Diciembre de 2005, 07:52:00 »
Podría valer que lo único que hicieses en la interrupción pfuese poner un flag definido por tí mismo a 1 y vayas comprobando su valor para actuar en consecuencia ya fuera de la rutina de interrupción y en los puntos del programa en los que no sea crítico para la comunicación i2c,así no gastas demasiado tiempo dentro de la interrupción y el i2c puede mantener su temporización


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: cruce por cero y lcd en i2c
« Respuesta #5 en: 11 de Diciembre de 2005, 01:05:00 »
Manolo supongo que Xerex se refiere a un pwm por software con algún TMR, no con el módulo hardware, con el cual no se consigue llegar al Dutymax de los 10ms (50Hz en España).

Yo támpoco creo la interrupcion afecte a la escritura en la LCD.

Un saludo


Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
RE: cruce por cero y lcd en i2c
« Respuesta #6 en: 11 de Diciembre de 2005, 02:36:00 »
hola, cuando hablaba de PWM siempre habia supuesto que estabamos hablando de alterna con lo del foco, la idea no es de utilizar una resolucion "infinita" como puede ser la temporizacion del pwm del micro, sino, al atacar a un triac, poder hacer que se dispare ciertos semiciclos de la señal de la red electrica, asi con un triac podriamos hacer que se encendiera desde un semiciclo a los 100 semiciclos para una señal de 50 Hz, controlando estos mediante el disparo del triac. las condiciones del pwm seria la de frecuencia de 50 Hz (idem red electrica) y el pwm minimo de 10 ms y el maximo 1 segundo con resolucion de 10 ms como dide pocher.


Aunque se puede hacer de mas formas para variar la intensidad del foco, utilizando la interrupcion externa activada por un detector por paso por cero de la red electrica y contando, podemos hacer que el foco, este funcionando unos determinados ciclos de señal alterna y otros no, asi no necesitar temporizar nada y harias un pseudoPWM jeje. Cuestion de gustos. Un saludo.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: cruce por cero y lcd en i2c
« Respuesta #7 en: 11 de Diciembre de 2005, 02:47:00 »
Ah, ahora sí te he entendido.
¿Y has probado eso, Xerex?. Es que sospecho que se notaría algún parpadeo, esa frecuencia es muy lenta.
De todas formas, la idea es buena, así que lo probaré cuando pueda.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: cruce por cero y lcd en i2c
« Respuesta #8 en: 11 de Diciembre de 2005, 03:27:00 »
Vaya una forma nueva que desconocía. Yo me refería a con un temporizador controlar el tiempo que la señal deseamos que esté a 1 dentro de los 10ms (semiperiodo), de esa forma se obtiene un control muy fino sobre la potencia de salida.

Probaré que tal resulta el método que propone Xerex de ir cargandose entre 1 y 100 semiciclos para controlar la luminosidad.

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
RE: cruce por cero y lcd en i2c
« Respuesta #9 en: 12 de Diciembre de 2005, 17:59:00 »
hombre! probarlo no lo he probado, hice algo similar en alguna practica en el instituto, pero en ese caso el disparo de un triac lo controlaba una red RC con un diac... Muchas risas , deberia funcionar, tambien podemos intentar hacer que envez de que sea tan largo el tiempo hacerlo mas pequeño, recordamos que el filamento de un foco/bombilla tarda un poco en volver a la temperatura ambiente, podemos utilizar este efecto para controlar la intensidad luminosa del foco.

Osea podemos controlar envez de 1 segundo en menos tiempo, esto tambien seria valido, por ejemplo en 0.5 segundos o en 100 ms pero cuanto menos tiempo tengamos menos "resolucion de la intensidad luminosa" tendremos, para averiguarlo, lo mejor el experimento. Tambien os recuerdo que el ojo humano puede distinguir hasta 16 fotogramas por segundo por tanto a frecuencias menores a 16 Hz podria llegar a distinguir el ojo humano, pero como he dicho antes, la atenuacion de la bombilla cuando se desactiva el paso de corriente por ella es "lento" y nos puede valer ese fenomeno para controlar su intensidad. OJO, SIEMPRE ESTOY HABLANDO DE FOCOS/BOMBILLAS DE INCANDESCENCIA!!!!


Un saludo.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
RE: cruce por cero y lcd en i2c
« Respuesta #10 en: 12 de Diciembre de 2005, 18:30:00 »
Si no se controla la potencia en un semiciclo, y se eliminan varios semiciclos se nota el parpadeo.
* 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 omibaya

  • PIC12
  • **
  • Mensajes: 57
RE: cruce por cero y lcd en i2c
« Respuesta #11 en: 22 de Diciembre de 2005, 10:51:00 »
amigos, a lo que me refiero, es que pasa si justo en plena transmision de i2c llega la interrupcion externa o cualquier interrupcion?, lo que me ha sucedido es que la transmision se corta para dar paso a la interrupcion, lo del cruce por cero lo solucioné con un pic16f84, a este le mandaba el cruce por cero, pero no me acrode que tengo otra interrupcion int_rda porque pido los datos por la computadora, esto lo hago mas o menos cada segundo, yo supongo (porque no lo he probado aun) que tal vez no me genere mucho problema, pero si me da problemas como hagooooooooooooo

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
RE: cruce por cero y lcd en i2c
« Respuesta #12 en: 23 de Diciembre de 2005, 10:56:00 »
Bueno ya que tienes que hacer varias cosas, porque no optas por montar un sistema operativo para el pic???? supongo que vendran con multitarea y no te interferira entra todas las cosas que tienes que hacer y probablemente te funcione correctamente ... es una posible solucion, en cuanto  a lo de los sistemas operativos no puedo ayudarte porque nunca he trabajado con ellos.

Si al final desechas la idea anterior, prueba ha hacer una red de micros con uno como master y los demas como slave, y a cada uno le haces que haga una tarea.


Saludos.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado Morfeo_F_H666

  • PIC10
  • *
  • Mensajes: 10
Re: cruce por cero y lcd en i2c
« Respuesta #13 en: 29 de Diciembre de 2006, 20:29:39 »
Hola como estan decenadoles a todos un feliz año por favor me pueden ayudar con eso de la interrupcion apra el detector de cruce por cero por que en verdad no le entiendo muy bien como utilizar las interrupciones, lo que necesito es hecer un detector de cruce por cero con el pic 16f877 o el 16f872 tengo el siguiente codigo pero se me dispara en todo el semiciclo negativo y la verdad no se que esta mal les publico el codigo por favor ayudenme que no se que esta mal..........


#INCLUDE <16F876A.H>
#FUSES XT, NOWDT, PROTECT, NOPUT, NOBROWNOUT, NOLVP
#USE DELAY (CLOCK = 4000000)
int j=1;
void main()
{
   signed int t;
   set_tris_b(0x01);
   while(1)
   {
      t=input(PIN_B0);
      if(t==0)
      {
      {
      if (j==0)
      {
         //output_high(PIN_B1);
         j=1;
         ext_int_edge(H_TO_L);       // Cambio la detección del flanco, para que la
        }                               // proxima sea de bajada
      else if(j==1)
      {
         //output_low(PIN_B1);
         j=0;
           ext_int_edge(L_TO_H);       // La próxima interrupción será de subida
      }
      }

      output_high(PIN_B1);     
      delay_us(10);
      output_low(PIN_B1);
      delay_us(10);
      t=0;
      }
   }

}
cualquier ayuda por favor que la verdad no le entiendo bien

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: cruce por cero y lcd en i2c
« Respuesta #14 en: 29 de Diciembre de 2006, 20:37:09 »
Vamos a ver, en tú código no hay ninguna interrupción, cosas raras que veo:
1. Pones un corchete extra en la siguiente instrucción, uno de ellos sobraría.
Código: C
  1. if(t==0)
  2.       {
  3.       {

Para la interrupción externa, te recomiendo que veas el post de Ejemplitos en C para 16F648A, concretamente el número 40.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything