TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Correia en 09 de Octubre de 2011, 23:04:49

Título: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 09 de Octubre de 2011, 23:04:49
buenas noches ysaludos a toda la comunidad de todopic, la presente es para preguntar una pequeña pregunta para la comunicacion rs232 (casi usart) se usa la libreria predefinida:
"#use rs232 (opciones)..
ahora en los ejemplos que he visto esta libreria es solo para los pic16f8xx y pic18fxxx?
ya que veo que esos micros tienen el RX y TX en RC6y RC7, execto el pic16f628a (el que uso apra practicar), lo tiene en el RB2 Y RB1, es decir que esa libreria predefinida no me sirve con el pic16f628a, xq supongo que en su configuracion reconoce es PIN_C6 y PIN_C7, espero su respuesta.
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Nocturno en 10 de Octubre de 2011, 02:13:33
Si no pones los pines, la sentencia #use rs232 utilizará los de la usart por defecto del PIC, allí donde estén.

Si quieres usar otros pines, puedes definir los que tú quieras usando los parámetros xmit y rcv como en este ejemplo.


#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3)
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: MerLiNz en 10 de Octubre de 2011, 09:42:47
creo que si declaras tu los pines utilizas el usart por software, y lo ideal es usar el hardware, ya que para algo lo tiene  :)
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Nocturno en 10 de Octubre de 2011, 11:18:33
Si los declaras y coinciden con los pines hardware, los usa por hardware. CCS sólo hace la emulación software si no coinciden.
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 11:35:29
Código: [Seleccionar]
#include <16F628A.h>
#use delay(clock=4000000)
#define TX PIN_B2
#define RX PIN_B1
#use RS232(BAUD=9600, XMIT=PIN_B2, RCV=PIN_B1, PARITY=N, BITS=8)
#fuses PUT, NOWDT, INTRC_IO, MCLR
#byte TRISA = 0x85
#byte PORTA = 0x05
#byte TRISB = 0x86
#byte PORTB = 0x06
#byte CMCON = 0x1F

void main (){
   int8 i;
   CMCON=0x07;
   TRISA=0x01;
   PORTA=0x00;
   bit_set(TRISB,1);
   bit_clear(TRISB,2);

   while (1){
   for(i=0;i<=10;i++){
      putc(i);
      delay_ms(1000);
   }
   }
}


buenas yo de nuevo muchachos veran, estoy simulando esa programacion en proteus con el instrumento virtual "virtual terminal" para que me muestre los numeros, pero cuando arranco no muestra nada, =s y tengo bien conectado todo el RX del virtual terminal con el TX del pic, y el RX del pic con el TX de virtual terminal, en assembler lo hice y si me funciona y ahora que quiero probar C por la simplicidad no funciona =s ayuda!!
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 11:48:33
nocturno no comprendo mucho esa parte de hadware y software me la explicas un poco mas?
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Nocturno en 10 de Octubre de 2011, 11:53:01
Es simple: el pic que has elegido tiene los pines TX y RX en B2 y B1 respectivamente.
Eso significa que el hardware de tu micro incorpora una USART conectada en esos pines para la gestión de las comunicaciones serie.
En tu programa declaras expresamente el uso de esos pines, y por tanto usarás dicho hardware. De hecho, te podrías haber ahorrado colocar los pines porque son los que usa por defecto.
Sin embargo, podrías haber puesto cualquier otro par de pines y también funcionaría, aunque las comunicaciones serie serían gestionadas por el propio proceso del microcontrolador, ocupando tiempo de proceso y de programa.
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 11:56:32
entiendo, entocnes por que cuando conecto el virtual terminal como debe ser a esos pines y corro el programa no me muestra los numeros =s.
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Suky en 10 de Octubre de 2011, 12:12:40
Clickea sobre el virtual terminal y coloca Hexadecimal y veras los datos enviados. Sino tienes que enviar caracteres ASCII.


Saludos!
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 12:28:30
dios dame calma, le doy click al virtual y no hay ninguna opcion para poner hexadecimal, cambie por enviar un caracter asscii y no aparece, cuando arranca aparece en rojo el pin RX, TX , RTS del virtual terminal
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: MerLiNz en 10 de Octubre de 2011, 13:08:15
los has conectado cruzado?? el RX del pic al TX del terminal, y el TX del pic al RX del terminal
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 13:28:45
si señor y ahora pruebo con la que programe en asm que me funciono y simulo en proteus hace 2 dias y no funciona no se si es cosa del virtual terminal
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 13:33:15
claro yo estoy conectando directo los pines del pic a los del virtual terminal, ya que en otra ocasion me corrio con el programa de asm que programe y ahora no, x.x en el proteus I hata that.
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Suky en 10 de Octubre de 2011, 13:45:27
dios dame calma, le doy click al virtual y no hay ninguna opcion para poner hexadecimal, cambie por enviar un caracter asscii y no aparece, cuando arranca aparece en rojo el pin RX, TX , RTS del virtual terminal


 :? Al colocar Start o Run, aparece la ventana del virtual terminal, en esa ventana click derecho, Hex Display Mode  ;-)

