COMUNICACION PUERTOS SERIE LPC1769

639 views
Skip to first unread message

Matias Biancucci

unread,
Dec 3, 2012, 8:41:54 PM12/3/12
to embeb...@googlegroups.com
Hola a todos, vuelvo a molestar y a pedir alguna ayudita. Estoy intentando comunicar por puerto serie dos placas (un LPC1769 c/u), una es una placa que mide distancia (a traves de un sensor por ultrasonido) y otra es la placa de "adquisición de datos". Esta ultima se comunica a la PC por USB con el famoso conversor FTDI y me muestra todo en el putty, con eso no tengo problema. 

Mi problema es la comunicación entre las dos placas. Yo busco mandar un byte a traves de la UART1 desde la de adquisición a la que mide distancia, que esta ultima lo reciba y responda con el valor de la distancia a traves de su UART3. Para empezar, y descartar problemas con el sensor, en vez de mandar la distancia, quiero mandar un simple mensaje. Este es el codigo que escribi y no logro que se comuniquen. (Descarten cualquier error de cableado o de configuración de las UART o que este pifiando las UART porque revise todo 5mil veces). Muchisimas gracias, dejo mis códigos, puede que tenga que ver con alguna cuestion de interrupciones que no este teniendo en cuenta?

PD: De los puertos del micro van a un MAX232 antes de llegar a los DB9, esta chequeada la configuracion receptor-emisor, emisor-receptor.


CODIGO PLACA DE ADQUISICION DE DATOS (PIDE SONIDO Y LO MANDA A LA COMPU POR FTDI):

------------------------------------------------------------------------------------------------------///

int b;
int i;
const char mensaje;

void App_MaquinaEstados ()
{
switch (App_EstadoActual)
{
case App_Estado_PidiendoSonido:

for (i=0;i<1000000;i++)
{
b=1;
   // Enviar un caracter definido (un 1 que entra al case '1' en la de sonido
UART_SendByte (LPC_UART1 ,b );

// Recibir el sonido
//mensaje = UART_Receive(LPC_UART1);
UART_Receive(LPC_UART1, (uint8_t*)mensaje, (uint32_t)strlen(mensaje), BLOCKING);
}

// Respuesta automatica al pedir sonido
const char uarttest [ ]= {"PROBANDO LA FUNCION RESPONDE A TECLADO \n\r"};
UART_Send (LPC_UART2 , uarttest , strlen(uarttest) , BLOCKING) ;

UART_Send (LPC_UART2 , mensaje , strlen(mensaje) , BLOCKING) ;

//uint8_t sonido[10];

   // Enviar el sonido a la computadora
                //UART_Send(LPC_UART2, sonido, 10, BLOCKING) ;

App_Menu_Enviar ();
App_EstadoActual = App_Estado_Idle;

break;

------------------------------------------------------------------------------------------------------///

CODIGO PLACA DISTANCIA (RECIBE UN BYTE Y ENVIA A LA PLACA DE ADQUISICION UN MENSAJE):

------------------------------------------------------------------------------------------------------///

const char mensaje [ ]= {"CORRECTA COMUNICACION CON LA DE MOVIMIENTO:"};

void UART3_IRQHandler ()
{
int c;
c = UART_ReceiveByte (LPC_UART3);

switch(c)
{ case '1':


               UART_Send (LPC_UART3 , mensaje , strlen(mensaje) , BLOCKING) ;

//UART_Send(LPC_UART3, (uint8_t*)mensaje, (uint32_t)strlen(mensaje), BLOCKING);

break;
}
}


Leonardo Garberoglio

unread,
Dec 3, 2012, 9:06:33 PM12/3/12
to embeb...@googlegroups.com
Quizá hallas hecho esto, pero sino nunca está de mas sugerirlo.
El finde pasado estuve haciendo andar el UART2 de la LPC a travez de un max232 y directo a una PC con puerto serie.
Revisé todo mil veces y no me andaba... En este caso hay que echar mano al osciloscopio y al debug.
Yo hice lo siguiente, puse el osciloscopio en el Tx del micro, antes de confiurar el UART mido 2,3V aproximadamente, luego de configurar el uart la tension en el pin se va a 3,3V (el standar 232 dice que la condicion de reposo de la linea de transmision es un 0 (-12V) y el 1 es 12V, pero en la parte TTL la cosa se invierte, el 0 es 3,3V y el 1 es 0V), hasta aquí todo bien.
Luego pongo en un bucle infinito la instruccion de enviar un caracter y al correrlo el osciloscopio no me muestra ningún cambio... reviso denuevo el código (lo havía revisado mil veces) y encuentro un error, lo corrijo y sale andando de una.
Consejo, probá que la placa del sensor esté transmitiendo correctamente con un osciloscopio con una PC, lo mismo la otra placa.

En cuanto al código estas usando una librería que creo no es CMSIS, lo digo por las instrucciones que usaste. No conozco el funcionamiento de las mismas, pero por el nivel del código que estas escriviendo supongo que no te has equivocado en esa implementacion. Me inclino por algún problema de hardware o de inicializacion de las UARTS en alguna de las 2 placas.

Me interesa la parte del sensor de ultrasonido, estoy justo por empezar a trabajar con un SF04. Cual estás usando?

Saludos!
Reply all
Reply to author
Forward
0 new messages