Software para gravação de arquivos de áudio em chips ISD1700
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 |
Aplicativos e serviços online
| ||||
![]() |
|
Sobre este projeto
Em um de meus projetos recentes, precisei adicionar voz às mensagens de texto curtas. Shields como o módulo MP3 com cartão SD me pareceram excessivos, e «ensinar» o Arduino a reproduzir a fala humana significaria gastar todos os recursos do microcontrolador apenas nesta tarefa, que na verdade é auxiliar. Além disso, eu estaria ficando sem memória em qualquer caso.
Uma breve pesquisa revelou chips de gravação e reprodução de voz da série ISD1700, controlados por SPI, capazes de armazenar mensagens de até vários minutos.
As mensagens de voz foram preparadas previamente em arquivos separados. A única questão que permaneceu foi a forma de registrar aqueles na memória do IC. Os programadores para ISD1700 não são amplamente distribuídos e custam muito mais caro do que os próprios chips. Havia algumas informações sobre como construir um (https://laserwar.ru/sound_lasertag.html), mas sou um programador em vez de radioamador, então queria usar hardware padrão - a placa Arduino era excelente para essa função.
Depois de estudar a ficha técnica («ISD1700Design Guide»), percebi que havia uma entrada analógica através da qual os arquivos podiam ser gravados. E para automação de processos, decidi escrever um software especial - ISD1700 Record Tool.
A ferramenta de gravação ISD1700 permite gravar um conjunto de arquivos de áudio no ISD1700 por meio da placa Arduino. O software consiste em duas partes:um esboço para a placa Arduino ( ISD1700.ino ) e aplicativo independente do Windows ( ISD1700.exe )
O esboço em ISD1700.ino foi escrito para uma placa ARUINO baseada em ATMega328P (testada em Arduino Uno e Arduino Nano), mas provavelmente também pode funcionar em outras placas.
Lista de ISD1700s suportados:
1) ISD1730;
2) ISD1740;
3) ISD1750;
4) ISD1760;
5) ISD1790;
6) ISD17120;
7) ISD17150;
8) ISD17180;
9) ISD17210;
10) ISD17240.
O aplicativo do Windows é baseado na biblioteca de áudio BASS, que suporta os formatos mais usados:MP3, WAV, OGG etc.
1. Conexão de hardware
Durante o desenvolvimento do software, usei um módulo de gravação pronto para uso em vez de um IC ISD1700 separado. Antes de tentar quaisquer outras variantes possíveis de conexão, recomendo fortemente a leitura da ficha técnica original do ISD1700.
A Fig. 1–5 mostra meu conjunto de hardware. ARDUINO NANO é usado neste caso.

Em uma pequena placa de ensaio coloquei dois soquetes de 3,5 mm (Fig. 2) para entrada de áudio (esquerda) e fones de ouvido (direita).


Eu recomendo usar uma fonte de alimentação adicional em vez de alimentar todos os componentes por meio da saída de 5 V do Arduino porque tive muitos erros de conexão sem fonte de alimentação externa. No entanto, isso pode ser devido à má qualidade das conexões dos fios ou outra coisa.


2. Flashing Arduino
Conecte a placa Arduino ao seu PC via USB, abra ISD1700.ino no ADUINO IDE e carregue o sketch normalmente (Fig. 6).

3. Interface do usuário do aplicativo
Execute ISD1700.exe . A descrição de cada elemento de controle é mostrada na Fig. 7.

4. Sequência operacional típica
A Fig. 8 mostra a seqüência operacional típica no aplicativo Windows.

Descrição:
1. Abra os arquivos de áudio que deseja gravar no ISD1700. Classifique-os simplesmente arrastando com o mouse ou exclua os arquivos indesejados (tendo verificado-os previamente), se necessário. Além disso, você pode reproduzir cada arquivo e ajustar o nível de volume.
2. Selecione a porta COM à qual a placa ARDUINO está conectada (Fig. 9).

3. Pressione o botão “Detectar ISD1700” e certifique-se de que o modelo do ISD1700 foi exibido na caixa à direita.
4. Certifique-se de que a duração total de todos os arquivos de áudio seja inferior à capacidade ISD1700 em segundos; caso contrário, você não conseguirá iniciar a gravação.
5. Pressione o botão “Iniciar gravação”. Você pode ver o progresso na barra. Pressione “Parar gravação” se necessário.
6. Após a conclusão do processo, você pode copiar os endereços de todas as faixas para a área de transferência.Fig. 10 mostra a diferença entre duas opções.

