Autor Tema: Dimmer AC de 8 canales con pic16f84a y PC  (Leído 5359 veces)

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

Desconectado Jeronimo17

  • PIC10
  • *
  • Mensajes: 7
Dimmer AC de 8 canales con pic16f84a y PC
« en: 30 de Abril de 2011, 17:39:30 »
Hola, intento hacer un dimmer de 220V AC de 8 canales para juego de luces con música controlado por PC.

Ya lo tengo casi todo hecho, el pic lo he programado con Pic Basic y recibe datos del PC a través del puerto serie simplemente por la patilla RB0/INT y el paso por 0 por la patilla RA0 (0V cuando cruza).

El problema que tengo es que cuando recibe datos, en ese instante la CPU deja de atender a los disparos de los triacy todas la luces se apagan en ese instante.

¿Es posible evitar eso con este PIC (16F84A)?

Tengo pedido el modelo PIC16F876A ¿Me valdría o cual me recomiendan?

Gracias y saludos a todos   ;-)


Aqui el código que he hecho para el PIC, por ahora solo estoy probando con 2 canales:
Código: FreeBasic
  1. DEFINE OSC 4
  2. AllDigital
  3. Include "modedefs.bas"  ' Include serial modes
  4.  
  5. x Var byte
  6. Sincro var Byte
  7. a var Byte
  8.  
  9.  
  10. ON INTERRUPT GOTO myint ' el handler de interrupciones es myint
  11. INTCON = %10010000 ' habilita la interrupción RB0
  12. option_reg.6=0
  13.  
  14. main:
  15. IF PORTA.0 = 0 then Sincro = 255
  16.  
  17. DISABLE INTERRUPT
  18.  
  19. IF Sincro = x then PULSOUT PORTB.3,2
  20. IF Sincro = a then PULSOUT PORTB.4,2
  21.  
  22. 'pauseUS 24
  23. ASM
  24.     NOP
  25.     NOP
  26.     NOP
  27.     NOP
  28.     NOP
  29. ENDASM
  30. Sincro=Sincro-1
  31.  
  32. ENABLE INTERRUPT
  33.  
  34. Goto main ' Forever
  35.  
  36.  
  37.  
  38.  
  39. DISABLE ' deshabilita las interrupciones en el
  40. Myint:
  41. Serin PORTB.0,N2400,[0],x,a
  42. Espera:
  43. IF PORTA.0 = 1 then goto Espera
  44. INTCON = %10010000
  45. option_reg.6=0
  46. RESUME ' vuelve al programa principal
  47. ENABLE ' habilita las interrupciones después del
  48.  
  49. END
« Última modificación: 30 de Abril de 2011, 17:59:27 por Jeronimo17 »

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #1 en: 30 de Abril de 2011, 19:14:24 »
Hola, tendras que emplear un pic que tenga puerto o comunicacion USART implemendada por hard, para que el modulo haga la lectura de la entrada, y el pic siga funcionando...
Si ya empleas el F84, podrias pasar al 16F628A  :mrgreen:

Saludos!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Jeronimo17

  • PIC10
  • *
  • Mensajes: 7
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #2 en: 30 de Abril de 2011, 20:13:07 »
Gracias Todopic!, el que he pedido (PIC16F876A) también tiene USART por hardware.

¿Como se haría eso de que siga funcionando el PIC?

Según he leído en esta web "Hserin i  'SE QUEDA PARAD0 HASTA RECIBIR UN CARACTER:huh::

Código: FreeBasic
  1. Dim i As Byte
  2. i = 1
  3. '-----------------------------------------------
  4. Hseropen 9600  'CONFIGURA EL MODULO USART, HARD
  5. '-----------------------------------------------
  6. main:
  7. Hserin i  'SE QUEDA PARAD0 HASTA RECIBIR UN CARACTER
  8. If i > "5" Then  '_"5" REPRESENTACION GRAFICA, ES CAMBIADO
  9. '_____________________POR EL COMPILADOR A SU CODIGO NUMERICO ASCII
  10. PORTA.1 = 1
  11. PORTA.2 = 0
  12. Endif
  13. If i < "5" Then
  14. PORTA.2 = 1
  15. PORTA.1 = 0
  16. Endif
  17. Goto main
  18. End

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #3 en: 30 de Abril de 2011, 21:12:55 »
Por interrupción. Ésta se genera al recibir el bit Stop, así que lees el dato y continuas trabajando  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Jeronimo17

  • PIC10
  • *
  • Mensajes: 7
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #4 en: 30 de Abril de 2011, 21:59:30 »
Pero así es como esta ahora con el 16f84 leyendo de puerto serie por software cuando hay interrupción deja de atender a los triac, y es demasiado tiempo como para que se note un parpadeo grande por cada interrupción, lo suyo es por hardware con el PIC que espero y supongo que usando la orden Hserin de Pic Basic.

