TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Xa2 en 06 de Mayo de 2004, 03:18:00

Título: PUERTO SERIE Y PIC!!!!
Publicado por: Xa2 en 06 de Mayo de 2004, 03:18:00
Buenas Foreros!!
Tengo una duda, nunca he programado un puerto serie en C, y no se como hacerlo, lógicamente!!
Querría saber que es lo que llega por el puerto serie al PIc cuando pulsamos una tecla del teclado, claro, con su R-232 correspondiente!!
Me encantaria que me pudierais ayudar, porque no tengo ni idea, he llegado a programar en Ensamblador, pero en C no!!
Si me pudierais ayudar tambien con la inicializacion del puerto serie, a 9600 baudios y demas....
Pero mi principal duda es saber que es lo que llega al PIc por el puerto serie, y como se trata lo que llega!!!
Saludos y gracias adelantadas!!!
Título: RE: PUERTO SERIE Y PIC!!!!
Publicado por: kruskal en 06 de Mayo de 2004, 10:30:00
Hice este sencillo programa para comunicarse con el PC como una prueba para otra cosa pero igual te puede servir. Abres el Hiperteminal en COM1 a 9600 baudios
bit 8 paridad ningura y bit de parada 1 ycontrol de flujo ninguno. tienes que tener un conector DB9 con 3 cables del pin 5 (GND) pin 2 (RX) y pin 3 (TX) y conectarlo al COM1 de tu PC. Conectas el pin 5 de DB9 al negativo (GND) de tu circuito y el pin 2 (RX recepcion del PC) al pin B4  TX transmision del PIC a traves de una resistencia de unos 220 ohm para proteger el puerto del PC y el PIC, lo mismo haces para el pin 3 TX del PC al pin B5 RX del PIC. Asi cuando presionas el 1, con el hiperteminal abierto, en el teclado te apareceran los caracteres ASCII en el hiperteminal (carecteres de control incluido), cuando  presionas el 2 aparece el otro mensaje (HOLAAqui va el mensaje).Si armas un circuito con un 16F84 un cristal de 4 MHz te aseguro que este programa te funcionara BIEN lo he probado y lo tengo en uso actuamente pues estoy aprendiendo a utilizar el Visual Basic para recibir informacion por el COM1 .


#include <16F84A.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#define Tx PIN_B4 // PIN de Transmisión
#define Rx PIN_B5 // PIN de Recepción

#use rs232(baud=9600, xmit=Tx, rcv=Rx,INVERT)

SET_TRIS_B(0b01101111) ; // PIN B4 Tx Salida B5 Rx Entrada
SET_TRIS_A(0x1f) ;

int i;
char a;


void main (void)
{
   while(1)
   {
   a="4";
      a=getc();

      if(a=="1")
        {
   for(i=0;i<250;i++) putc(i);

         }
         
      if(a=="2")
     {
     fputs("Aqui va el Mensaje";
      putc(72);
      putc(79);
      putc(76);
      putc(65);
      }
     
     
    }
}

Eso es todo
asi que suerte y si tienes alguna duda consulata el manual de CCS que lo puedes descargar de su pagina.

Cristian
kruskal@hotmail.com
Título: RE: PUERTO SERIE Y PIC!!!!
Publicado por: Xa2 en 06 de Mayo de 2004, 15:19:00
Muchas Gracias!!
Me ha servido de ayuda,ya lo probare el programa!!
Muchas gracias de nuevo, y saludos!!!
Sois la ostia!!!!
Título: RE: PUERTO SERIE Y PIC!!!!
Publicado por: trucomanx en 28 de Mayo de 2004, 14:09:00
y para el 16f877 que ya tiene implementado el puerto serie tambien especifico pines de tx o como es el compilador sabe que debe usar el que ya tiene porque el 16f84a no lo tiene y el compilador lo implementa verdad, podrian explicarmelo porfa
Título: RE: PUERTO SERIE Y PIC!!!!
Publicado por: badtzdizzy en 30 de Mayo de 2004, 21:00:00
Hola

En mi caso yo utilizo el PIC 16F874A que es muy parecido al que tu utilizas y lo puedes ver en las hojas de especificación. Para este micro solo debes colocar esta linea al principio del programa.

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

De todos modos en la hoja de datos te dice que pines son los de transmisión y recepción. Esto lo puedes encontrar en el manual del CCS.

Saludos
Título: RE: PUERTO SERIE Y PIC!!!!
Publicado por: trucomanx en 31 de Mayo de 2004, 11:38:00
A entonces de todas maneras tengo que especificar el pin,
pero supongo que el compilador ya usa el transmisor del PIC, bueno y con respecto al la frecuencia máxima en baudios que puedo usar que frecuencia puedo poner porque el código en C aumenta las líneas de instrucciones en el PIC y todo eso.
Porque para mi caso tengo que recibir un bus de 16 bits por los puertos del PIC y quería mandar ese dato por el puerto serie(altoque antes de que venga el siguiente dato) del PIC en dos partes de 8 bits, pero esos datos de 16 bits vienen con una frecuencia de 100Khz pero quiero subir la frecuencia hasta donde se pueda
Título: RE: PUERTO SERIE Y PIC!!!!
Publicado por: odukec en 31 de Mayo de 2004, 12:12:00
Hola..

Creo que la maxima velocidad de transimision es 57.6Kb pero dependiendo de el cristal va a tener un porcentaje de error..

no uses una velocidad tan alta por que te puede dar problemas..
mira el datasheet que hay aparecen los porcentajes de error y tambien aparecen las velocidades de operacion.
Título: RE: PUERTO SERIE Y PIC!!!!
Publicado por: trucomanx en 31 de Mayo de 2004, 16:59:00
osea que aprox como máximo puedo pasar 56000 bits por segundo
entonces me puede dar una sugerencia porque yo tengo que meter una señal de F=100khz y 16 bits por muestra a una PC.




y pensaba usar el puerto B y C de 16f877 para recibir los datos, porque si la señal es de 100Khz quiere decir que cada "T=10 u seg " se envía una dato de 16bits .
y como el tiempo en que se realiza cada instrucción es 0.2us tenia tiempo suficiente para mandarlo por el puerto usando c , que me dijeron usaba mas código.
Pero me parece que a esa frecuencia no voy a poder