Autor Tema: Comunicacion Serial RS232  (Leído 6234 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Comunicacion Serial RS232
« Respuesta #15 en: 25 de Junio de 2019, 03:38:45 »
Yo es que los simuladores no los he usado jamás por que no. Prefiero siempre usar tarjetas de desarrollo, ni siquiera protoboard.

Yo también detesto los simuladores, no los he utilizado en mi vida, donde se ponga la placa real con tu Debug, no hay nada mejor.

En mi caso, no uso protoboards, pero tampoco me gustan las tarjetas de desarrollo, salvo el Teensy que lo he usado en algunos casos.

Prefiero diseñar la placa y enviar a fabricar el PCB a los chinos, por unos pocos dólares tienes la placa en tu casa en una semana. Muchas veces, por comodidad, he pedido placas que solo iban a servir para pruebas, aunque luego vayan al cajón de los recuerdos o a la basura. No vale la pena liarse con una protoboard con mil cablecitos o con una tarjeta de desarrollo que también lleva su curro.

  Así es. De hecho mis tarjetas de desarrollo también me las he diseñado yo de acuerdo a mis necesidades y fabricadas por JLPCB.

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #16 en: 26 de Junio de 2019, 21:00:10 »
Bueno gracias a todos por la colaboración, lamentablemente no pude hacer la comunicación serial.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Comunicacion Serial RS232
« Respuesta #17 en: 27 de Junio de 2019, 19:34:35 »
Bueno gracias a todos por la colaboración, lamentablemente no pude hacer la comunicación serial.

Mañana mismo voy a compilar tu código e instalarlo en un 16f877a que tengo y ya te digo... 

  Un saludo.

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #18 en: 22 de Julio de 2019, 21:31:43 »
 :oops:
Buenas remi04,

Se me presento un inconveniente y me quede sin laptop, no pude seguir trabajando, pero ya estoy de vuelta. Lametablemente como te dije no pude realizar dicha comunicación.
Ahora último opte por probar el MPLABX XC8 para realizar mis proyectos ya que he recibido muchos comentario buenos de este.
Para sorpresa mia y frustración, he estado intentando la comunicación serial y no he pordido lograrlo, no se si cometo un error de configuración de bits (no creo porque no solo lo he chequeado con otros ejemplos si no con datasheet en mano), o si el problema pasa por la configuración y el tipo de reloj que utilizo.

Código: [Seleccionar]
// CONFIG
#pragma config FOSC = EXTRC     // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

Código: [Seleccionar]
#define _XTAL_FREQ 4000000
#include <xc.h>
#include "config.h"


void main(void) {
    char x = 65;
   
    TRISCbits.TRISC6 = 0;
    PORTC = 0;
   
    //Configuracion Serie
    TXSTAbits.TX9 = 0;  // Modo 8-bits
    TXSTAbits.TXEN = 1; // habilito transmision
    TXSTAbits.SYNC = 0; // Tx asincrona
    TXSTAbits.BRGH = 0; // Tx Lenta
    RCSTAbits.SPEN = 1; // Habilito puerto serie
   
    // Baud rate
    SPBRG = (unsigned char) (((_XTAL_FREQ / 9600) / 64) - 1); //baudios  = 9600
   
    while(1){
        for(x=65; x<=90; x++){
            TXREG = x;
            while(TXSTAbits.TRMT == 0); // Mientras este lleno buffer
            __delay_ms(500);
        }
    }     
    return;
}

Bien este es el código que tengo ahora, me parece mejor manejar los bits de los registros directamente y no por librerías, asi sé que estoy configurando.

Saludos si me puedes colaborar por este lado

Gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicacion Serial RS232
« Respuesta #19 en: 23 de Julio de 2019, 17:27:34 »
Un par de cosas a corregir:

Código: C
  1. #pragma config FOSC = EXTRC     // Oscillator Selection bits (RC oscillator)

Pero.... estas usando un cristal.. XTAL por los ( 4Mhz ) y por las fotos que veo.

Otras cosa:

Citar
Bit SPEN (RCSTA<7>) and bits TRISC<7:6> have to be set in order to configure pins RC6/TX/CK and RC7/RX/DT as the Universal Synchronous Asynchronous Receiver Transmitter.

En le datasheet tenes una tablas, y si observas para 4Mhz, es mejor usar el BGRH = 1, ya que posee menos error ( 0.16% frente a los 7% de error que tenias con BGRH = 0)

Código: C
  1. #define _XTAL_FREQ 4000000
  2. #include <xc.h>
  3. #include "config.h"
  4.  
  5.  
  6. void main(void) {
  7.    
  8.     TRISCbits.TRISC6 = 1;  // Esto no tiene sentido, ya que de por si esta en 1
  9.     TRISCbits.TRISC7 = 1;
  10.    
  11.  
  12.     //Configuracion Serie
  13.     // Baud rate
  14.     SPBRG = (unsigned char) (((_XTAL_FREQ / 9600) / 16) - 1); //baudios  = 9600, Deberia cargarse con el numero 25
  15.     TXSTAbits.BRGH = 1; // Baud Rate /16
  16.  
  17.     TXSTAbits.TX9 = 0;  // Modo 8-bits
  18.     TXSTAbits.SYNC = 0; // Tx asincrona
  19.  
  20.     TXSTAbits.TXEN = 1; // habilito transmision
  21.     RCSTAbits.SPEN = 1; // Habilito puerto serie
  22.    
  23.    
  24.     while(1){
  25.         char x;
  26.         for(x='A'; x<='Z'; x++){
  27.             TXREG = x;
  28.             while(!TXSTAbits.TRMT); // Mientras este lleno buffer
  29.             __delay_ms(500);
  30.         }
  31.     }      
  32. }

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #20 en: 25 de Julio de 2019, 00:00:40 »
Un par de cosas a corregir:

Código: C
  1. #pragma config FOSC = EXTRC     // Oscillator Selection bits (RC oscillator)

Pero.... estas usando un cristal.. XTAL por los ( 4Mhz ) y por las fotos que veo.

Otras cosa:

Citar
Bit SPEN (RCSTA<7>) and bits TRISC<7:6> have to be set in order to configure pins RC6/TX/CK and RC7/RX/DT as the Universal Synchronous Asynchronous Receiver Transmitter.

En le datasheet tenes una tablas, y si observas para 4Mhz, es mejor usar el BGRH = 1, ya que posee menos error ( 0.16% frente a los 7% de error que tenias con BGRH = 0)

Código: C
  1. #define _XTAL_FREQ 4000000
  2. #include <xc.h>
  3. #include "config.h"
  4.  
  5.  
  6. void main(void) {
  7.    
  8.     TRISCbits.TRISC6 = 1;  // Esto no tiene sentido, ya que de por si esta en 1
  9.     TRISCbits.TRISC7 = 1;
  10.    
  11.  
  12.     //Configuracion Serie
  13.     // Baud rate
  14.     SPBRG = (unsigned char) (((_XTAL_FREQ / 9600) / 16) - 1); //baudios  = 9600, Deberia cargarse con el numero 25
  15.     TXSTAbits.BRGH = 1; // Baud Rate /16
  16.  
  17.     TXSTAbits.TX9 = 0;  // Modo 8-bits
  18.     TXSTAbits.SYNC = 0; // Tx asincrona
  19.  
  20.     TXSTAbits.TXEN = 1; // habilito transmision
  21.     RCSTAbits.SPEN = 1; // Habilito puerto serie
  22.    
  23.    
  24.     while(1){
  25.         char x;
  26.         for(x='A'; x<='Z'; x++){
  27.             TXREG = x;
  28.             while(!TXSTAbits.TRMT); // Mientras este lleno buffer
  29.             __delay_ms(500);
  30.         }
  31.     }      
  32. }

Gracias KILLERJC. No solo lo comprobé con el 16f877A sino también con el 16f887 (aprovechando el oscilador interno) y la simulación me funciona muy bien.
Pero en la parte física no me da aún. Salen así ej: AAAAAAAAAAAABCDþþÑGHIJKÿPQRSXYZEFGLMNSTUZ 
Esto puede ser por la velocidad de transmisión?... lo hice a 8MHz, oscilador interno con el pic 16f887. Ya estoy que lo logro, faltta creería algún mínimo detalle, pero no logro dar con el.

Código: [Seleccionar]

#define _XTAL_FREQ 8000000
#include <xc.h>
#include "config.h"

void main(void) {
   
    OSCCON = 0x71;
    // Baud rate
    BAUDCTLbits.BRG16 = 0;
    TXSTAbits.BRGH = 1; // Tx Rapida
    SPBRG = 51; //baudios  = 9600

    //Configuracion Serie
    TXSTAbits.TX9 = 0;  // Modo 8-bits
    TXSTAbits.SYNC = 0; // Tx asincrona
 
    TXSTAbits.TXEN = 1; // habilito transmision
    RCSTAbits.SPEN = 1; // Habilito puerto serie
           
    while(1){
        char x;
        for(x='A'; x<='Z'; x++){
            TXREG = x;
            while(TXSTAbits.TRMT == 0); // Mientras este lleno buffer
            __delay_ms(1000);
        }
    }     
    return;
}


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicacion Serial RS232
« Respuesta #21 en: 25 de Julio de 2019, 16:34:23 »
Código: [Seleccionar]
Pero en la parte física no me da aún. Salen así ej: AAAAAAAAAAAABCDþþÑGHIJKÿPQRSXYZEFGLMNSTUZ 
Eso es lo que sale? o un ejemplo?....

Fijate si esta bien configurado todo, el PIC parece estar bien.... proba otra velocidad. Proba con 19.2k (cargale 25 al SPGR) pero de todas formas deberia funcionar correctamente

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #22 en: 25 de Julio de 2019, 19:44:22 »
Sale eso tal cual, en uno de los intentos que realicé. Voy a probar otras velocidades a ver que tal, quiero descartar el modulo rs232 igualmente probando otro que compré. estaré avisando.

 ((:-))Gracias

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Comunicacion Serial RS232
« Respuesta #23 en: 16 de Agosto de 2019, 13:45:42 »
Sale eso tal cual, en uno de los intentos que realicé. Voy a probar otras velocidades a ver que tal, quiero descartar el modulo rs232 igualmente probando otro que compré. estaré avisando.

 ((:-))Gracias

Hola ¿Probaste el módulo rs232?. 

  A mi me pasó algo parecido una vez y fue por unos cable FTDI que resultaron ser falsos y me daba fallo en el envío de cadenas. 

  Enviaba bien carácter a carácter , pero en las cadenas me hacía eso. Después de volverme majareta del todo descubrí que eran falsos los ftdi que había comprado por eBay en china.

 Saludos.


 

anything