Bonjour,
J'ai un système embarqué (microcontrolleur AT89C51sndc1 avec un convertisseur ADC 10 bits)avec lequel je fais une gestion de volume en sortie des Haut Parleurs et ce en fonction d'un microphone d'environnement. Donc si le signal en provenance du microphone augmente je dois egalement augmenter le niveau de volume sonore dans les Haut-Parleurs, si il n'y a pas de bruit environnant je dois diminuer le niveau de volume sonore.
donc la conversion du signal en provenance du micro vari de 0 à 1023 (car 10bits) et je peux voir ça avec un printf sur l'ecran.
Actuellement si par exemple le niveau du microphone d'environnement se trouve entre 2 valeurs alors je met le volume de sortie à une valeur donnée. Comme le code existant ci-dessous:
Etant nouveau en programmation et en C je ne sais pas comment proceder mais ce que je voudrais faire c'est 2 choses:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 if (( micro_env >= 0)&&(micro_env < 7)) { TEA6320_write_byte(0x00,0x20); // Volume/Loudness printf("Volumecag= 20\n"); } if (( micro_env >= 7)&&(micro_env <11)) { TEA6320_write_byte(0x00,0x22); // Volume/Loudness printf("Volumecag= 22\n"); } if (( micro_env >= 11)&&(micro_env < 45)) { TEA6320_write_byte(0x00,0x25); // Volume/Loudness printf("Volumecag= 25\n"); } if (( micro_env >= 45)&&(micro_env < 101)) { TEA6320_write_byte(0x00,0x27); // Volume/Loudness printf("Volumecag= 27\n"); } if (( micro_env >= 101)&&(micro_env < 246)) { TEA6320_write_byte(0x00,0x29); // Volume/Loudness printf("Volumecag= 29\n"); } if (( micro_env >=246)&&(micro_env < 445)) { TEA6320_write_byte(0x00,0x2B); // Volume/Loudness printf("Volumecag= 2B\n"); } if (( micro_env >= 445)&&(micro_env < 596)) { TEA6320_write_byte(0x00,0x2E); // Volume/Loudness printf("Volumecag= 2E\n"); } if (( micro_env >= 596)&&(micro_env < 770)) { TEA6320_write_byte(0x00,0x30); // Volume/Loudness printf("Volumecag= 30\n"); } if ( micro_env >= 770) { TEA6320_write_byte(0x00,0x33); // Volume/Loudness printf("Volumecag= 33\n"); }
D'une part, faire une hystèrese donc je passe a un volume de sortie superieur d'un niveau si le niv de micro d'environnement atteint une valeur x donnée et je redescend au niveau precedent si le niv de micro d'environnement atteint une valeur y donnée mais qui serait inferieur à x. et ce semblable aux niveaux pour le code ci-dessus.
D'une autre part, avoir la possibilité de defenir via le clavier 3 niveau sonores que l'on pourrat placer en EEPROM (milieu calme , milieur normal, milieu bruyant) et donc pour ces 3 niveaux on devra pouvoir aussi delimiter les seuils. Exemple de 70 à 110 c'est un niveau calme, de 110 à 250 c'est un niveau normal ainsi de suite.
Mais comme il faut une hystèresis il faudrat pouvoir pour chacun des trois niveaux definir ou configurer via le clavier des points de basculments c'est à dire les x et y.
Pouvez vou m'aider à faire cette fonction?
Merci
Partager