#include "digitalWriteFast.h" uint16_t compteur = 16*20-1; // 10µs bool affichage = true; // Force l'affichage au début void setup() { // Preparation de l'affichage Serial.begin(115200); // Mettre en route le timer 1 (16 bits) TCCR1A = 0b00000000; // Pas de comparaisons, mode CTC TCCR1B = 0b00011001; // Mode CTC ICR (12), base de temps 62.5ns ICR1 = compteur; // Interruption toutes les 10µs TIMSK1 = 0b00100000; // Autoriser les interruptions du timer 1 // Initialisation du port pinModeFast(2,OUTPUT); digitalWriteFast(2,LOW); // Affichage Serial.println(F( "Temps entre impulsions 2 et 65536 fois 62.5ns\n" " + pour augmenter d'un incrément d'horloge\n" " * pour augmenter de 10%\n" " p pour doubler\n" " - pour diminuer d'un incrément d'horloge\n" " / pour diminuer de 10%\n" " m pour diviser par 2\n" "Ces commandes +*p-/m sont a envoyer par la console\n\n" )); // Affichage des instructions de fonctionnement } ISR(TIMER1_CAPT_vect) { // Impulsion positive sur la broche 2 digitalWriteFast(2,HIGH); digitalWriteFast(2,LOW); } //#####################################®##################################### //## Boucle principale ## //#####################################®##################################### void loop() { if (Serial.available()) // Un ordre de modification est arrivé { affichage = true; // Il va falloir refaire l'affichage switch(Serial.read()) { case '+': if (compteur < 65535) compteur++; else affichage = false; break; case '-': if (compteur > 0) compteur--; else affichage = false; break; case '*': if (compteur < 62255) compteur+=compteur/20; else compteur = 65535; break; case '/': if (compteur > 30) compteur-=compteur/20; else compteur = 0; break; case 'p': if (compteur < 32767) compteur*=2; else compteur = 65535; break; case 'm': if (compteur > 1) compteur/=2; else compteur = 0; break; default: affichage = false; // Il va falloir refaire l'affichage } ICR1 = compteur; } //################# Affichage si quelque chose à changé ################### if (affichage) { affichage = false; // Pour ne pas la faire deux fois... // Affiche genre "Temps entre impulsions 10ms (ICR1=319) p*+ pour augmenter, m/- pour diminuer" Serial.print("Temps entre impulsions "); Serial.print((compteur+1.0)*0.0625); Serial.print("µs (ICR1="); Serial.print(compteur); Serial.println(") p*+ pour augmenter, m/- pour diminuer"); } }