Show Posts
|
|
Pages: [1]
|
|
1
|
International / Portugues / Re: External Interrupts, Interrupts
|
on: February 06, 2011, 02:32:15 pm
|
|
Leonardo,
Interrupções servem para fazer com que o microcontrolador desvie temporariamente da sua rotina principal, execute a subrotina de interrupção e depois retorne ao codigo principal do exato ponto de onde foi interrompido. Por exemplo, se vc for medir velocidade ou RPM, ao invez de gastar praticamente um arduino para ficar verificando o estado da entrada do sensor, voce pode usar a interrupção externa para verificar essa entrada apenas no momento em que o sensor produzir nivel de tensao no pino correspondente. Outros tipos de interrupção sao os relacionados ao perifericos do Microcontrolador. Por exemplo as interrupções dos perifericos de comunicação SPI e I2C. No caso do SPI, voce pode anexar uma interrupção para que o microcontrolador execute uma tarefa toda vez que um byte de dados for transmitido. Assim voce nao precisaria ficar toda hora verificando.
Att,
Lucas Jardim
|
|
|
|
|
2
|
Forum 2005-2010 (read only) / Troubleshooting / attachInterrupt() / detachInterrupt()
|
on: September 29, 2010, 11:25:39 pm
|
|
I have not being sussecifuly in use attachInterrupt() to implement a Cronometer with Arduino Duimilanove. May someone help me?
#include <LiquidCrystal.h> LiquidCrystal lcd(12,11,10,9,8,7,6);
volatile float vetor[3] = {0,0,0}; volatile int inc = 1;
void setup(){ lcd.begin(16,2); lcd.setCursor(0,0); lcd.print(" Interrupt "); delay(1000); lcd.clear(); }
void incre(){ inc = inc++; seleciona(); attachInterrupt(0, incre, CHANGE); detachInterrupt(0); }
void seleciona(){ switch (inc){ case 1: vetor[inc] = (millis()/100); break; case 2: vetor[inc] = (millis()/100); break; default: inc = 1; break; } vetor[3] = vetor[2] - vetor[1]; } void loop(){
lcd.setCursor(0,0); lcd.print("A "); lcd.print(vetor[2]); lcd.setCursor(8,0); lcd.print("B "); lcd.print(vetor[1]); lcd.setCursor(0,1); lcd.print("DIF "); lcd.print(vetor[3]); }
|
|
|
|
|