1 Comentário

Curiosity - Explore os pinos de I/O

Curiosity pinos de I/O

Continuando a sequência de artigos sobre a placa Curiosity da Microchip, neste artigo vamos explorar os pinos de I/Os do PIC16F1619 presentes nela.

Ao final deste artigo o leitor estará apto a utilizar os pinos de I/O para leitura e escrita de sinais digitais.

Pinos de I/O na Curiosity

Os pinos de I/O são os meios pelos quais os microcontroladores se comunicam com o mundo externo. Geralmente podem ser configurados como entradas ou saídas, dessa forma é possível fazer a leitura de teclas (pino como entrada), acionar LEDs (pino como saída), ligar/desligar Reles (pino como saída), por exemplo.

Os pinos presentes no microcontrolador estão agrupados em ports, geralmente com 8 ou menos pinos, conforme a configuração do microcontrolador. Os ports são identificados como PORTA, PORTB, PORTC, etc. Cada port possui um grupo de registradores para configuração, leitura e escrita, que estudaremos mais adiante.

O PIC16F1619 possui  3 ports: PORTA, PORTB e PORTC. Os pinos geralmente apresentam funções alternativas e são multiplexadas para que se possa realizar diversas funções em um mesmo pino, conforme a necessidade da aplicação. Porém, essas funções são habilitadas com o periférico que utilizará tal pino.

Os pinos são organizados no microcontrolador, conforme seu port e seguindo uma sequência. Por exemplo o pino 0 do PORTA é chamado de RA0, o pino 5 do PORTB como RB5, e assim por diante. A figura 1 exibe os pinos do PIC16F1619:

curiosity-pinos-de-i-o
Figura 1 - Pinagem do PIC16F1619 com encapsulamento PDIP

Cada port possui basicamente 3 registradores para controle dos pinos, que são:

  • TRISx - tem a função de definir a direção do pino, ou seja, se funcionará como uma entrada ou saída;
  • PORTx - é onde será feita a leitura do estado lógico presente no pino;
  • LATx - retêm a informação no lach (flip-flop tipo D) no port.

Além desses registradores básicos, alguns ports possuem outros registradores de configuração, por exemplo:

  • ANSELx - Configura se o pino será digital ou analógico;
  • WPUx - Configura resistores de pull-up.

A figura 2 exibe o diagrama de funcionamento de um pino de I/O do PIC16F1619:

curiosity-pinos-de-i-o-diagrama
Figura 2 - Diagrama genério de operação de um pino de I/O

Configurando um pino de I/O como Entrada ou Saída

Para configurar um pino de I/O como entrada ou saída deve-se utilizar o registrador TRISx. Para configurar um pino como entrada deve-se escrever o valor lógico 1 no bit correspondente. Já para configurar o pino como saída, deve-se escrever o valor lógico 0 no bit correspondente ao pino. A figura 3 exibe o registrador TRISA, responsável pela configuração da direção dos pinos do PORTA:

curiosity-pinos-de-i-o-TRISA
Figura 3 - Registrador TRISA

Por exemplo, se quisermos configurar o pino RA0 como entrada, devemos escrever o valor 1 no bit 0 do TRISA. Se o projeto exigir que o pino seja configurado como saída digital, deve-se escrever o valor 0 nesse pino.

A configuração do PORTB e PORTC segue a mesma ideia. Os registradores TRISB e TRISC são exibidos na figura 4:

curiosity-pinos-de-i-o-TRISB-TRISC
Figura 4 - Registradores TRISB e TRISC

Além disso, alguns pinos podem ser configurados como entradas analógicas. No nosso caso estamos trabalhando apenas com pinos de I/O digitais, dessa forma devemos configurar o registrador ANSELX para o correto funcionamento do pino. A figura 5 exibe o registrador ANSELA:

curiosity-pinos-de-i-o-ANSELA
Figura 5 - Registrador ANSELA

Para configurar o pino para funcionar como I/O digital deve-se escrever o valor zero no pino correspondente. Caso o pino for uma entrada analógica, deve-se escrever o valor 1. Para o PORTB e PORTC segue o mesmo padrão de configuração, conforme os registradores ANSELB e ANSELC exibidos na figura 6:

curiosity-pinos-de-i-o-ANSELB-ANSELC
Figura 6 - Registradores ANSELB e ANSELC

Lendo o estado de um pino de I/O

Quando um pino é configurado com entrada, desejamos ler o valor lógico presente nesse pino, ou seja, será um nível lógico 0 ou nível lógico 1, conforme a tensão presente no pino.

Para leitura utiliza-se o registrador PORTx. O valor presente nesse registrador conterá o nível lógico presente no pino. A figura 7 exibe o registrador PORTA.

curiosity-pinos-de-i-o-PORTA
Figura 7 - Registrador PORTA

