MCO018703 2018 2 AULA11: mudanças entre as edições

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Douglas (discussão | contribs)
Douglas (discussão | contribs)
Linha 41: Linha 41:
void setup()
void setup()
{
{
pinMode(pin, OUTPUT);
  pinMode(pin, OUTPUT);
attachInterrupt(0, blink, FALLING);   //   0 - Pin 2,  blink is the function that will be called  e FALLING it is when                           
  attachInterrupt(0, blink, FALLING); // chama a função blink quando o pino 2 (0) for pressionado.
 
}                                       // o pino vai de HIGH para LOW
}                                                               //     the pin goes the HIGH to LOW


void loop()
void loop()
{
{
digitalWrite(pin, state);
  digitalWrite(pin, state);


}
}
Linha 54: Linha 53:
void blink()
void blink()
{
{
if(state==state1)
  if(state==state1) {
{
      state = !state1;
state = !state1;
  }
}
  else {
else
      state=state1;  
{
  }
state=state1;  
}
}
}
</syntaxhighlight>
</syntaxhighlight>

Edição das 18h27min de 13 de novembro de 2018

1 Apresentação

Temporização é fundamental quando se trabalha com circuitos microcontrolados, seja para um simples delay ou para geração de sinais ou eventos periódicos. Todo microcontrolador tem pelo menos um periférico temporizador/contator. Esse periférico possui hardware dedicado para contagem de tempo e o seu correto uso, auxilia em uma programação mais eficiente para realização de diversos projetos.


1.1 Timers do ATmega328

O Atmega328, utilizado na placa Arduino UNO, possui 3 timers, sendo dois de 8 bits (TIMER0 e TIMER2) e um de 16 bits (TIMER1). Esses temporizadores são utilizados para diversas funcionalidades, tais como:

  • Temporização;
  • Contagem de eventos externos;
  • Geração de sinais PWM;
  • Interrupções periódicas;
  • Medida de intervalos de pulsos.


Cada temporizador possui características próprias e são utilizados conforme os recursos disponíveis. A biblioteca do Arduino abstrai o uso destes temporizadores em muitas de suas funções. Por exemplos, as funções delay(), millis(), micros(), tone(), analogWrite() utilizam recursos de timers para o funcionamento.


O TIMER1 é utilizado somente em algumas bibliotecas no Arduino específicas, podendo ser utilizado para outras finalidades sem causar muito impacto no funcionamento do restante das funções. [1]

1.2 Interrupções no Arduino

No Arduino, assim como em qualquer outro microcontrolador, pode-se utilizar interrupções para priorizar ou não tarefas e resolver problemas de tempo (timing). Existe dois tipos de interrupção no Arduino: a interrupção interna que permite interromper um código, caso o Arduino precise "rodar" o código inteiro sem ser interrompido; e a interrupção externa, dada pela portas digitais 2 e 3.


1.2.1 Interrupção Externa

O exemplo abaixo demonstra o uso da interrupção externa de forma simples e funcional. O exemplo adotado é o blink (pisca-pisca) com botão utilizando interrupção externa, a figura abaixo mostra a montagem, e, em seguida apresentamos o código fonte.

figura


int pin = 13;
volatile int state = LOW;
volatile int state1 = LOW;

void setup()
{
   pinMode(pin, OUTPUT);
   attachInterrupt(0, blink, FALLING);  // chama a função blink quando o pino 2 (0) for pressionado.
}                                       // o pino vai de HIGH para LOW

void loop()
{
   digitalWrite(pin, state);

}

void blink()
{
   if(state==state1) {
      state = !state1;
   }
   else {
      state=state1; 
   }
}

2 Referências

[1] https://www.embarcados.com.br/timers-do-atmega328-no-arduino/