Autor Tema: Receptor 12 canales DMX 16f876  (Leído 8136 veces)

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

Desconectado tinho

  • PIC10
  • *
  • Mensajes: 11
Receptor 12 canales DMX 16f876
« en: 28 de Septiembre de 2008, 17:44:04 »
ante todo gracias al maestro NOCTURNO ya que este proyecto esta basado 100% en su receptor, solo esta modificado para un 16f876 y recvir los 12 primeros canales para activar reles, la simulacion en proteus funciona perfectamente y hay un emisor de 12C el cual esta muy visto por la red, la duda es qu no puedo activar el primer canal y no encuntro el fallo, me gustarian sugerencias para depurar el codigo para hacerlo mas corto y estable, la intencion es implementar 3 displays y 2 pulsadores para seleccionar el canal pero me parece que faltaran pins en el pic, pensaba en displays bcd o 2 dac de 8 y convertirlo en 16C, agradezco vuestras sugerencias y rectificaciones, ire posteando los canvios del proyecto ya que he visto que hay mucha gente buscando cosas parecidas 

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Receptor 12 canales DMX 16f876
« Respuesta #1 en: 29 de Septiembre de 2008, 00:56:19 »
Hola Tinho!
el dmx transmisor deberia funcionar siempre y cuando el canal que use los pulse con 5Voltio a travez de una Resistencia de 10K aunque te aconsejo de no dejar los pines al aire, sino con resistencia de 10k a masa. esta mismo circuito me lo hice yo para testear los primero 12 canales http://www.todopic.com.ar/foros/index.php?topic=18862.20
Saludo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Receptor 12 canales DMX 16f876
« Respuesta #2 en: 29 de Septiembre de 2008, 02:13:09 »
Hola Tinho, me alegro que el ReceptorDMX te haya servido, y me gusta la adaptación a 16F que has acometido.
No entiendo cómo funciona esa simulación proteus, así que no he podido ver la avería que tienes. ¿Cómo se comprueba?

Desconectado tinho

  • PIC10
  • *
  • Mensajes: 11
Re: Receptor 12 canales DMX 16f876
« Respuesta #3 en: 29 de Septiembre de 2008, 10:21:00 »
 exacto, los pulsadores necesitan resistencia a masa al igual que mas componentes como cristal  y condensadores en los 2 pic para la prueba real del circuito, pero (corregidme si me equivoco que es mas que probable) mis pruebas y experiencia en proteus me dicen que si no los pongo en el circuito simula mejor, utiliza el relog de procesamiento por defecto o asignado por mi en propiedades del pic, al igual que comentar los fuses, no lo entiendo, aparte la simulacion consume menos cpu y es mas dificil que se cuelgue por exceso, aprenderia muchisimo si alguien me corrigiera en esto ya que es muy importante para mi la simulacion completa en proteus por el tiempo que ahorro.
respondiendo a nocturno, cuando pulso rb1 el el 16f83 se enciende rb0 el el 16f876 el cual se supone que es canal 1 y se supone que es canal 2 ya que el canal 1 del 16f84 es rb0, igual me he dejado algun archivo en el .rar creo que no gracias por vuestras respuestas

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Receptor 12 canales DMX 16f876
« Respuesta #4 en: 29 de Septiembre de 2008, 12:01:24 »
Pues he estado simulándolo y ya veo cuál es el pernicioso efecto que tú describes. Pero por más que miro y remiro el código no encuentro el problema.
La verdad es que mi intención de ayudarte sólo se ve superada por mi desconfianza del Proteus, por lo que creo que lo ideal será que lo montes en un prototipo real y, si falla, sigamos buscando la causa.
También habría que estar completamente convencido de que ese programa que has cargado al emisor DMX es fiable, antes de volvernos locos.

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Receptor 12 canales DMX 16f876
« Respuesta #5 en: 29 de Septiembre de 2008, 12:25:02 »
Pues dejame decirte amigo Manolo, que el Emisor es Fiable yo lo monte y va muy bien, tal como lo tengo en el link que puse.
Saludo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Receptor 12 canales DMX 16f876
« Respuesta #6 en: 29 de Septiembre de 2008, 12:42:23 »
Bien, pues ya tenemos una posible causa menos.

