Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Software voor het opnemen van audiobestanden in ISD1700-chips

Componenten en benodigdheden

Arduino Nano R3
× 1
Broodplank (algemeen)
× 2
ISD1760 spraakopname- en afspeelmodule
× 1
USB-A naar mini-USB-kabel
× 1
Telefoonaudioconnector, 3,5 mm
× 2
9V 1A schakelende muurvoeding
× 1
Broodplankvoeding 5V
× 1
Jumperdraden (algemeen)
× 1

Apps en online services

ISD1700 Record Tool
Archief met ISD1700 Record Tool met zowel de code voor ARDUINO als de Windows-applicatie
Arduino IDE

Over dit project

In een van mijn recente projecten moest ik het inspreken van de korte sms-berichten toevoegen. Schilden zoals de MP3-module met SD-kaart leken mij overdreven, en Arduino 'leren' menselijke spraak te reproduceren zou betekenen dat alle middelen van de microcontroller alleen aan deze taak zouden worden besteed, wat in feite een hulptaak ​​is. Ook zou ik in elk geval te weinig geheugen hebben.

Een korte zoektocht onthulde spraakopname- en afspeelchips van de ISD1700-serie, SPI-gestuurd, in staat om berichten tot enkele minuten lang op te slaan.

Spraakberichten werden vooraf voorbereid in de vorm van aparte bestanden. De enige vraag die nog over was, was de manier om die op te nemen in het IC-geheugen. Programmeurs voor ISD1700 zijn niet wijdverbreid en kosten veel hoger dan chips zelf. Er was wat informatie over hoe je er een moest bouwen (https://laserwar.ru/sound_lasertag.html), maar ik ben een programmeur in plaats van een radioamateur, dus ik wilde standaard hardware gebruiken - Arduino-board was uitstekend voor die rol.

Nadat de datasheet («ISD1700Design Guide») was bestudeerd, realiseerde ik me dat er een analoge ingang was waarmee de bestanden konden worden opgenomen. En voor procesautomatisering besloot ik speciale software te schrijven - ISD1700 Record Tool.

Met ISD1700 Record Tool kunt u een set audiobestanden opnemen in ISD1700 via Arduino-bord. De software bestaat uit twee delen:een schets voor Arduino-bord (ISD1700.ino ) en zelfstandige Windows-toepassing (ISD1700.exe ).

De schets in ISD1700.ino is geschreven voorATMega328P-gebaseerd ARUINO-bord (getest op Arduino Uno en Arduino Nano), maar werkt waarschijnlijk ook op andere borden.

Lijst met ondersteunde ISD1700's:

1) ISD1730;

2) ISD1740;

3) ISD1750;

4) ISD1760;

5) ISD1790;

6) ISD17120;

7) ISD17150;

8) ISD17180;

9) ISD17210;

10) ISD17240.

De Windows-applicatie is gebaseerd op de BASS-audiobibliotheek, die de meest gebruikte formaten ondersteunt:MP3, WAV, OGG enz.

1. Hardwareverbinding

Tijdens de softwareontwikkeling gebruikte ik een kant-en-klare opnamemodule in plaats van een aparte ISD1700 IC. Voordat u andere mogelijke verbindingsvarianten probeert, raad ik u ten zeerste aan om de originele ISD1700-datasheet te lezen.

Afb. 1–5 toont mijn hardwareset. In dit geval wordt ARDUINO NANO gebruikt.

Op een klein breadboard heb ik twee 3,5 mm-aansluitingen (afb. 2) voor audio-invoer (links) en oortelefoons (rechts) geplaatst.

Ik raad aan om een ​​extra voedingseenheid te gebruiken in plaats van alle componenten via de 5V-uitgang van Arduino te voeden, omdat ik veel verbindingsfouten had zonder externe stroombron. Dit kan echter te wijten zijn aan een slechte kwaliteit van de draadverbindingen of iets anders.

2. Knipperende Arduino

Sluit het Arduino-bord via USB aan op uw pc, open ISD1700.ino in ADUINO IDE en upload de schets zoals gewoonlijk (Fig. 6).

3. Gebruikersinterface van de applicatie

Voer ISD1700.exe uit . De beschrijving van elk bedieningselement wordt getoond in Fig. 7.

4. Typische operationele volgorde

Afb. 8 toont de typische bedieningsvolgorde in de Windows-toepassing.

Beschrijving:

1. Open audiobestanden die u wilt opnemen op ISD1700. Sorteer ze eenvoudig met de muis, of verwijder ongewenste bestanden (nadat u ze eerder hebt gecontroleerd) indien nodig. U kunt ook elk bestand afspelen en het volume aanpassen.

2. Selecteer de COM-poort waarop de ARDUINO-kaart is aangesloten (Fig. 9).

3. Druk op de knop "Detect ISD1700" en zorg ervoor dat het model ISD1700 in het vak rechts wordt weergegeven.

4. Zorg ervoor dat de totale duur van alle audiobestanden minder is dan de ISD1700-capaciteit in seconden; anders kun je de opname niet starten.

5. Druk op de knop "Opname starten". U kunt de voortgang zien op de balk. Druk indien nodig op "Opname stoppen".

