PIC32mx UART texto encriptado

0

Estoy tratando de comunicarme con un PIC32MX795F512H usando UART pero tengo señales codificadas en mi terminal.

Sé que es un problema de tiempo / reloj, pero no tengo idea de dónde y cómo solucionarlo. No estoy usando un cristal externo y no hay nada conectado al PIC (excepto el mínimo necesario (tapas, cables y una resistencia)).

El código:

#include <p32xxxx.h>
#include <plib.h>

#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1

#define DESIRED_BAUDRATE    (9600)
#define SYSCLK          (80000000L)

#define CONFIG1 (ADC_MODULE_ON | ADC_FORMAT_INTG32 | ADC_CLK_AUTO |      ADC_AUTO_SAMPLING_ON)
#define CONFIG2 (ADC_VREF_AVDD_AVSS | ADC_OFFSET_CAL_DISABLE | ADC_SCAN_ON | ADC_SAMPLES_PER_INT_1 | ADC_ALT_BUF_OFF | ADC_ALT_INPUT_OFF)
#define CONFIG3 (ADC_CONV_CLK_INTERNAL_RC | ADC_SAMPLE_TIME_15)
#define CONFIGPORT (ENABLE_AN15_ANA)
#define CONFIGSCAN (SKIP_SCAN_AN0 | SKIP_SCAN_AN1 | SKIP_SCAN_AN2 | SKIP_SCAN_AN3 | SKIP_SCAN_AN4 | SKIP_SCAN_AN5 | SKIP_SCAN_AN6 | SKIP_SCAN_AN7 | SKIP_SCAN_AN8 | SKIP_SCAN_AN9 | SKIP_SCAN_AN10 | SKIP_SCAN_AN11 | SKIP_SCAN_AN12 |  SKIP_SCAN_AN13 |  SKIP_SCAN_AN14)

unsigned char data;
int pbClk;


void initializeADC(){
    CloseADC10();       // Generally, you should disable the ADC before setup.

    SetChanADC10( ADC_CH0_NEG_SAMPLEA_NVREF);
    OpenADC10( CONFIG1, CONFIG2, CONFIG3, CONFIGPORT, CONFIGSCAN);
                // Setup for the ADC10.
    EnableADC10();      // Enables the ADC10.
    while(!mAD1GetIntFlag() ) {}; // mAD1GetIntFlag() checks the interrupt flag for the AD10.
                      // Waits till a conversion is finished so that there's
                      // values in the ADC result registers.
}

void initializeLEDBar(){
    TRISDCLR = 0xFF;    // Sets pins RD0 to RD7 as digital outputs.
}

void initializeUART()
{
    // Optimize PIC32 performance and return peripheral bus frequency
    pbClk=SYSTEMConfig(SYSCLK, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);

    // Enable UART1 and set baud rate to DESIRED_BAUDRATE=9600
    OpenUART1(UART_EN, UART_RX_ENABLE | UART_TX_ENABLE, pbClk/16/DESIRED_BAUDRATE-1);

    while(BusyUART1()); // Wait until the UART module is free
    putsUART1("Turning the potentiometer will change characters on screen!");
} 


//     ==============================================================================================

int main(){
    initializeUART();   // Initialize the UART module
    initializeADC();    // Initialize the ADC10
    initializeLEDBar(); // Initialize pins RD0 - RD7 as digital outputs

    while(1){

        // Map the 10 bit analog value to a value between 33 and 126, and bit-mask it to 8-bits
        data = ((ReadADC10(0)/11) + 33) & 0xFF;
        LATD = data;                // Latch the data to the port D pins  

        while(BusyUART1());         // Wait until UART2 module is not busy
        putcUART1(data);            // Transmit 'data' through UART
        putcUART1('13');            // Transmit '13' (carriage return)
    }
    return 1;
}
    
pregunta Delusion

1 respuesta

3
putcUART1(data);            // Transmit 'data' through UART

Los "datos" se publicarán en binary alias "scrambled letreros". En el terminal es probable que desee caracteres hexadecimales o decimales: primero debe convertir los datos.

putcUART1('13');            // Transmit '13' (carriage return)

El código no coincide con el comentario. Por cierto: Esto debería generar una advertencia del compilador sobre una constante de varios caracteres. Corregir esto a:

putcUART1(13);

Esto generará un CR.

Recomiendo leer un libro sobre el lenguaje de programación C. Entonces entenderás mucho mejor lo que sucedió y por qué.

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas