TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Javicho en 19 de Agosto de 2010, 02:10:44
-
Saludos a todos:
Tengo un circuito en el que un PIC16F628A se comunica con un módulo sim340 via RS232, para ello uso el USART del PIC así el PIC se concentra en otras tareas y el USART se encarga de la recepción y transmisión de los bits seriales, pero ahora tengo ue conectar el PIC tambien con una PC, ue ideas pueden sugerirme en este caso ya ue el PIC ahora debe estar atento a lo ue dos dispositivos le transmitan al PIC.
La recepción serial del módulo lo hago en el RSI (por interrupción), leo el flag que me indica que un nuevo byte ha llegado al buffer de recepción del Usart y listo leo el byte, no me ocupo de si los bits llegaron con los tiempos de bit bien definidos o no, simplemente espero interrupción y leo el byte RCREG, de hecho con la PC tendria que usar un pin por interrupción y comenzar a leer bit a bit, analizar tiempos de bits, leer bit de start, de stop, etc, se hace muy laborioso, que otro procedimiento creen que podria optar?
Javicho.
-
Hola Javicho, yo lo que hago en estos casos en configurar 2 puertos seriales
#use rs232(baud=4800, xmit=pin_c6,rcv=pin_c7,stream=PC)
#use rs232(baud=4800, xmit=pin_b1,rcv=pin_b0,stream=mando)
Para PC utilizo el módulo USART con interrupción de recepción, para estar atento en la otra comunicación configuro interrupción externa con flanco de bajada en RB0, de este modo me ha funcionado bien.
#int_rda //Vector de interrupcion de la recepcion de datos
void interrupcion_rx() //por el usart
{
dato_recibido = getc(PC); //Se lee el dato recibido
}
#int_ext
void recibir_mando()
{
dato_recibido = getc(mando);
}
fputc(0b11000000,mando);
fputc(0b11000000,PC);
saludos.
-
Que tal Javicho,
Como bien mencionas ese micro solo contiene 1 USART asi que para implementar un segundo tienes dos opciones
1) Por software, que es como lo explicas, haciendo el analisis bit a bit que no es nada complicado.
2) POr hardware, es decir agregando un USART con interface SPI como el MAX3100, o el MAX3107 que ya contiene el oscilador interno y con sinterface SPI e I2C. Tamvien puede ser el MAX3110E o el MAX3111E que ya contienen el driver para niveles RS-232.
Mas informaciond e estos IC en www.maxim-ic.com
Espero que esto te ayude.
Elreypic
-
Puedes implementar un timer que interrumpa con el periodo de la comunicación utilizada con la computadora, por ejemplo para 9600 baud interrumpir cada 104us. Entonces de esa manera puedes determinar el dato recibido desde la PC sin descuidar otros procesos. Esta forma de trabajarlo lo ha publicado Nocturno en un ejemplo, pero no he sido capaz de encontrarlo :?
También tienes la posibilidad de conectar el pin de recepción al pin que genera una interrupción externa por flanco descendente, de esa manera generas una interrupción al comenzar a recibir un dato.
Saludos!
-
Al hilo de esto que estais comentando, ¿alguien a usado desde CCS un MCU que tenga 2 UART, como por ejemplo PIC18F25J11 o similar?.
Revisando el DataSheet del chip, veo TX1 y RX1 (correspondiente a los clásicos RC6 y RC7, pero no veo por ningún sitio TX2 y RX2.
Tambien tengo dudas si el compiladorpermite #int_rda y #int_rda1 (p. ejemplo).
Gracias anticipadas.
Jc
-
Al hilo de esto que estais comentando, ¿alguien a usado desde CCS un MCU que tenga 2 UART, como por ejemplo PIC18F25J11 o similar?.
Revisando el DataSheet del chip, veo TX1 y RX1 (correspondiente a los clásicos RC6 y RC7, pero no veo por ningún sitio TX2 y RX2.
Tambien tengo dudas si el compiladorpermite #int_rda y #int_rda1 (p. ejemplo).
Gracias anticipadas.
Jc
Según el *.h del dispositivo acepta como parámetros INT_RDA e INT_RDA2. Luego en la ayuda de CCS (F12), colocando #USE RS232 salen los parámetros de configuración, allí encuentras:
UART1
Sets the XMIT= and RCV= to the chips first hardware UART.
UART2
Sets the XMIT= and RCV= to the chips second hardware UART.
La ayuda del compilador, es como el datasheet para el microcontrolador :mrgreen:
Saludos!
-
Gracias SUKY. :P
Eficiente como siempre.
Solo una pregunta, ¿que versión de compilador estás usando?.
Gracias
Jc
-
Gracias por sus aportes, no me queda otra que implementarlo por interrupción y a mano ya que uso asembler, no hay problema, gracias a todos.
Javicho.
-
Gracias SUKY. :P
Eficiente como siempre.
Solo una pregunta, ¿que versión de compilador estás usando?.
Gracias
Jc
4.108
Saludos!