Desconectado tinho

  • PIC10
  • *
  • Mensajes: 11
Re: Receptor 12 canales DMX 16f876
« Respuesta #7 en: 29 de Septiembre de 2008, 19:17:19 »
si intentais hacer la simulacion de la grafica con la barra spacio, marca la señal dmx standar a 0, si se hace con el primer togle activado, verereis que la grafica marca el primer canal con toda claridad y si lo ejecutais con el segundo (rb1), marca el segundo canal tambien con claridad el la sonda (U2R0) luego el 16f84 saca lo correcto creo que el fallo esta en el 16f876 (ni se os ocurra pensar que estoy intentando enseñaros seria una gran temeridad ya que yo soy nulo en esto) teneis algun consejo para la implementacion de los displays y los 2 pulsadores, lo tengo medio solucionado pero ma da un gran retraso en global no lo veo factible e incluir esto en el main, sinceramente me parece extremadamente cutre y falta afinarlo.

#include <16f876.h>
//#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP
#use delay (clock=4000000)
#use standard_io(B)
#use standard_io(A)


void main(void)
{
signed int uni=0,dec=0,cen=0;
int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
int max;
set_tris_b(0x00);

for(;;){
max=(uni+(dec*10)+(cen*100));
if(input(PIN_A3))
{
uni++;
if(uni>9){
uni=0;
dec++;
}
if(dec>9){
dec=0;
cen++;
}
if(cen>5){
cen=0; }
if(max>512){
uni=1;
dec=0;
cen=0;}
}
if(input(PIN_A4))
{
uni--;
if(uni<0){
uni=9;
dec--;
}
if(dec<0){
dec=9;
cen--;
}
if(cen<0){
cen=9;
}
if(max>512){
uni=1;
dec=0;
cen=0;}
}
output_high(PIN_A0);
output_high(PIN_A1);
output_low(PIN_A2);
output_b(tab[ uni ]);
delay_ms(10);
output_high(PIN_A0);
output_low(PIN_A1);
output_high(PIN_A2);
output_b(tab[ dec ]);
delay_ms(10);
output_low(PIN_A0);
output_high(PIN_A1);
output_high(PIN_A2);
output_b(tab[ cen ]);
delay_ms(10);
}
}

Desconectado tinho

  • PIC10
  • *
  • Mensajes: 11
Re: Receptor 12 canales DMX 16f876
« Respuesta #8 en: 30 de Septiembre de 2008, 13:38:48 »
perdon por lo anterior era imposible que funcionara

int uni=0,dec=0,cen=0;
void main(void)
{
int canal;
int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
set_tris_b(0x00);

for(;;){
if(input(PIN_A3))
{
uni++;
if(uni>9){
uni=0;
dec++;
}
if(dec>9){
dec=0;
cen++;
}
if(cen==5){
      if(dec==1)
          if(uni>2)
           {
cen=0;           
dec=0;
uni=1;
           }}
}
if(input(PIN_A4))
{
uni--;
if(uni<0){
uni=9;
dec--;
}
if(dec<0){
dec=9;
cen--;
}
if(cen<0){
cen=5;
dec=1;
uni=2;}
}
output_high(PIN_A0);
output_high(PIN_A1);
output_low(PIN_A2);
output_b(tab[ uni ]);
delay_ms(10);
output_high(PIN_A0);
output_low(PIN_A1);
output_high(PIN_A2);
output_b(tab[ dec ]);
delay_ms(10);
output_low(PIN_A0);
output_high(PIN_A1);
output_high(PIN_A2);
output_b(tab[ cen ]);
delay_ms(10);
}
}