Très bien effectivement je ne savais pas si pin étais au masculin ou féminin c'est bon à savoir, merci aussi pour les informations pour les cathodes.
En revanche j'ai une autre question. Mon projet en parler un petit peu, plus consiste à créer un système d’affichage d'informations que je placerai sur le volant de mon karting, qui va me donner grâce à divers capteurs la vitesse, la température moteur, le rapport de vitesse engagé et plein d'autres informations.
Les afficheur 7 segments au nombre de 3 serviront afficher la vitesse en km/h.
L'utilisation de ce dispositif se faisant en plein jour, j'ai besoin d'avoir une luminosité importante pour garantir une visibilité claire.
Les afficheur 7 segments sont multiplexés, je constate que j'ai une perte en luminosité relativement importante (visuellement 30 à 40 % d’après moi) par rapport à un caractère qui serait afficher seul (sans multiplexage).
D'après moi, cela vient de la latence entre les périodes d'affichage. Après plusieurs essais, je constate que 5 ms entre chaque afficheurs est le mieux. A partir de 6 ms je commence à voir un scintillement et en dessous de 4 ms je perd en luminosité.
Comment remédier à cela ? Dois-je faire passer plus de courant dans les segment ? A oscilloscope je mesure de 2,4 à 2,8 V sur les différents segments (soit, si je ne me trompe, 12 à 14 mA). Sur la datasheet c'est 20 mA d'après ce que je comprend.
Mes fonction au cas où cela serait nécéssaire :
void segment(int seg) // envoyer un état bas pour mettre la pin du digit concerné en "mode cathode"
{
digitalWrite(D1, 1);
digitalWrite(D2, 1);
digitalWrite(D3, 1);
switch(seg)
{
case 1: digitalWrite(D1, 0); break;
case 2: digitalWrite(D2, 0); break;
case 3: digitalWrite(D3, 0); break;
}
}
//*****************************************************
void chiffre(char num) // envoi au 74HC390 du chiffre à envoyer au CD4511BE
{
digitalWrite(D_reset, HIGH); // reset
digitalWrite(D_reset, LOW);
for(int i = 0 ; i < num; i++)
{
digitalWrite(D_impulsion, HIGH); // puis impulsion correspondant au chiffre
digitalWrite(D_impulsion, LOW);
}
}
//*****************************************************
void affichage(int data)
{
unsigned char Ce = int ((data/100)%10); //définition du chiffre des centaines
unsigned char Di = int ((data/10)%10); //définition du chiffre des dizaines
unsigned char Un = int (data%10); //définition du chiffre des unités
if (Ce != 0)
{
chiffre(Ce, Un);
segment(1);
delay(5);
}
if (data >=10)
{
chiffre(Di, Ce);
segment(2);
delay(5);
}
chiffre(Un, Di);
segment(3);
delay(5);
}