Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Software para grabar archivos de audio en chips ISD1700

Componentes y suministros

Arduino Nano R3
× 1
Breadboard (genérico)
× 2
módulo de grabación y reproducción de voz ISD1760
× 1
Cable USB-A a Mini-USB
× 1
Conector de audio del teléfono, 3,5 mm
× 2
Fuente de alimentación de pared conmutada 9V 1A
× 1
Fuente de alimentación de placa de pruebas 5V
× 1
Cables de puente (genéricos)
× 1

Aplicaciones y servicios en línea

Herramienta de registro ISD1700
Archivar con ISD1700 Record Tool con el código para ARDUINO y la aplicación de Windows
Arduino IDE

Acerca de este proyecto

En uno de mis proyectos recientes, necesitaba agregar voz a los mensajes de texto cortos. Los escudos como el módulo MP3 con tarjeta SD me parecieron excesivos, y «enseñar» a Arduino a reproducir el habla humana significaría gastar todos los recursos del microcontrolador solo en esta tarea, que de hecho es auxiliar. También me estaría quedando sin memoria en cualquier caso.

Una breve búsqueda reveló chips de grabación y reproducción de voz de la serie ISD1700, controlados por SPI, capaces de almacenar mensajes de hasta varios minutos de duración.

Los mensajes de voz se prepararon de antemano en forma de archivos separados. La única pregunta que quedaba era la forma de grabar esos en la memoria IC. Los programadores para ISD1700 no están muy extendidos y cuestan mucho más que los propios chips. Había algo de información sobre cómo construir uno (https://laserwar.ru/sound_lasertag.html), pero soy un programador en lugar de un radioaficionado, así que quería usar hardware estándar; la placa Arduino era excelente para ese papel.

Después de estudiar la hoja de datos («ISD1700Design Guide»), me di cuenta de que había una entrada analógica a través de la cual se podían grabar los archivos. Y para la automatización de procesos, decidí escribir un software especial:ISD1700 Record Tool.

La herramienta de grabación ISD1700 le permite grabar un conjunto de archivos de audio en ISD1700 a través de la placa Arduino. El software consta de dos partes:un boceto para la placa Arduino ( ISD1700.ino ) y una aplicación de Windows independiente ( ISD1700.exe ).

El boceto en ISD1700.ino está escrito para la placa ARUINO basada en ATMega328P (probada en Arduino Uno y Arduino Nano), pero probablemente también funcione en otras placas.

Lista de ISD1700 compatibles:

1) ISD1730;

2) ISD1740;

3) ISD1750;

4) ISD1760;

5) ISD1790;

6) ISD17120;

7) ISD17150;

8) ISD17180;

9) ISD17210;

10) ISD17240.

La aplicación de Windows se basa en la biblioteca de audio BASS, que admite los formatos más utilizados:MP3, WAV, OGG, etc.

1. Conexión de hardware

Durante el desarrollo de software, estaba usando un módulo de grabación listo para usar en lugar de ISD1700 IC separado. Antes de probar cualquier otra posible variante de conexión, recomiendo encarecidamente leer la hoja de datos ISD1700 original.

La figura 1-5 muestra mi conjunto de hardware. En este caso se utiliza ARDUINO NANO.

En una pequeña placa de pruebas coloqué dos enchufes de 3,5 mm (Fig. 2) para la entrada de audio (izquierda) y auriculares (derecha).

Recomiendo usar una unidad de fuente de alimentación adicional en lugar de alimentar todos los componentes a través de la salida de 5 V de Arduino porque tuve muchos errores de conexión sin una fuente de alimentación externa. Sin embargo, esto puede deberse a la mala calidad de las conexiones de los cables u otra cosa.

2. Arduino parpadeante

Conecte la placa Arduino a su PC a través de USB, abra ISD1700.ino en ADUINO IDE y cargue el boceto como de costumbre (Fig. 6).

3. Interfaz de usuario de la aplicación

Ejecute ISD1700.exe . La descripción de cada elemento de control se muestra en la Fig. 7.

4. Secuencia operativa típica

La Fig. 8 muestra una secuencia operativa típica en una aplicación de Windows.

Descripción:

1. Abra los archivos de audio que desea grabar en ISD1700. Ordénelos simplemente arrastrándolos con el mouse, o elimine los archivos no deseados (habiéndolos verificado previamente) si es necesario. También puede reproducir cada archivo y ajustar el nivel de volumen.

2. Seleccione el puerto COM al que está conectada la placa ARDUINO (Fig. 9).

3. Presione el botón "Detectar ISD1700" y asegúrese de que el modelo de ISD1700 se haya mostrado en el cuadro de la derecha.

4. Asegúrese de que la duración total de todos los archivos de audio sea menor que la capacidad ISD1700 en segundos; de lo contrario, no podrá comenzar a grabar.

5. Presione el botón “Iniciar grabación”. Puedes ver el progreso en la barra. Presione "Detener grabación" si es necesario.