6. Nadat het proces is voltooid, kunt u de adressen van alle tracks naar het klembord kopiëren. Afb. 10 toont het verschil tussen twee opties.

Door de ISD1700-opnamemodule te gebruiken, kunnen audiobestanden worden afgespeeld net nadat het opnameproces is voltooid met behulp van oortelefoons en ingebouwde knoppen.

Code

  • ISD1700 ARDUINO-code
ISD1700 ARDUINO-codeC/C++
// Arduino-code voor ISD1700 Record Tool// Getest:Arduino Uno, Arduino Nano (ATMega328P)// Copyright:Anton Tsaritsynskyy, augustus 2019// E-mail:[email protected]//// Dit software wordt geleverd "zoals het is" zonder enige garantie.// Auteur is niet verantwoordelijk voor eventuele ongewenste effecten veroorzaakt door het gebruik van deze software.// Commerciële distributie van deze software is niet toegestaan.// Bibliotheken en componenten van derden zijn eigendom van hun respectievelijke ontwikkelaars.#include const niet-ondertekend int ISD_ERASE_OK =3002;const niet-ondertekend int ISD_REC_OK =3003;const niet-ondertekend int ISD_STOP_OK =3004;const niet-ondertekend int ISD_RESET_OK =3005;const niet-ondertekend int ISD_REC_OK =3003;const niet-ondertekend int ISD_RESET_OK =3005;const niet-ondertekend int ISDOKsign 30CANCEL_const 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, LAAG); SR0B1 =SPI.overdracht (0x01); SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); retour (SR0B1 &1) !=1; }boolean isdPowerDown(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x07); SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransaction();}boolean isdReset(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x03); SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); vertraging (20);} ongeldig isdClrInt (void) { SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x04); SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransaction();}boolean isdIsReady(void) { byte SR1 =0; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x05); SPI.overdracht (0x00); SR1 =SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); retour (~SR1 &1) !=1; }void isdEnableAnaIn(void) { byte APC[2]; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x44); SPI.overdracht (0x00); APC[0] =SPI.overdracht (0x00); APC [1] =SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); APC[0] &=~B01010000; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x45); SPI.overdracht(APC[0]); SPI.overdracht(APC[1]); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransaction();}byte isdDeviceID(void) {byte ID; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x09); SPI.overdracht (0x00); ID =SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); return ID;}boolean isdIsFull(void) { byte SR0B1 =2; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SR0B1 =SPI.overdracht (0x05); SPI.overdracht (0x00); SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); retour (SR0B1 &2) ==2; }void isdRec(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x41); SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); delay(40);}void isdStop(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x02); SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); delay(100);}void isdErase(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x43); SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); while (!isdIsReady()) {} }unsigned int isdReadRecordPointer(void) {byte DB[2]; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LAAG); SPI.overdracht (0x08); SPI.overdracht (0x00); DB[0] =SPI.overdracht (0x00); DB [1] =SPI.overdracht (0x00); digitalWrite (ISD_SS_PIN, HOOG); SPI.endTransactie(); terug (DB[1] <<8) | DB[0];}unsigned int isdInit(void) { while (!isdPowerUp()) {} delay(100); isdClrInt(); while ( !isdIsReady() ) {} isdEnableAnaIn(); retourneer 3000+isdDeviceID();}void setup() { pinMode(ISD_SS_PIN, OUTPUT); digitalWrite (ISD_SS_PIN, HOOG); Serieel.begin(9600); SPI.begin(); }char cmd; void loop() {if (Serial.available()) { cmd =Serial.read(); switch (cmd) { geval 'D':Serial.print (isdInit()); isdPowerDown(); isdIsUp =onwaar; pauze; geval 'E':isdInit(); isdErase(); Serial.print(ISD_ERASE_OK); isdIsUp =waar; isdNotifyIfFull =waar; pauze; geval 'R':isdRec(); Serial.print(ISD_REC_OK); pauze; geval 'S':isdStop(); Serial.print( isdReadRecordPointer()); pauze; geval 'X':isdReset(); Serial.print(ISD_RESET_OK); isdIsUp =onwaar; pauze; geval 'C':if (isdIsUp) { isdStop(); isdReset(); Serial.print(ISD_CANCEL_OK); isdIsUp =onwaar; } pauze; } } if (isdNotifyIfFull &&isdIsUp) { if (isdIsFull()) { isdReset(); isdIsUp =onwaar; Serial.print(ISD_FULL); isdNotifyIfFull =onwaar; } }}

Schema's


Productieproces

  1. ISO 26262-certificering voor softwarecomponenten
  2. Tungsten titanium legering doel voor chips
  3. Hoogzuiver wolfraamdoel voor halfgeleiderchips
  4. AI-chips rijzen de pan uit, AI-software komt in de schijnwerpers
  5. PULSE OXIMETER voor gebruik in noodgevallen tijdens CORONAVIRUS-ZIEKTE
  6. Arduino Audio Reactive Desk Light
  7. ThingSpeak Arduino-weerstation
  8. Auto-Keyer voor Radio Fox Hunting
  9. Joystick-controller voor MeArm Robot - Opnamecoördinaten
  10. Health Band - Een slimme assistent voor ouderen
  11. Hexion vraagt ​​faillissement aan