También podes colocarle un osciloscopio a la linea para ver que pasa, ejecutarlo paso a paso, etc......


Saludos!
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 13:50:54
ahora si funciona que cosas no x.x gracias suky, oye suky no tendras un ejemplo d como usar el hyperterminal con el proteus para recibir y enviar informacion me gustaria hacer esa practica.
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Suky en 10 de Octubre de 2011, 15:02:17
ahora si funciona que cosas no x.x gracias suky, oye suky no tendras un ejemplo d como usar el hyperterminal con el proteus para recibir y enviar informacion me gustaria hacer esa practica.

Hay que buscar en el foro  ;-)
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 16:04:37
tengo un problema, gracias a ustedes corre la simulacion del virtual terminal, ahora me puse a comunicar dos pic, uno es transmisor y el otro receptor, el receptor tiene 4 leds conectados desde RA0-RA3 para mostrar los numero en binario que le transmitira el pic transmisor, los numeros seran del 1-10 y se repitira el ciclo, la cosa es que le puse un interruptor al pic transmisor para que cuando no se pase el interruptor no mande ningun dato, pero al simular el interruptor no lo he pasado y se ve el pic recpetor mostrando 3 leds prendidos O.O y eso que no pase el interruptor que podria ser? la programacion es esta:
PROGRAMACION DEL PIC TRANSMISOR POR MEDIO USART
Código: [Seleccionar]
...............................
...............................
void main (){
int valor;
bit_set(TRISA,0);
porta=0x00;
while(1){
if (bit_test(PORTA,0)==0){
  for (valor=0;valor<=10;valor++){
    putc(valor);
    delay_ms(1000);}
}
}
}
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Suky en 10 de Octubre de 2011, 18:36:02
Y el código del receptor?
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 10 de Octubre de 2011, 20:13:41
este es el del receptor, la recepcion la hice por interrupciones.

Código: [Seleccionar]
#include <16F628A.h>
#use delay(clock=4000000)
#define TX PIN_B2
#define RX PIN_B1
#use RS232(BAUD=9600, XMIT=PIN_B2, RCV=PIN_B1, PARITY=N, BITS=8)
#fuses PUT, NOWDT, INTRC_IO, MCLR
#byte TRISA = 0x85
#byte PORTA = 0x05
#byte TRISB = 0x86
#byte PORTB = 0x06
#byte CMCON = 0x1F

int8 valor;
#INT_RDA
   RDA_isr(){
   valor=getc();
   }
   
void main (){
   CMCON=0x07;
   TRISA=0x00;
   PORTA=0x00;
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
 while(1){
 PORTA=valor;
 }
}

Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Suky en 10 de Octubre de 2011, 20:50:49
Inicializa la variable a 0 para asegurarte. Después funciona correctamente?
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 12 de Octubre de 2011, 18:37:35
suky lo arregle de esta forma y funciona

Código: [Seleccionar]
#include <16F628A.h>
#use delay(clock=4000000)
#define TX PIN_B2
#define RX PIN_B1
#use RS232(BAUD=9600, XMIT=PIN_B2, RCV=PIN_B1, PARITY=N, BITS=8)
#fuses PUT, NOWDT, INTRC_IO, MCLR
#byte TRISA = 0x85
#byte PORTA = 0x05
#byte TRISB = 0x86
#byte PORTB = 0x06
#byte CMCON = 0x1F

int8 valor;
#INT_RDA
   RDA_isr(){
   valor=getc();
  PORTA=valor;
   }
   
void main (){
   CMCON=0x07;
   TRISA=0x00;
   PORTA=0x00;
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
 while(1){
 }
}



pero aun hay algo que no logro hacer como en assembler suky no se si pueda ayudarme vos debe saber por que tiene mas experiencia programando en lenguaje C
Título: Re: CURIOSIDAD DE RS232 DE CCS
Publicado por: Correia en 12 de Octubre de 2011, 18:42:27
algo que no logro es, cuando paso el interruptor comienza a mandar al informacion al pic recpetor y este la muestra en los leds, pero yo quiero que cuando lo pase, y al momento le de denuevo al interruptor para que este abierto, el deje de pasar la informacion y se quede mostrando el leds receptor lo ultimo que mostro, en assembler lo logre pero en C no se como.