PinChangeInterrupt

Salve ragazzi, ho delle domande che riguardano la libreria PinChangeInterrupt. Per cominciare, funzionano su ATMega328? Cosa cambia fra PinChangeInterrupt e PinChangeInterruptSimple?

E poi ho un piccolo problemino, quando vado a fare l'upload dello sketch che include questa libreria mi dice:

In file included from Led_a_scorrimento_con_telecomando_IR.cpp:1: D:\Programmazioone\Arduino\libraries\PinChangeInterrupt/PinChangeInterrupt.h:29:32: error: core_build_options.h: No such file or directory

Ho visto nel post "giocando con l'attiny85" qualcuno che aveva lo stesso problema ma non sono riuscito a capire come ha risolto...

Ciao Xfox

Cosa Ti dice google.it? a me dice: http://www.arduino.cc/playground/Main/PinChangeInt

Note: PinChangeInt only officially supports arduino's based on the atmega 168 and 328. Using this Lib on the mega is untested and unsupported. If you would like to add mega support please let us know at the google code group.

Per il errore: la libreria non si trova nel posto giusto. Il posto giusto é la cartella //arduino0022/libraries. I file della libreria devono trovarsi in una cartella col nome della libreria.

Ciao Uwe

Eh, sì. PinChangeInterrupt è un modulo per i core Tiny e funziona sui micro TinyXX. Per gli Atmegaxx8 devi usare PinChangeInt.

@Uwe: l'errore che ha lui deriva dal fatto che sta usando una libreria per il core Tiny su un Atmega328. Difatti gli dà errore di assenza del file core_build_options, che è un file proprio del core Tiny.

leo72: @Uwe: l'errore che ha lui deriva dal fatto che sta usando una libreria per il core Tiny su un Atmega328. Difatti gli dà errore di assenza del file core_build_options, che è un file proprio del core Tiny.

Nonò, io ho impostato come board "ATtiny85 (/w Arduino as ISP)"

E allora perché chiedi se funziona sugli Atmega328? Non ho capito, scusa.

Spiega per bene cosa stai facendo e per quale micro, perché altrimenti andiamo in confusione anche noi.... :astonished:

Sorry to intrude.

Reply #5 shows a working example of pin change interrupts

http://arduino.cc/forum/index.php/topic,71049.new.html#new

bool volatile state = 1;

ISR(PCINT2_vect)
{
  if(state)
    state = false;
  else
    state = true;  
}

void setup() 
{
  // establish interrupt processing / ISR
  PCICR |= (1<<PCIE2);
  PCMSK2 |= (1<<PCINT19);
  MCUCR = (1<<ISC01);

  pinMode(19, INPUT);
  
  // Ser LED on this pin for output
  pinMode(7, OUTPUT);
}

void loop() 
{
  while(1)
  {
    if(state)
      digitalWrite(7, HIGH);
    else
      digitalWrite(7, LOW);    
  }
}

CrossRoads:
Sorry to intrude.

You’re welcome :wink:

Reply #5 shows a working example of pin change interrupts

http://arduino.cc/forum/index.php/topic,71049.new.html#new

Very easy way to manage PcInt. I never did it in such way. :smiley:

Glad to help!

leo72:

CrossRoads: Sorry to intrude.

You're welcome ;)

Reply #5 shows a working example of pin change interrupts

http://arduino.cc/forum/index.php/topic,71049.new.html#new

Very easy way to manage PcInt. I never did it in such way. :D

Per te sarà facile ma io non c'ho capito una benemerita, come lo usa il pin change? :disappointed_relieved:

Dai registri, come si fa ad esempio per impostare i timer:

PCICR |= (1<<PCIE2); vuole il PinChangeInterrupt con l’INT2, che controlla i pin dal 16 al 23
PCMSK2 |= (1<<PCINT19); sceglie il pin: PCINT19 è sul pin D3
MCUCR = (1<<ISC01); attiva l’interrupt

leo72:
Dai registri, come si fa ad esempio per impostare i timer:

