K ---- Elektronik ----Schaltungen

Transcription

K ---- Elektronik ----Schaltungen
UNITALK
Page 1 of 5
UNITALK
Die universelle Sprachausgabe
Stand 8.Oktober 2006
Nachdem die Suche nach einem bereits existierenden einfachen Sprachausgabesystem zu keinem befriedigenden
Ergebnis führte, entstand UNITALK . Dabei wurde besonderer Wert darauf gelegt, daß die ausgegebene Sprache
besonders auch für "deutschsprachige Ohren" leicht verständlich sein sollte. Auf alle mir bekannten und für den
anglikanischen Sprachraum produzierten Sprachsynthesizer trifft das nicht zu.
Basis des Systems sind vom Anwender selbst besprechbare Voice-Chips des Herstellers WINBOND. Die verwendete
Typenreihe ISD25xx ist dabei für Gesamtspeicherzeiten von 60, 90 und 120 Sekunden erhältlich, aber ansonsten
identisch zu handhaben.
Neben der Speicherung nur einer Gesamtsprachdatei kann der zur Verfügung stehende Speicherbereich auch auf
mehrere separat nutzbare Teildateien aufgeteilt werden. Sie können über herausgeführte Adresseingänge selektiert
werden. Dieses Verfahren hat jedoch den Nachteil, daß sich für die einzelnen Sprachsegmente eine feststehende
zeitliche Länge ergibt. Wesentlich besser wird der zur Verfügung stehende Speicherbereich dagegen bei Verwendung
des sog. CUEING-Verfahrens genutzt. Hierbei werden die später benötigten Sprachsegmente nur ganz einfach und
ohne Rücksicht auf ihre Länge ( aber natürlich begrenzt durch die Gesamtspeicherkapazität des Chips ) nacheinander
über ein Mikrofon einzeln aufgesprochen und im Speicher des Bausteins abgelegt. Mithilfe einer kleinen Routine kann
jedes einzelne Sprachsegment später wieder gezielt angewählt und ausgelesen werden.
Dieses Verfahren wurde bereits in einem Datenbuch der Firma ISD ( jetzt: WINBOND ) aus dem Jahre 1997
beschrieben. Seinerzeit gestattete es mir die Erstellung einer Software zur Sprachumsetzung der von GPSEmpfängern stammenden und in Standard-NMEA-Protokollen enthaltenen Navigationsdaten. Dabei wurden
Microcontroller-Bausteine des Typs AT89C2051 aus der 8051-Familie verwendet.
Eine Musteransage kann hier abgehört* werden.
* Die zwischen den Zeichenausgaben hörbaren Restgeräusche sind systembedingt und entstehen bei der
Sprachsegmentanwahl im CUEING-Mode.
Abb.1
Auf der Suche nach einem universellen Sprachausgabesystem erinnerte ich mich des damaligen Projektes. Aus
Gründen der Einfachheit wurde zur Steuerung des Voicechips auch ( erst einmal ) wieder ein AT89C2051 benutzt
( Abb.1 ). So entstand eine Version, mit der sich nach Decodierung seriell übertragener asynchroner Datenprotokolle
bis zu 100 Sprachsegmente gezielt ansprechen lassen. Die zur Übertragung wählbaren Datenraten sind 19200bps
( "S1"="offen" ) und 9600bps ( "S1"="geschlossen").
file://K:\--- Elektronik ---\Schaltungen\UNITALK - Die universelle Sprachausgabe\U...
23.11.2006
UNITALK
Page 2 of 5
Abb.2 Musteraufbau der Anordnung gem. Abb1 ( allerdings ohne zusätzlichen NF-Verstärker )
Das benutzte Protokoll ist sehr einfach aufgebaut und setzt sich nur aus dem Header "$VOI," und zwei folgenden
ASCII-Ziffern zusammen. Bei den beiden Ziffern handelt es sich um Dezimalwerte für die Zehner und Einer des
anzusprechenden Sprachsegments. Ein Protokoll zum Aufruf von Sprachsegment 13 muss danach folgendermaßen
aussehen:
$VOI,13
Zum Aufruf eines bestimmten, in einem Chip der Serie ISD25xx abgelegten Sprachsegments, muss der
Hauptprozessor somit nur ein derartiges serielles Kurzprotokoll generieren. Dabei sind Typ und Familie des
verwendeten Hauptprozessors und auch die hierbei benutzte Programmiersprache ohne Belang. Bei Verwendung von
z.B. ATMEGA's kann die Datenaussendung dabei nicht nur über den Ausgang des prozessorinternen HardwareUART's, sondern auch über fast jeden anderen als sog. Soft-UART festgelegten Port erfolgen.
Sollen mehrere Sprachsegmente ( z.B. Ziffernfolgen ) mit möglichst geringem zeitlichen Abstand nacheinander
übertragen werden, so ist es wichtig, daß der Hauptprozessor auch das jeweilige zeitliche Ende der einzelnen
Sprachsegmentausgaben signalisiert bekommt. Dazu dient der Ausgang "EOM" ( end of memory ) bzw. "A", an dem
nach Segmentende jeweils ein negativer Puls von etwa 10mS Dauer ( TTL-Pegel ) ausgegeben wird.
Der Decoder besitzt die seriellen Dateneingänge "E" und "C". Ersterer kann Signale mit RS-232-Pegel verarbeiten
und ermöglicht auf diese Weise ein einfaches Testen des Decoders z.B. nach Verbindung mit dem COM-Port eines
PC's und Aktivierung eines Terminalprogrammes wie "HyperTerminal". Dabei muss die Brücke "D-C" geschlossen
sein.
Bei Direktsteuerung des Decoders durch einen Microcontroller wird man dagegen üblicherweise den seriellen TTLEingang "C" verwenden ( Brücke "D-C" dabei aufgetrennt ).
Wie schon oben erwähnt, ist über Schalter "S1" eine Anwahl der Eingangs-Datenraten 19200bps und 9600bps
möglich. Die Schalterkontakte "S2" bis "S4" sind zur Zeit noch ohne Funktion und für mögliche Erweiterungen
vorgesehen.
Da die niederfrequente Ausgangsleistung des Sprachspeicherchips nicht allzu hoch ist, wurde ein LM386 als NFZusatzverstärker vorgesehen. Bei der Versorgungsspannung von 5V liefert er ca. 300mW-Sprechleistung an einem 8Ohm-Lautsprecher. Wem das noch zu wenig ist ( z.B. für KFZ- oder Bootsnutzung ) der kann hier auch einen
leistungsfähigeren Typ oder eine fertig erhältliche Aktivbox anschliessen.
Die Spracheingabe
Eine berechtigte Frage ist: "Und wie kommen nun meine Sprachsegmente in den Chip?"
Grundsätzlich war zuerst einmal die Überlegung anzustellen, ob sich auch die NUR zur Spracheingabe erforderlichen
Bauteile mit auf der Ausgabeplatine befinden sollten oder nicht. Für beide Varianten gibt es PRO- und CONTRAArgumente. Dabei habe ich mich zur Verwendung einer separaten Eingabeeinheit entschlossen. Nicht zuletzt führt das
zu einem sehr übersichtlichen und einfach zu realisierenden Decoderkonzept. Die Eingabe der Sprachsegmente und
ihre anschliessende Kontrolle erfolgt dagegen völlig separat und benötigt auch keinerlei PC oder
Microcontrollersteuerung. Aus Abb.3 geht die dafür benutzte Schaltungsanordnung hervor.
file://K:\--- Elektronik ---\Schaltungen\UNITALK - Die universelle Sprachausgabe\U...
23.11.2006
UNITALK
Page 3 of 5
Abb.3 Anm.: verfügbare Typen inzwischen: ISD 2560/ 90/ 120
( zur Darstellung in Originalgröße auf Abbildungen klicken )
R1 1k
C1
0.1uF
R2 10k
C2
0.1uF
R3 10k
C3
Elko
220uF/16V
R4 5K1
C4
0.1uF
R5 470k
C5
Elko 4u7/16V
R6 1k
C6
1nF
R7 100k
C7
0.1uF
R8 100k
C8
Elko 10uF/16V
R9 100k
C9
Elko 10uF/16V
R9 100k
C10 0.1uF
P1 470 Ohm
Taster für
"ACTION"
D1 1N4148 o.ä.
Taster für
"RESET"
LED
Schalter für
"PLAY/REC"
78L05 ( 5VIC-Fassung
Spannungsregler)
28pol. DIL
Bauteileliste für Programmer
zuzüglich Electr.-Mikrofon ( -kapsel ) und Lautsprecher bzw. Ohrhörer
Abb.3 zeigt das Schaltbild der separaten Einheit zum Aufsprechen auf die Sprachspeicherchips und zum
Kontrollieren ihrer Inhalte. Zu Beginn sollte sich der Schalter PLAY/REC in der PLAY-Stellung befinden ( also
geöffnet sein ). Wenn man daraufhin kurz nacheinander die Tasten "RESET" und "ACTION" betätigt, sollte bei
einem vorher noch nicht besprochenen Chip im Lautsprecher schon einmal ein Grundrauschen hörbar werden. Ist das
der Fall, dann kann mit dem Besprechen der einzelnen Segmente begonnen werden. Dazu schliesst man den
PLAY/REC-Schalter, drückt kurz die RESET-Taste und spricht das erste Segment, indem man die Taste ACTION
während des Sprechens gedrückt hält. Ihr Loslassen beendet die erste Segmenteingabe. Durch mehrmaliges Drücken
der gleichen Taste können anschliessend auch noch alleweiteren benötigten Segmente gespeichert werden. Werden die
Sprachsegmente für die Ziffern 0-9 benötigt, so dürfte es Sinn machen, sie in der gleichen Folge auch den
Sprachsegmenten zuzuordnen.
Nachdem der Eingabevorgang beendet ist, wird PLAY/REC wieder geöffnet und die RESET-Taste wieder einmal
kurz gedrückt. Anschliessend können alle gespeicherten Sprachsegmente nacheinander jeweils durch einen kurzen
Druck auf die Taste ACTION wiedergegeben und damit auch kontrolliert werden. Stellt man dabei noch Fehler fest,
so kann die gesamte Aufsprechprozedur ( fast ) beliebig oft wiederholt werden.
Nach ein wenig Übung wird man feststellen, daß das Ganze kinderleicht vonstatten geht. Nach einigen praktischen
Versuchen wird man auch gelernt haben, wie man bei der Spracheingabe mit der ACTION-Taste umgehen muss,
damit die einzelnen Sprachsegmente ohne viel zeitlichen Überhang gespeichert werden.
file://K:\--- Elektronik ---\Schaltungen\UNITALK - Die universelle Sprachausgabe\U...
23.11.2006
UNITALK
Page 4 of 5
Noch ein Tipp: Zur Unterdrückung hässlicher Zischlaute kann ein um das Mikrofon gewickeltes dünnes ( Taschen) nützliche Dienste leisten.
DOWNLOADS
Hier können die AT89C2051-HEX-Codes für den beschriebenen UNITALK-Decoder und auch für eine Version zur
Sprachausgabe von GPS-Daten heruntergeladen werden.
Interessenten für bereits programmierte Prozessoren sollten sich bei mir per E-Mail melden.
PLATINENLAYOUTS
Andree aus Bremen hat sich schon einmal mit dem ISD-Programmer beschäftigt:
Abb.4a-4b Programmer für ISD2560/90/120
( zur Darstellung in Originalgröße auf Abbildungen klicken )
ALTERNATIVLÖSUNGEN
Die Firma http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=67&products_id=21 bietet
eine ähnliche Sprachausgabelösung unter dem Namen "RN-SPEAK" an. Dabei können auf elegante Weise bis zu drei
Sprachchips des Typs ISD25xx mit insgesamt bis zu 6 Minuten Sprechzeit programmiert und gesteuert werden. Für
meine Anwendung schien mir dieses Konzept zwar etwas überdimensioniert zu sein, aber nachdem es den dort zur
Steuerung benutzten ATMEGA-8 Microcontroller auch einzeln gibt, habe ich ein Schaltbild erstellt ( Abb.5 ), das eine
auf den Betrieb mit nur EINEM Sprachspeicherchip abgespeckte Version zeigt. Durch Trennung des steuernden
Prozessors vom Sprachbord und separater Anordnung der nur zum Aufsprechen benötigten Bauteile, ergeben sich
hierbei die unterschiedlichsten Konfigurationsmöglichkeiten. Bei der gewählten Anordnung können neue
Sprachsegmente entweder mit Unterstützung der RN-Speak-Firmware, mit einem eigenen Programm oder auch nur
mithilfe des alternativ nutzbaren einfachen REC/PLAY-Adapters eingelesen und kontrolliert werden. Dazu ist auch
der z.B. über eine Leiste ansteckbare RECORD-Adapter erforderlich.
Der Wiedergabebetrieb kann wiederum über die RN-SPEAK-Firmware und die von ihr bereitgestellten Steuerbefehle
erfolgen. Hierfür stehen eine serielle und eine I2C-Schnittstelle bereit. Mit einer geeigneten, in das jeweilige
Ausführungsprogramm eingebauten Routine ist jedoch auch eine direkte Steuerung des Sprachchips durch einen
entsprechend programmierten Prozessor beliebigen Typs möglich. Solange Sprache nur wiedergegeben werden soll,
wird der RECORD-Adapter nicht benötigt und kann entfernt werden.
file://K:\--- Elektronik ---\Schaltungen\UNITALK - Die universelle Sprachausgabe\U...
23.11.2006
UNITALK
Page 5 of 5
Abb.5 An den seriellen TTL-Ein/Ausgängen kann bei Bedarf noch ein Pegelwandler MAX232 o.ä. angeschlossen
werden
( Version vom 4.10.2006 ohne Gewähr )
Bereits im Jahre 2002 hatte ich auch ein Projekt namens VOLTTALK realisiert. Es dient der Sprachausgabe von
Spannungswerten und kann z.B. im Modellbau verwendet werden. Als Sprachspeicher wurde mit dem 20Sekundenchip ISD1420 dabei ein gegenüber den Chips aus der ISD25xx-Serie kleinerer ( und preiswerterer ) Bruder
eingesetzt.
http://www.kh-gps.de/volttalk.htm
file://K:\--- Elektronik ---\Schaltungen\UNITALK - Die universelle Sprachausgabe\U...
23.11.2006