TODOPIC
Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: Fer_TACA en 15 de Noviembre de 2024, 18:23:46
-
Hola Amigos,
Como estoy empezando con Arduino me he metido con un proyecto, quizás educativo y posiblemente algo difícil, pero ya he realizado algunos proyectos sin problemas.
En este, he empezado a crear un encabezado y una serie de líneas para ir probando de a poco y según vea que va funcionando añadir mas cosa. Ahora hay bastantes partes comentadas y lagunas faltantes.
Pero quería probar si funcionaban las interrupciones y no al simular en Proteus como he visto que no funcionaban las he comentado y ahora he dejado en el loop solo la instrucción de escribir y poner a nivel alto un pin, pero tampoco lo hace y no se porque sería.
Adjunto el programa de Arduino (ahora solo me interesa saber porque no se activa la salida) y el fichero de Proteus, a ver si alguno me dice que puede pasar.
¿podría el problema ser del propio Proteus?
-
Me respondo a mi mismo,
De me olvidó configurar los pines como entradas y/o salidas. :oops: :oops: :oops: :oops:
Voy a seguir avanzando.
F.
-
Una pregunta.adicional.
Voy a utilizar el expansor pcf8574 con la librería de Adafruit y he creado el objeto.
El caso es que cuando quiero activar alguna salida a través del expansor funciona siempre muy bien.
Pero si quiero activar alguna de las salidas del expansor desde la función ISR no funciona y no se consigue activar la salida.
Lo que pretendo es utilizar un pin como entrada de señal de emergencia e indicarlo por medio del pcf8574 para activar un relé.
¿Puede ser que el bus I2C no funcione dentro de la función ISR?
-
Se me olvido colocar el código.
Esta resumido solo a la parte afectada./Inclusión de librerías.
#include <Adafruit_PCF8574.h> // Importa librería LiquidCrystal.<
// Se crean objetos de las librerías
Adafruit_PCF8574 pcf_DO; // Expansor como salidas digitales
void isrEmergenciaDetectada() {
[color=red]pcf_DO.digitalWrite(7, LOW); // Se apaga la señal de alarma. <---------- AQUÍ NO FUNCIONA[/color]
}
void setup()
pcf_DO.begin(0x20, &Wire); // Se inicializa el bus I2C con la dirección del dispositivo.
pcf_DO.pinMode(0, OUTPUT); // Indicación del piso 0.
pcf_DO.pinMode(1, OUTPUT); // Indicación del piso 1.
pcf_DO.pinMode(2, OUTPUT); // Indicación del piso 2.
pcf_DO.pinMode(3, OUTPUT); // Indicación del piso 3.
pcf_DO.pinMode(4, OUTPUT); // Indicación de ascensor subiendo.
pcf_DO.pinMode(5, OUTPUT); // Indicación de ascensor bajando.
pcf_DO.pinMode(6, OUTPUT); // Indicación de petición de llamada del ascensor.
pcf_DO.pinMode(7, OUTPUT); // Libre
attachInterrupt(digitalPinToInterrupt(pinEmergencia), isrEmergenciaDetectada, RISING);
}
Void loop(){
[color=green]pcf_DO.digitalWrite(7, LOW); // Se apaga la señal de alarma. <---------- FUNCIONA AQUÍ CORRECTAMENTE[/color]
}
-
Una pregunta.adicional.
Voy a utilizar el expansor pcf8574 con la librería de Adafruit y he creado el objeto.
El caso es que cuando quiero activar alguna salida a través del expansor funciona siempre muy bien.
Pero si quiero activar alguna de las salidas del expansor desde la función ISR no funciona y no se consigue activar la salida.
Lo que pretendo es utilizar un pin como entrada de señal de emergencia e indicarlo por medio del pcf8574 para activar un relé.
¿Puede ser que el bus I2C no funcione dentro de la función ISR?
Yo lo que suelo hacer cuando utilizo interrupciones en Arduino y ESP32, es en la llamada de interrupcion, solo activo una bandera y despues en el loop, ya desarrollo lo necesario en base al estado de dicha bandera.
Saludos.
-
hola! de que forma estan simulando arduino en Proteus? algun lugar o tutorial donde pueda leer? he estado haciendo pruebas pero no logro que corra el programa, gracias de antemano
-
Solo añadí las librerías de los imponentes de placas de Arduino que envontre con Google y listo.
Luego después de compilar el fichero me tocó buscar la ruta donde se guarda el fichero hex. se lo pongo al Pic en proteus y listo.
C.
-
muchas gracias por la respuesta! he bajado algunas librerias en proteus y ya pude!!!
-
Me alegro que pudieras conseguirlo.