Autor Tema: retardos en control de flujo serial?  (Leído 2778 veces)

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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
retardos en control de flujo serial?
« en: 01 de Mayo de 2007, 21:07:32 »
Amigos: necesito aclarar algunas cosas para poder seguir adelante:

si tengo 2 pic uno receptor serie y uno transmisor serie , y utilizo por soft un bit de bloqueo / habilitacion que lo maneja el receptor :

el bloqueo en el transmisor lo pongo de esta manera: while( ~bit ){} , de manera que cuando bit es uno el transmisor comienza a transmitir.
ahora , cuando el bit de start del caracter que envió el transmisor esta ya en el rx del receptor , que pasa si yo envio el bit de bloqueo al transmisor? puede truncar el byte de datos? o el caracter entra entero aunque yo bloquee la transmision?
 

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: retardos en control de flujo serial?
« Respuesta #1 en: 02 de Mayo de 2007, 09:29:15 »
Amigos: necesito aclarar algunas cosas para poder seguir adelante:

si tengo 2 pic uno receptor serie y uno transmisor serie , y utilizo por soft un bit de bloqueo / habilitacion que lo maneja el receptor :

el bloqueo en el transmisor lo pongo de esta manera: while( ~bit ){} , de manera que cuando bit es uno el transmisor comienza a transmitir.
ahora , cuando el bit de start del caracter que envió el transmisor esta ya en el rx del receptor , que pasa si yo envio el bit de bloqueo al transmisor? puede truncar el byte de datos? o el caracter entra entero aunque yo bloquee la transmision?
 

Debieras aclarar un poco mejor. 

Estas hablando de comunicarte por 2 pines diferentes TX/RX en cada pic o un mismo pin?

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: retardos en control de flujo serial?
« Respuesta #2 en: 02 de Mayo de 2007, 19:24:21 »
mil disculpas , son 2 pic diferentes , uno es un cartucho de memoria y el otro es un master .

la idea es que el cartucho transmita 3 bytes seguidos a peticion del master , es decir el master inicia la recepcion dando habilitacion al cartucho con un bit.

esto ya mas o menos lo pude hacer , ahora me pasa algo raro , que seguramente me lo estoy tragando

cuando el cartucho transmite , el master lo recibe a traves de la int_rda :
                                                                                                           
     #int_RDA
void RDA_isr ( void )
{     
   rs232_errors = 0 ;     
   printf ( "%c " , getc( ) ) ;
}
e imprime en la terminal serie correctamente el byte recibido. Ahora atento a lo que ustedes dicen respecto a lo corto que debe ser una interrupcion , lo que deseo hacer es esto:

     #int_RDA
void RDA_isr ( void )
{     
   rs232_errors = 0 ;     
   c = getc () ;
}
y el printf hacerlo en el main.

en el main tengo:

#include "master.h"



void main ( void )
{
   

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_OFF);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_oscillator(False);

   porta = 0b00000000 ; trisa = 0b00000000 ;
   portb = 0b00000000 ; trisb = 0b00100011 ;
   portc = 0b11000000 ; trisc = 0b11000000 ;
   portd = 0b00000000 ; trisd = 0b00000000 ;
   porte = 0b00000000 ; trise = 0b00000000 ; 

   
   delay_ms ( 100 ) ;
   rs232_errors = 0 ;
   
   enable_interrupts ( GLOBAL );
   enable_interrupts ( INT_RDA );
   while ( true )
   {           
       delay_ms ( 500 ) ;
       printf ( "%c " , c ) ;                             // ACA CUANDO IMPRIMO SALE CUALQUIER COSA!! 
       rts = 1 ; delay_us ( 100 ) ; rts = 0 ;     // rts es el bit de bloqueo/habilitacion que uso para parar al cartucho , que anda bien
   }
}

Lo unico que quise hacer fue capturar el valor de getc() en una variable tipo char que es c ( es publica ) , llevarla al main e imprimirla :shock:

desde ya gracias!!!!









Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: retardos en control de flujo serial?
« Respuesta #3 en: 04 de Mayo de 2007, 10:03:22 »
Usas, usart por hardware? usart por software? que pics son?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: retardos en control de flujo serial?
« Respuesta #4 en: 04 de Mayo de 2007, 17:35:18 »
disculpas por la falta de informacion!

los pic son 18f452 , implemento usart por hardware , y el control de flujo lo realizo con 2 pines , uno en el tranmisor que es entrada , y otro en el receptor que es salida , y el control lo tiene el receptor , de manera que habilitando al transmisor este ultimo envia un byte y para hasta la proxima habilitacion del receptor.

lo que me llama la atencion es porque saco el printf de la int_rda y lo coloco en el main y no imprime lo mismo????

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: retardos en control de flujo serial?
« Respuesta #5 en: 04 de Mayo de 2007, 17:52:46 »
lo que me llama la atencion es porque saco el printf de la int_rda y lo coloco en el main y no imprime lo mismo????

habría que ver como es el código ASM generado, pero desde ya te digo que hacer un printf en un vector de interrupción no es una buena idea. 

Yo lo colocaría en el main y vería la forma de que funcione de esa forma.

Por último, no olvides tener en cuenta la posibilidad de que ocurra algún error de Overrun, que impedirá que sigas recibiendo datos.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: retardos en control de flujo serial?
« Respuesta #6 en: 04 de Mayo de 2007, 18:26:56 »
coincido con vos en que no hay que poner printf en las int , de hecho la puse cuando empece a sospechar algo raro

el mismo printf lo hago en el main y no produce los mismos resultados!!!

te cuento tambien que el printf lo hace , no es que se lo coma ,sino que no puedo sacar el valor de la variable que capturé con getc()

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: retardos en control de flujo serial?
« Respuesta #7 en: 04 de Mayo de 2007, 18:54:22 »
te cuento tambien que el printf lo hace , no es que se lo coma ,sino que no puedo sacar el valor de la variable que capturé con getc()

No entiendo esta parte.  Te refieres en el otro extremo?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: retardos en control de flujo serial?
« Respuesta #8 en: 04 de Mayo de 2007, 19:14:25 »
perdon, lo que quise decir es que el printf tanto en la int como en el main salen por la terminal siow de la pantalla de la pc , el tema es que por ejemplo si le mando desde el cartucho el valor de un byte digamos 0xc0 , en la int el printf es : "valor es : c0" , ahora saco el printf tal cual esta y lo coloco en el main
y pone " valor es :   "( no saca nada en caracter ( %c) y si pongo %0x saca cualquier valor )

la captura de valor en la int es :     valor = getc() ;
la impresion en la siguiente linea :  printf ( "valor es :%c\r\n" , valor )

la impresion en el main lo planteo tal cual en la int : printf ( "valor es :%c\r\n" , valor )

pero no hacen lo mismo

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: retardos en control de flujo serial?
« Respuesta #9 en: 04 de Mayo de 2007, 19:34:54 »
esto sale en el asm pero no se interpretarlo


modulo en asm del printf de la int_rda
00E0:  MOVF   19,W
00E2:  BTFSS  F9E.4
00E4:  BRA    00E2
00E6:  MOVWF  FAD


modulo en asm del printf del main

01D8:  MOVF   19,W
01DA:  BTFSS  F9E.4
01DC:  BRA    01DA
01DE:  MOVWF  FAD


 

anything