¿Como se usa para que no deje de atender a los triac nunca?

Saludos!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #5 en: 30 de Abril de 2011, 22:22:04 »
Pero por hardware se interrumpe cada vez que llega un byte, con el 16F84 seguramente usas un timer para leer una dato serial, no es lo mismo. Otra cosa lo mejor es aumentar la velocidad de la comunicación, 19200 o 38400.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Jeronimo17

  • PIC10
  • *
  • Mensajes: 7
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #6 en: 30 de Abril de 2011, 23:12:39 »
Con este y el oscilador de 4 Mhz no da mas de 2400 baudios, pero el otro espero aumentar a 38400, y quiere decir que con Hserin ¿solo hace la interrupción para actualizar la variable en pocos ciclos?

Si alguien me pudiera poner un ejemplo con el Hserin se lo agradecería

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #7 en: 30 de Abril de 2011, 23:20:18 »
Con este y el oscilador de 4 Mhz no da mas de 2400 baudios, pero el otro espero aumentar a 38400, y quiere decir que con Hserin ¿solo hace la interrupción para actualizar la variable en pocos ciclos?

Si alguien me pudiera poner un ejemplo con el Hserin se lo agradecería

De basic no tengo idea, pero en C o assembler, al ocurrir la interrupción por llegada de dato por UART solo se mueve el dato guardado en RCREG al registro que se le indique, seguramente hace lo mismo. O sea, al ocurrir la interrupción el dato ya llego!

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Jeronimo17

  • PIC10
  • *
  • Mensajes: 7
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #8 en: 27 de Mayo de 2011, 12:17:07 »
Pues bueno ya tengo el PIC16F876A y todo el hardware montado  8) y esta es la programación que he puesto para 2 canales que estoy probando:

Código: vb.net
  1. DEFINE OSC 20
  2. CMCON = %00000111 'comparators off
  3. ADCON1=6 'PORTA DIGITAL TODO
  4. Sincro var Byte
  5. B1 Var byte[3]
  6. BS Var byte
  7. J Var Byte
  8. J=0
  9.  
  10. ' Initialize hardware USART
  11. RCSTA = %10010000' Enable serial port and continuous receive
  12. DEFINE HSER_RCSTA 90h
  13. DEFINE HSER_TXSTA 24h' "BRGH a 0 para 2400,-->20, para 9600 ponerlo a 24
  14. DEFINE HSER_BAUD 9600' "Velocidad de transmision 9600
  15.  
  16. ON INTERRUPT GOTO myint
  17. INTCON = %11000000   ' Enable interrupts
  18. PIE1.5 = 1           ' Enable interrupt on USART
  19.  
  20. OPTION_REG.7=0       'PULL UPS  PORTB
  21. TRISB = %00000001
  22.  
  23.  
  24.  
  25. mainloop:
  26.  
  27. IF PORTB.0 = 1 then ' Sincronismo con AC Paso por 0
  28. Sincro = 255
  29. PORTA = 0
  30. PORTB = 0
  31. endif
  32.  
  33. DISABLE INTERRUPT
  34. IF Sincro = B1(1) then High PORTA.0
  35. IF Sincro = B1(2) then HIGH PORTA.3
  36. ENABLE INTERRUPT
  37.  
  38. pauseUS 25
  39.  
  40. Sincro=Sincro-1
  41.  
  42. Goto mainloop' Do it forever
  43.  
  44.  
  45.  
  46. ''''''''''''Interrupcion
  47. DISABLE
  48. Myint:
  49.  
  50. if RCSTA.1 then  ' Overrun error?
  51. RCSTA.4=0        ' clear it
  52. RCSTA.4=1
  53. endif
  54.        
  55. Hserin [BS]
  56. If BS=0 then J=0
  57. B1(J)= BS
  58. If J=2 then J=0
  59. J=J+1
  60. RESUME ' vuelve al programa principal
  61. ENABLE
  62. ''''''''''''Interrupcion

