Autor Tema: Emulando protocolo del MC145026 y MC145027  (Leído 10922 veces)

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

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #15 en: 19 de Julio de 2010, 12:49:12 »
A mi me pasaba lo mismo con el Issis, veia la salida High, pero luego ya no pasaba nada mas, seguro que no te costara mucho rato? porque si es asi de verdad que da igual, muchas grácias por toda tu ayuda!!! con los passitos que me has ido dando la cosa se ha desatascado, GRACIAS!

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda para emular codificación del MC145026
« Respuesta #16 en: 20 de Julio de 2010, 03:51:09 »
Vaya... veo que la peña ha pasado del tema.  :?

bueno, ya tengo montada la proto. En un rato te paso el asm.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Ayuda para emular codificación del MC145026
« Respuesta #17 en: 20 de Julio de 2010, 03:58:20 »
Si, yo tambien veo que la gente pasa bastante...

Bueno he modificado un poco el codigo, con lo que te dije de los pulsos, que en uno largo caben 7 cortos, te lo podrias intentar mirar (lo he hecho mirandome el Data period).

aqui dejo el codigo modificado

#include <16f870.h>

#device adc=8
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)


#use rs232(baud=1200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#USE FAST_IO (A)
#USE FAST_IO (B)
#USE FAST_IO (C)


//ROGRAMA PER EMULAR PROTOCOL MC145026


/////////////////////////////
////////////////////////////
// Definició de Pins
//////////////////////////
/////////////////////////

// *****  IN-CIRCUIT SERIAL PROGRAMING  ***** //

//    PGM      ==>      PIN_B3   (24)
//    PGC      ==>      PIN_B6   (26)
//    PGD      ==>      PIN_B7   (28)
//    VDD      ==>      (20)
//    VSS      ==>      (8,19)

/////////////////////
//****CONSTANS****//
///////////////////
int pols = 0.5;                //tiempo de un pulso(ms)
int DT   = 8;                 //tiempo que dura un digito (ms) (Data Period)

///DECLARACIO DE FUNCIONS
void envia_paraula(void);         // envia una paraula
void bit_alt (void);             // high bit(1)
void bit_baix(void);            // low bit(0)
void atent (void);             // enviar un espacio para empezar a recibir la
                              // trama, para "despertar" al micro


#DEFINE ENVIA_CODI      PIN_C6  //port per enviar el codi
#DEFINE POLSADOR        PIN_C3 //para hacer pruebas de envio de datos


void main()
{
   set_tris_a  (0b00000000);
   set_tris_b  (0b00000000);
   set_tris_c  (0b00000000);
   setup_psp(PSP_DISABLED);
   
   
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   disable_interrupts(GLOBAL);
   
   while (true)
   {
      if (input(polsador));
      {   
         atent();
         envia_paraula();
         delay_ms(DT*3);
         envia_paraula();
         delay_ms(DT*3);
      }     
   }

}

void atent()
{
output_low(envia_codi);
delay_ms(DT);
}

void envia_paraula()
{
   bit_alt();     //Una paraula la formen 9 "digits"
   bit_alt();     //els 5 primers son de la direccio
   bit_baix();    //i els altres 4 de la dada.
   bit_baix();    //Aquests són els cinc
   bit_alt();     //digits de la direccio.
   
   bit_alt();     //Aquests són els 4 "digits"
   bit_alt();     //que formen la dada.
   bit_alt();
   bit_baix();
}
void bit_alt()
{
   output_low(envia_codi);
   delay_ms(pols);
   output_high(envia_codi);
   delay_ms(pols*7);
   output_low(envia_codi);
   delay_ms(pols);   
   output_high(envia_codi);
   delay_ms(pols*7);
   output_low(envia_codi);
}
void bit_baix()
{
   output_low(envia_codi);
   delay_ms(pols);
   output_high(envia_codi);
   delay_ms(pols);
   output_low(envia_codi);
   delay_ms(pols*7);
   output_high(envia_codi);
   delay_ms(pols);
   output_low(envia_codi);
   delay_ms(pols*6);
}

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Ayuda para emular codificación del MC145026
« Respuesta #18 en: 20 de Julio de 2010, 04:18:10 »
Vaya... veo que la peña ha pasado del tema.  :?

bueno, ya tengo montada la proto. En un rato te paso el asm.

