Algún ejemplo de tomar interrupciones externas en Attiny2313 ?
Según veo parece estar en pines 6 y 7 Int0 e Int1... pero no se como usarlos.
Lo que necesito hacer es un simple contador de pulsos o tacómetro ( por medio de un sensor infrarrojo) y programarlo como en el clásico Arduino con el atmega328.
Esto es lo que tengo en Arduino.
Con algunos errores a corregir pero funciona como quiero.
Translate: Hello !!
Any example of taking external interrupts in Attiny2313? As I see, it seems to be on pins 6 and 7 Int0 and Int1... but I don't know how to use them.
What I need to make is a simple pulse counter or tachometer (using an infrared sensor) and program it as in the classic Arduino with the atmega328.
This is what I have on Arduino. With some errors to correct but it works as I want.
volatile cont = 0;
int antes = 0;
int giro = 0.0; // float
int RPM;
void setup(){
Serial.begin(57600);
attachInterrupt(digitalPinToInterrupt(2), medir, RISING);
}
void loop(){
if (antes != RPM){
Serial.println(RPM);
antes = RPM;
}
void medir(){
giro = millis() -giro;
RPM = 60000 / giro;
giro = millis();
}
Ahi pongo un flotante en un int pero me funcionó asi, aunque se vea catastrófico.
Lo mismo necesitaría hacer en el Attiny2313.
No veo ningun ejemplo de guía.
Desde ya muchas gracias.
Translate: There I put a float in an int but it worked like that for me, even though it looks catastrophic.
You would need to do the same thing on the Attiny2313. I don't see any example guide.
Moderador
Ahora estas en el foro en español que es el que debiste usar en un principio si pones cualquier cosa en español en tu comentario o código, automáticamente los moderadores y usuaros del foro en inglés piden que se mueva a este foro.
Dede ya que aquí solo usamos español, asi que no respondes en inglés a nadie, la oportunidad ya se perdío.
Te aconsejo que leas las normas del foro.
En las interrupciones no hagas cálculos, deja eso para el loop.
Ejemplo
void medir(){
giro = millis() -giro;
RPM = 60000 / giro; // esta es una operación lenta
giro = millis();
}
RPM deberia ser la variable volatile porque es la que compartes con el loop y la interrupcion medir.
Ahora bien, por convencion no uses mayúsculas para variables.
Habitualmente se usan para constantes aunque esto no afecta tu código pero si a quien lo lee como nosotros.
Entonces, no se como esta hecho tu hardware pero habitualmente no se miden RPM como lo has hecho.
En el loop se detienen las interrupciones, se hacen las cuentas y se reactivan las interrupciones .
se usa un flag para decirle a loop que haga las cuentas.
Busca Arduino rpm y verás.
Gracias Surbyte por tu aporte y perdón por la monstrusidad que armé con el post, cuando ya me di cuenta, hice esa aberración de traducción para corregir pero ahora que lo veo, queda muy feo ...
Voy a tomar tu aporte y ya puedes eliminar esto ... Muchas gracias !!