Mauro, grazie della risposta, sono daccordo in tutto quello che dici, la tua è la voce dell'esperienza e della conoscenza in materia e non posso che prenderne atto, sono consapevole delle mie lacune e poche capacità, sicuramente, sto facendo il passo più lungo della gamba, ma come ti ho detto, tutto questo mi serve per imparare, e ho messo in conto che se mai un giorno un mio progetto del genere vedrà la luce commercialmente di sicuro non sarà per mio merito ma per quello di un professionista Embedded contrattato apposta per il lavoro, purtroppo per ora, le risorse economiche per commissionare un prodotto del genere non ci sono e poi, anche se ci fossero, mi piacerebbe capirci qualcosa leggendo il codice, per esempio,due anni fa ho letto il codice sorgente in C della centralina Microscquirt e non ci ho capito un tubo, oggi gli ho ridato un' occhiata e incomincio a vedere una luce dentro al tunnel, significa che qualcosa è cambiato, adesso, grazie alla facilità di arduino sto entrando nel mondo dei linguaggi C anche se concordo con te quando dici che Arduino style è troppo limitante, ne ho già letto al ruguardo e l'ho messo in conto è per questo che sto iniziando a fare preventivamente questi test, così vedo già i suoi limiti come linguaggio, poi tenterò di riprodurre questo lavoro "Arduinesco" in linguaggio 100% C (poco a poco ci capirò di più). Per l'assembly, beh, credo che questo vada molto oltre le mie capacità, ma mai dire mai...
Tornando al mio problema, credo di aver trovato il problema, da quello che ho letto sull'argomento sul sito di Nick Gammon, per eseguire un interrupt esterno con "attachInterrupt()" in realtà si spendono molti più cicli di clock di quanto pensavo, in un'esempio che fa, con chiamata a funzione SPI, fa il calcolo del dispendio di cicli clock di ogni comando e alla fine esce che per completare la chiamata interrupt esterna, si spendono circa 7 + 16 + 19 + 82 cicli di clock per un totale di 119 cicli clock per complessivi 10,25uS (solo attachInterrupt() ne consuma 82 cicli o 5,125uS) in un sistema a 16MHz...
Quindi a questi tempi, più o meno, vanno ancora aggiunti i cicli clock spesi nella nostra ISR, risultato, non è idoneo al task per cui l'ho pensato, magari facendo qualche ottimizzazione con plain C e meglio ancora con Assembly potrà avvicinarsi di più, ma incomincio a dubitare del buon esito finale, quindi mi vedrò costretto a ripiegare su altro sistema più potente (tipo il Tensy3.1?)
Al riguardo il mio codice, hai qualche suggerimento per snellire la parte di ISR in modo da tirare fuori da essa i calcoli, non so ancora come fare a processarli nel loop() o in altre function apposite chiamate dalla loop(). Anche se so di non poter avere successo con il 328P voglio comunque vedere fin dove sono IO capace di arrivare e ovviamente, fin dove sarà idoneo il Micro, poi si vedrà, il bello dei linguaggi C (ANSI intendo) è la portabilità no? basterà rivedere i dati tecnici specifici del nuovo micro, magari questo lo farà un'esperto al posto mio, a me mi basterà aver avuto un minimo di "success" nell' iniziare il progetto, già riuscire un giorno a far partire il motore e tenerlo a minimo sarà gratificante come scalare l'Everest per uno scalatore novello.
Per micro adatti al task, ho trovato molte info specifiche per uso automotive in dei micro Freescale che hanno incorporato dei "eTPU" ovvero "enhanced Timing Processor Unit" specificamente progettati per questi task real-time, ho letto la documentazione e da cui sto tentando anche di trarre qualche idea, ma al momento anche volendo, non potrei usarlo così com'è primo per le ovvie motivazioni (non sono all'altezza tecnicamente) e secondo perchè il codice attualmente sviluppato per queste eTPU non ha le caratteristiche di CAM richieste per il mio progetto (nel senso che può gestire solo un segnale CAM, mentre nel mio è richiesto che ne processi 7) Ovviamente a questa limitazione ci si potrebbe porre rimedio riprogrammando la parte di codice corrispondente, ma non so nemmeno se sia poi fattibile. Lascio questo arduo compito a persone più capaci di me.
di nuovo, grazie per la pazienza!!