Montalbano Jonico
Offline
Sr. Member
Karma: 1
Posts: 284
|
 |
« on: October 26, 2012, 05:37:57 am » |
Ciao a tutti, da titolo si capisce tutto, mi ritrovo una funzione di interrupt e ho bisogno di un delay tra l'HIGH e il LOW di uno pin. Ho letto già che il delay non può funzionare con una funzione su interrupt ma non ho trovato un'alternativa.. Come faccio? Grazie mille.
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3000
|
 |
« Reply #1 on: October 26, 2012, 05:48:08 am » |
Non ho capito. La funzione in interrupt è in lettura? Se è in lettura il cambiamento di stato avviene dall'esterno quindi devi mettere in "delay" la fonte. In scrittura non ho mai usato un interrupt, quindi non so.
Se hai necessità di mettere un delay in lettura, per diminuire il numero di letture potresti perdere dati che arrivano in quell'intervallo. A qual punto tanto vale eliminare l'interrupt e andare a leggere la fonte esterna nel loop.
|
|
|
|
|
Logged
|
IDE 1.0.4 - Arduino UNO R3 - Ethernet Shield R3 - DCF77 Module - Adafruit Data Loggin Shield - LCD 16x2 RGB positive backlight - i2c LCD backpack - RTC 1307 Board - Saleae Compatibile Logic Analyzer 8ch 24Mhz - ATtiny2313 ProtoBoard - Xino Board - ATtiny 4313 - Arduino 2009 - Arduino USB Serial Ligth - DS18B20 - LM35DZ - ShiftRegister - TL431 - ATtiny 85 Ultimi acquisti: CodeBender: http://codebender.cc/register/?referrer=PaoloP
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #2 on: October 26, 2012, 06:02:02 am » |
bisogno di un delay tra l'HIGH e il LOW di uno pin. Cosa significa ?
|
|
|
|
|
Logged
|
|
|
|
|
Montalbano Jonico
Offline
Sr. Member
Karma: 1
Posts: 284
|
 |
« Reply #3 on: October 26, 2012, 06:32:06 am » |
-attacco un'interrupt e mi rimane in attesa della variazione del pin X. -la variazione avviene ed interviene la funzione associata all'interrupt, chiamata "int_func()" -int_func() quando viene chiamata dovrebbe fare una cosa del genere: -accendo led, -delay, -spengo led,
In realtà ora sto notando che esegunedo un delay tipo:
delay(500000);
Una "specie di delay" avviene ma invece di essere di 500 secondi dopo circa 15 secondi termina..
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7340
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #4 on: October 26, 2012, 06:35:30 am » |
Ciao a tutti, da titolo si capisce tutto, mi ritrovo una funzione di interrupt e ho bisogno di un delay tra l'HIGH e il LOW di uno pin.
Quando entri nella ISR setti il pin a HIGH e nel contempo attivi un flag (una variabile a tuo piacere), se all'interno della loop rilevi che il flag abbinato alla ISR è settato inizi il conteggio del tempo dopo il quale riporti il pin a LOW e resettare il flag, se usare la delay o la millis (consigliata) dipende da te.
|
|
|
|
|
Logged
|
|
|
|
|
Montalbano Jonico
Offline
Sr. Member
Karma: 1
Posts: 284
|
 |
« Reply #5 on: October 26, 2012, 06:42:06 am » |
Ciao a tutti, da titolo si capisce tutto, mi ritrovo una funzione di interrupt e ho bisogno di un delay tra l'HIGH e il LOW di uno pin.
Quando entri nella ISR setti il pin a HIGH e nel contempo attivi un flag (una variabile a tuo piacere), se all'interno della loop rilevi che il flag abbinato alla ISR è settato inizi il conteggio del tempo dopo il quale riporti il pin a LOW e resettare il flag, se usare la delay o la millis (consigliata) dipende da te. Ok, proprio quello che volevo sapere!:) Ci provo subito e vediamo che succede! Grazie
|
|
|
|
|
Logged
|
|
|
|
|
Montalbano Jonico
Offline
Sr. Member
Karma: 1
Posts: 284
|
 |
« Reply #6 on: October 26, 2012, 06:52:19 am » |
@astro: Provato e funziona!  Grazie ancora
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #7 on: October 26, 2012, 01:59:59 pm » |
@astro: Provato e funziona!  Grazie ancora Sarebbe interessante se postassi il codice... 
|
|
|
|
|
Logged
|
|
|
|
|
Montalbano Jonico
Offline
Sr. Member
Karma: 1
Posts: 284
|
 |
« Reply #8 on: October 26, 2012, 03:19:53 pm » |
@astro: Provato e funziona!  Grazie ancora Sarebbe interessante se postassi il codice...  Se ho capito bene i consigli di astro, a me è uscita una cosa del genere:) ) (Esempio:) volatile int flag = 0;
void setup() { Serial.begin(9600);
pinMode(7, OUTPUT); digitalWrite(7, LOW); attachInterrupt(0, int_0, RISING); //interrupt se il pin digitale 2 rivela che lo stato passa da basso ad alto..*/ }
void loop() { if (flag == 1) { Serial.println("Aspetto..:"); delay(3000); Serial.println("Pin in LOW"); digitalWrite(7, LOW); flag = 0; }
}
void int_0() { Serial.println("Sono in int_0"); digitalWrite(7, HIGH); flag = 1; }
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #9 on: October 28, 2012, 07:23:17 am » |
Toglierei la print() dalla isr...
|
|
|
|
|
Logged
|
|
|
|
|
Montalbano Jonico
Offline
Sr. Member
Karma: 1
Posts: 284
|
 |
« Reply #10 on: October 29, 2012, 04:39:53 am » |
Toglierei la print() dalla isr...
Sisi uso un casino di print su seriale per debug ma una volta apposto se non servono ho l'abitudine di toglierle.. Una cosa però per curiosità, perché hai specificato di toglierle dalla isr?! Sarebbe sbaglato in generale utilizzare/lasciare print su isr? Grazie.
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7340
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #11 on: October 29, 2012, 04:44:26 am » |
Sarebbe sbaglato in generale utilizzare/lasciare print su isr?
Si, le ISR devono essere il più semplice, e rapide, possibile, la print pesa molto in termini di tempo d'esecuzione. In linea di massima all'interno della ISR ci si deve limitare a gestire la condizione che l'ha attivata eseguendo solo le operazioni che richiedono pochi cicli macchia, tutto il resto si fa fuori dalla ISR utilizzando dei flag per comunicare cosa fare.
|
|
|
|
|
Logged
|
|
|
|
|
Montalbano Jonico
Offline
Sr. Member
Karma: 1
Posts: 284
|
 |
« Reply #12 on: October 29, 2012, 04:46:14 am » |
Ok perfetto grazie!
|
|
|
|
|
Logged
|
|
|
|
|
|