me puedes passar el fichero issis, o el esquema de la proto para probar??

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda para emular codificación del MC145026
« Respuesta #19 en: 20 de Julio de 2010, 05:11:23 »
Marchando.  :mrgreen:

Tendrás que cambiar la declaración del micro ya que no tenía 16f870 para probar.

Luego me cuentas

Aqui se ve una "palabra"




He creado el asm en base al primer ejemplo que has subido. Pero ya creo que con esto puedes seguir experimentando.
Recuerda que has declarado variables en mayusculas y luego las llamas en minusculas, corrije eso.
« Última modificación: 20 de Julio de 2010, 05:40:41 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Emulando protocolos del MC145026 y MC145027
« Respuesta #20 en: 20 de Julio de 2010, 06:12:04 »
Muchisimas gracias pibe. Ahora lo probare.

Pero he probado el mio, y no me funciona, en Issis, el oscilloscopia digital, no me hace nada, he utilizado el mismo esquema que tu, cambiando el micro por supuesto.

alguien me puede ayudar... creo que pibe al final ya se va a cansar... y el no sabe C, alguien que sepa algo de C me puede decir si el codigo es logico... porfavor.

Yo lo dejo aqui por si alguien se lo quiere mirar y opinar. Gracias.

#include <16f870.h>

#device adc=8
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)


#use rs232(baud=1200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#USE FAST_IO (A)
#USE FAST_IO (B)
#USE FAST_IO (C)


//ROGRAMA PER EMULAR PROTOCOL MC145026


/////////////////////////////
////////////////////////////
// Definició de Pins
//////////////////////////
/////////////////////////

// *****  IN-CIRCUIT SERIAL PROGRAMING  ***** //

//    PGM      ==>      PIN_B3   (24)
//    PGC      ==>      PIN_B6   (26)
//    PGD      ==>      PIN_B7   (28)
//    VDD      ==>      (20)
//    VSS      ==>      (8,19)

////////////////////
//***VARIABLES***//
//////////////////
int pols = 0.5;                //tiempo de un pulso(ms)
int DT   = 8;                 //tiempo que dura un digito (ms) (Data Period)
int1 polsat;                  //bit de seguridad


///DECLARACIO DE FUNCIONS
void envia_paraula(void);         // envia una paraula
void bit_alt (void);             // high bit(1)
void bit_baix(void);            // low bit(0)
void atent (void);             // enviar un espacio para empezar a recibir la
                              // trama, para "despertar" al micro


#DEFINE envia_codi      PIN_C6  //port per enviar el codi
#DEFINE polsador        PIN_C3 //para hacer pruebas de envio de datos


void main()
{
   set_tris_a  (0b00000000);
   set_tris_b  (0b00000000);
   set_tris_c  (0b00000000);
   setup_psp(PSP_DISABLED);
  
  
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   disable_interrupts(GLOBAL);
  
   while (true)
   {
      if (input(polsador&&(polsat==0)));//polsat=0 porque si se pulsa el
      {                                //boton mientras está dentro del
         polsat=1;                    //bucle, no pase nada.
         atent();
         envia_paraula();
         delay_ms(DT*3);
         envia_paraula();
         delay_ms(DT*3);
         polsat=0;
      }      
   }

}

void atent()
{
output_low(envia_codi);
delay_ms(DT);
}

void envia_paraula()
{
   bit_alt();     //Una paraula la formen 9 "digits"
   bit_alt();     //els 5 primers son de la direccio
   bit_baix();    //i els altres 4 de la dada.
   bit_baix();    //Aquests són els cinc
   bit_alt();     //digits de la direccio.
  
   bit_alt();     //Aquests són els 4 "digits"
   bit_alt();     //que formen la dada.
   bit_alt();
   bit_baix();
}
void bit_alt()
{
   output_low(envia_codi);
   delay_ms(pols);
   output_high(envia_codi);
   delay_ms(pols*7);
   output_low(envia_codi);
   delay_ms(pols);  
   output_high(envia_codi);
   delay_ms(pols*7);
   output_low(envia_codi);
}
void bit_baix()
{
   output_low(envia_codi);
   delay_ms(pols);
   output_high(envia_codi);
   delay_ms(pols);
   output_low(envia_codi);
   delay_ms(pols*7);
   output_high(envia_codi);
   delay_ms(pols);
   output_low(envia_codi);
   delay_ms(pols*6);
}
« Última modificación: 22 de Julio de 2010, 13:23:31 por f-traxx »

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda para emular codificación del MC145026
« Respuesta #21 en: 20 de Julio de 2010, 06:26:08 »
No me voy a cansar! (además hay una docena de empanadas argentinas de por medio!  :mrgreen: :mrgreen:)