6. Una vez finalizado el proceso, puede copiar las direcciones de todas las pistas al portapapeles. 10 muestra la diferencia entre dos opciones.

El uso del módulo de grabación ISD1700 le permite reproducir archivos de audio justo después de que se realiza el proceso de grabación con la ayuda de auriculares y botones integrados.

Código

  • Código ARDUINO ISD1700
Código ARDUINO ISD1700 C / C ++
 // Código Arduino para la herramienta de grabación ISD1700 // Probado:Arduino Uno, Arduino Nano (ATMega328P) // Copyright:Anton Tsaritsynskyy, agosto de 2019 // Correo electrónico:[email protected]//// Este el software se proporciona "tal cual" sin ninguna garantía. // El autor no es responsable de los efectos no deseados causados ​​por el uso de este software. // No se permite la distribución comercial de este software. // Las bibliotecas y componentes de terceros son propiedades de sus los desarrolladores respectivos. # incluyen  const 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_FOK =int. 3007; const byte ISD_SS_PIN =8; booleano isdIsUp =falso; booleano isdNotifyIfFull =verdadero; booleano isdPowerUp (void) {byte SR0B1 =1; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SR0B1 =SPI.transfer (0x01); SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); return (SR0B1 &1)! =1; } boolean isdPowerDown (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x07); SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction ();} boolean isdReset (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x03); SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); delay (20);} void isdClrInt (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x04); SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction ();} booleano isdIsReady (void) {byte SR1 =0; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x05); SPI.transfer (0x00); SR1 =SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); return (~ SR1 &1)! =1; } void isdEnableAnaIn (void) {byte APC [2]; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x44); SPI.transfer (0x00); APC [0] =SPI.transfer (0x00); APC [1] =SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); APC [0] &=~ B01010000; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x45); Transferencia de SPI (APC [0]); Transferencia de SPI (APC [1]); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction ();} byte isdDeviceID (void) {byte ID; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x09); SPI.transfer (0x00); ID =SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); return ID;} booleano isdIsFull (void) {byte SR0B1 =2; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SR0B1 =SPI.transfer (0x05); SPI.transfer (0x00); SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); return (SR0B1 &2) ==2; } void isdRec (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x41); SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); delay (40);} void isdStop (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x02); SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); delay (100);} void isdErase (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); Transferencia SPI (0x43); SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); while (! isdIsReady ()) {}} unsigned int isdReadRecordPointer (void) {byte DB [2]; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, BAJO); SPI.transfer (0x08); SPI.transfer (0x00); DB [0] =SPI.transfer (0x00); DB [1] =SPI.transfer (0x00); escritura digital (ISD_SS_PIN, ALTA); SPI.endTransaction (); return (DB [1] <<8) | DB [0];} unsigned int isdInit (void) {while (! IsdPowerUp ()) {} delay (100); isdClrInt (); while (! isdIsReady ()) {} isdEnableAnaIn (); return 3000 + isdDeviceID ();} configuración vacía () {pinMode (ISD_SS_PIN, SALIDA); escritura digital (ISD_SS_PIN, ALTA); Serial.begin (9600); SPI.begin (); } char cmd; bucle vacío () {if (Serial.available ()) {cmd =Serial.read (); cambiar (cmd) {caso 'D':Serial.print (isdInit ()); isdPowerDown (); isdIsUp =falso; descanso; caso 'E':isdInit (); isdErase (); Serial.print (ISD_ERASE_OK); isdIsUp =verdadero; isdNotifyIfFull =true; descanso; caso 'R':isdRec (); Serial.print (ISD_REC_OK); descanso; caso 'S':isdStop (); Serial.print (isdReadRecordPointer ()); descanso; caso 'X':isdReset (); Serial.print (ISD_RESET_OK); isdIsUp =falso; descanso; caso 'C':if (isdIsUp) {isdStop (); isdReset (); Serial.print (ISD_CANCEL_OK); isdIsUp =falso; } descanso; }} if (isdNotifyIfFull &&isdIsUp) {if (isdIsFull ()) {isdReset (); isdIsUp =falso; Serial.print (ISD_FULL); isdNotifyIfFull =falso; }}} 

Esquemas


Proceso de manufactura

  1. Certificación ISO 26262 para componentes de software
  2. Blanco de aleación de tungsteno y titanio para chips
  3. Objetivo de tungsteno de alta pureza para chips semiconductores
  4. Los chips de IA se disparan, el software de IA gana atención
  5. PULSE OXIMETER para uso de EMERGENCIA durante la ENFERMEDAD CORONAVIRUS
  6. Luz de escritorio reactiva de audio Arduino
  7. Estación meteorológica ThingSpeak Arduino
  8. Auto-Keyer para Radio Fox Hunting
  9. Controlador de joystick para el robot MeArm - Grabación de coordenadas
  10. Health Band:un asistente inteligente para los ancianos
  11. Archivos Hexion de quiebra