Configuração de UART e SPI em Microcontroladores PIC

A comunicação é um elemento fundamental em diversos projetos com microcontroladores PICPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesAprenda sobre microcontroladores PIC com este guia completo. Conheça a teoria, as práticas de otimização e casos reais para aplicações embarcadas de sucesso.. Quando precisamos enviar e receber dados, seja para transmitir informações de sensores ou receber comandos externos, dois protocolos se destacam por sua simplicidade e eficiência em aplicações de baixo nível: UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. (Universal AsynchronousUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. Receiver/Transmitter) e SPI (Serial Peripheral Interface). Neste tutorial, exploraremos como configurar, inicializar e realizar trocas de dados usando esses dois periféricos em microcontroladores PICPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesAprenda sobre microcontroladores PIC com este guia completo. Conheça a teoria, as práticas de otimização e casos reais para aplicações embarcadas de sucesso., focando nos aspectos essenciais de hardware e software para garantir uma implementação confiável.

Introdução à UART🔗

A UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. é um protocolo de comunicação serialUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. assíncrona bastante comum, utilizado para estabelecer uma comunicação ponto-a-ponto entre dois dispositivos (por exemplo, entre o PIC e um computador via porta serial). Suas principais características incluem:

Pinagem e Sinais Envolvidos

Em microcontroladores PICPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesAprenda sobre microcontroladores PIC com este guia completo. Conheça a teoria, as práticas de otimização e casos reais para aplicações embarcadas de sucesso. que possuem módulo UART (ex.: EUSART), normalmente encontramos pinos dedicados para RX e TX. Esses pinos variam de acordo com o modelo do PICExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExplore como a programação Assembly em PIC maximiza controle de hardware com alta eficiência, ideal para sistemas críticos e dispositivos de baixa energia.. Quando for planejar o hardware, confira o datasheet e conecte esses pinos à interface desejada (por exemplo, a um conversor USB-Serial).

Configuração de Baud Rate e Registradores Básicos

No PIC, a velocidade de comunicação da UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. é definida pelo baud rateUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT., configurado em registradoresArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. específicos (ex.: SPBRG e SPBRGH, dependendo do chip). Para ativar a recepção e a transmissão, ajustamos registradoresArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. como TXSTA (Transmitter StatusArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. and Control) e RCSTA (Receiver StatusArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. and Control).

Uma configuração típica pode exigir:

Abaixo está um exemplo simples (ilustrativo) de configuração em C:

#include <xc.h>
// Exemplo: UART em 9600 baud, usando Fosc = 4 MHz
void UART_Init(void) {
    // Definindo velocidade de baud rate
    SPBRG = 25;    // Valor aproximado para 9600 baud em Fosc = 4 MHz, BRGH = 0
    BRGH = 0;      // Baud rate de baixa velocidade
    // Configuração de TXSTA
    TXEN = 1;      // Habilita transmissão
    SYNC = 0;      // Operação assíncrona
    // Configuração de RCSTA
    SPEN = 1;      // Habilita pinos TX e RX
    CREN = 1;      // Habilita recepção contínua
    // RX e TX habilitados; pinos de TX e RX configurados automaticamente
}
void UART_Write(char data) {
    while(!TXIF) ; // Espera a liberação do buffer de transmissão
    TXREG = data;  // Envia caractere
}
char UART_Read(void) {
    while(!RCIF) ; // Espera dados chegarem
    return RCREG;  // Retorna caractere recebido
}

No código acima, cada função ilustra um passo essencial para envio e recepção de dados via UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT.. O uso do bit de flag TXIF indica o statusArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. de transmissão, enquanto RCIF indica a chegada de novos dados.

SPI: Comunicação Serial Síncrona🔗

O SPI é um dos protocolos seriais síncronos mais utilizados em aplicações que exigem velocidades superiores à UART e/ou comunicação com múltiplos escravos (por exemplo, sensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores., memórias Flash, expansores de I/O, entre outros). O SPI conta com um sinal de relógio compartilhado, o que permite taxas de transferência elevadas em comparação com a comunicação assíncrona.

Conceitos Fundamentais

No SPI, temos tipicamente quatro linhas de sinal:

1. MOSI (Master Out Slave In): Dados enviados do Master para o Slave.

2. MISO (Master In Slave Out): Dados enviados do Slave para o Master.

3. SCK (Serial Clock): Sinal de relógio gerado pelo Master.

4. SS (Slave Select): Linha que habilita ou desabilita o dispositivo Slave.

Em projetos com PICExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExplore como a programação Assembly em PIC maximiza controle de hardware com alta eficiência, ideal para sistemas críticos e dispositivos de baixa energia., quando o microcontrolador atua como master, é ele quem gera o sinal de clock e controla a linha SS para habilitar o escravo. Cada dispositivo slave adicional costuma ter sua própria linha de Slave Select.

Configurando o Módulo SPI

Em muitos PICs, o módulo SPI é combinado com o módulo I²C (conhecido como MSSP – Master Synchronous Serial Port). A configuração base envolve os registradoresArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. SSPCON1, SSPSTAT e, em alguns casos, SSPCON2 (dependendo do modelo).

Aqui está um exemplo típico de configuração do SPI em modo Master:

#include <xc.h>
// Supondo Fosc = 4 MHz, e desejando SCK = 1 MHz
void SPI_Init_Master(void) {
    // Ajuste de pinos como entrada ou saída de acordo com a função
    TRISC5 = 0; // SDO (MOSI) como saída
    TRISC4 = 1; // SDI (MISO) como entrada
    TRISC3 = 0; // SCK como saída
    // Configura o módulo para SPI Master, Fosc/4
    SSPCON1 = 0x20; // SSPEN=1 (habilita SPI), CKP=0, SSPM=0000 (Fosc/4)
    SSPSTAT = 0x00; // CKE=0, SMP=0 (ajustes de fase e amostragem)
    // Pino SS (se aplicado) deve ser configurado como saída e inicialmente em nível lógico alto
    // Exemplo: TRISA5 = 0; RA5 = 1;
    // Módulo SPI pronto para uso
}
unsigned char SPI_Transfer(unsigned char data) {
    SSPBUF = data;            // Envia dado
    while(!BF);               // Aguarda fim da transferência (BF = Buffer Full)
    return SSPBUF;            // Lê dado de volta (recebido de MISO)
}

No código acima:

Controle de Escravos

Quando há múltiplos dispositivos no barramento SPI, cada slave deve ter seu próprio pino SS dedicado. O fluxo de comunicação segue:

1. Configurar SS do slave desejado para nível lógico baixo, habilitando-o.

2. Realizar transferências SPI usando SPI_Transfer().

3. Retornar SS para nível lógico alto após finalizar o envio/recebimento de dados.

Esse modo de operação garante que apenas o dispositivo selecionado responderá, evitando conflitos de dados.

Boas Práticas e Dicas de Implementação🔗

Abaixo estão algumas recomendações para ajudar no sucesso de seus projetos com UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. e SPI:

1. Verificação de Clock: Sempre cheque se o clock do microcontrolador está configurado corretamente, pois o baud rateUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. na UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. e a frequência de SCK no SPI dependem disso.

2. Cuidados com Níveis de Tensão: Ao conectar outros dispositivos, certifique-se de que todos operem na mesma tensão (ex.: 5 V ou 3,3 V). Se necessário, utilize conversores de nível para evitar danos aos componentes.

3. Buffer de Dados: Em aplicações que envolvam grande quantidade de dados ou maior velocidade, é comum utilizar buffers e técnicas de double-buffering ou interrupçõesInterrupções (Interrupts) em PIC: Conceitos, Configuração e ExemplosInterrupções (Interrupts) em PIC: Conceitos, Configuração e ExemplosAprenda os segredos das interrupções em sistemas PIC. Domine técnicas avançadas, gestão de múltiplas interrupções e otimização para desempenho crítico. de recepção para evitar perda de bytes.

4. Validação de Comunicação: Se o dispositivo remoto possui registradoresArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. de identificação ou permite checksum, é sempre recomendável checar se os dados enviados/recebidos estão corretos.

5. Estudo de Datasheet: Cada família de PIC pode apresentar particularidades na hora de configurar UART e SPI. Sempre consulte o datasheet para entender os bits de configuraçãoConfiguração de Fuses e Clock no Microcontrolador PICConfiguração de Fuses e Clock no Microcontrolador PICAprenda a configurar fuses e definir o clock em PIC para otimizar desempenho e segurança, garantindo confiabilidade no seu projeto. exatos e possíveis modos de operação.

Exemplo de Aplicação Combinando UART e SPI🔗

Imaginemos um cenário onde o PIC se comunica com um sensorUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. via SPI e encaminha os dados lidos para um PC via UART. O fluxo seria:

1. Inicializar a UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. para 9600 baud (por exemplo).

2. Inicializar o SPI em modo Master.

3. Habilitar o slave (sensorUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores.).

4. “Perguntar” ao sensorUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. seu valor atual via SPI_Transfer().

5. Receber o dado e armazená-lo em uma variável.

6. Enviar esse valor para o PCArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. via UART_Write().

7. Repetir conforme necessário.

Embora seja um exemplo simples, esse tipo de comunicação combinada é muito comum, permitindo que o PICExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExplore como a programação Assembly em PIC maximiza controle de hardware com alta eficiência, ideal para sistemas críticos e dispositivos de baixa energia. seja um elo entre dispositivos SPI e interfaces seriais convencionais.

Conclusão🔗

A implementação de protocolos de comunicaçãoConfigurando o Ambiente de Trabalho: Passo a Passo para IniciantesConfigurando o Ambiente de Trabalho: Passo a Passo para IniciantesDescubra como configurar, simular e otimizar projetos PIC com nosso tutorial completo sobre ambiente, toolchain, hardware e firmware. de baixo nível, como UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. e SPI, amplia significativamente as possibilidades de interação entre um PICExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExplore como a programação Assembly em PIC maximiza controle de hardware com alta eficiência, ideal para sistemas críticos e dispositivos de baixa energia. e outros componentes em um projeto de automação, instrumentação ou sistemas embarcados. Enquanto a UARTUSART/Serial: Transmissores e Receptores para conexão com outros sistemasUSART/Serial: Transmissores e Receptores para conexão com outros sistemasAprenda a configurar a comunicação serial via USART em PICs com este tutorial detalhado. Domine fundamentos, práticas avançadas e integração eficaz com IoT. é tipicamente utilizada para comunicação ponto-a-ponto simples (como envio de dados para um computador), o SPI brilha ao conectar múltiplos dispositivos de maneira rápida e escalável.

Ao dominar a configuração de registradoresMódulo Comparador Interno: Operações de Comparação de Sinais AnalógicosMódulo Comparador Interno: Operações de Comparação de Sinais AnalógicosExplore nosso guia técnico completo sobre o comparador analógico em PIC, com teoria, exemplos de código e dicas de otimização para aplicações precisas., compreender a forma de transmissão assíncrona (no caso da UART) e síncrona (no caso do SPI) e aplicar algumas boas práticas de projeto, é possível criar soluções robustas e confiáveis. Lembre-se de verificar cuidadosamente o datasheet do seu microcontrolador e do dispositivo escravo para garantir que todos os parâmetros de clock, tensões e modos de operação estejam em plena concordância, garantindo um projeto sólido e eficiente.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados