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