- IC PT2258
- Comment fonctionne PT2258 IC
- Le schéma
- Composants requis
- Code Arduino
- Test du circuit de contrôle du volume audio numérique
- Amélioration supplémentaire
Un potentiomètre est un dispositif mécanique permettant de régler la résistance en fonction de la valeur souhaitée, modifiant ainsi le courant qui le traverse. Il existe de nombreuses applications pour un potentiomètre, mais le plus souvent un potentiomètre est utilisé comme contrôleur de volume pour les amplificateurs audio.
Un potentiomètre ne contrôle pas le gain du signal, mais il forme un diviseur de tension et c'est pourquoi le signal d'entrée est atténué. Donc, dans ce projet, je vais vous montrer comment construire votre contrôleur de volume numérique avec l'IC PT2258 et l'interfacer avec un Arduino pour contrôler le volume d'un circuit amplificateur. Vous pouvez également vérifier divers circuits liés à l'audio ici, y compris le VU-mètre, le circuit de commande de tonalité, etc.
IC PT2258
Comme je l'ai mentionné précédemment, le PT2258 est un CI conçu pour être utilisé comme contrôleur de volume électronique à 6 canaux, ce CI utilise la technologie CMOS spécialement conçue pour les applications audio-vidéo multicanaux.
Ce circuit intégré fournit une interface de contrôle I2C avec une plage d'atténuation de 0 à -79 dB à 1 dB / pas et est livré dans un boîtier DIP ou SOP à 20 broches.
Certaines des fonctionnalités de base comprennent,
- 6 canaux d'entrée et de sortie (pour les systèmes audio à domicile 5.1)
- Adresse I2C sélectionnable (pour les applications en guirlande)
- Séparation des canaux élevés (pour les applications à faible bruit)
- Rapport S / N> 100 dB
- La tension de fonctionnement est de 5 à 9 V
Comment fonctionne PT2258 IC
Ce circuit intégré transmet et reçoit des données du microcontrôleur via des lignes SCL et SDA. Le SDA et le SCL constituent l'interface de bus. Ces lignes doivent être tirées vers le haut par deux résistances de 4,7K afin d'assurer un fonctionnement stable.
Avant de passer au fonctionnement réel du matériel, voici la description fonctionnelle détaillée du CI. si vous ne voulez pas savoir tout cela, vous pouvez sauter cette partie car toute la partie fonctionnelle est gérée par la bibliothèque Arduino.
La validation des données
- Les données sur la ligne SDA sont considérées comme stables lorsque le signal SCL est HIGH.
- Les états HIGH et LOW de la ligne SDA changent uniquement lorsque le SCL est LOW.
Condition de démarrage et d'arrêt
Une condition de démarrage est activée lorsque
- le SCL est réglé sur HIGH et
- SDA passe de l'état HAUT à l'état BAS.
La condition d'arrêt est activée lorsque
- SCL est réglé sur HIGH et
- SDA passe de l'état BAS à l'état HAUT
Remarque! Ces informations sont très utiles pour déboguer les signaux.
Format des données
Chaque octet transmis à la ligne SDA se compose de 8 bits, qui forment un octet. Chaque octet doit être suivi d'un bit d'acquittement.
Reconnaissance
La reconnaissance garantit un fonctionnement stable et correct. Pendant l'impulsion d'horloge d'acquittement, le microcontrôleur tire la broche SDA HIGH à ce moment précis où le périphérique (processeur audio) tire vers le bas (LOW) la ligne SDA.
Le périphérique (PT2258) est maintenant adressé et il doit générer un accusé de réception après avoir reçu un octet, sinon, la ligne SDA restera au niveau haut pendant la neuvième (9ème) impulsion d'horloge. Si cela se produit, l'émetteur maître générera des informations STOP afin d'annuler le transfert.
Cela élimine le besoin d'être en place pour un transfert de données valide.
Sélection d'adresse
L'adresse I2C de cet IC dépend de l'état de CODE1 (broche n ° 17) et CODE2 (broche n ° 4).
CODE1 (NIP N ° 17) |
CODE2 (NIP N ° 4) |
ADRESSE HEX |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logique haute = 1
Logique basse = 0
Protocole d'interface
Le protocole d'interface comprend les éléments suivants:
- Un peu de départ
- Un octet d'adresse de puce
- ACK = bit d'acquittement
- Un octet de données
- Un peu d'arrêt
Un peu de ménage
Une fois le circuit intégré sous tension, il doit attendre au moins 200 ms avant de transmettre le premier bit de données, sinon le transfert de données peut échouer.
Après le délai, la première chose à faire est d'effacer le registre en envoyant «0XC0» via la ligne I2C, cela garantit un bon fonctionnement.
L'étape ci-dessus efface tout le registre, nous devons maintenant définir une valeur pour le registre, sinon, le registre stocke la valeur des déchets et nous obtenons une sortie tachetée de rousseur.
Pour garantir des réglages de volume corrects, il est nécessaire d'envoyer un multiple de 10 dB suivi d'un code de 1 dB à l'atténuateur en séquence, sinon le CI peut se comporter de manière anormale. Le schéma ci-dessous le clarifie davantage.
Les deux méthodes ci-dessus fonctionneront correctement.
Pour garantir un fonctionnement correct, assurez-vous que la vitesse de transfert des données I2C ne dépasse jamais 100 KHz.
C'est ainsi que vous pouvez transmettre un octet au CI et atténuer le signal d'entrée. La section ci-dessus est pour apprendre comment fonctionne l'IC, mais comme je l'ai dit plus tôt, nous allons utiliser une bibliothèque Arduino pour communiquer avec l'IC qui gère tout le code dur, et nous avons juste besoin de faire quelques appels de fonction.
Toutes les informations ci-dessus sont tirées de la fiche technique, veuillez vous y référer pour plus d'informations.
Le schéma
L'image ci-dessus montre le schéma de test du circuit de contrôle du volume basé sur le PT2258. Il est extrait de la fiche technique et modifié selon les besoins.
Pour la démonstration, le circuit est construit sur une maquette sans soudure à l'aide du schéma ci-dessus.
Remarque! Tous les composants sont placés le plus près possible pour réduire l'inductance et la résistance de capacité parasite.
Composants requis
- PT2258 IC - 1
- Contrôleur Arduino Nano - 1
- Breadboard générique - 1
- Borne à vis 5 mm x 3-1
- Bouton poussoir - 1
- Résistance 4.7K, 5% - 2
- Résistance 150K, 5% - 4
- Résistance 10k, 5% - 2
- Condensateur 10uF - 6
- Condensateur 0.1uF - 1
- Fils de cavalier - 10
Code Arduino
Pour simplifier, je vais utiliser une bibliothèque PT2258 de GitHub, qui est faite par sunrutcon.
C'est une bibliothèque très bien écrite, c'est pourquoi j'ai décidé de l'utiliser, mais comme elle est très ancienne, elle est un peu boguée et nous devons la corriger avant de pouvoir l'utiliser.
Tout d'abord, téléchargez et extrayez la bibliothèque du référentiel GitHub.
Vous obtiendrez les deux fichiers ci-dessus après l'extraction.
#include #include
Ensuite, ouvrez le fichier PT2258.cpp avec votre éditeur de texte préféré, j'utilise Notepad ++.
Vous pouvez voir que le «w» de la bibliothèque de fils est en minuscules, ce qui est incompatible avec les dernières versions d'Arduino, et vous devez le remplacer par un «W» en majuscules, c'est tout.
Le code complet du contrôleur de volume PT2258 se trouve à la fin de cette section. Ici, des parties importantes du programme sont expliquées.
Nous commençons le code en incluant tous les fichiers de bibliothèques requis. La bibliothèque Wire est utilisée pour communiquer entre l'Arduino et le PT2258. La bibliothèque PT2258 contient toutes les informations de synchronisation et les accusés de réception critiques I2C. La bibliothèque ezButton est utilisée pour s'interfacer avec les boutons poussoirs.
Au lieu d'utiliser les images de code ci-dessous, copiez toutes les instances de code à partir du fichier de code et mettez-les au format comme nous le faisions dans d'autres projets
#comprendre
Ensuite, créez les objets pour les deux boutons et la bibliothèque PT2258 elle-même.
PT2258 pt2258; bouton ezButton_1 (2); bouton ezButton_2 (4);
Ensuite, définissez le niveau de volume. Il s'agit du niveau de volume par défaut avec lequel ce CI démarrera.
Volume int = 40;
Ensuite, lancez l'UART et définissez la fréquence d'horloge pour le bus I2C.
Serial.begin (9600); Wire.setClock (100000);
Il est très important de régler l'horloge I2C, sinon le CI ne fonctionnera pas car la fréquence d'horloge maximale prise en charge par ce CI est de 100 KHz.
Ensuite, nous faisons un peu de ménage avec une instruction if else afin de nous assurer que l'IC communique correctement avec le bus I2C.
If (! Pt2258.init ()) Serial.printIn («PT2258 Initié avec succès»); Sinon Serial.printIn («Échec du lancement de PT2258»);
Ensuite, nous définissons le délai anti-rebond pour les boutons poussoirs.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
Enfin, lancez le PT2258 IC en le configurant avec le volume de canal et le numéro de broche par défaut.
/ * Lancer PT avec volume par défaut et Pin * / Pt2258.setChannelVolume (volume, 4); Pt2258.setChannelVolume (volume, 5);
Ceci marque la fin de la section Void Setup () .
Dans la section Loop , nous devons appeler la fonction loop à partir de la classe button; c'est une norme de bibliothèque.
Button_1.loop (); // Normes de la bibliothèque Button_2.loop (); // Normes de la bibliothèque
La section ci - dessous si est de diminuer le volume.
/ * si le bouton 1 est enfoncé si la condition est vraie * / If (button_1.ispressed ()) {Volume ++; // Incrémentation du compteur de volume. // Cette instruction if garantit que le volume ne dépasse pas 79 If (volume> = 79) {Volume = 79; } Serial.print ("volume:"); // impression du niveau de volume Serial.printIn (volume); / * règle le volume du canal 4 qui se trouve dans la broche 9 du PT2558 IC * / Pt2558.setChannelVolume (volume, 4); / * règle le volume du canal 5 qui est le PIN 10 du PT2558 IC * / Pt2558.setChannelVolume (volume, 5); }
La section ci - dessous si est d'augmenter le volume.
// La même chose se produit pour le bouton 2 If (button_2.isPressed ()) {Volume--; // cette instruction if garantit que le niveau de volume ne descend pas en dessous de zéro. Si (volume <= 0) Volume = 0; Serial.print ("volume:"); Serial.printIn (volume); Pt2258.setChannelVolume (volume, 4); Pt2558.setChannelVolume (volume, 5); }
Test du circuit de contrôle du volume audio numérique
Pour tester le circuit, l'appareil suivant a été utilisé
- Un transformateur qui a un 13-0-13 Tap
- 2 haut-parleur 4Ω 20W comme charge.
- Source audio (téléphone)
Dans un article précédent, je vous ai montré comment créer un amplificateur audio simple 2x32 Watt avec TDA2050 IC, je vais également l'utiliser pour cette démonstration.
J'ai désordonné le potentiomètre mécanique et court-circuité deux fils avec deux petits câbles volants.
Désormais, à l'aide de deux boutons poussoirs, le volume de l'amplificateur peut être contrôlé.
Amélioration supplémentaire
Le circuit peut être encore modifié afin d'améliorer ses performances. Des améliorations comme le circuit peuvent être apportées à un PCB pour éliminer davantage le bruit généré par la section numérique du CI. Nous pouvons également ajouter un filtre supplémentaire afin de rejeter les bruits haute fréquence. Consultez également d'autres circuits d'amplificateur audio et d'autres projets liés à l'audio.
J'espère que vous avez aimé cet article et en avez appris quelque chose de nouveau. Si vous avez le moindre doute, vous pouvez demander dans les commentaires ci-dessous ou utiliser nos forums pour une discussion détaillée.