Just Another WordPress Site Fresh Articles Every Day Your Daily Source of Fresh Articles Created By Royal Addons

Mais informações, dúvidas, parcerias? Agende um horário para falarmos

Postagens populares

  • All Post
  • Automação e Controle
  • Eletrônica
  • Gestão
  • Instalações Prediais
  • Máquinas Elétricas
  • Microcontroladores
  • Projetos
  • Robótica
    •   Back
    • Analógica
    • Digital
    •   Back
    • Arduino
    • ESP32
    • PIC
    •   Back
    • Comandos Elétricos

Stop Dreaming Start living

.

Categorias

Edit Template

Atividades Práticas com Shield Multifunções

Este shield é uma boa alternativa para trabalhar em sala de aula. Tem preço acessível, evita que o aluno tenha que fazer conexões elétricas, pois basta encaixá-lo sobre a placa do Arduíno. Possui praticamente todo o hardware para se trabalhar os conceitos de programação para microcontroladores.

Mapeamento de Hardware

Pino (PORTC)Função Pino (PORTD)Função Pino (PORTB)Função
A0 (PORTC0)POT D0 (PORTD0)RX D8 (PORTB0)DISP DATA
A1 (PORTC1)SW1 D1 (PORTD1)TX D9 (PORTB1)PWM
A2 (PORTC2)SW2 D2 (PORTD2)J4 ESQ D10 (PORTB2)LED4
A3 (PORTC3)SW3 D3 (PORTD3)BUZZER D11 (PORTB3)LED3
A4 (PORTC4)J4 DIR D4 (PORTD4)DISP LATCH D12 (PORTB4)LED2
A5 (PORTC5)SINAL D5 (PORTD5)PWM D13 (PORTB5)LED1
   D6 (PORTD6)PWM   
   D7 (PORTD7)DISP CLK   

Pinagem Arduino


Teoria Atmega328P

Aula 1 – Entradas e Saídas Digitais

O ATmega328 possui 3 conjuntos de pinos de entrada e saída (I/Os): PORTB, PORTC e PORTD; respectivamente, pinos PB7 .. PB0, PC6 .. PC0 e PD7 .. PD0, todos com a função Lê – Modifica – Escreve.

Isso significa que a direção de um pino pode ser alterada sem mudar a direção de qualquer outro pino do mesmo PORT (instruções SBI e CBI). Da mesma forma, os valores lógicos dos pinos podem ser alterados individualmente, bem como a habilitação dos resistores de pull-up para os pinos configurados como entrada.

 Cada PORT possui um registrador de saída com características simétricas, isto é, com a mesma capacidade para drenar ou suprir corrente, suficiente para alimentar LEDs diretamente (20 mA por pino). Um cuidado que se deve ter é respeitar a máxima corrente total que o componente e que cada PORT suporta, 200 mA e 100 mA, respectivamente20. Todas os pinos têm resistores de pull-up internamente e diodos de proteção entre o VCC e o terra, além de uma capacitância de 10 pF, como indicado na figura a seguir:

Os registradores responsáveis pelos pinos de I/O são:

  • PORTx: registrador de dados, usado para escrever nos pinos do PORTx.
  • DDRx: registrador de direção, usado para definir se os pinos do PORTx são entrada ou saída.
  • PINx: registrador de entrada, usado para ler o conteúdo dos pinos do PORTx.

Em resumo, para o uso de um pino de I/O, deve-se primeiro definir se ele será entrada ou saída escrevendo-se no registrador DDRx. Então, a escrita no registrador PORTx alterará o estado lógico do pino se ele for saída, ou poderá habilitar o pull-up interno, se ele for entrada. Os estados lógicos dos pinos do PORT são lidos do registrador PINx.

Se algum pino não for utilizado é recomendado que o seu nível lógico seja definido. Entradas com nível flutuante devem ser evitadas para evitar o consumo de corrente quando o pino não estiver sendo empregado. Neste caso a Atmel recomenda a habilitação do pull-up (para maiores detalhes ver o manual do fabricante).

Projeto 1 – Uso de Botões, led e Buzzer

O primeiro projeto utilizará os botões SW1 e SW2 para acionar os leds Led1  e Led2, e ao mesmo tempo fazer com que o buzzer emita um som. Neste programa efetuaremos a escrita e leitura das portas digitais dos botões (portas digitais A1 e A2), dos leds (D12 e D13) e do buzzer (D3).

Como estão conectados no shield:

//Objetivo: Uso de botoes, led e buzzer
//Definicao dos pinos
#define SW1 A1  // ou 15
#define SW2 A2  // ou 16
#define Led1 13
#define Led2 12
#define Buzzer 3
//Armazena estado dos botoes
int est_SW1, est_SW2;
void setup()
	{
  	//Pinos led e buzzer como saida
 	 pinMode(Led1 , OUTPUT);
 	 pinMode(Led2 , OUTPUT);
  	pinMode(Buzzer, OUTPUT);
 	 //Pinos botoes SW1 e SW2 como entrada
 	 pinMode(SW1, INPUT);
 	 pinMode(SW2, INPUT);
	}
void loop()
	{
 	 //Verifica se o botao SW1 foi acionado
 	 est_SW1 = digitalRead(SW1);
 	 if (est_SW1 == 0)     // mesmo que  if(!est_SW1)
 		 {
   		 //Acende o led1
   		 digitalWrite(Led1, HIGH);
   		 //Aciona o buzzer
   		 tone(Buzzer, 50,30);
  		}
 	 else
 		 {
  		  //Desliga o led1 e o buzzer
   		 digitalWrite(Led1, LOW);
    		noTone(Buzzer);
  		}

  	//Verifica se o botao SW2 foi acionado
 	 est_SW2 = digitalRead(SW2);
	  if (est_SW2 == 0)     // mesmo que if(est_SW2)
  		{
    		//Acende o led2
    		digitalWrite(Led2, HIGH);
    		//Aciona o buzzer
    		tone(Buzzer, 900,50);
  		}
 	 else
 		 {
  	 	 //Desliga o led2 e o buzzer
   		 digitalWrite(Led2, LOW);
    		noTone(Buzzer);
  		}
	}

Funções de Entrada/Saída Digital:

pinMode (): Configura um pino específico para ser entrada ou saída digital.

Sintaxe:      pinMode (pino, modo)

Parâmetros:

pino: deve-se colocar o número correspondente ao pino que se deseja configurar, conforme placa que está trabalhando.

modo: deve-se colocar o modo que deseja configurar o pino. INPUT (entrada), OUTPUT (saída), INPUT_PULLUP (entrada com resistor de pull up).

digitalWrite (): Coloca um nível lógico Alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como saída digital.

Sintaxe:      digitalWrite (pino, valor)

Parâmetros:

pino: Número correspondente ao pino;

valor: HIGH (nível alto – 5Vcc) ou LOW (nível baixo – 0V).

digitalRead(): Lê o valor presente em um pino digital.

Sintaxe:   digitalRead(pino)

Parâmetros: Pino: valor correspondente ao pino que se deseja ler.

Retorno: HIGH (nível alto – 5VCC) ou LOW (nível baixo – 0VCC).

tone() – Gera uma onda quadrada na frequência especificada (e duty cycle 50%) em um pino. A duração pode ser especificada, do contrário a onda continua até uma chamada de noTone(). O pino pode ser conectado a um buzzer piezo ou outro speaker para tocar tons.

Sintaxe :      tone(pino, frequência)

                      tone(pino, frequência, duração)

Parâmetros:

pino: o pino do Arduino no qual se deseja gerar o tom,

frequência: a frequência do tom em Hertz – unsigned int,

duração: a duração do tom em milissegundos (opcional) – unsigned long


Estruturas de controle de fluxo – If

if (expressão ) // se expressão for verdadeira

{comandoA;} // executa bloco de instruções 1

else // caso seja falsa

{comandoB;} // executa bloco de instruções 2


if(condição1) comandoA;

else if(condição2) comandoB;

else if(condição3) comandoC;

.

.

else  comandoD;


Registradores do ATmega 328P

Outra forma de configurar os pinos como entrada ou saída, alterar o estado das saídas e configurar os resistores de pull-ups:

     // bits     76543210

DDRB   = 0b00000000;              //Configura os pinos do PORTB como entradas