O uso do módulo de gravação ISD1700 torna-o capaz de reproduzir arquivos de áudio logo após o processo de gravação ser feito com a ajuda de fones de ouvido e botões integrados.
Código
- código ISD1700 ARDUINO
Código ISD1700 ARDUINO C / C ++
// Código Arduino para ISD1700 Record Tool // Testado:Arduino Uno, Arduino Nano (ATMega328P) // Copyright:Anton Tsaritsynskyy, agosto de 2019 // E-mail:[email protected]//// This o software é fornecido "tal como está" sem quaisquer garantias.// O autor não é responsável por quaisquer efeitos indesejáveis causados pela utilização deste software.// A distribuição comercial deste software não é permitida.// Bibliotecas e componentes de terceiros são propriedade dos seus respectivos desenvolvedores. # includeconst unsigned int ISD_ERASE_OK =3002; const unsigned int ISD_REC_OK =3003; const unsigned int ISD_STOP_OK =3004; const unsigned int ISD_RESET_OK =3005; const unsigned int ISD_CANCEL_OK =3006; const unsigned int ISD_FULL =3004; const unsigned int ISD_RESET_OK =3005; const unsigned int ISD_CANCEL_OK =3006; const unsigned int ISD_FULL =3007; const byte ISD_SS_PIN =8; booleano isdIsUp =false; booleano isdNotifyIfFull =true; booleano isdPowerUp (void) {byte SR0B1 =1; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SR0B1 =SPI.transfer (0x01); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); retornar (SR0B1 &1)! =1; } boolean isdPowerDown (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x07); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction ();} boolean isdReset (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x03); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); atraso (20);} void isdClrInt (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x04); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction ();} boolean isdIsReady (void) {byte SR1 =0; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x05); SPI.transfer (0x00); SR1 =SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); return (~ SR1 &1)! =1; } void isdEnableAnaIn (void) {byte APC [2]; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x44); SPI.transfer (0x00); APC [0] =SPI.transfer (0x00); APC [1] =SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); APC [0] &=~ B01010000; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x45); SPI.transfer (APC [0]); SPI.transfer (APC [1]); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction ();} byte isdDeviceID (void) {ID do byte; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x09); SPI.transfer (0x00); ID =SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); ID de retorno;} boolean isdIsFull (void) {byte SR0B1 =2; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SR0B1 =SPI.transfer (0x05); SPI.transfer (0x00); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); retorno (SR0B1 &2) ==2; } void isdRec (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x41); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); atraso (40);} void isdStop (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x02); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); atraso (100);} void isdErase (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x43); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); while (! isdIsReady ()) {}} unsigned int isdReadRecordPointer (void) {byte DB [2]; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x08); SPI.transfer (0x00); DB [0] =SPI.transfer (0x00); DB [1] =SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); retorno (DB [1] <<8) | DB [0];} unsigned int isdInit (void) {while (! IsdPowerUp ()) {} delay (100); isdClrInt (); while (! isdIsReady ()) {} isdEnableAnaIn (); retornar 3000 + isdDeviceID ();} void setup () {pinMode (ISD_SS_PIN, OUTPUT); digitalWrite (ISD_SS_PIN, HIGH); Serial.begin (9600); SPI.begin (); } char cmd; void loop () {if (Serial.available ()) {cmd =Serial.read (); switch (cmd) {case 'D':Serial.print (isdInit ()); isdPowerDown (); isdIsUp =false; pausa; case 'E':isdInit (); isdErase (); Serial.print (ISD_ERASE_OK); isdIsUp =true; isdNotifyIfFull =true; pausa; case 'R':isdRec (); Serial.print (ISD_REC_OK); pausa; case 'S':isdStop (); Serial.print (isdReadRecordPointer ()); pausa; case 'X':isdReset (); Serial.print (ISD_RESET_OK); isdIsUp =false; pausa; case 'C':if (isdIsUp) {isdStop (); isdReset (); Serial.print (ISD_CANCEL_OK); isdIsUp =false; } pausa; }} if (isdNotifyIfFull &&isdIsUp) {if (isdIsFull ()) {isdReset (); isdIsUp =false; Serial.print (ISD_FULL); isdNotifyIfFull =false; }}}
Esquemas

Processo de manufatura
- Certificação ISO 26262 para Componentes de Software
- Alvo de liga de tungstênio titânio para chips
- Alvo de tungstênio de alta pureza para chips semicondutores
- Chips de IA em alta, software de IA ganhando destaque
- OXÍMETRO DE PULSO para uso de EMERGÊNCIA durante a DOENÇA DE CORONAVIRUS
- Arduino Audio Reactive Desk Light
- Estação meteorológica ThingSpeak Arduino
- Auto-Keyer para Radio Fox Hunting
- Health Band - Um Assistente Inteligente para Idosos
- Arquivos Hexion para falência