Has probado el asm/hex que te he pasado en el ISIS que te he pasado?
Ahora lo que debes hacer es mirar mi asm con el MPLAB. Vete si eso en modo debugger /select tool / MPLAB SIM y le vas dando paso a paso. Miras lo que vá haciendo y ve estudiando tu código , comparando que hace el mío que funciona y donde está la diferencia con el tuyo.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda para emular codificación del MC145026
« Respuesta #22 en: 20 de Julio de 2010, 06:41:02 »
El polsat de seguridad no es necesario. Te cuento por que:

Cuando pulsas saltas a la linea donde ya envia la palabra.
Pausa
Envias otra palabra
Pausa
etc
etc
Vuelves al inicio, a mirar el pulsador.

O sea, va linea a linea y por mas que pulses cuando estés dentro del bucle pues el micro no estará mirando el pulsador hasta no haber acabado el bucle y vuelto a empezar.
Distinto sería si utilizaces interrupciones para detectar el pulsador, entonces si deberías usar un flag de seguridad para que no vuelva a entrar en la interrupcion hasta no haber acabado la rutina principal.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda para emular codificación del MC145026
« Respuesta #23 en: 20 de Julio de 2010, 06:50:38 »
ERROR :
 set_tris_c  (0b00000000);

Debe ser
set_tris_c  (0b00001000);
Ya que el pin C3 es la entrada del pulsador

ERROR :
#use rs232(baud=1200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

Quita esto, porque el pin C6 está compartido con TX de la UART y entonces no te actuará el pin C6 como salida del dato!
« Última modificación: 20 de Julio de 2010, 06:54:00 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Ayuda para emular codificación del MC145026
« Respuesta #24 en: 20 de Julio de 2010, 06:52:56 »
Ostias.... normal que no me funcionara... a veces los despistes mas tontos son los que hacen perder mas tiempo....
ERROR :
 set_tris_c  (0b00000000);

Debe ser
set_tris_c  (0b00001000);

Madre mia... ahora lo probare

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Ayuda para emular codificación del MC145026
« Respuesta #25 en: 20 de Julio de 2010, 07:28:17 »
Me hace caso omiso del pulsador... envia las palabras quando le da la gana...

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda para emular codificación del MC145026
« Respuesta #26 en: 20 de Julio de 2010, 07:32:23 »
Le pusiste la resistencia de pullup?

Para pruebas solamente: Lleva el pin C3 directamente  a tierra y mira que ocurre en C6, luego a positivo y mira que ocurre. En una de las dos maneras deberá enviar los datos sin parar, y en la otra nada de nada.

Puede que to while esté al revés y esté enviando todo el rato porque detecta que C3=1, en ese caso modifica tu while para que envie cuando detecte C3=0
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Ayuda para emular codificación del MC145026
« Respuesta #27 en: 20 de Julio de 2010, 08:27:55 »
he probado las dos cosas en C, he negado el If que utilizo, y luego me lo envia rapidisimo, luego lo he dejado como estaba, y  me lo envia quando le da la gana... aqui te subo los archivos que tengo... perdona pero no se que es el archivo .cof... aroa lo probare un rato mas a ver si encuentro algo raro y me ire a comer, hasta eso de las 4 no estare otra vez... no tengas prisa en mirartelo, si no puedes ya voy buscando yo cosas, pruebo eso que me has dicho de las resistencias y por la tarde te digo algo, lo prueba en la realidad no??

GRACIAS POR TODO...

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda para emular codificación del MC145026
« Respuesta #28 en: 20 de Julio de 2010, 08:33:49 »
aqui te subo los archivos que tengo...

 :shock: :shock:

donde están?
Debes darle a opciones adicionales para subir el archivo. yo ahora piro a hacer siestita, vuelvo tipo 4pm.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Ayuda para emular codificación del MC145026
« Respuesta #29 en: 20 de Julio de 2010, 10:36:03 »
Lo siento ha sido un lapsus... hoy ya van unos quantos... :?