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

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

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Emulando protocolo del MC145026 y MC145027
« en: 16 de Julio de 2010, 06:25:09 »
Ola, soy nuevo en el foro y necesitaria ayuda para emular el codigo que utiliza el motorola MC145026, supongo que todos los protocolos trinarios van igual, si alguien me puede echar una manita, se lo agradeceria en cantidad.

Grácias a todos de antemano, y felicidades por el foro.
« Última modificación: 26 de Agosto de 2010, 12:56:34 por f-traxx »

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #1 en: 19 de Julio de 2010, 03:12:38 »
alguien me puede ayudar porfavor, necesitaria que me guiarais para hacer una subrutina que emule el MC145026 a una freqüencia de 181 KHZ, lo que no entiendo es lo de la freqüencia, alguien me puede decir si esa freqüencia se corresponde a el envio de las dos palabra o al de una.
Necesito un empujoncito...

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Lenguaje trinario MC145026
« Respuesta #2 en: 19 de Julio de 2010, 04:28:01 »
Estaba mirando la hoja de datos del 145026 http://www.freescale.com/files/rf_if/doc/data_sheet/MC145026.pdf
Creo que la frecuencia que indicas es para el oscilador. Mira la página 12.
Igualmente... va ser un poco dificil emular las entradas triestado de este chip, ya que los pic tienen entradas smitch trigger y si las dejas al aire (ni 0 ni 1) entonces toman valores al azar (0 o 1) dependiendo del ruido que les entre. Seguramente tendrás que utilizar uno o mas integrados con entradas triestate antes del micro.
Al menos es lo que yo creo, si alguien tiene una idea mejor que la comparta. Siempre hay "truquillos" con los micros que uno desconoce :)

Si lo que quieres es reemplazar el 145026 con un solo micro yo te diría que uses un micro con 15 entradas digitales . En lugar de tener 9 dip switchs triestado le pones 15 dips biestado 0/1. Con eso logras 32k combinaciones. Luego ya es cuestión de codificar el tipo y envío de datos.
« Última modificación: 19 de Julio de 2010, 04:44:15 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #3 en: 19 de Julio de 2010, 05:41:37 »
Muchisimas gracias por la respuesta pibe, si lo que quiero intentar hacer es sustuir el MC145026 y el MC145027, por dos microcontroladores, el problema es que no se como empezar con la codificacion de los datos.
Lo que yo creia, es que la freqüencia esa de 181 Khz, era el data period que sale en la página 13, y he calculado el tiempo que tarda en microsegundos en enviar una palabra, como lo harias tu lo de la codificacion?

Lo siento por ser tan pregunton... pero soy algo nuevo en el tema... nunca havia tocado RF.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Lenguaje trinario MC145026
« Respuesta #4 en: 19 de Julio de 2010, 06:00:41 »
Pero ya tienes unos 145026 y 027 puestos en algun circuito? O es un proyecto escolar ? O es un desafío particular?
Me suena como que es un proyecto escolar porque aportas el dato de 181khz.
Por otra parte... microsegundos para enviar una palabra no es posible a menos que tengas un micro corriendo a 1 ghz :). Seguramente son milisegundos.

El problema que yo de C ni papa. Pero es que ni siquiera puedo escribir el encabezado sin que me dé error, jajajaa. Y mira que lo he intentedo! :P
Pero bueno, el lenguaje es lo de menos.
Primero deberías encarar por el hardware. Necesitas que las entradas sean triestate? O solo necesitas que los datos de salida sean los mismos sin importar el tipo de entradas? Luego de esto, usarás modulos de RF para emitir recibir? O al ser un proyecto escolar sólo es sobre el papel y nada más?
Una vez tengas claro todos los componentes que deberías utilizar entonces haces el esquema. A ser posible en el ISIS de proteus.
Luego toca hacer un diagrama de flujo del programa. De principio a fin. Primero globalmente para que te aclares que debe hacer el programa.
Luego refinas, profundizas el diagrama de flujo mas detalladamente: Inicializacion de variables, temporizadores, interrupciones (si cabe) . lectura sobre las entradas, decisiones acorde a las entradas y grabación del dato en ram o eeprom, lectura del pin "envio" , envió de datos y su correspondiente codificación y vuelta al loop de lectura de entradas.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #5 en: 19 de Julio de 2010, 06:17:53 »
Si, como bien has dicho es un proyecto escolar, pero no me interesa mucho que me hagais el programa en si, sino contrastar mis ideas y que se me suigeran otras, no tengo ningun 145026 en ningun circuito, respecto a lo de los microsegundos..., me he explicado mal, si no me he equivocado en los calculos, lo que queria decir es que el micro tarda 0.58 ms en enviar un estado (un "1" o un "0"), aunque no sepas de C, creo que da igual, porque me gustaria que me dierais algunas pautas, ahora me pondre a hacer el diagrama de flujo y todo lo que me has aconsejado.


Te cuento lo que necesito y lo que no, las entradas no tienen que ser tristate solo necesito que los datos de salida sean los mismos, ya que yo tengo un micro que recibe una instruccion por un pin, luego esa instruccion se tendria que pasar a codigo trinario para que lo pudiera reconocer un MC145027 y por último, si que será via RF para emitir y recibir, el professor nos pasara los módulos, nosotros solo tenemos que hacer la programación.

Muchisimas grácias por tu paciencia/interés espero aprender mucho de este foro y ser de ayuda en medida de lo possible, veo que tu eres de gran ayuda porque me he fijado que escribes en muchos posts.

Grácias otra vez.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Lenguaje trinario MC145026
« Respuesta #6 en: 19 de Julio de 2010, 06:31:57 »
De ná  ;-)

