Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

21/11/2007 #1


Problema con puerto serie
Hola, os escribo porque tengo un problema con el puerto serie. Estoy programando un 18f4520 con CCS. Estoy intentando que funcione la comunicacio serie con el ordeandor, pero nada de nada. Utilizo un MAX232 para la conversion de niveles. Tengo unos leds puestos en el transmisor del pic y en transmisor de del MAX232 y veo k parpadean, cuando mando caracateres, pero con el hiperterminal no veo nada.

La configuracion del rs232:

#USE RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8 )

Si me podeis hechar una mano, os lo agradeceria.
22/11/2007 #2


Supongo que has comprobado que no tengas las líneas intercanviadas?

PIC ............. PC
====............ ====
RX ------> TX (pin 3 del DB9)
TX ------> RX (pin 2 del DB9)
GND ------> GND

Comprueba que tengas configurada la misma velocidad y bits en el terminal.

Saludos.
22/11/2007 #3


Ya funciona, simplemente era el max232 que era un poco viejo y estaba cascado. Gracias de todos modos.
Ahora lo que estoy intentando hacer es leer del PC una serie de bytes, 128 bytes concretamente, pero no tengo ni idea de hacerlo, lo intento con fgets() pero se queda a la espera y no deja continuar el programa.
Un poquito de porfavor, jajaja, gracias de antemano.
22/11/2007 #4


Prueba de testear el puerto serie con kbhit() para saber si existe caracter a la espera.

Para leelo, usa el getc(), en vez del fgets().

A ver si con este canvio te funciona.
22/11/2007 #5


Si si, si yo puedo leer caracateres, pero lo k quiero hacer es leer una serie de bytes. Caracter a caracter va bien, lo ya no.
Gracias por tu rapidez.
22/11/2007 #6


Create una matriz del tamaño que necesites. p.e.

char recibido[130];

Y luego haz un bucle para leer los 128 bytes.

for (i=0; i<128; i++)
{
if (kbhit()) recibido[i]=getc();
}

El IF es para comprovar si hay caracteres en el buffer.
Piensa que no saldràs del bucle hasta que no hayas recibido los 128 caracteres.
Si quieres enviar menos, por ejemplo lo que puedes hacer es enviar un caracter especifico para indicar el fin.

De esta manera, podriamos hacer:


for (i=0; i<128; i++)
{
if (kbhit())
{
recibido[i]=getc();
if (recibido[i]=="caracter de fin") i=127;
}
}

Al recibir el caracter finalizador, te hara salir del for.
22/11/2007 #7


Gracias, al final lo hice asi. Lo unico era lo de controlar lo del fin de trama.
Ahora estoy con la mierda del RS485, que no se como funciona.
Tengo una red de lectores en RS485, solo que tenia un conversor a RS232 y con eso sali del paso, pero tengo que utilizar un MAX485 y no se como va el HW y como utilizar el SW.
Por ahora intentare hacerlo con el conversor, haber si sale algo, pero tengo k hacerlo con el MAX485.¿Sabes algo de ello?
22/11/2007 #8


Seguramente que si miras el datasheet del max, tengan algún ejemplo de como implementar el hardware.
22/11/2007 #9


Bueno eso ahora no me preocupa, primero quiero hacerlo con el conversor k es mas facil y luego pasare con el max485.
Mi problema ahora esk para poder leer de los lectores tengo k enviar una serie de bytes, concretamente:

0x00, 0x00, 0x40, 0x41, 0x01, 0x00, 0x85, 0x00, 0x00, 0x06, 0x83, 0x30, 0x30

¿Como podria enviarlos? Es el protocolo de comunicacion de los lectores, para que no haya colisiones en el bus.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.