Para leitura dos pinos do PORTB e PORTC segue o mesmo padrão. A figura 8 exibe esses registradores:

curiosity-pinos-de-i-o-PORTB-PORTC
Figura 8 - Registrador PORTB e PORTC

Escrevendo em um pino de I/O

Quando um pino é configurado como saída, podemos escrever o valor lógico 0 ou o valor lógico 1, conforme a necessidade. Para escrita é utilizado o registrador LATx. Escrevendo o valor 1 coloca-se nível lógico alto no pino, ou seja, tensão máxima. Já quando escrito o valor 0 coloca-se nível lógico baixo no pino, ou seja, tensão vai pra zero.

A figura 9 exibe os registradores LATA, LATB e LATC:

curiosity-pinos-de-i-o-LATA-LATB-LATC
Figura 9 - Registradores para escrita

Exemplo de leitura e escrita nos pinos

Para testar a teoria apresentada vamos criar uma aplicação para leitura de tecla e escrita em LEDs. Para isso vamos usar a chave táctil (S1) presente na Curiosity,  assim como os LEDs (D4, D5, D6 e D7). Cada vez que a tecla for pressionada será ligado um LED e apagados os outros, dando efeito de deslocamento.

Primeiro precisamos identificar no esquema elétrico em quais pinos estão ligados os componentes. A figura 10 exibe parte do esquemático da Curiosity:

curiosity-pinos-de-i-o-Circuito
Figura 10 - Esquema elétrico da Curiosity

Através do esquemático, verificamos que a tecla S1 está ligada ao pino RC4, o LED D4 ao pino RA5, o LED D5 ao pino RA1, o LED D6 ao pino RA2 e o LED D7 ao pino RC5. Dessa forma devemos configurar os pinos dos LEDs como saída e o pino da tecla como entrada.

Para exemplificar vamos fazer o programa sem o uso do MPLAB Code Configurator a principio e, posteriormente, o mesmo programa usando o MPLAB Code Configurator.

Exemplo sem o uso do MCC

Para esse exemplo deve-se seguir os passos para criação de um projeto, apresentados no artigo: Crie projetos com a placa Curiosity: Primeiros passos com MPLAB X e compilador XC8

Após a inicialização e configuração inicial vamos inserir o seguinte código no arquivo main.c:

Compilando e executando o código acima na placa, a cada pressionamento da tecla será acendido um LED. Note como foi feita a configuração dos registradores e como foi elaborado o loop principal para leitura e escrita nos pinos.

Para deixar o código mais fácil de se entender, podemos criar defines que ajudam a identificar os LEDs e botão. O código a seguir apresenta essas modificações:

 

Exemplo com o uso do MCC

Para exemplificar, vamos fazer a mesma aplicação utilizando o MPLAB Code Configurator. Para isso deve-se seguir os passos apresentados no artigo Crie projetos com a placa Curiosity: Iniciando com o MPLAB Code Configurator.

A configuração dos pinos deve ficar conforme apresentado na figura 11:

curiosity-pinos-de-i-o-CONFIG-MCC
Figura 11 - Configuração dos pinos usando o MCC

Foram gerados os aquivos pelo MCC, porém vamos verificar apenas como ficou a função para configuração dos pinos de I/O, no arquivo pin_manager.c:

Note que foram configurados os registradores associados a cada pino, conforme as configurações feitas no MCC. A aplicação no loop principal ficará igual ao projeto feito sem o MCC, porém nesse caso foram utilizadas as macros de manipulação dos pinos:

O resultado é apresentado na Figura 12, onde a cada pressionamento da tecla é deslocado um LED:

curiosity-pinos-de-i-o-resultado
Figura 12 - Resultado do exemplo proposto

O artigo exibiu os detalhes para configuração e manipulação dos pinos utilizando o compilador XC8. Foram apresentados todos os registradores assim como um exemplo de aplicação.

Você pode acessar o exemplo completo no MPLAB XPress.

No próximo artigo vamos aprender a trabalhar com os Timers.

Caso tenha alguma dúvida ou sugestão, deixe seu comentário abaixo.

Outros artigos da série

<< Curiosity - Iniciando com o MPLAB Code ConfiguratorCuriosity - Explore o TIMER0 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » Curiosity - Explore os pinos de I/O
Talvez você goste:
Comentários:

1
Deixe um comentário

avatar
1 Comentários
0 Respostas
0 Seguidores
 
Discussão de maior alcance
Discussão mais quente
0 Autores de comentários
Crie projetos com a placa Curiosity: Explore os pinos de I/O | Mundo da Robótica Comentários recentes
  Notificações  
recentes antigos mais votados
Notificar
trackback

[…] Fonte e mais detalhes aqui. […]

Séries



Outros da Série

Menu