sábado, 23 de junho de 2012

Pinos de Entrada/Saída (IO)


            Antes de começarmos a programar os microcontroladores que acompanham a LaunchPad, vamos conhecer os pinos de entrada/saída do microcontrolador MSP430G2553.
            O MSP430G2553 possui ao todo 20 pinos, sendo 16 pinos de IO divididos em 2 grupos chamados PORT1 e PORT2. Cada pino pode ser configurado como entrada digital, saída digital ou para utilização dos periféricos.
            Os pinos das portas PORT1 e PORT2 possuem a capacidade de gerar interrupções. Cada pino pode ser configurado individualmente para gerar uma interrupção em uma borda de subida ou descida de um sinal de entrada. As interrupções desviam a execução do programa para um endereço armazenado no vetor de interrupção, sendo que cada porta tem um vetor de interrupção distinto, mas que trata a interrupção de todos os pinos da porta.
            Cada pino também possui resistores de pullup/pulldown internos, que podem ser ativados para cada pino separadamente.
            Outra função incluída nos pinos do msp430g2553 é o oscilador interno para uso em sensores de toque capacitivos, mas isto fica para um próximo post.
            A figura 1 mostra o Device Pinout para o msp430g2553 e logo abaixo são apresentados os registradores utilizados para configuração e uso dos pinos.

Figura 1: Pinos do msp430g2553.




Direction Register - PxDIR

            Cada bit deste registrador controla se seu respectivo pino será de entrada ou saída, independente se o pino esta configurado para IO digital ou sendo utilizado por periféricos. Quando um bit é colocado em nível alto (1), o pino correspondente é configurado como saída (output) , caso seja colocado em nível baixo (0), o pino é colocado como entrada (input). Vale lembrar que tanto este como os outros registradores que controlam os pinos são registradores de 8 bits, sendo assim deve-se utilizar somente instruções de 8 bits para sua manipulação. No exemplo abaixo colocamos o pino P1.6 (PORT1, pino 6) como saída e o pino P2.3 (PORT2, pino 3) como entrada.

//********* Assembly *********//
Bis.b 01000000b, &P1DIR  ; Configura P1.6 como entrada
Bic.b 00001000b, &P2DIR ; Configura P2.3 como saída

//*********      C        *********//
P1DIR |= 01000000b;
P2DIR &= ~00001000b;


Input Register – PxIN

            Cada bit deste registrador reflete o estado do pino (1 ou 0) correspondente, quando o pino esta configurado para entrada digital. Ele é um registrador read-only, ou seja, só para leitura e tentar escrever nele causará um aumento de corrente durante um pequeno intervalo de tempo. Se o bit lido for 1, significa que o sinal de entrada no pino esta em nível alto, caso contrário (0), o pino esta em nível baixo.

Output Register – PxOUT

            Quando um pino esta configurado como saída digital, este registrador controla se o nível lógico de saída será alto ou baixo. Colocando um bit em 0 implica que o pino correspondente tenha como saída o nível lógico baixo, caso contrário (1), o pino terá nível lógico alto.
            Se o resistor de pullup/pulldown estiver habilitado, este registrador controla se o pino será "puxado" para baixo (bit = 0) ou será "puxado" para cima (bit = 1).

Pullup/Pulldown Resistor Enable Register – PxREN

            Este registrador controla se os resistores de pullup/pulldown estarão ativos para cada pino. Colocando um bit em nível lógico baixo (0) desabilita o resistor de pullup/pulldown do respectivo pino. Se colocado em nível lógico alto (1), ativa o resistor.



Function Select Registers – PxSEL e PxSEL2

            Como dito anteriormente, os pinos do microcontrolador podem ser utilizados tanto para entrada/saída digital como para utilização pelos periféricos (o ADC, por exemplo). Os registradores PxSEL e PxSEL2 são utilizados para esta configuração. A tabela 1 mostra os valores dos registradores para um dado pino e a configuração resultante.

PxSEL
PxSEL2
Função do pino
0
0
Configurado como entrada/saída digital.
0
1
Configurado para uso do primeiro periférico.
1
0
Reservado.
1
1
Configurado para uso do segundo periférico.
Tabela 1: Valores para PxSEL e PxSEL2.

            Note que, quando configuramos um pino para uso com os periféricos, as interrupções para o pino são desabilitadas.

            Outra consideração importante é que quando um pino é configurado para uso do periférico, a direção do pino não muda automaticamente, sendo necessário o programador ajustar a direção correta no registrador PxDIR.

Pinos Desconectados

            Pinos que não são utilizados no projeto devem ser configurados como saída digital para evitar que ruídos causem aumento no consumo de corrente, podendo ser em nível lógico baixo ou alto.

Características Elétricas

            O microcontrolador na LaunchPad é alimentado com uma tensão de 3.3V, sendo assim, seu nível lógico alto é de 3.3V, que não é compatível com o nível lógico TTL (0V baixo e 5V alto). Para o funcionamento correto de circuitos que utilizem C.I.s TTL, faz-se necessário uma análise do projeto para não danificar o microcontrolador e evitar que um sinal em nível alto na LaunchPad não seja reconhecido como tal.
            A corrente máxima que um pino do MSP430G2553 pode fornecer/drenar sem apresentar uma queda/aumento na tensão é 6 mA por pino ou 48mA por porta . Correntes muito acima deste limite podem danificar o microcontrolador.
            Outra informação importante é a frequência máxima de comutação de um pino, que para o MSP430G2553 é de 12MHz para pinos normais e 16MHz para pinos com saída de clock.

Referências

  • MSP430x2xx Family User's Guild (SLAU144I);
  • Datasheet MSP430G2553.

4 comentários:

  1. Olá David,
    Gostaria de parabeniza-lo pela atitude que você está tendo de ajudar iniciantes como eu no msp430, ja que encontrar material em português dele é muito difícil. E gostaria que você continuasse fazendo novas postagens, pois isso realmente nos ajuda muito.
    Abç

    ResponderExcluir
  2. Ola David como á foi dito no comentário acima...meus parabéns, sou iniciante com esse tipo de placa e seu post foi de grande ajuda, espero que possa continuar postando.Muito obrigado

    ResponderExcluir
  3. Ola David como á foi dito no comentário acima...meus parabéns, sou iniciante com esse tipo de placa e seu post foi de grande ajuda, espero que possa continuar postando.Muito obrigado

    ResponderExcluir
  4. Ola David como á foi dito no comentário acima...meus parabéns, sou iniciante com esse tipo de placa e seu post foi de grande ajuda, espero que possa continuar postando.Muito obrigado

    ResponderExcluir