Created
December 14, 2011 15:56
-
-
Save matael/1477142 to your computer and use it in GitHub Desktop.
Exemples systèmes embarqués CR
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Compteur 8 bits sur un arduino | |
int tabl[8] = {0}; | |
void convertBin(int nb) // convertit l'argument en binaire | |
{ | |
// recherche des plus grandes puissances de deux retranchables | |
// à l'argument sans le rendre négatif (on commence par les plus grands) | |
for(int i = 7; i >= 0; i--) | |
{ | |
if((nb - pow(2,i)) >= 0) // si la puissance de 2 correspond, on retranche, et on allume le bit équivalent dans tabl | |
{ | |
tabl[i] = 1; // bit allumé | |
nb -= pow(2,i); // on retranche la puissance au nombre, pour les calculs suivants | |
} | |
else // la différence est négative | |
tabl[i] = 0; // bit éteint | |
} | |
} | |
void afficherBin() // affiche le tableau (en binaire) avec des leds | |
{// les pins utilisées vont de 0 à 7 sur l'arduino | |
for(int i = 0; i < 8; i++) // on parcours les LEDs | |
{ | |
if(tabl[i]) // si le bit équivalent est allumé, on allume la LED | |
digitalWrite(i, HIGH); | |
else // sinon, on éteint la LED | |
digitalWrite(i, LOW); | |
} | |
} | |
int pow(int a, int b) // retourne a^b | |
{ | |
while(b) | |
{ | |
a *= a; | |
b--; | |
} | |
return a; | |
} | |
bool verifTabl() // retourne vrai si la table à été réinitialisée | |
{ | |
bool attLimite = true; // reste vrai tant que le programme ne rencontre pas de zéro dans tabl | |
for(int i = 0; i < 8; i++) | |
{ | |
if(tabl[i] == 0) // si tabl[i] est faux, id est est égal à zéro | |
attLimite = false; | |
} | |
if(attLimite) // si tabl est remplis de 1, id est a atteint sa valeur maxi | |
{ | |
for(int i = 0; i < 8; i++) tabl[i] = 0; // tabl est entièrement réinitialisé à zéro | |
return true; // on retourne vrai, car tabl est réinitialisé | |
} | |
return false; // on retourne faux, car tabl n'a pas été réinitialisé | |
} | |
void setup() | |
{ | |
for(int i = 0; i < 8; i++) | |
{ | |
pinMode(i, OUTPUT); | |
digitalWrite(i, LOW); | |
} | |
} | |
void loop() | |
{ | |
static int varDec = -1; | |
varDec++;// incrémentation du compteur toutes les secondes | |
delay(980); // temps : on attend une seconde (1000 millisecondes, moins quelques millisecondes pour le temps de calcul) | |
// vériftabl renvoi vrai si tabl a atteint le maximum : on réinitialise alors tabl et on remet varDec à zéro | |
if(verifTabl()) // si la table est au max ... | |
varDec = 0; // varDec est réinitialisé | |
convertBin(varDec); // varDec convertit en binaire dans tabl | |
afficherBin(); // affichage en fonction de tabl sur les pins 0 à 7. | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
entity COUNTER is | |
port(S : out bit_vector(7 downto 0)); | |
end COUNTER; | |
architecture ARCH1 of COUNTER is | |
begin | |
process | |
variable N : integer; | |
variable P : integer; | |
begin | |
N := 0; | |
while (true) loop | |
while (N<256) loop | |
for P IN 0 to 7 loop | |
if (N - 2**P >= 0) then | |
S(P) <= '1'; | |
else | |
S(P) <= '0'; | |
end if; | |
end loop; | |
wait for 100 ms; | |
N := N + 1; | |
end loop; | |
N := 0; | |
end loop; | |
end process; | |
end ARCH1; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment