Bonjour,
Il s'agit de programmer un circuit intégré ce CI possède un registre de 8 bits
et les 6 premiers bits (0->5) permettent de fixer le niveau de volume du minimum: 00 (00 0000) au maximum: 3F (11 1111).
Cette valeur est contenue dans une variable: unsigned char variable1
Actuellement le programme est formaté pour cette configuration et donc on ne peut que changer le niveau de volume_periph. Mais le 7 ème bit permet d'activiter une autre fonctionnalité. Si je veux activité cette fonctionnalité, je dois mettre le 7ème bit à 1.
J'utilise une deuxième variable : unsigned char binaire J'ai donc fait une opération OU avec cette variable qui devrait valloir donc 64 car cela represente en binaire ceci : 100 0000 et si je somme (operation OU) cette variable avec la variable volume :
exemple niveau de volume 30 :
11 0000 (30)
+ 100 0000 (64)
----------------
111 0000 (70)
C'est ce que j'obtient avec DevC++ mais avec mon IDE pour mon µC j'ai une autre valeur.
Voici le problème auquel je suis confronté, en fesant un printf de la valeur
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 #include <stdio.h> unsigned char variable1; unsigned char binaire; unsigned char binaireinv; int main() { int i; variable1=0x31; binaire=64; binaireinv=63; printf("variable1 avant: %X\n",variable1); variable1= variable1|binaire; printf("variable1 apres: %X\n",variable1); getch();
volume_periph, j'obtient la valeur 74 que je ne comprend pas bien car si on convertit simplment 30 en binaire on obtient 01 1110 en sommant avec le 64 on aura un 94 mais c'est pas le cas. Donc ma question est de savoir comment on peut faire l'operation binaire pour choisir le format de 30.
Deplus le niveau maximal est depassé car il y a saturation du signal alors que à 30 le signal était audible donc je pense qu'il faut un algorithme qui gere le niveau si le bit 7 est à 1 ou bien c'est le IC qui ne gère pas correctement les fonctions associées aux bits?
Pouvez vous m'aider ?
Merci
Partager