- IC PT2258
- Come funziona PT2258 IC
- Lo schema
- Componenti richiesti
- Codice Arduino
- Test del circuito di controllo del volume dell'audio digitale
- Ulteriore miglioramento
Un potenziometro è un dispositivo meccanico tramite il quale è possibile impostare la resistenza secondo il valore desiderato, variando così la corrente che lo attraversa. Esistono molte applicazioni per un potenziometro, ma principalmente un potenziometro viene utilizzato come controller del volume per amplificatori audio.
Un potenziometro non controlla il guadagno del segnale, ma forma un partitore di tensione ed è per questo che il segnale in ingresso viene attenuato. Quindi in questo progetto, ti mostrerò come costruire il tuo controller del volume digitale con l'IC PT2258 e interfacciarlo con un Arduino per controllare il volume di un circuito amplificatore. Puoi anche controllare vari circuiti relativi all'audio qui inclusi misuratore VU, circuito di controllo del tono, ecc.
IC PT2258
Come ho accennato in precedenza, il PT2258 è un circuito integrato realizzato per essere utilizzato come regolatore elettronico del volume a 6 canali, questo circuito integrato utilizza la tecnologia CMOS appositamente progettata per applicazioni audio-video multicanale.
Questo CI fornisce un'interfaccia di controllo I2C con un intervallo di attenuazione da 0 a -79 dB a 1 dB / passo ed è disponibile in un pacchetto DIP o SOP a 20 pin.
Alcune delle funzionalità di base includono,
- 6 canali di ingresso e uscita (per sistemi home audio 5.1)
- Indirizzo I2C selezionabile (per applicazione daisy-chain)
- Alta separazione dei canali (per applicazioni a basso rumore)
- Rapporto S / N di> 100 dB
- La tensione di esercizio è compresa tra 5 e 9 V.
Come funziona PT2258 IC
Questo IC trasmette e riceve i dati dal microcontrollore tramite le linee SCL e SDA. SDA e SCL costituiscono l'interfaccia del bus. Queste linee devono essere tirate in alto da due resistori da 4.7K per garantire un funzionamento stabile.
Prima di passare all'effettiva operazione hardware, ecco la descrizione funzionale dettagliata dell'IC. se non vuoi sapere tutto questo puoi saltare questa parte perché tutta la parte funzionale è gestita dalla libreria Arduino.
Convalida dei dati
- I dati sulla linea SDA sono considerati stabili quando il segnale SCL è ALTO.
- Gli stati HIGH e LOW della linea SDA cambiano solo quando SCL è LOW.
Condizione di avvio e arresto
Una condizione di avvio viene attivata quando
- l'SCL è impostato su HIGH e
- SDA passa dallo stato ALTO allo stato BASSO.
La condizione di arresto viene attivata quando
- SCL è impostato su HIGH e
- SDA passa dallo stato BASSO a quello ALTO
Nota! Questa informazione è molto utile per eseguire il debug dei segnali.
Formato dei dati
Ogni byte trasmesso alla linea SDA è composto da 8 bit, che formano un byte. Ogni byte deve essere seguito da un bit di riconoscimento.
Riconoscimento
Il riconoscimento garantisce un funzionamento stabile e corretto. Durante l'impulso di riconoscimento del clock, il microcontrollore tira il pin SDA ALTO in questo momento esatto il dispositivo periferico (processore audio) abbassa (BASSO) la linea SDA.
Il dispositivo periferico (PT2258) è ora indirizzato e deve generare un riconoscimento dopo aver ricevuto un byte, altrimenti la linea SDA rimarrà a livello alto durante il nono (nono) impulso di clock. In tal caso, il trasmettitore master genererà le informazioni di STOP per interrompere il trasferimento.
Ciò elimina la necessità di disporre di un trasferimento dati valido.
Selezione indirizzo
L'indirizzo I2C di questo IC dipende dallo stato di CODE1 (pin n. 17) e CODE2 (pin n. 4).
CODICE1 (PIN n. 17) |
CODE2 (PIN n. 4) |
INDIRIZZO HEX |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logica alta = 1
Logica bassa = 0
Protocollo di interfaccia
Il protocollo di interfaccia è costituito da quanto segue:
- Un po 'di inizio
- Un byte dell'indirizzo del chip
- ACK = bit di riconoscimento
- Un byte di dati
- Un po 'di stop
Un po 'di pulizie
Dopo l'accensione, l'IC deve attendere almeno 200 ms prima di trasmettere il primo bit di dati, altrimenti il trasferimento dei dati potrebbe non riuscire.
Dopo il ritardo, la prima cosa da fare è cancellare il registro inviando “0XC0” vi alla linea I2C, questo garantisce il corretto funzionamento.
Il passaggio precedente cancella l'intero registro, ora dobbiamo impostare un valore per il registro, altrimenti il registro memorizza il valore di spazzatura e otteniamo un output lentigginoso.
Per garantire una corretta regolazione del volume, è necessario inviare un multiplo di 10dB seguito da un codice da 1dB all'attenuatore in sequenza, altrimenti l'IC può comportarsi in modo anomalo. Lo schema seguente lo chiarisce di più.
Entrambi i metodi sopra funzioneranno correttamente.
Per garantire un funzionamento corretto, assicurarsi che la velocità di trasferimento dei dati I2C non superi mai i 100 KHz.
È così che puoi trasmettere un byte all'IC e attenuare il segnale in ingresso. La sezione sopra è per imparare come funziona l'IC, ma come ho detto prima, useremo una libreria Arduino per comunicare con l'IC che gestisce tutto l'hard code, e dobbiamo solo effettuare alcune chiamate di funzione.
Tutte le informazioni di cui sopra sono tratte dalla scheda tecnica, fare riferimento ad essa per ulteriori informazioni.
Lo schema
L'immagine sopra mostra lo schema di prova del circuito di controllo del volume basato su PT2258. È tratto dal datasheet e modificato a seconda delle necessità.
Per la dimostrazione, il circuito è costruito su una breadboard senza saldatura con l'aiuto dello schema mostrato sopra.
Nota! Tutti i componenti sono posizionati il più vicino possibile per ridurre l'induttanza e la resistenza della capacità parassita.
Componenti richiesti
- PT2258 IC - 1
- Controller Arduino Nano - 1
- Breadboard generica - 1
- Terminale a vite 5 mm x 3-1
- Pulsante - 1
- Resistenza da 4,7 K, 5% - 2
- Resistore 150K, 5% - 4
- Resistenza 10k, 5% - 2
- Condensatore 10uF - 6
- Condensatore 0.1uF - 1
- Cavi per ponticelli - 10
Codice Arduino
Per semplicità, userò una libreria PT2258 di GitHub, creata da sunrutcon.
Questa è una libreria scritta molto bene, ecco perché ho deciso di usarla, ma poiché è molto vecchia, è un po 'difettosa e dobbiamo aggiustarla prima di poterla usare.
Innanzitutto, scarica ed estrai la libreria dal repository GitHub.
Otterrai i due file precedenti dopo l'estrazione.
#include #include
Quindi, apri il file PT2258.cpp con il tuo editor di testo preferito, sto usando Notepad ++.
Puoi vedere che la "w" della libreria wire è in lettere minuscole, il che è incompatibile con le ultime versioni di Arduino, e devi sostituirla con una "W" maiuscola, il gioco è fatto.
Il codice completo per il controller del volume PT2258 è disponibile alla fine di questa sezione. Qui vengono spiegate parti importanti del programma.
Iniziamo il codice includendo tutti i file delle librerie richieste. La libreria Wire viene utilizzata per comunicare tra Arduino e PT2258. La libreria PT2258 contiene tutte le informazioni e i riconoscimenti di temporizzazione I2C critici. La libreria ezButton viene utilizzata per interfacciarsi con i pulsanti.
Invece di utilizzare le immagini di codice sottostanti, copia tutte le istanze di codice dal file di codice e rendile formattate come facevamo in altri progetti
#includere
Quindi, crea gli oggetti per i due pulsanti e la libreria PT2258 stessa.
PT2258 pt2258; ezButton button_1 (2); ezButton button_2 (4);
Quindi, definire il livello del volume. Questo è il livello di volume predefinito con cui inizierà questo IC.
Volume int = 40;
Successivamente, avvia l'UART e imposta la frequenza di clock per il bus I2C.
Serial.begin (9600); Wire.setClock (100000);
È molto importante impostare il clock I2C, altrimenti l'IC non funzionerà perché la frequenza di clock massima supportata da questo IC è 100KHz.
Successivamente, eseguiamo un po 'di pulizia con un'istruzione if else per garantire che l'IC comunichi correttamente con il bus I2C.
If (! Pt2258.init ()) Serial.printIn ("PT2258 avviato con successo"); Else Serial.printIn ("Impossibile avviare PT2258");
Successivamente, impostiamo il ritardo antirimbalzo per i pulsanti.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
Infine, avvia il PT2258 IC impostandolo con il volume del canale predefinito e il numero di pin.
/ * Avvio di PT con volume predefinito e Pin * / Pt2258.setChannelVolume (volume, 4); Pt2258.setChannelVolume (volume, 5);
Questo segna la fine della sezione Void Setup () .
Nella sezione Loop , dobbiamo chiamare la funzione loop dalla classe button; è una norma di biblioteca.
Button_1.loop (); // Norme della libreria Button_2.loop (); // Norme della biblioteca
La sezione sottostante se serve per diminuire il volume.
/ * se viene premuto il pulsante 1 se la condizione è vera * / If (button_1.ispressed ()) {Volume ++; // Incremento del contatore del volume. // Questa istruzione if garantisce che il volume non superi 79 If (volume> = 79) {Volume = 79; } Serial.print ("volume:"); // stampa il livello del volume Serial.printIn (volume); / * imposta il volume per il canale 4 che si trova nel PIN 9 del PT2558 IC * / Pt2558.setChannelVolume (volume, 4); / * imposta il volume per il canale 5 Che è il PIN 10 del PT2558 IC * / Pt2558.setChannelVolume (volume, 5); }
La sezione sottostante se serve per aumentare il volume.
// Lo stesso accade per il pulsante 2 If (button_2.isPressed ()) {Volume--; // questa istruzione if assicura che il livello del volume non scenda sotto lo zero. Se (volume <= 0) Volume = 0; Serial.print ("volume:"); Serial.printIn (volume); Pt2258.setChannelVolume (volume, 4); Pt2558.setChannelVolume (volume, 5); }
Test del circuito di controllo del volume dell'audio digitale
Per testare il circuito, è stato utilizzato il seguente apparato
- Un trasformatore che ha un Tap 13-0-13
- 2 altoparlanti da 4Ω 20W come carico.
- Fonte audio (telefono)
In un articolo precedente, ti ho mostrato come realizzare un semplice amplificatore audio 2x32 Watt con TDA2050 IC, lo userò anche per questa dimostrazione.
Ho disordinato il potenziometro meccanico e ho cortocircuitato due cavi con due piccoli cavi jumper.
Ora, con l'aiuto di due pulsanti, è possibile controllare il volume dell'amplificatore.
Ulteriore miglioramento
Il circuito può essere ulteriormente modificato per migliorarne le prestazioni. Miglioramenti come il circuito possono essere apportati a un PCB per eliminare ulteriormente il rumore generato dalla sezione digitale dell'IC. Possiamo anche aggiungere un filtro aggiuntivo per rifiutare i rumori ad alta frequenza. Inoltre, controlla altri circuiti di amplificazione audio e altri progetti relativi all'audio.
Spero che questo articolo ti sia piaciuto e che abbia imparato qualcosa di nuovo da esso. Se hai qualche dubbio, puoi chiedere nei commenti qui sotto o puoi usare i nostri forum per una discussione dettagliata.