Sommario:
- Forniture
- Passaggio 1: interconnessioni hardware
- Passaggio 2: programmazione e test
- Passaggio 3: modifica della sorgente per altri target ARMbasic e varie riflessioni
Video: Sintesi vocale Fare clic su un UChip alimentato da ARMbasic e altri SBC alimentati da ARMbasic: 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Introduzione: buona giornata. Mi chiamo Tod. Sono un professionista aerospaziale e della difesa che è anche un po' sfigato nel cuore.
Ispirazione: provenendo dall'era delle BBS dial-up, microcontrollori a 8 bit, personal computer Kaypro/Commodore/Tandy/TI-994A, quando i negozi Radio Shack erano abbondanti (i bei vecchi tempi), uno dei miei primi progetti embedded per hobby è stato lavorando con un MEK6800D2 Motorola Microprocessor Training Kit, che avevo acquistato mentre lavoravo come cooperativa presso i laboratori MSU EE (dopo aver completato la mia formazione VoTech di High School Electronics nel Southern Lower MI). Quel progetto ha comportato la mia prototipazione del PROCESSORE VOCALE Radio Shack SP0256 NARRATOR™ sul MEK6800D2, il cablaggio e la programmazione del 6800 per farlo emettere pseudo-discorso (coloro che hanno lavorato con l'HW basato su SP0256 sanno esattamente a cosa sto alludendo). Ha funzionato meravigliosamente e ho progredito lungo il percorso di farmi le ossa nei microcontrollori incorporati e nell'assemblaggio. Dopo il liceo, la vita si è messa in mezzo, militare, guerra, coniugi, figli, entrare nel settore civile, iniziare una carriera, ecc. qui negli USA).
Salto in avanti di 20 anni, arrivando all'inevitabile momento in cui i bambini stanno maturando al punto che io e la sposa siamo distrazioni, le bollette del mutuo/veicoli/università vengono lentamente pagate, i guadagni migliorano con gli avanzamenti e il mio avere abbastanza soldi tempo al punto in cui ho potuto iniziare a rifocalizzarmi su alcuni sforzi egoistici, ho ripreso il concerto di elettronica per hobby. Ad ogni modo, data la mia discendenza e la mia storia, ho cercato e trovato un ambiente di sviluppo con cui mi sono rapidamente legato - ARMbasic - BASIC è stato il mio primo amore e questo si adattava non solo a riabituarmi alla programmazione, ma a lavorare con hardware che era selvaggiamente più potente di quello con cui avevo iniziato decenni prima, e così è iniziato il viaggio.
Era il 2006-2009 circa. Poi, per ragioni che sfuggono al nostro controllo, la vita è cambiata (come era successo per molti in quegli anni). Hobby accantonati: concentrarsi su una nuova carriera, riprendersi dalle difficoltà finanziarie (era pesantemente investito nel settore immobiliare e l'abbiamo preso nei corti e i giovani stavano appena arrivando al punto in cui i finanziamenti per il college erano un imperativo). Fondamentalmente, i problemi della vita e del primo mondo (siamo davvero fortunati, considerando le sfide e le fatiche con cui le persone in altre parti del mondo lottano quotidianamente) si sono manifestati e … l'hobby è stato accantonato. L'ho ripreso brevemente nel 2011-2012, poi ho incontrato un altro cambiamento di carriera: l'hobby è stato archiviato ancora una volta.
Avanti veloce di un altro decennio e … sono tornato e, buon Dio, se tutto va bene, si spera per tutta la durata (fino a quando non prendo quel proverbiale pisolino e comincio a spingere su le margherite dal basso). Allora eccoci qua. Wow - Arduino (che cos'è quella strana parola?) aveva preso d'assalto il mercato. Creatori?? Cosa diavolo sono?! …:) I miei amici della Coridium Corp (proprietari delle schede di sviluppo di microcontrollori ARMbasic e basate su ARM) erano rimasti saldi e fedeli. Ora, invece della serie di controller LPC2xxx, c'è questa nuova (per me) entità di ARM, Cortex M0/M3/M4, Arduino e… WOW! La cultura è cambiata parecchio, e in molti modi fantastici. I Peep stanno collaborando a distanza e, in effetti, a livello globale. L'hardware sta diventando incredibilmente veloce e potente, e ARMbasic, essendo maturato e consolidato con l'impiego in molte diverse famiglie di silicio, è una cosa meravigliosa per me e molti altri.
Quindi, rendendo un racconto molto lungo, di recente mi sono imbattuto nel clic TTS di MikroElectronika e ho sentito un'ondata di nostalgia scorrere su di me. Ne ho ordinato uno in pochi minuti ed ero ansioso nei giorni successivi fino a quando l'unità non è arrivata in mano. Da qui inizia la storia…
Forniture
- 1 ea MikroElectronika Text To Speech Click, contiene Epson S1V30120 - l'ASIC TTS del modulo
- 1 ea ARMbasic Target, che ricopre il ruolo di TTS Host
- 1 ea Uno Breakout Shield (o breadboard di prototipazione, o …)
- 1 altoparlante o un set di altoparlanti suggerisce altoparlanti per PC desktop alimentati con spina TRS da 1/8 "su di essi
- 1 lotto Prototipazione filo, saldatura, flusso, stoppino, saldatore, intestazioni, prese IC e simili..
- 1 lotto Embedded Dev Tools DMM, Logic Probe, Logic Analyzer, Scope, ecc. - per i nuovi MCU host TTS
Passaggio 1: interconnessioni hardware
Per replicare questo usando un bersaglio ARMbasic in un fattore di forma Uno, o con un uChip Itaca, probabilmente sarebbe meglio fare uso di uno scudo di prototipazione, come ho fatto nelle immagini sopra (semplice collegamento Amazon)
Alcuni vedranno il filo avvolto insieme e si chiederanno perché: la reiezione del rumore di modo comune è la risposta semplice. Sì, non abbiamo a che fare con segnali bilanciati qui, ma ho pensato che non potesse far male (?), quindi l'ho fatto quando stavo facendo l'accumulo del consiglio.
È un design piuttosto benigno. Le stampe sono allegate qui, sotto forma di grafica (AutoCAD 2D è quello a cui sono più abituato - avendoci lavorato per decenni nel mio lavoro quotidiano - mi sto ancora tagliando i denti con KiCAD e questo è stato uno sforzo troppo semplice per giustificare la curva di apprendimento come primo progetto in KiCAD). Ad ogni modo, ho scelto di montare il socket uChip direttamente sullo shield per abilitare un caso d'uso autonomo quando si utilizza uChip come host. Ho aggiunto un JST per alimentarlo tramite batteria, se lo desiderassi e, poiché ho alcuni extra, ho castellato un Adafruit SWD Breakout per consentirmi di utilizzare la mia sonda di debug Segger J-Link EDU, in caso di necessità. Non è stato così, ma sto mantenendo l'SWD i'face su di esso per l'utilizzo con progetti futuri.
Castellad significa, in questo contesto, limare i bordi del PCB in modo che i fori passanti placcati siano ridotti a semicilindri, consentendo la saldatura su un PCB portante - in questo caso la scheda di protezione. Ho scelto di farlo perché le parti a ventaglio flat-pack dello scudo non si allineavano del tutto con la spaziatura delle righe tra le due righe di intestazione sull'SWD BOB. Elaborato un file flat e 5 minuti di archiviazione e problema risolto.
Passaggio 2: programmazione e test
Una volta che l'hardware è stato costruito, sarà necessario un ring-out completo per verificare che il cablaggio sia corretto. Quindi, faccio sempre un controllo di Potenza e Terreno. Questo non solo assicura che Power e Ground siano dove dovrebbero essere, ma che qualsiasi altra terminazione che non dovrebbe avere power/ground non lo sia. Non è un compito noioso su un piccolo progetto come questo, ma con sistemi di sistemi più grandi, pur essendo un passaggio noioso, è assolutamente necessario garantire che nessun sottoinsieme o sistema connesso venga portato via da uno stupido errore che poteva e doveva essere catturato. Di solito ottengo il minimo indispensabile di prodotti collegati in modo che l'alimentazione venga generata sulla scheda e quindi controllo ogni pin/terminazione per l'alimentazione e la messa a terra prima di collegare sottogruppi, chip, ecc., assicurandomi che l'alimentazione sia del livello corretto (considerando dispositivi/IO non tolleranti a 5 V, requisiti 1v8 e 3v3, ecc.) e quel terreno è dove deve essere e solo dove deve essere. Ho assistito a una cascata di guasti su un aereo da parte di persone che non hanno eseguito correttamente i controlli pre-connessione. In un caso, ci sono voluti oltre $ 100.000 di LRU - non un momento divertente per essere a capo di un progetto e farlo andare di lato in un istante perché qualcuno ha cortocircuitato il processo. Un'altra cosa di cui sono colpevole è fare noiosi "controlli di prossimità", assicurandomi che i contatti/terminazioni non siano in cortocircuito con contatti/terminazioni adiacenti. Questo diventa critico se si ha a che fare con assemblaggi coassiali, cablaggi multiconduttori/schermati, ecc. Ok, sono fuori dalla scatola del sapone …
Una volta assicurata la sicurezza, collega le cose, accendilo e poi passa alla programmazione dell'host TTS (ARMbasic Target MCU) proprio come si farebbe con molti obiettivi MCU incorporati. Ho registrato un video che illustra la programmazione e il semplice utilizzo del TTS Click. Puoi vederlo qui.
Il codice sorgente di ARMbasic può essere scaricato da qui, un post sul forum con ulteriori dettagli. Coridium ha pubblicato un post sul blog su questi sforzi, a cui puoi accedere facendo clic qui.
Passaggio 3: modifica della sorgente per altri target ARMbasic e varie riflessioni
Non ti lavorerò con i passaggi necessari per modificare il codice sorgente in modo che funzioni con altri obiettivi ARMbasic, se non per indicare che mi dilungo sul farlo in un'abbondanza di commenti sul codice sorgente al suo interno. Prendetevi il tempo necessario per aprire il file tts.bas e leggere quali modifiche sono necessarie se scegliete di trasferire il codice su un altro controller alimentato da ARMbasic.
In allegato qui ci sono alcune immagini che ho scattato durante il ciclo di sviluppo per farlo funzionare.
Lezioni imparate:
- Se disponi di un analizzatore logico con input inutilizzati e disponi di IO di destinazione extra non utilizzati per il lavoro in corso, non aver paura di utilizzare tali IO come strumenti di debug: spruzzare un dimenarsi di un IO in vari punti del codice può essere un enorme aiuto nel rintracciare ciò che funziona e non funziona come previsto, per identificare problemi di temporizzazione stupidi (ad esempio interruzioni che interessano comunicazioni seriali sballate) e per ottenere una migliore comprensione dei tuoi sforzi nel loro insieme.
- Non tutti i controller ARM sono uguali. Questo è ovvio. Tuttavia, ho ottenuto un po' facendo lo sviluppo iniziale su un LPC1765 Coridium SuperPRO. Col senno di poi, ciò che ha reso questa scelta sbagliata è che l'implementazione di questo core ARM ha consentito l'accesso alla memoria non allineato alle parole. Durante il porting del codice C su ARMbasic, le cose sono andate abbastanza bene fino a quando non ho provato a usarlo con un target SAMD21 - si è scatenato l'inferno e le cose sono state bloccate all'inverosimile a causa dell'accesso non allineato durante il riempimento dei buffer, la manipolazione dei flag, il lavoro con la versione ARMbasic di strutture/unioni che mi sono inventato, ecc. È stata una lezione dolorosa. Il punto qui: se si desidera avere codice portabile, sviluppo sul target candidato più restrittivo, solo per assicurarsi di non trovarsi di fronte a drammi alla fine del progetto, quando probabilmente si è più entusiasti di utilizzare i frutti di i loro sforzi..:)
- Il porting del codice C su ARMbasic NON è impossibile. Questo sforzo è stato in gran parte una gigantesca evoluzione dell'addestramento al porting. Se ci si prende il tempo per confrontare i sorgenti C originali con il codice ARMbasic che ho creato, si dovrebbe essere in grado di ottenere alcune idee su come implementare cose che potrebbero non far parte del progetto principale di ARMbasic (cioè Strutture).
- Affronta cose come questa in blocchi gestibili. Per impostazione predefinita, sono uno a cui piace vedere la gratificazione su base regolare. È improbabile che uno sforzo come questi sforzi di porting e sviluppo sia qualcosa da realizzare in una sola notte. Stabilisci obiettivi realistici e lavora per raggiungerli, cercando di non essere sopraffatto dal "quadro generale".
- Un analizzatore logico è stato cruciale in questo sforzo. Sì, ho un'unità DS-Logic+ di fascia medio-bassa, ma posso affermare con enfasi che un LA a 24 MHz con larghezza di banda da 12,50 $ dell'Amazzonia sarebbe stato più che sufficiente. Abbinalo a PulseView di Sigrok (gratuito) (esegue la decodifica del protocollo) e si avrà un sistema molto robusto che dovrebbe funzionare in una vasta moltitudine di scenari come quello che ho cercato di intraprendere con questo progetto. Assicurati di procurarti un'unità con clip di prova o ordina separatamente le clip di prova, poiché sono estremamente vantaggiose (quanto Trumpfeldian).
- Anche una semplice sonda logica è uno strumento molto utile. Nella foto panoramica dell'area di lavoro noterai un'antica sonda logica Archer (Radio Shack) nell'angolo in basso a destra dell'immagine. Sono stato sinceramente sorpreso di scoprire quanto sia utile una cosa del genere ogni giorno, anche con un laboratorio ben attrezzato.
Potrei aver collegato a questi in precedenza in questo, ma non riesco a ricordare e sono troppo pigro per guardare. Ecco un post sul blog che ha un video del modulo TTS in azione (Itaca uChip lo ospitava in quel momento) e il post sul forum ARMbasic dove è possibile scaricare il codice sorgente ARMbasic portato.
Abbi cura di te e divertiti a hackerare!
-MHz
Consigliato:
Vocal GOBO - Scudo smorzatore del suono - Cabina vocale - Box vocale - Filtro di riflessione - Scudo vocale: 11 passaggi
Vocal GOBO - Sound Dampener Shield - Vocal Booth - Vocal Box - Reflexion Filter - Vocalshield: ho iniziato a registrare più voci nel mio home studio e volevo ottenere un suono migliore e dopo alcune ricerche ho scoperto che cosa è un "GOBO" era. Avevo visto queste cose che smorzano il suono, ma non mi rendevo davvero conto di cosa facessero. Ora faccio. ho trovato un y
Convertitore di sintesi vocale Arduino utilizzando LM386 - Progetto Arduino Parlante - Libreria Talkie Arduino: 5 passaggi
Convertitore di sintesi vocale Arduino utilizzando LM386 | Progetto Arduino Parlante | Talkie Arduino Library: Ciao ragazzi, in molti progetti richiediamo ad arduino di parlare qualcosa come l'orologio parlante o di dire alcuni dati, quindi in queste istruzioni convertiremo il testo in parlato usando Arduino
Sintesi vocale retrò. Parte: 12 IoT, Domotica: 12 passaggi (con immagini)
Sintesi vocale retrò. Parte: 12 IoT, automazione domestica: questo articolo è il dodicesimo di una serie sugli Instructables sull'automazione domestica che documentano come creare e integrare un dispositivo di sintesi vocale retrò IoT in un sistema di automazione domestica esistente, incluse tutte le funzionalità software necessarie per abilitare t
Riconoscimento vocale svincolato e sintesi in spagnolo per Arduino: 11 passaggi
Reconocimiento De Voz Desconectado Y Síntesis En Español Para Arduino: This Instructable è disponibile anche in inglese.MOVI significa 'My Own Voice Interface' (Mi propia interfaz de voz) y es un escudo para el Arduino. Con MOVI costruire sui propri loghi di voce per controllare i dispositivi all'interno dell'IDE di Ar
Sintesi vocale dell'altoparlante: 4 passaggi
Altoparlante di sintesi vocale: questo è il modo più semplice che ho trovato per creare un altoparlante di sintesi vocale efficace per un amico sordo. Perché, sai, li rende ancora più fantastici. Non è un progetto di costruzione particolarmente soddisfacente o educativo e richiede l'acquisto di alcuni