Interruot routines per dimmer con Attiny

Ciao a tutti,sono nella fase preliminare di progettazione di un dimmer per lampade basato su Attiny84.
Il circuito sarà composto da un fotoaccoppiatore ac per rilevare lo zero della sinusoide e un altro fotoaccoppiatore piloterà un triac per comandare il carico,che in linea di massima sarà una lampadina.
La scelta della MCU ricade sul tiny84 perché non mi serve la potenza di un Atmega e nemmeno tutti i suoi pin:oltre ai due pin per la parte dimmer ne userò un terzo a cui collegare un pulsante in debounce per controllare il dimmer,e altri tre per collegare un transceiver 485 per rematori il controllo in Modbus,visto che questo modulo farà parte del mio sistema domotico su bus 485.
Ok,finiti i preliminari passiamo alle domande:
vorrei gestire tutta la parte relativa al dimmer tramite interrupt,di conseguenza il circuito di zero cross sarà collegato al pin PB2 che può generare l’interrupt INT0.
Il primo dubbio che mi viene è se la funzione attachInterrupt dell’IDE di Arduino è compatibile con il core Tiny…ho fatto un test di compilazione e,in effetti,per compilare compila senza errori,ma non ho testato in realtà se poi il codice generato funziona…per ovviare al problema,nel caso lo fosse,ho scritto una porzione di codice per abilitare l’INT0,che non ho ancora testato e volevo sottoporre al vostro giudizio:

#include <Interrupt.h> 

void setup(void)
{
  cli(); 
  pinMode(foto_IN,INPUT_PULLUP);
  
  sbi(MCUCR,ISC01);
  sbi(MCUCR,ISC00); 
  
  sbi(GIMSK,INT0);
  
  sei(); 
  
}

void loop(void)
{
 //
  
}

ISR(INT0_vect)
{
  //codice di rilevamento zero cross
}

l’ho scritto prendendo come riferimento il datasheet del tiny84,ma non sono sicuro di aver messo tutto il necessario…

OK,questo era il primo quesito…se questo funziona,dovrei poi utilizzare il Timer1 per generare il ritardo una volta rilevato il passaggio a zero della sinusoide per innescare il Triac,ritardo che ovviamente deve essere configurabile per avere diversi valori di dimming…e scrivere questa routine per il Timer la vedo dura per me!!!..grazie in anticipo

La gestione degli external interrupt è estremamente semplice ISC00 e ISC01 per determinare il fronte per il trigger e INT0 per abilitarlo, sei() per abilitare gli interrupt generali e poi ISR con il relativo vettore, fine. Quindi il tuo codice dovrebbe funzionare, anche se non ho mai provato un external interrupt con pull up interno, ma non dovrebbe creare problemi.

Ciao e grazie della risposta...si poi magari una resistenzina di pullup ce la metto anche,diciamo che quello era uno pseudo codice tanto per studiare il problema...a questo punto lo zero cross è trovato...adesso come faccio a far partire il Timer1 (lo 0 è già usato da millis)per aspettare il tempo per innescare il triac??...qua cado come una pera dall'albero...

allora cercando in rete ho travato un codice che dovrebbe funzionare mediante interrupt ed utilizzando il Timer1.
Ecco il link

http://www.instructables.com/id/Arduino-controlled-light-dimmer-The-circuit/step6/Arduino-controlled-light-dimmer-The-software-III/

Sfortunatamente viene utilizzata la libreria TimerOne che non è compatibile con il Tiny Core,quindi chiedo se qualche anima pia mi potrebbe spiegare quali registri settore per avere il Timer 1 che mi faccia richiamare la relative routine ISR ogni 75 microsecondi...in questo modo potrei adattare quel codice e il problema della gestione degli interruppe sarebbe risolto.
Grazie a tutti.

Pagina 83, devi verificare di riuscire a raggiungere quella frequenza di overflow del timer, dopo di che puoi adoperare l'interrupt TIMER1_OVF, che ogni 75us verrà invocato.

RobertoBochet:
Pagina 83, devi verificare di riuscire a raggiungere quella frequenza di overflow del timer, dopo di che puoi adoperare l'interrupt TIMER1_OVF, che ogni 75us verrà invocato.

eh a capirci qualcosa però!!

Problemi di carattere tecnico o di comprensione verbale in Inglese?