Je souhaiterais créer un programme pour faire "clocker" un certain nombre de fois un compteur binaire (4040).
J'ai codé une petite partie
int horloge_4040 = 13;
int reset = 12;
long intervalle_horloge;
int etat_horloge;
void setup()
{
pinMode(horloge_4040, OUTPUT);
pinMode(reset, OUTPUT);
}
void loop()
{
// Reset du 4040
digitalWrite(reset, HIGH);
delayMicroseconds(1);
digitalWrite(reset, LOW);
delayMicroseconds(1);
// On fait "clocker" 199 fois le 4040
for (int i=0;i<199;i++)
{
// Signal carré
digitalWrite(horloge_4040, HIGH);
delayMicroseconds(1);
digitalWrite(horloge_4040, LOW);
delayMicroseconds(1);
}
delay(1000);
}
Le code marche très bien, seulement, je dois éviter d'utiliser la fonction delay()/delayMicroseconds(). Je souhaite alors utiliser Micros(). J'ai crée ce code mais le résultat n'est absolument pas bon, les sorties du 4040 ne sont pas celles désirées =(
int horloge_4040 = 13;
int reset = 12;
long intervalle_horloge;
int etat_horloge;
void setup()
{
pinMode(horloge_4040, OUTPUT);
pinMode(reset, OUTPUT);
}
void loop()
{
// Reset du 4040
digitalWrite(reset, HIGH);
delayMicroseconds(1);
digitalWrite(reset, LOW);
delayMicroseconds(1);
// On fait "clocker" 199 fois le 4040
for (int i=0;i<199;i++)
{
// Signal carré
if((micros()-intervalle_horloge)>8)
{
etat_horloge=!etat_horloge;
digitalWrite(horloge_4040, etat_horloge);
intervalle_horloge = micros();
}
}
delay(1000);
}
Le "delay(1000);" en fin de code n'est pas à remplacer par micros(), il n'est pas génant.
Est ce que quelqu'un pourrait m'aider ? Merci d'avance, Adri
Je souhaiterais créer un programme pour faire "clocker" un certain nombre de fois un compteur binaire (4040).
J'ai codé une petite partie
...
Est ce que quelqu'un pourrait m'aider ? Merci d'avance, Adri
Bonjour
rapide
etat_horloge ne devrait pas plutot etre un "boolean" plutot qu'un int ?
Dans le setup, l'état des broches n'est pas fixé donc clock et reset sont dans un état indéterminé
la variable intervalle_horloge n'est pas initialisée
Micros() est mal utilisée pour tester un hors temps
curieusement tu dis que delayMicroseconds(1) est un problème alors que delay(1000) n'en est pas un. Personnellement, j'aurais dis le contraire. en effet delayMicroseconds bloque le programme pendant un temps négligeable alors que delay(1000) bloque le programme pendant une seconde
J'ai essayé en déclarant reset et clock en tant que LOW, puis HIGH, rien ne change.
Qu'est ce que tu entends par initialiser intervalle_horloge ?
Pour ce qui est du delay(1000); il n'est pas important car il sert juste à laisser le temps pour vérifier que le code fonctionne (ce qui se fait visuellement avec des LED) . Par la suite il sera supprimé.
Autres soucis, le but serait de programmer des ATTiny avec l'Arduino ISP, donc les bibliothèques ne sont pas prises en charge (à moi que je me trompe ..), donc digitalWriteFast() ne fonctionnerait pas.
Dr_H2O2:
J'ai essayé en déclarant reset et clock en tant que LOW, puis HIGH, rien ne change.
Que cela ne change rien ne dispense pas de mettre une valeur par défaut sur les sorties. Ne serait-ce que pour être certain que le reset est dans le bon sens.
Dr_H2O2:
Qu'est ce que tu entends par initialiser intervalle_horloge ?
A la première itération de la boucle for cette variable ne contient rien puisqu'on ne lui a encore pas affecté de valeur et la première chose que tu fais c'est un test sur elle donc ????
il faudrait faire un: