Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Software zum Aufzeichnen von Audiodateien auf ISD1700-Chips

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Breadboard (generisch)
× 2
ISD1760 Sprachaufzeichnungs- und Wiedergabemodul
× 1
USB-A-auf-Mini-USB-Kabel
× 1
Telefon-Audioanschluss, 3,5 mm
× 2
9V 1A Schaltnetzteil
× 1
Breadboard-Netzteil 5V
× 1
Jumper (generisch)
× 1

Apps und Onlinedienste

ISD1700-Aufzeichnungstool
Archivieren mit dem ISD1700 Record Tool mit sowohl dem Code für ARDUINO als auch der Windows-Anwendung
Arduino-IDE

Über dieses Projekt

In einem meiner letzten Projekte musste ich den kurzen Textnachrichten eine Stimme hinzufügen. Abschirmungen wie MP3-Module mit SD-Karte schienen mir übertrieben, und Arduino zu „lehren“, die menschliche Sprache zu reproduzieren, würde bedeuten, alle Ressourcen des Mikrocontrollers nur für diese Aufgabe zu verwenden, die in Wirklichkeit eine Hilfsaufgabe ist. Außerdem würde mir auf jeden Fall der Speicher ausgehen.

Eine kurze Suche ergab Sprachaufzeichnungs- und Wiedergabechips der ISD1700-Serie, die SPI-gesteuert sind und Nachrichten von bis zu mehreren Minuten Länge speichern können.

Sprachnachrichten wurden zuvor in Form separater Dateien vorbereitet. Es blieb nur die Frage, wie man diese im IC-Speicher aufzeichnet. Programmierer für ISD1700 sind nicht weit verbreitet und kosten viel mehr als Chips selbst. Es gab einige Informationen darüber, wie man einen baut (https://laserwar.ru/sound_lasertag.html), aber ich bin eher Programmierer als Funkamateur, also wollte ich Standardhardware verwenden – Arduino-Boards waren für diese Rolle ausgezeichnet.

Nachdem ich das Datenblatt («ISD1700Design Guide») studiert hatte, stellte ich fest, dass es einen analogen Eingang gab, über den die Dateien aufgezeichnet werden konnten. Und für die Prozessautomatisierung habe ich mich entschieden, eine spezielle Software zu schreiben - das ISD1700 Record Tool.

Mit dem ISD1700 Record Tool können Sie eine Reihe von Audiodateien über das Arduino-Board in ISD1700 aufnehmen. Die Software besteht aus zwei Teilen:einer Skizze für das Arduino-Board (ISD1700.ino ) und eigenständige Windows-Anwendung (ISD1700.exe ).

Die Skizze in ISD1700.ino ist für das ATMega328P-basierte ARUINO-Board geschrieben (getestet auf Arduino Uno und Arduino Nano), funktioniert aber wahrscheinlich auch auf anderen Boards.

Liste der unterstützten ISD1700:

1) ISD1730;

2) ISD1740;

3) ISD1750;

4) ISD1760;

5) ISD1790;

6) ISD17120;

7) ISD17150;

8) ISD17180;

9) ISD17210;

10) ISD17240.

Die Windows-Anwendung basiert auf der BASS-Audiobibliothek, die die am häufigsten verwendeten Formate unterstützt:MP3, WAV, OGG usw.

1. Hardwareverbindung

Während der Softwareentwicklung habe ich ein fertiges Aufnahmemodul anstelle eines separaten ISD1700 IC verwendet. Bevor Sie andere mögliche Verbindungsvarianten ausprobieren, empfehle ich dringend, das Originaldatenblatt der ISD1700 zu lesen.

Abb. 1–5 zeigen mein Hardware-Set. In diesem Fall kommt ARDUINO NANO zum Einsatz.

Auf einem kleinen Steckbrett habe ich zwei 3,5-mm-Buchsen (Abb. 2) für Audioeingang (links) und Ohrhörer (rechts) gesteckt.

Ich empfehle, ein zusätzliches Netzteil zu verwenden, anstatt alle Komponenten über den 5V-Ausgang von Arduino zu versorgen, da ich viele Anschlussfehler ohne externe Stromquelle hatte. Dies kann jedoch an einer schlechten Qualität der Kabelverbindungen oder an etwas anderem liegen.

2. Arduino blinken

Verbinden Sie das Arduino-Board über USB mit Ihrem PC, öffnen Sie ISD1700.ino in der ADUINO IDE und laden Sie die Skizze wie gewohnt hoch (Abb. 6).

3. Benutzeroberfläche der Anwendung

Führen Sie ISD1700.exe aus . Die Beschreibung der einzelnen Bedienelemente ist in Abb. 7 dargestellt.

4. Typischer Ablauf

Abb. 8 zeigt einen typischen Betriebsablauf in einer Windows-Anwendung.

Beschreibung:

1. Öffnen Sie die Audiodateien, die Sie auf ISD1700 aufnehmen möchten. Sortieren Sie diese einfach per Mausklick oder löschen Sie ggf. unerwünschte Dateien (nach vorheriger Prüfung). Außerdem können Sie jede Datei abspielen und die Lautstärke anpassen.

2. Wählen Sie den COM-Port, an dem das ARDUINO-Board angeschlossen ist (Abb. 9).

3. Drücken Sie die Schaltfläche „Detect ISD1700“ und vergewissern Sie sich, dass das Modell des ISD1700 in der Box rechts angezeigt wird.

4. Stellen Sie sicher, dass die Gesamtdauer aller Audiodateien weniger als die Kapazität von ISD1700 in Sekunden beträgt; andernfalls können Sie die Aufnahme nicht starten.

5. Drücken Sie die Schaltfläche „Aufnahme starten“. Sie können den Fortschritt auf der Leiste sehen. Drücken Sie bei Bedarf auf „Aufnahme stoppen“.

6. Nachdem der Vorgang abgeschlossen ist, können Sie die Adressen aller Spuren in die Zwischenablage kopieren.Abb. 10 zeigt den Unterschied zwischen zwei Optionen.

Die Verwendung des Aufnahmemoduls ISD1700 ermöglicht die Wiedergabe von Audiodateien direkt nach dem Aufnahmevorgang mit Hilfe von Kopfhörern und integrierten Tasten.

Code

  • ISD1700 ARDUINO-Code
ISD1700 ARDUINO-CodeC/C++
// Arduino-Code für ISD1700 Record Tool// Getestet:Arduino Uno, Arduino Nano (ATMega328P)// Copyright:Anton Tsaritsynskyy, August 2019// E-Mail:[email protected]//// This Software wird "wie besehen" ohne jegliche Gewährleistung zur Verfügung gestellt.// Der Autor ist nicht verantwortlich für unerwünschte Auswirkungen, die durch die Verwendung dieser Software verursacht werden.// Der kommerzielle Vertrieb dieser Software ist nicht gestattet.// Bibliotheken und Komponenten von Drittanbietern sind Eigentum deren jeweilige Entwickler.#include 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_OK =unsigned06;const_OK =3007;const byte ISD_SS_PIN =8;boolean isdIsUp =false;boolean isdNotifyIfFull =true;boolean 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(); zurück (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(); delay(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(); zurück (~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) {Byte-ID; 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(); Rückgabe-ID;} 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(); zurück (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(); delay(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(); delay(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(); zurück (DB[1] <<8) | DB[0];}unsigned int isdInit(void) { while ( !isdPowerUp() ) {} delay(100); isdClrInt(); while ( !isdIsReady() ) {} isdEnableAnaIn(); return 3000+isdDeviceID();}void setup() { pinMode (ISD_SS_PIN, OUTPUT); digitalWrite (ISD_SS_PIN, HIGH); Serial.begin (9600); SPI.begin(); }char cmd; Void Schleife () { if (Serial.available ()) { cmd =Serial.read (); Schalter (cmd) {Fall 'D':Serial.print (isdInit()); isdPowerDown(); isdIsUp =false; brechen; Fall 'E':isdInit(); isdErase(); Serial.print (ISD_ERASE_OK); isdIsUp =wahr; isdNotifyIfFull =true; brechen; Fall 'R':isdRec(); Serial.print (ISD_REC_OK); brechen; Fall 'S':isdStop(); Serial.print (isdReadRecordPointer()); brechen; Fall 'X':isdReset(); Serial.print (ISD_RESET_OK); isdIsUp =false; brechen; Fall 'C':if (isdIsUp) { isdStop(); isdReset(); Serial.print (ISD_CANCEL_OK); isdIsUp =false; } brechen; }} if (isdNotifyIfFull &&isdIsUp) { if (isdIsFull()) { isdReset(); isdIsUp =false; Serial.print (ISD_FULL); isdNotifyIfFull =false; } }}

Schaltpläne


Herstellungsprozess

  1. ISO 26262-Zertifizierung für Softwarekomponenten
  2. Wolfram-Titan-Legierung Target für Chips
  3. Hochreines Wolfram-Target für Halbleiterchips
  4. KI-Chips im Aufwind, KI-Software rückt ins Rampenlicht
  5. PULSEOXIMETER für NOTFALL bei CORONAVIRUS-KRANKHEIT
  6. Arduino Audio Reactive Desk Light
  7. ThingSpeak Arduino Wetterstation
  8. Auto-Keyer für die Radiofuchsjagd
  9. Health Band - Ein intelligenter Assistent für ältere Menschen
  10. Hexion meldet Insolvenz an