Ve primero por lo que te he puesto.
Te costará lo suyo, pero una vez tengas el diagrama de flujo es coser y cantar.
La clave es que reemplaces primero el 45026 por el micro . Aun no programes las entradas para que cambie el codigo, déjalo para después. Haz que envíe un código fijo, una palabra primero , luego dos. Da igual la frecuencia. Luego cambias la frecuencia (no sé si usarás UART o un pin digital del micro) , y así.... pasito a pasito....
Una vez tengas el dato de salida deseado ( te aconsejo ferviertemente un osciloscopio) entonces pruebes con un 45027 por cable a ver que tal va.
Si no sabes C, pues vas de a poco. Busca por el foro los ejemplos en C que existen, mira como inicializan el micro y cada instruccion. Copia y pega sin vergüenza! jajajaja.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #7 en: 19 de Julio de 2010, 06:35:55 »
Muchisimas grácias por tus aportes, rapidez y paciéncia, me pondre en quanto pueda ahora estoy haciendo el diagrama, te puedo preguntar cosillas por mensajes?

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #8 en: 19 de Julio de 2010, 11:44:29 »
Hola, alguien me puede ayudar con el tema, por ahora he hecho un codigo que envie una trama fija de bits, alguien me puede decir si funciona, ya que no consigo utilizarlo en el Proteus.

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


#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 Globals
////////////////////
///////////////////


///DECLARACIO DE FUNCIONS
void envia_paraula(void);         // envia una paraula
void bit_alt (void);             // high bit(1)
void bit_baix(void);            // low bit(0)



#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));
      {   
         envia_paraula();
         delay_ms(8);
         delay_ms(8);
         envia_paraula();
         delay_ms(8);
         delay_ms(8);
      }     
   }

}

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()
{
   delay_ms(0.5);
   output_high(envia_codi);
   delay_ms(3.5);
   output_low(envia_codi);
   delay_ms(0.5);   
   output_high(envia_codi);
   delay_ms(3.5);
   output_low(envia_codi);
}
void bit_baix()
{
   delay_ms(0.5);
   output_high(envia_codi);
   delay_ms(0.5);
   output_low(envia_codi);
   delay_ms(3.5);
   output_high(envia_codi);
   delay_ms(0.5);
   output_low(envia_codi);
   delay_ms(3.5);
}

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #9 en: 19 de Julio de 2010, 11:46:24 »
veo que los 8 milisegundos salen como 8) ya sabeis amigos, la carita són 8 milisegundos

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Lenguaje trinario MC145026
« Respuesta #10 en: 19 de Julio de 2010, 11:57:18 »
Jeje. Veo que vas por buen camino.

No entiendo nada de C, pero adc=8 y use 232 en las declaraciones creo que están de más porque no las vas a utilizar.

Que micro?

El cristal es de 8mhz?

Que compilador C usas?

Igualmente al usar el compilador te crea un .COF que puedes usar con el ISIS para simularlo.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #11 en: 19 de Julio de 2010, 12:08:27 »
Gracias por tu apoyo pibe, lo del adc=8, nose que es porque me lo pone solo el compilador, y lo del use232, si que lo necesito porque tambien tiene que poder ser por cable, uso el PIC16F870, el cristal a 8 mhz si, y el compilador el CCS PCW.

Crees que la rutina está bien echa??

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Lenguaje trinario MC145026
« Respuesta #12 en: 19 de Julio de 2010, 12:17:31 »
Hombre, tiene buena pinta . Pero como no entiendo ni papa de C pues es como si un chinito me habla en chino , me doy cuenta que me habla en chino pero ni me entero :P

Ahora, el 232 NO lo necesitas. Por que? Porque el rs232 envía bytes enteros y de una duración preestablecida, misma duración entre 0 y 1. Tus datos son diferentes, duran diferentes los 1 y los 0. Hay pulsos intermedios que un rs232 no puede emular.
Igualmente tu código te servirá tanto para enviarlo por cable como por aire. Es solamente emular un 145026.

Yo podría "intentar" compilarte el programa. Pero seguro meto la pata, empiezo a tocar aquí y allá, y no lograré nada porque no entiendo lo que hago.
Mejor te esperas a que un sabio del C te eche un cable   :D

Si te sirve el programa en asm (asembler) te lo hago. Pero seguro tu profe te mirará con cara rara  :mrgreen:
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Lenguaje trinario MC145026
« Respuesta #13 en: 19 de Julio de 2010, 12:32:22 »
hombre pues si me hicieras el favor, pero si te supone mucho tiempo, no te molestes, que yo ya lo ire haciendo, pero si conocieras a alguien del foro que sepa de C... pues mejor, porque por lo que parece a los nuevos es dificil que les ayuden...

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Lenguaje trinario MC145026
« Respuesta #14 en: 19 de Julio de 2010, 12:42:51 »
Na, tranqui que ya saltará un buen samaritano del C. Si ven que tu te esmeras y haces tu parte pues entonces te echan un cable.
Y además, hay más foreros de C que de asm, eso fijo  :mrgreen:

He compilado SIN FALLOS  :-/ tu código.

He metido el .cof  en el isis pero el osciloscopio virtual me marca que la salida se pone en High y ahí se queda todo.

Mañana a primera hora desempolvo uno de mis 16f877 , lo meto en la protoboard y le machaco algo de asm  :D

El tema será luego que tu pases mi asm a C. Ahí ya no te puedo ayudar.

Por eso, a ver si un "Maestro Yoda" del C te echa un cable que será más productivo y rápido.
Claro que tendrás que explicarle de que vá el envío de datos y el protocolo. Lo que es un digito High, uno low y otro High impedance.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"