rs232 la señal en el alcance no se suma

3

Programé un pic18f4685 para usar el UART integrado para enviar un Ascii (48) - Para tu información es un cero - infinitamente. 19200baud 8-N-1 utilizando un NorthMicro NM101 proto board.

void    TX_UART(void)
{  
unsigned char phrase[]="Press 0 to Exitvoid    TX_UART(void)
{  
unsigned char phrase[]="Press 0 to Exit%pre%";
unsigned char TX_Value;
lcd_clear();
lcd_goto(0x40);
lcd_puts(phrase);
lcd_goto(0x00);

//  Initialize SPBRGH:SPBRG for 19200 baud  BRGH =1 BRG16=0
SPBRGH  = 0;
SPBRG   = 64;
TXSTAbits.BRGH  = 1;
BAUDCONbits.BRG16   = 0;
TXSTAbits.SYNC  = 0;
RCSTAbits.SPEN  = 1;
TXSTAbits.TXEN = 1;  

while(KEYBOARD()!='0')
    {
      while(!TXSTAbits.TRMT)
      {}
        TXREG='0';
      while(!TXSTAbits.TRMT)
      {}
        TXREG='0';
      while(!TXSTAbits.TRMT)
      {}
        TXREG='0';      
    }               

lcd_clear();        
}           
"; unsigned char TX_Value; lcd_clear(); lcd_goto(0x40); lcd_puts(phrase); lcd_goto(0x00); // Initialize SPBRGH:SPBRG for 19200 baud BRGH =1 BRG16=0 SPBRGH = 0; SPBRG = 64; TXSTAbits.BRGH = 1; BAUDCONbits.BRG16 = 0; TXSTAbits.SYNC = 0; RCSTAbits.SPEN = 1; TXSTAbits.TXEN = 1; while(KEYBOARD()!='0') { while(!TXSTAbits.TRMT) {} TXREG='0'; while(!TXSTAbits.TRMT) {} TXREG='0'; while(!TXSTAbits.TRMT) {} TXREG='0'; } lcd_clear(); }

He muestreado el chip pre-max232 fuera del pin RC6, por lo que aún no se ha invertido y solo está a aproximadamente .5 Vp-p.

Según las fuentes de Internet, debería estar viendo un bit de Inicio / LSB a MSB / Stop.

Basándome en esa información, pensé que debería estar viendo en el alcance para Ascii (48) una señal como esta: 1000011001 pero parece que tengo un bit adicional (s). ¿Qué me estoy perdiendo? [Cada 2 bits / Div]

Cuando la señal es recibida por PuTTY, llega a través de errores finos y sin errores. Solo quiero entender por qué veo lo que tengo y no lo que esperaba.

    
pregunta Chef Flambe

1 respuesta

5

Tampoco estoy seguro de lo que estás viendo en el alcance. Pero puedo decirte algunas cosas importantes que te ayudarán a interpretar lo que ves.

Un bit inactivo, cuando no se están transmitiendo datos, es un '1'. Voy a anotar un poco de inactividad con una "I".

Un bit de inicio es un "0" binario, y lo anotaré con una "A". Un bit de parada es "1" y será una "B".

Un ASCII "0" es un decimal 48, hex 30, o un binario 00110000. Llamaremos a eso una "D".

Cuando se transmite un byte (8-N-1), se envía como IIIADDDDDDDDBIIII. Puede haber más, menos o ningún bit inactivo, dependiendo de qué otros datos se estén transmitiendo. Por ejemplo, dos bytes transmitidos back to back podrían ser: IIIIIADDDDDDDDBADDDDDDDDBIIIII.

Los datos se transmiten primero en el bit menos significativo, es decir, en orden inverso al que normalmente se escribiría. Por lo tanto, un "0" ASCII, cuando se transmita por el cable, sería 0000011001, en orden cronológico y sin bits de inactividad. Con los bits inactivos, a continuación, agregue unos 1 al principio y al final de eso.

Se debe tener en cuenta que cuando digo '0' y '1', estoy hablando de los datos que salen de la UART, donde '0' es un voltaje bajo y '1' es un voltaje alto. Un chip controlador RS-232 estándar invierte eso, por lo que un '0' binario es un alto voltaje y '1' es un bajo voltaje. Así que tenlo en cuenta, dependiendo de dónde estés sondeando la señal.

Pero aquí está el problema: la imagen del alcance no coincide con nada de esto. No hay una cadena de 5 bits que sean todos 0 o todos 1 para desactivar. Además, el nivel de señal es de aproximadamente 0.7v, lo cual es un poco preocupante.

Esto es lo que haría: reducir la velocidad de transmisión. Déjelo a 19200 baudios, pero ponga algo de tiempo entre bytes. Tal vez un byte, un retardo de 0,25 segundos, luego otro byte, un retardo, etc. Capture una imagen de alcance de esto y agréguela a su pregunta. También averigüe y explique por qué el nivel de señal es tan bajo.

    
respondido por el user3624

Lea otras preguntas en las etiquetas