Y funciona pero no se para que sirve

"RCSTA = %10010000' Enable serial port and continuous receive"

ni

if RCSTA.1 then  ' Overrun error?
RCSTA.4=0        ' clear it
RCSTA.4=1
endif


aunque así funciona bien todo, con VB6 envio MSComm1.Output = Chr(0) & Chr(x) & Chr(y) (el 0 para sincronizar el array B1(J))

¿Alguna idea de mejora o de simplificar algo?

Gracias  ;-)
« Última modificación: 27 de Mayo de 2011, 12:19:54 por Jeronimo17 »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #9 en: 27 de Mayo de 2011, 12:31:21 »
RCSTA es uno de los registros del microcontrolador para configurar el modulo UART, y el tema de si ocurre un Overrun, o sea se reciben 2 caracteres por el puerto serial, pero no has leído ninguno, hay que resetear la recepción, y es lo que hace dentro del if. Te recomiendo que leas el datasheet del microcontrolador que estas utilizando  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado rina

  • PIC10
  • *
  • Mensajes: 45
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #10 en: 16 de Enero de 2012, 15:32:58 »
la verdad que no es mal trabajo y as tenido unos buenos consejos de los demas usuarios.
la verdad que todaviano e echo ningun prollecto usando la utilidad  USART para comunicacion tipo 232..(algun dia sera)

to te aconsejaba a parte usar un cristal de mas de 4mhz para tener una buena resolucion de los dimer unos 8mhz para 2 salidas dimer (una buena resolucion) o 12mhz para 4 o 6 dimer (con una resolucion de regulacion decente)

una de la mejora en el ultimo programa que hice para el dimer con un 16F84a constava en que salia del bucle antes de que el bit de sincronismo de la rec sea 0 esto ace que el intervalo 0 sea mayor lo cual da mara ejecutar mas programa:

DISABLE INTERRUPT
alterna=0
while b.0=1 and alterna<160
alterna=alterna+1
IF alterna = B1(1) then High PORTA.0
IF alterna = B1(2) then HIGH PORTA.3
wend
ENABLE INTERRUPT

seria mas bien algo asi.. suponiendo que en esa parte sea donde controlavas los disparos de los dos triac.
realmente para 8mhz podrias regular asta un valor de 190 pero


Desconectado rina

  • PIC10
  • *
  • Mensajes: 45
Re: Dimmer AC de 8 canales con pic16f84a y PC
« Respuesta #11 en: 16 de Enero de 2012, 15:43:51 »
la verdad que no es mal trabajo y as tenido unos buenos consejos de los demas usuarios.
la verdad que todaviano e echo ningun prollecto usando la utilidad  USART para comunicacion tipo 232..(algun dia sera)

to te aconsejaba a parte usar un cristal de mas de 4mhz para tener una buena resolucion de los dimer unos 8mhz para 2 salidas dimer (una buena resolucion) o 12mhz para 4 o 6 dimer (con una resolucion de regulacion decente)

una de la mejora en el ultimo programa que hice para el dimer con un 16F84a constava en que salia del bucle antes de que el bit de sincronismo de la rec sea 0 esto ace que el intervalo 0 sea mayor lo cual da mara ejecutar mas programa:

DISABLE INTERRUPT
alterna=0
while b.0=1 and alterna<160
alterna=alterna+1
IF alterna = B1(1) then High PORTA.0
IF alterna = B1(2) then HIGH PORTA.3
wend
ENABLE INTERRUPT

seria mas bien algo asi.. suponiendo que en esa parte sea donde controlavas los disparos de los dos triac.
realmente para 8mhz podrias regular asta un valor de 190 pero solo que apartir de 170 es tan minimo que comomucho lo unico que dejas es una pequeña corriente residual que comomucho calienta el filamento, por lo cual que el minimo de luz que me interesava era hasta 160 repeticiones apartis de hay ni se moleste en activarla.

al salir antes de la interruccion da mas tiempo a hacer operaciones en el interbalo de 0.

ahora una preguntilla. alguno a echo alguna pactica usando la USART empaketando los bit de 8 en 8 de un mando a distancia tipo el de una tv..  existira algun problema de perder el sincronismo dado que la codificacion del infrarrojo manda los 32 bit del tiron?

pongamos que mi proximo  proyecto de automata me gustaba poder controlarlo de esa manera, evitando el tener que usar otro integrado lara la decodificacion del mando a distancia..

un saludo