Aiutatemi con un interrupt

salve sto realizzando un progetto trovato in rete che usa un interrupt il codice di dichiarazione è questo vorrei cmbiarlo e metterlo nel piedino n°10
come si fa? non gli ho mai usati.....

void setup() {
  lcd.begin(16, 2);  
  pinMode(13, OUTPUT);
  pinMode(PIN,INPUT);
  pinMode(7,INPUT);  
  pinMode(8,INPUT);  
  pinMode(9,INPUT);  
  pinMode(14,INPUT);
  SetMode(); 
  Serial.begin(9600);  
  PCICR |= (1 << PCIE2);
  PCMSK2 = (1 << PCINT23) ; 
}

Ciao,

puoi guardare questo post in italiano

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1288131711

oppure questa guida in inglese che spiega l'attivazione degli interrupt su qualsiasi pin

http://www.me.ucsb.edu/~me170c/Code/How_to_Enable_Interrupts_on_ANY_pin.pdf

Buona sperimentazione,
Marco.

Boh.... -_-" non capisco :frowning:

da http://arduino.cc/en/Hacking/PinMapping168 il pin10 equivale a PCINT2, che è contenuto in PCIE0

cambia questi 2 valori nel tuo sketc, e sei a posto. Quando arriva un interrupt viene chiamata la funzione:

ISR(PCINT0_vect){
}

attento che PCINT0_vect intercetta TUTTI gli interrupt sui pin di PCIE0, quindi dovrai controllare se l'interrupt è avvenuto sul pin desisderato.

un buon metodo per vedere quali pin sono cambiati è:
_newbit=PIND;
_changed=_newbit^_oldbit;
_oldbit=_newbit;

in _changed avrai 8 bit (visto che PCIE raccoglie 8 pin alla volta), a 1 saranno i bit dei pin che sono cambiati. Nel bit più a destra avrai il PCINT0 e quello più a sinistra PCINT7 (in realtà PCINT6 e PCINT7 non si possono usare perchè sono i pin del cristallo di clock)

grazie ora provo :slight_smile:
e questo come lo cambio =(
prometto che li sperimenterò questi interrupt=)=)=)

ISR(PCINT0_vect) 
{
  if ( (PIND&(1<<7))!=0) //Questo....
    TotImp++;                
}

ratto93:
grazie ora provo :slight_smile:
e questo come lo cambio =(
prometto che li sperimenterò questi interrupt=)=)=)

ISR(PCINT0_vect) 

{
  if ( (PIND&(1<<7))!=0) //Questo....
    TotImp++;               
}

va bene così?

ISR(PCINT0_vect) 
{
  if ( (PIND&(1<<7))!=0) //Questo....
    TotImp++;

Io mi sono confuso suo tempo, ricordo che ci sono tre vettori PCINT0_vect, PCINT1_vect, PCINT2_vect, in pratica uno per ogni porta del micro. Non ricordo se la porta D e PCINT0, controlla il datasheet.

Ciao.