PCICR |= (1<<PCIE2); vuole il PinChangeInterrupt con l’INT2, che controlla i pin dal 16 al 23
PCMSK2 |= (1<<PCINT19); sceglie il pin: PCINT19 è sul pin D3
MCUCR = (1<<ISC01); attiva l’interrupt

Grazie.
e come fa a lanciare la routine “ISR(PCINT2_vect)”, è la sigla che stabilisce l’automatismo?
e come fa a stabilire il tipo di evento (HIGH, LOW, Rising, Falling, CHANGE)?

Attivando l’interrupt la routine ISR(PCINT2_vect) la intercetta in automatico dato che ha detto di usare un cambio di stato su un pin dell’INT2.
La modalità la stabilisce ICS01, che è un cambiamento sul pin.

leo72: Attivando l'interrupt la routine ISR(PCINT2_vect) la intercetta in automatico dato che ha detto di usare un cambio di stato su un pin dell'INT2. La modalità la stabilisce ICS01, che è un cambiamento sul pin.

Quindi va chiamata proprio così, mentre in ICS01 CS starà per "Change State"? E per gli altri tipi di eventi chissà che codici bisogna usare? Provo a guardare sul datasheet :)

EDIT: nunneccosa

menniti: EDIT: nunneccosa

E' roba "pesa" :sweat_smile: :sweat_smile:

leo72:

menniti: EDIT: nunneccosa

E' roba "pesa" :sweat_smile: :sweat_smile:

:disappointed_relieved: Comunque l'esempio postato è facile da implementare, lo provo, poi vedo di capirci qualcosa in più; in fondo nelle mie applicazioni ho usato sempre il CHANGE finora. Ma questi sono i registri del 328 o funzionano anche con i tinetty, secondo te? Sai, un tocco di professionalità ai miei nanetti non guasterebbe anche se devo riaprire i cassonetti :cold_sweat: :cold_sweat:

Sicuramente funziona anche con i Tiny. Non so se bisogna adattare i registri, non ho il datasheet sottomano. Provato al volo su un Arduino e funziona (ho usato una clip fermacarta come interruttore... non ho altro, qui): il led 13 cambia di stato quando sente un cambio di stato sul pin.

leo72: Sicuramente funziona anche con i Tiny. Non so se bisogna adattare i registri, non ho il datasheet sottomano. Provato al volo su un Arduino e funziona (ho usato una clip fermacarta come interruttore... non ho altro, qui): il led 13 cambia di stato quando sente un cambio di stato sul pin.

Hai Arduino al lavoro? XD La clip-interruttore è da raccontare ai nipotini $) $) $) Proverò, speriamo che non ci sia da cambiare nulla, in realtà io gli INT li sto usando solo sui tiny, finora.

Me lo porto sempre dietro, d'altronde se qualcuno chiede qualcosa da provare "in situ" e non solo come codice, che figura ci farei?? :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

No, non è così. Siccome l'altro giorno ho comprato il nuovo portatile, stavo sistemando un po' tutto. Oggi ho sistemato l'IDE, così mi sono portato dietro l'Arduino perché volevo verificare se avevo fatto tutto correttamente (se compilava, se uppava lo sketch, se dava qualche errore la toolchain durante la compilazione degli sketch ecc...)

leo72: Me lo porto sempre dietro, d'altronde se qualcuno chiede qualcosa da provare "in situ" e non solo come codice, che figura ci farei?? :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

No, non è così. Siccome l'altro giorno ho comprato il nuovo portatile, stavo sistemando un po' tutto. Oggi ho sistemato l'IDE, così mi sono portato dietro l'Arduino perché volevo verificare se avevo fatto tutto correttamente (se compilava, se uppava lo sketch, se dava qualche errore la toolchain durante la compilazione degli sketch ecc...)

Ma col lavoro che fai, quando non passa nessuno, a chi dai fastidio anche se te lo porti? Il brutto sarebbe se qualcuno restasse lì ad aspettare mentre litighi con l'RTCsw ]:D

Lo faccio solo la sera, perché qui non passa veramente nessuno, di notte e sul fine settimana.