PORTB = 0b00010100;              //Ativa os pull-ups dos pinos PB2 e PB4

DDRC   = 0b00000000;                 //Configura os pinos do PORTC como entradas

PORTC = 0b00001100;               //Ativa os pull-ups dos pinos PC2 e PC3

DDRD   = 0b11111111;              //Configura os pinos do PORTD como saídas

PORTD = 0b00000000;              //Apaga todos os leds ligados no PORTD

Abaixo, segue a sintaxe de todas as operações de máscaras de bits:

OperaçãoOpção 1Opção 2
Ativar um bit (1)     PORTD |= (1<<nr_bit);PORTD = PORTD | (1<<nr_bit);
Desligar um bit(0)  PORTD &= ~(1<<nr_bit);PORTD = PORTD & (~(1<<nr_bit));
Inverter um bitPORTD ^= (1<<nr_bit);PORTD = PORTD ^ (1<<nr_bit);
Testar um bit é diferente de 0if(PINC&(1<< nr_bit))   
Testar se um bit é igual à 0if(!(PINC&(1<< nr_bit))) 

Macros são definições do compilador utilizadas para evitar trechos repetitivos no código. Alguns exemplos comuns são as macros utilizadas para manipulação de bits (ligar, desligar, inverter e testar). Exemplos de criação das macros:

#define  set_bit(y,bit)  (y|=(1<<bit))//coloca em 1 o bit x da variável Y 
#define  clr_bit(y,bit)   (y&=~(1<<bit))//coloca em 0 o bit x da variável Y 
#define  cpl_bit(y,bit)  (y^=(1<<bit))//troca o estado lógico do bit x da variável Y 
#define  tst_bit(y,bit)   (y&(1<<bit)) //retorna 0 ou 1 conforme leitura do bit

EXEMPLO: Troca o estado do Led ao apertar o botão:

O programa acima foi feito no programa MplabX e em linguagem C. É possível usar registradores normalmente na IDE do Arduino.

Compartilhe Artigo:

Autor

Engenheiro eletricista (UFSC) com pós graduação em Automação e controle (UNICAMP), com vasta experiência na área de eletricidade, eletrônica e automação industrial. Dedico-me à docência há mais de quinze anos, tanto em cursos técnicos quanto em graduação. Acredito que a educação contínua é fundamental para o desenvolvimento profissional e, neste blog, compartilho experiências e conhecimentos, buscando auxiliar estudantes, docentes, profissionais e empresas a encontrarem soluções eficientes e inovadoras para seus desafios.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Eletrônica Mente

Avatar

Engenheiro eletricista (UFSC) com pós graduação em Automação e controle (UNICAMP), com vasta experiência na área de eletricidade, eletrônica e automação industrial. Dedico-me à docência há mais de quinze anos, tanto em cursos técnicos quanto em graduação. Acredito que a educação contínua é fundamental para o desenvolvimento profissional e neste blog, compartilho experiências e conhecimentos, buscando auxiliar estudantes, docentes, profissionais e empresas a encontrarem soluções eficientes e inovadoras para seus desafios.

Siga-me nas redes sociais

Últimas Postagens

  • All Post
  • Automação e Controle
  • Eletrônica
  • Gestão
  • Instalações Prediais
  • Máquinas Elétricas
  • Microcontroladores
  • Projetos
  • Robótica
    •   Back
    • Analógica
    • Digital
    •   Back
    • Arduino
    • ESP32
    • PIC
    •   Back
    • Comandos Elétricos

Junte-se a nós!

Assine nossa Newsletter.

You have been successfully Subscribed! Ops! Something went wrong, please try again.

Tags

    Edit Template

    Sobre

    Eletrônica, Automação, Microcontroladores

     

    Tags

      Últimas Postagens

      • All Post
      • Automação e Controle
      • Eletrônica
      • Gestão
      • Instalações Prediais
      • Máquinas Elétricas
      • Microcontroladores
      • Projetos
      • Robótica
        •   Back
        • Analógica
        • Digital
        •   Back
        • Arduino
        • ESP32
        • PIC
        •   Back
        • Comandos Elétricos

      © 2023 Created with Royal Elementor Addons