Aus RN-Wissen.de
Wechseln zu: Navigation, Suche


RNSpeakFoto.jpg

RN-SPEAK - Sprachausgabe mit RS232- und I2C-Ansteuerung Diese Anleitung bezieht sich auf Platinen-Version 1.0 und 1.1 mit neuester Firmware 2.0 oder höher. Was unterscheidet einen Roboter von einer Maschine? Ein Punkt ist sicherlich die Kommunikation! Schlaue Roboter müssen einfach sprechen können ;-) Sprache macht den Roboter nicht nur interessanter, abwechslungsreicher, sondern bietet durchaus auch echte Vorteile. So kann ein Roboter Messwerte, Uhrzeit oder Betriebszustand einfach von sich aus melden, ohne dass ständig ein Display überwacht werden muss.

Diagramm zu RN-Speak

Aus einer Anregung im Roboternetz entstand dieses Board. Es nutzt die modernen ISP-Sprachbausteine, welche Sprache 100 Jahre speichern können, auch ohne Strom!


Als hier die Leistungsmerkmale auf einen Blick

  • Sprachboard kann mit ein, zwei oder drei Sprachchips vom Typ ISD 2590 bestückt werden (somit ergibt sich eine Aufzeichnungskapazität von bis zu 4 ½ Minuten)
  • Bis zu 255 unterschiedliche Messages können aufgezeichnet werden. Wahlweise ganze Sätze oder Wörter
  • Das Bespielen des Sprachboards ist kinderleicht. Eine mitgelieferte PC-Software überträgt WAV-Dateien in Sekunden auf das Board. Keine umständliche Sound-Bearbeitung etc., sondern einfach WAV-Dateien im Dialog auswählen, Board mit RS232 verbinden und Board neben PC legen. Das war es! Eine Statistik mit Messagecode und Messagelänge kann ausgedruckt werden.
  • Die I2C- und RS232-Schnittstelle wurde angeglichen, nun sind nahezu die gleichen Befehle per I2C oder RS232 verwendbar
  • Auch die Aufnahmesteuerung ist nun per I2C oder RS232 machbar
  • Pause-Befehl in Schritten von 20ms bis 5 Sek genau definierbar
  • Jetzt auch Rückmeldung, wenn Nachrichten ausgesprochen wurden. Damit kann die Sprache besser mit dem Hauptprogramm synchronisiert werden.
  • Per I2C kann abgerufen werden, wieviel Spachbefehlsbytes von RN-Speak noch abgearbeitet werden müssen.
  • Verschiedene Baudraten einstellbar; frei 300, 2400, 9600, 19200 und 38400 Baud
  • I2C-Slave-ID per I2C oder RS232 beliebig änderbar. Somit können auch mehrere Boards kombiniert werden
  • Die eingestellte Baudrate und Slave-ID werden fest im EEPROM gespeichert
  • Ringbuffer für I2C-Befehle, somit schneller Bustakt (Standard 100 Mbit I2C Hardwareunterstützung)
Schaltplan zu RN-Speak
Fehler beim Erstellen des Vorschaubildes: Datei fehlt
Bestückungsplan zu RN-Speak
  • Alternativ kann das Board auch durch einfachen Tastendruck besprochen werden
  • Kein Umschalten zwischen RS232/I2C oder Tasten mehr notwendig. Alle Schnittstellen werden gleichzeitig überwacht, dies erleichtet die Bedienung und den Test erheblich
  • Übersichtlichere Rückmeldungen per RS232. Mit einem Terminalprogramm lassen sich per RS232 sogar die I2C-Bus-Kommandos und -Rückmeldungen überprüfen
  • Einstellbare Aufnahmeverzögerung, um den Chip optimal besprechen zu lassen
  • Einfache Verbindung zu einem Controller oder PC über RS232- oder I2C-Schnittstelle
  • Controller (wie z.B. das RNBFRA-Board, RN-Control, RN-Mega8 aber auch C-Control etc) können über einfachen I2C-Befehl bestimmte Messages oder Wörter kombiniert ausgeben lassen.
  • Ansteuer-Beispiele für RN-Control in der Doku und auf Robotikhardware-CD
  • Kann Huckepack mit anderen Roboternetzboards verschraubt werden
  • Keine Stromversorgung notwendig, das Board wird über den I2C-Bus mit Energie versorgt. Wird der I2C-Port nicht genutzt, so benötigt man 5V!
  • Das Board verfügt über einen zusätzlichen NF-Verstärker, damit auch in einem lauten Umfeld genügend Power für einen größeren Lautsprecher vorhanden ist. Die Lautstärke ist einstellbar
  • Das Board verfügt über eigenes Betriebsystem und kann somit auch bei Bedarf umprogrammiert werden
  • Nur halbe Europakartengröße (RN-Definitionen)

Aufbau und Anwendung

Der Aufbau der Schaltung ist durch die vorgefertigte Platine eigentlich völlig problemlos auch von Elektronik-Einsteigern zu bewerkstelligen. Durch den Bestückungsdruck und die Bestückungsliste, etwas weiter hinten in dieser Dokumentation, ist der Aufbau unkritisch. Aufgrund moderner Bauteile hält sich die Anzahl der Kleinteile in Grenzen, weshalb die Schaltung meist in ca. 30 bis 60 Minuten aufgebaut ist.

Dennoch einige wichtige Anmerkungen:

  1. Auf der Platine sind die Brücken J1 und J3 (neben dem Mega8) eingezeichnet. Wird die Firmware (Betriebssystem im Controller Mega8) Version 1.3 oder höher eingesetzt, so müssen die Lötbücken J1, J2 und J3 eingelötet werden. Lediglich bei älteren Firmware-Versionen dürfen diese Brücken nicht eingelötet werden. Die Firmware-Version ist entweder als Aufkleber auf dem Controller oder kann mit einem Terminalprogramm am RS232-Eingang abgerufen werden.
  2. Die eingezeichnete Brücke I2Cpower sollte gewöhnlich eingelötet werden, falls die Karte vom I2C-Bus mit Strom versorgt werden soll. Dazu Näheres bei der Beschreibung der Anschlüsse etwas weiter hinten in dieser Dokumentation.
  3. Unbedingt darauf achten das der Netzwerkwiderstand RN1 richtig herum eingelötet wird. Der weisse Punkt auf dem Bauteil muss auf die Seite wo die kleine "1" auf der Platine steht.
  4. Wird das Board über Robotikhardware.de bestellt, dann ist der MEGA8-Controller auf der Karte bereits programmiert. Sie müssen keine AVR-Kenntnisse haben, um das Board zu benutzen. Sie können es bequem auch von ganz anderen Controllern, wie C-Control, C-Control II, aber auch dem RNBFRA-Board ansteuern. Die Verbindung zum Controller, der dieses Board steuert, erfolgt nur über den I2C-Bus (10-poliger Stecker, wobei nur 2 Drähte und 5V Spannung notwendig sind)
  5. Sollen Firmware-Updates eingespielt werden, so ist ein sogenannter ISP-Adapter notwendig. Firmware-Updates sind gewöhnlich etwa 3-6 Monate nach dem Kauf kostenlos (danach fällt eine geringe Gebühr an, die Gebühr ist leider notwendig, damit ein erhöhter Anreiz besteht, die Firmware ständig zu verbessern). Firmware-Anfragen dazu mit Rechnungsnummer an support@robotikhardware.de stellen.
  6. Zum Lieferumfang gehört gewöhnlich ein Sprachchip mit Platz für 90 Sekunden Sprache. Weitere 2 Sprachchips können einfach eingesteckt werden, um die Zeit zu erhöhen. Jedoch bekommt man auch bei 90 Sekunden schon eine ganze Menge nützlicher Messages drauf!
  7. Das Board ist an sich für 3 Sprachchips konzipiert. Die Sprachchips können über robotikhardware.de nachbestellt werden. Werden weniger als 3 Sprachchips eingesetzt, so müssen in die leeren Fassungen insgesamt 3 Widerstände eingesteckt werden, damit die Funktion der fehlenden Chips überbrückt wird. Ansonsten kann es zu Hängern oder unvollständigen Sprachausgaben kommen. Auf den Bildern kann man ersehen, wo die drei 5k-Widerstände angesteckt werden müssen:


RNSpeakFotoWiderstand1.jpg RNSpeakFotoWiderstand2.jpg
Ein Widerstand steckt in Pin 28 und 25 (jede freie Fassung) und ein Widerstand in Pin 25 und Pin 22 von ISD Fassung 3. Bei voller Bestückung mit drei Sprachchips werden keine Widerstände gebraucht!

Inbetriebnahme

Hat man das Board zusammengebaut und mitgeliefertes Mikrofon und Lautsprecher angeschlossen, so kann man es wahlweise über den Power-Anschluss oder den I2C-Bus mit 5V Spannung aktivieren.

Ab Firmware 2.0 gibt es bei dem Boad ja keine verschiedenen Betriebsmodis mehr. Das bedeutet, das Board kann direkt nach dem Start wahlweise per RS232, per I2C oder mit Tasten bedient werden. Eine Umschaltung ist nicht mehr notwendig. Es versteht sich von selbst, dass man natürlich vermeiden sollte, Befehle gleichzeitig von mehreren Schnittstellen zu senden. Aber nacheinander können diese durchaus von verschiedenen Schnittstellen gesendet werden.

Für einen ersten Test sollte man das Board am besten erst mal mit den Tasten ausprobieren:

  1. Drücken Sie als erstes einmal die Taste NEXT/RESET (bei älteren Boards nur mit NEXT beschriftet).Diese Taste löst einen Reset auf den Sprachchips aus und stellt den internen Nachrichtenzeiger auf die erste Nachricht. Beim Drücken blinkt kurz die grüne LED auf.
  2. Da gewöhnlich noch keine Nachricht auf den Sprachchips gespeichert ist, nehmen wir nun eine auf. Drücken Sie dazu die Taste RECORD und halten Sie diese fest, während Sie eine Nachricht auf das Board sprechen. Beenden Sie das Aufsprechen, indem Sie die Taste loslassen. Durch eine rote LED wird angezeigt, dass das Board gerade im Aufnahmemodus ist.
  3. Wiederholen Sie Schritt 2 einigemale, um mehrere Nachrichten nacheinander aufzusprechen. Ist nur ein Chip vorhanden, so können insgesamt 90 Sekunden aufgesprochen werden. Bei drei Chips 270 Sekunden. Sie brauchen die Zeit aber nicht genau zu überwachen, passt nix mehr drauf, so wird automatisch auch nix mehr gespeichert – es wird also nix überschrieben. Sie werden sich wundern, wieviel Text in drei Chips hineinpasst, 270 Sekunden sind eine Menge.
  4. Nachdem nun mehrere Nachrichten aufgesprochen wurden, drücken Sie wieder einmal die Taste NEXT (für Reset), um den Zeiger auf die erste Nachricht zurückzustellen.
  5. Nun drücken Sie die Taste PLAY, um die erste Nachricht anzuhören. Wenn Sie nochmals Play drücken, werden Sie die nächste Nachricht hören. Das Ganze können Sie so oft wiederholen bis Sie alle Nachrichten abgehört haben

Somit kennen Sie nun bereits die Grundfunktionen der Tasten und können damit ein wenig experimentieren. Sie können zum Beispiel auch Nachricht überschreiben indem Sie vorher nicht mit NEXT auf die erste Nachricht zurückschalten. Allerdings ist das gezielte Überschreiben einzelner Nachrichten nicht so ganz einfach, denn fällt diese kürzer als die letzte aus, so bleibt der Rest als weitere Nachricht erhalten. Es ist daher zu empfehlen, stets den ganzen Chip neu zu besprechen. Sie könnten auf die geschilderte Weise also den ganzen Chip mit interessanten Nachrichten besprechen, welche später gezielt von einem Controller ausgegeben werden. Sie können auch Bruchteile von Wörtern besprechen. Besprechen Sie beispielsweise folgende Messages „ein“ , „zwei“, „und“, „zwanzig“. Das wären 4 Messages. Später können Sie diese so schnell hintereinander aussprechen lassen, das sie damit neue Wörter wie „einundzwanzig“, „zweiundzwanzig“ generieren können. Das spart Speicherplatz und erlaubt auch individuelle Messwerte auszugeben.

Gewöhnlich ist allerdings das manuelle Besprechen mit den Tasten auf Dauer etwas mühselig. Oft verschwendet man dadurch auch Speicherplatz, da man nicht genau zur rechten Zeit die Record-Taste loslässt. Wesentlich bequemer und genauer ist es mit der mitgelieferten Software möglich. Dies wird auf der nächsten Seite beschrieben.

Automatisches Aufnehmen von Messages mit dem PC

Wenn Sie mehrere Nachrichten genau aufsprechen möchten, so geht das am Bequemsten mit dem PC und der mitgelieferten PC-Software RN-SPEAK. Diese Software befindet sich auf der mitgelieferten CD-ROM im Verzeichnis RNSPEAK. Für die Installation rufen Sie einfach das Programm SETUP.EXE in diesem Verzeichnis auf. Das Programm läuft mit Windows 95/98/Me/2000/XP. Also nahezu auf jedem PC! Achten Sie darauf, dass Sie stets die neueste Version (derzeit 2.0) der Überspielsoftware verwenden, zumal in der ersten Version noch ein Bug vorhanden war. Die aktuelle gibt's z.B. kostenlos im Roboternetz-Download-Bereich. Die Software sollte nach Möglichkeit am COM-Port 1 verwendet werden (die COM2-Unterstützung ist derzeit nicht ausgetestet). Der COM-Port darf nicht von anderen Programmen gleichzeitig genutzt werden, ansonsten erscheint eine Fehlermeldung.

Nach der Installation rufen Sie das Programm RNSPEAK über das START-Menü in Windows auf. Es sollte sich dann in etwa so melden:


Rnspeakaufnahmemessages.gif


Die Bedienung des Programmes ist denkbar einfach. Als erstes müssen Sie den Button „Wähle Verzeichnis“ anklicken und dann das Verzeichnis wählen, in dem die zu übertragenden Dateien im WAV-Format gespeichert sind. Jede Message muss aus einer WAV-Datei bestehen, egal ob es ein Satz oder ein Wort ist. Solche WAV-Dateien kann man sich entweder über den Windows-Audiorecorder selbst erstellen. Interessanter sind aber Sprachtools, welche Texteingaben in Sprache umwandeln, da eine andere Stimme immer irgendwie besser klingt ;-) Im Roboternetz sind dazu einige Empfehlungen zu finden, unter anderem ein Link, mit dem man WAV-Dateien über den Browser generieren und speichern kann.

Sie können beliebig viele WAV-Dateien in dem Verzeichnis ablegen, man kann auch nur eine bestimmte Auswahl davon übertragen.

Als nächstes müssen die Übertragungsparameter festgelegt werden. Über ein RS232-Kabel (Passendes gibt es bei robotikhardware.de) muss das Board ja mit der RS232 des PC verbunden werden. Der entsprechende Port muss also gewählt werden, gewöhnlich ist das COM1. Die Übertragungsgeschwindigkeit sollte nicht geändert werden, da RN-SPEAK in der Grundeinstellung ebenfalls 9600 Baud nutzt.

Jetzt sollten Sie den Button „Übertrage Sprachdateien auf Sprachchip“ klicken.

Nun erscheint in etwa folgender Dialog:

Rnspeakaufnahmemessagesdialog.gif


In der linken Listbox erscheinen alle WAV-Dateien, welche im gewählten Verzeichnis zur Verfügung stehen. Die rechte Listbox ist erst mal leer, sie enthält alle Dateien, die übertragen werden sollen, und zwar in der Reihenfolge, in der sie auch übertragen werden sollen. Die Reihenfolge bestimmt die Message-Nummer, die später zum Abruf der Nachricht gebraucht wird.

Die Auswahl der Messages ist denkbar einfach. Man klickt in der linken Box die zu übernehmende Datei an und betätigt die Schaltfläche mit dem „Pfeil nach rechts“. Auf diese Weise lassen sich beliebig viele Dateien auswählen. Will man die Datei an eine bestimmte Position übernehmen, muss in der rechten Listbox entsprechend der Einfügebalken gesetzt werden. Auf gleiche Weise kann man auch wieder Dateien aus der Auswahl entfernen, einfach durch Klick markieren und die Schaltfläche mit dem Pfeil nach links klicken.

Hat man eine bestimmte Auswahl in der rechten Listbox zusammengestellt, so kann man diese Kombination auch mit der Schaltfläche „Sortierfolge speichern“ unter einem beliebigen Namen abspeichern. Über „Sortierfolge laden“ kann man dadurch jederzeit wieder eine bestimmte Folge laden und erneut aufspielen oder verändern.

Um die Auswahl zu testen, betätigen Sie die Schaltfläche „Teste Auswahl“. Dadurch werden alle ausgewählten Dateien nacheinander auf dem PC abgespielt, jedoch nicht übertragen! Dies kann man nutzen, um die Lautstärke beim PC richtig einzustellen und um die WAV-Dateien zu überprüfen. Anschließend können Sie über „Drucke Statistik“ auf dem angeschlossenen Standard-Drucker eine Liste mit allen WAV-Dateien, deren zugeordnete Message-Nummer und deren Länge (Zeit) ausdrucken lassen. Zudem wird dadurch die Gesamtlänge aller Messages addiert und ausgedruckt. Dadurch können sie prüfen, ob alle Nachrichten auf die vorhandenen Sprachchips passen. Eine solche Liste sollte man sich immer ausdrucken, um später schnell ersehen zu können, mit welchem Befehl man welche Message über den I2C-Bus oder RS232 ausgeben lassen kann.


Nun ist es soweit, jetzt können wir die Nachrichten auf das Board übertragen. Sorgen Sie dafür, dass in der Umgebung einige Minuten keine Fremdgeräusche zu vernehmen sind und klicken Sie auf „Übertrage Sprachdateien“.

Danach werden Sie nochmals aufgefordert das Board über die RS232 zu verbinden und das Kondensatormikrofon in die Nähe des PC-Lautsprechers zu legen. Gewöhnlich hat sich gezeigt, dass eine Entfernung von ca. 20 bis 40 cm eine sehr gute Aufzeichnungsqualität ergibt. Dies ist natürlich auch abhängig von ihrer Lautsprecherqualität und der eingestellten Lautstärke beim PC. Alternativ könnte man den Mikrofon-Eingang auch über einen Widerstand (ca. 10k bis 100k) mit dem Line-Ausgang des PCs verbinden, jedoch ist das in der Praxis nicht notwendig. Haben Sie das Board korrekt angeschlossen und entsprechend positioniert, so können Sie also diesen Hinweis mit OK bestätigen Wenn alles richtig angeschlossen ist und die richtige Schnittstelle gewählt wurde, dann werden nun im Schnelldurchlauf alle Nachrichten hintereinander ausgegeben, wobei automatisch das Board genau zur rechten Zeit auf Record geschaltet wird. Sie brauchen sich dabei um nix zu kümmern, müssen nur leise sein. Wundern Sie sich nicht, wenn das Übertragungsprogramm jede Nachricht zweimal spricht. Dies wird nur zur Überprüfung und zur Verkürzung der WAV-Ladezeiten gemacht. Aufgenommen wird die Nachricht natürlich nur einmal. Nach wenigen Minuten oder Sekunden ist die Aufnahme beendet und die Nachrichten können über die Taste Play am Board getestet werden. Ist die Qualität noch nicht gut genug, kann die Position des Mikrofons oder die Lautstärke am PC verändert werden. Gewöhnlich hat man nach wenigen Minuten eine perfekte Aufzeichnung und kann die RS232-Verbindung wieder trennen und die PC-Software beenden.

Ansteuerung per RS232 und I2C

Um gezielt Messages ausgeben zu lassen, kann das Board neben dem I2C-Bus auch über RS232 gesteuert werden. Um das zu demonstrieren benötigen Sie ein Terminalprogramm, das auch Eingaben senden kann, Wenn Sie zufällig Bascom nutzen, können sie das eingebaute Terminalprogramm aktivieren. Verbinden Sie das Board mit der RS232 und aktivieren Sie das Terminalprogramm. Wenn Sie die Stromversorgung des Boards kurz unterbrechen, so dass ein Reset ausgelöst wird (kurz blinkende LEDs zeigen das an), dann sollte bereits eine kurze Copyright-Meldung mit ein paar Hinweisen erscheinen. Nun können Sie aber auch Befehle direkt im Terminalprogramm eingeben. Alle Befehle beginnen mit den Buchstaben rn. Geben Sie beispielsweise folgende Kombination ein rnh . Dieser Befehl steht für „Hilfe“. Sofort nach der Eingabe werden im Terminalprogramm einige Hinweise erscheinen. Die komplette Befehlsübersicht ist aus Platzgründen allerdings nicht mehr über rnh abrufbar, dafür gibt's ja diese Anleitung.

Auflistung aller RS232-Befehle (ab Firmware 2..0)

Befehl Beschreibung
rnq Message Pointer Reset - Der Zeiger wird auf die erste Message gestellt

Um Das Abspielen oder Aufnehmen ab Position 1 sicherzustellen Beispiel: Print "rnq"

rnp Spielt nächste Message ab

Wenn Message komplett abgespielt wurde, wird dies durch "Sound Ready" bestätigt Beispiel: Print "rnp"

rnm x Spielt eine bestimmte Message 1 bis 255 ab

x gibt hier die Nummer der Message an (Achtung, x ist ein ein Byte ASCII-Wert) Wenn Message komplett abgespielt wurde, wird dies durch "Sound Ready" bestätigt Beispiel: Print "rnm";chr(5) Bitte beachten das der Wert X nicht als Zeichenfolge sondern als einzelnes Byte gesendet werden muss. Nicht jedes Terminalprogramm erlaubt dieses. Wenn Sie das unbedingt mit einem Terminalprogramm testen wollen, empfehlen wir AVRTERM.

rna Die Aufnahme einer Message wird gestartet

Beispiel: Print "rna"

rns Die Aufnahme einer Message wird gestoppt

Beispiel: Print "rns"

rnh Copyright, Hinweis und I2C-Bus Slave ID anzeigen

Beispiel: Print "rnh"

rnc Eine Kennung ausgeben. Über diese kann Board erkannt werden

Beispiel: Print "rnc"

rnv Gibt nur Firmware Versionsnummer aus

Beispiel Print "rnv"

rni x Die I2C-Bus Slave ID von RN-Speak wird beliebig geändert. Dadurch können meherere Boards an einem Bus genutzt werden

x gibt hier die Nummer der SlaveID an (Achtung, x ist ein ein Byte ASCII-Wert) Wenn Slave ID nicht korrekt angegeben wurde, wird "Error" gemeldet ansonsten "ok" bestätigt Beispiel: Print "rni";chr(40)

rno x Fügt eine Pause definierter Länge ein (20 Millisekunden bis 5 Sekunden)

x gibt die Zeit an (x multipliziert mit 20ms ergibt die Pausezeit) Wenn die Pause beendet wurde, wird dies durch "Pause Ready" bestätigt Beispiel: Print "rno";chr(50) 'ergibt ca 1 Sek. Pause

rnb x Ändert die Standard Baudrate und speichert diese im EEPROM

x gibt die Baudrate an 1=300 Baud, 2=2400 Baud, 3=9600 baud, 4=19200 Baud, 5=38400 Baud Beispiel: Print "rno";chr(50) 'ergibt ca 1 Sek. Pause

rnr x Aufnahmeverzögerung einstellen

Manchmal ist es wünschenswert, dass die Aufnahme nach dem Senden des Aufnahmebefehls etwas verzögert erfolgt. Zum Beispiel, um die Ladezeiten von wav-Dateien einzukalkulieren, falls man den Chip automatisch bespielt. Über diesen Befehl lässt sich eine Aufnahmeverzögerung genau einstellen. Die Einstellung bleibt fest im EEPROM gespeichert. x ist die Verzögerung (x mal 10 Millisekunden ergibt die Zeitverzögerung) Beispiel: Print "rnr";chr(100) 'ergibt ca 1 Sek. Verzögerung nach Aufnahmebefehl


Natürlich können diese Befehle auch von einem Controller oder Basic-Programm erzeugt werden. Dadurch lässt sich das Board optimal fernsteuern. Auch die mitgelieferte Überspielsoftware nutzt diese Befehle. Wenn es nur um die Wiedergabe von Nachrichten geht, so kann das Board jedoch noch ein wenig komfortabler per I2C-Bus gesteuert werden.

Ansteuerung per I2C-Bus

Der I2C-Bus eignet sich optimal zur Steuerung des Boards, weil er sehr schnell ist und zudem auf nahezu jedem Controller-Board vorhanden ist. Man benötigt nur 2 Leitungen, wobei aber der 10-polige Stecker entsprechend dem Roboternetz-Standard empfehlenswert ist, denn dort ist auch die Betriebsspannung vorhanden. Durch Ändern der I2C-Slave-Adresse könnte man dort auch mehrere Boards kombinieren und so die Sprachkapazität erheblich steigern.

Die Standard I2C-Slave-Adresse von RN-SPEAK ist Hex 52. Sie lässt sich aber per Terminalprogramm oder I2C-Bus selbst jederzeit ändern.

Im Gegensatz zu früheren Versionen muss ab Firmware 2.0 kein spezieller I2C-Mode aktiviert werden. Das Board muss nur mit dem I2C-Bus verbunden werden, danach reagiert es bereits auf die I2C-Bus-Befehle. Die Ansteuerung wurde mit der Firmware 2.0 erheblich vereinfacht. Es gibt nun keine speziellen I2C-Ansteuerbefehle mehr. Die Befehlstabelle der letzten Seite ist sowohl für die RS232-Ansteuerung als auch die I2C-Bus-Ansteuerung gültig. Es werden also stets die gleichen Kommandos verschickt. Dadurch merkt man sich die Befehle zum einen besser und zum anderen können die Befehle sogar per RS232 überwacht werden. Wenn Sie also Probleme mit der I2C-Verbindung haben, schließen sie einfach zusätzlich ein Terminalprogramm an RN-Speak an und beobachten Sie, wie rn-speak reagiert.

I2C-Befehle werden von RNSPEAK automatisch in einem Ringbuffer (derzeit 100 Byte) zwischengespeichert, das bedeutet, Sie können mehrere Befehle / Nachrichten direkt hintereinander senden, Ihr Hauptprogramm wird nicht blockiert bzw. gestoppt. RNSPEAK arbeitet automatisch die Befehle nacheinander ab. Das bedeutet, dass die erste Message immer erst bis zu Ende ausgegeben wird bevor die nächste abgespielt wird. Da keine Pausen eingefügt werden, können auch neue Wortkombinationen generiert werden. Natürlich können auch Pausen eingefügt werden, den entsprechenden Befehl haben Sie ja sicher schon in der Befehlstabelle gesehen.

Da die RS232-Befehle und I2C-Befehle nun identisch sind, brauchen wir hier keine weitere Befehlstabelle auflisten (wie es noch bei der letzten Version notwendig war). Allerdings werden wir gleich noch zwei Beispielprogramme in Bascom-Basic (am Beispiel von rn-control) auflisten. Vor allem das zweite Beispiel dürfte interessant sein, denn hier wird gezeigt, wie man per I2C jetzt auch den Status des RN-Speak-Zwischenspeichers abrufen kann. Damit lassen sich Nachrichten nun wesentlich besser mit dem Hauptprogramm synchronisieren.

Programmbeispiele

'###################################################
'rnspeakbeispiel1.bas
'Beispiel: zu RN-Speak
'Das Minimalbeispiel demonstriert wie einfach das
'Sprachboard RN-Speak mit RN-Control per I2C angesprochen wird
'Es werden einige Messages direkt nacheinander ausgesprochen
'und zwischen zwei Messages eine Pause eingelegt
'Das Hauptprogramm wird während der Aussprache weiter ausgeführt
'es wird somit nicht gewartet bis alles ausgesprochen wurde.
'
'Dieses Beispiel benötigt RN-Speak mit Firmware 2.0 oder höher
'Autor: Frank
'Anleitung findet man unter http://www.Roboternetz.de im Download-Bereich
'oder www.robotikhardware.de
'Weitere Beispiele sind im Roboternetz gerne willkommen!
'##############################################################


' ------------- Hier die üblichen RN-Control Anweisungen --------------

$regfile = "m32def.dat"
$hwstack = 32
$framesize = 32
$swstack = 32
$crystal = 16000000                                         'Quarzfrequenz
$baud = 9600

Config Scl = Portc.0                                        'Ports fuer IIC-Bus
Config Sda = Portc.1

Sound Portd.7 , 400 , 450                                   'BEEP
Sound Portd.7 , 400 , 250                                   'BEEP
Sound Portd.7 , 400 , 450                                   'BEEP
' ------------- Ende der üblichen RN-Control Anweisungen --------------


'Das Hauptprogramm zum Ansteuern von RN-Speak Beispiel

Declare Sub Rnspeak_playmsg(byval Message As Byte)
Declare Sub Rnspeak_pause(byval Milli As Word)

Const Rnspeakslaveid = &H52                 'Beliebig änderbar

   Wait 2                                  'Warte bis RN-Speak bereit
                                           '(falls Board gerade erst mit Spannung versorgt wurde)

   Print "Testprogramm"
   I2cinit

   Rnspeak_playmsg 1
   Rnspeak_pause 1000                       '1000 Milisekunden (1 Sek) Pause
   Rnspeak_playmsg 2
   Rnspeak_playmsg 3
   Rnspeak_playmsg 4
   Rnspeak_playmsg 3
   Rnspeak_playmsg 2
   Rnspeak_playmsg 1
   Print "Fertig"
End

'Hilfreiche Unterfunktionen für RN-Speak (weitere können leicht definiert werden)

'Funktion, die eine bestimmte Message ausspricht
Sub Rnspeak_playmsg(byval Message As Byte)
Local Befehle As String * 4
  Befehle = "rnm" + Chr(message)
  I2csend Rnspeakslaveid , Befehle , 4
End Sub


'Funktion, die eine Pause zwischen zwei Messages legt
Sub Rnspeak_pause(byval Milli As Word)
Local Befehle As String * 4
Local Wert As Word
Local Bwert As Byte

  Wert = Milli / 20
  Bwert = Wert
  Befehle = "rno" + Chr(bwert)
  I2csend Rnspeakslaveid , Befehle , 4
End Sub


Das obere Beispiel demonstriert, wie man sich am besten zwei oder mehr Funktionen definiert, welche die I2C-Anweisungen für RN-Speak senden. Mit Hilfe der Funktionen wird das Hauptprogramm sehr kurz und übersichtlich. Achten Sie mal beim Ausführen des Programmes wie schnell das Programmende erreicht ist, obwohl die Nachrichten noch immer von RN-Speak ausgesprochen werden. Somit können also auch zeitkritische Dinge mit Sprache unterlegt werden, das Hauptprogramm wird ja quasi nicht gebremst.

Manchmal ist es jedoch sinnvoll zu wissen wann RN-Speak alle Messages ausgesprochen hat. Dazu kann man über I2C die Anzahl der Bytes im Sprachbuffer abrufen. Wenn dieser Wert 0 ist, dann ist RN-Speak fertig. Im nachfolgenden Beispiel wird demonstriert, wie man sich eine Funktion definiert, welche wartet bis die Aussprache erfolgt ist. Damit lassen sich dann Funktionen zeitgleich mit der Sprache abstimmen.

'###################################################
'rnspeakbeispiel2.bas
'Beispiel: zu RN-Speak
'Das Minimalbeispiel demonstriert, wie einfach das
'Sprachboard RN-Speak mit RN-Control per I2C angesprochen wird
'Es werden einige Messages direkt nacheinander ausgesprochen
'und zwischen zwei Messages eine Pause eingelegt
'Demonstriert wird auch, wie mit einer Funktion gewartet werden
'kann bis RN-Speak Messages ausgesprochen hat. Man kann so das
'Hauptprogramm besser mit den Messages synchronisieren
'
'Dieses Beispiel benötigt RN-Speak mit Firmware 2.0 oder höher
'
'Autor: Frank
'Anleitung findet man unter http://www.Roboternetz.de im Download-Bereich
'oder www.robotikhardware.de
'Weitere Beispiele sind im Roboternetz gerne willkommen!
'##############################################################


' ------------- Hier die üblichen RN-Control Anweisungen --------------

$regfile = "m32def.dat"
$hwstack = 32
$framesize = 32
$swstack = 32
$crystal = 16000000                                         'Quarzfrequenz
$baud = 9600


Config Scl = Portc.0                                        'Ports fuer IIC-Bus
Config Sda = Portc.1

Sound Portd.7 , 400 , 450                                   'BEEP
Sound Portd.7 , 400 , 250                                   'BEEP
Sound Portd.7 , 400 , 450                                   'BEEP
' ------------- Ende der üblichen RN-Control Anweisungen --------------


'Das Hauptprogramm zum Ansteuern von RN-Speak Beispiel

Declare Sub Rnspeak_playmsg(byval Message As Byte)
Declare Sub Rnspeak_pause(byval Milli As Word)
Declare Function Rnspeak_bufferbytes() As Byte
Declare Sub Rnspeak_fertig()


Const Rnspeakslaveid = &H52                                 'Beliebig änderbar
Dim B As Byte

   Wait 2                                                   'Warte bis RN-Speak bereit (falls Board 
                                                            'gerade erst mit Spannung versorgt wurde)
   Print "Testprogramm"

   I2cinit

   Rnspeak_playmsg 1
   Rnspeak_pause 1000                                       '1000 Milisekunden (1 Sek) Pause
   Rnspeak_playmsg 2
   Rnspeak_playmsg 3
   Rnspeak_playmsg 4
   Rnspeak_playmsg 3
   Rnspeak_playmsg 2
   Rnspeak_playmsg 1
   Rnspeak_fertig                                           'Warte bis alles ausgesprochen und 
                                                            'führe dann Hauptprogramm weiter

   Sound Portd.7 , 400 , 450                                'BEEP
   Print "Fertig"
End


'Hilfreiche Unterfunktionen für RN-Speak (weitere können leicht definiert werden)

'Funktion, die eine bestimmte Message ausspricht
Sub Rnspeak_playmsg(byval Message As Byte)
Local Befehle As String * 4
  Befehle = "rnm" + Chr(message)
  I2csend Rnspeakslaveid , Befehle , 4
End Sub


'Funktion, die eine Pause zwischen zwei Messages legt
Sub Rnspeak_pause(byval Milli As Word)
Local Befehle As String * 4
Local Wert As Word
Local Bwert As Byte

  Wert = Milli / 20
  Bwert = Wert
  Befehle = "rno" + Chr(bwert)
  I2csend Rnspeakslaveid , Befehle , 4
End Sub


'Function ermittelt, wie viele I2C-Bytes von RN-Speak noch bearbeitet/ausgesprochen
'werden müssen
Function Rnspeak_bufferbytes() As Byte
Local Bwert As Byte
  I2cstart
  Bwert = Rnspeakslaveid + 1                       'Lese-Adresse für rn-speak ist um 1 Byte höher
  I2cwbyte Bwert
  I2crbyte Bwert , Nack
  I2cstop
  Rnspeak_bufferbytes = Bwert
End Function


' Diese Funktion wartet bis alle Befehle und Messages von RN-Speak ausgesprochen wurden
Sub Rnspeak_fertig()
Local Bwert As Byte
  Do
    Bwert = Rnspeak_bufferbytes()
  Loop Until Bwert = 0
End Sub

Erläuterung der Anschlüsse, Regler und Kurzschlussbrücken

Anschluss-Bezeichnung Erläuterung
I2C-Bus I2C-Bus

Über diesen Bus werden die einzelnen Relais gesteuert. Der I2C-Bus benötig nur 2 Leitungen für alle Funktionen. Entsprechend der Roboternetz-Norm wird hier ein 2x5-poliger Stecker angeschlossen. Pin 1 SCL (Taktleitung) Pin 3 SDA (Datenleitung) Pin 5 +5V Pin 7 +5V Pin 9 Batteriespannung max. +12V Pin 2,4,6,8 GND Pin 10 INT Diese Leitung kann von allen I2C-Bus-Erweiterungen genutzt werden, um den Hauptcontroller darüber zu informieren, dass sich Daten (z.B. von Sensoren) verändert haben. In diesem Fall wird die Leitung solange auf Masse gelegt bis der entsprechende I2C-Baustein ausgelesen wird. Der Controller muss also immer alle I2C-Bausteine auslesen solange diese Leitung auf Masse liegt. Diese Leitung ist mit Port PD7 verbunden

I2CPOWER Drahtbrücke

Soll das komplette Board mit der 5V-Spannung vom ISP Board versorgt werden, dann sollte diese Drahtbrücke eingelötet werden – dies wird empfohlen. Ist die Brücke nicht vorhanden, so muss die 5V-Spannung über die zweipolige Stiftleiste POWER zugeführt werden. Bei eingelöteter Brücke darf am Anschluss Power keine Spannung angeschlossen werden, wenn das Board mit dem I2C-Bus verbunden ist.

Power Spannungsversorgung

Wie zuvor beschrieben kann das Board wahlweise komplett über den oben genannten I2C-Stecker mit der 5V-Logikspannung versorgt werden. Wird dieser nicht genutzt, so kann hier eine stabilisierte Spannung von +5V angelegt werden – markierte Polung beachten!

Micro Mikrofon

An diesen Anschluss wird ein Kondensatormikrofon zum Aufnehmen der Messages angeschlossen. Wird der Bauteilesatz über www.robotikhardware.de bezogen, so ist dieses bereits dabei. Ansonsten wird ein Kondensatormikrofon in der Bestückungsliste empfohlen. Wenn die Messages automatisch mit der PC-Software übertragen werden sollen, dann kann man einfach das Mikrofon in die Nähe des PC-Lautsprechers legen. Die mitgelieferte PC-Software sorgt dann dafür, dass die Messages automatisch hintereinander aufgespielt werden. Dazu benötigt man nur für ca. 2-5 Minuten ein ruhiges Zimmer. Die Qualität hat sich als sehr gut herausgestellt! Alternativ könnte man hier auch über einen Kondensator und Widerstand den Line-Ausgang des PCs anschließen, allerdings ist das nicht notwendig, da Kondensatormikrofone sehr empfindlich sind.

R9 Lautstärke

R9 ist ein Spindeltrimmer, mit dem die Lautstärke des Boards genau eingestellt werden kann.

Speaker Kleiner Lautsprecher

Über diesen Anschluss kann ein 16-Ohm-Lautsprecher direkt mit den Sprachchips verbunden werden. Wenn keine besonders hohe Lautstärke erforderlich ist, kann man sich dadurch den Verstärkerchip IC2 sparen. Allerdings ist dann die Lautstärke nicht mehr regelbar!

Speaker1 Größerer Lautsprecher

An diesen Anschluß kann ein kleiner und auch etwas größerer 8-Ohm-Lautsprecher angeschlossen werden. Der eingebaute NF-Verstärkerchip IC2 sorgt dafür, dass genügend Leistung vorhanden ist.

JP1 Adressleitungen

An diese Jumperleiste werden die Adressleitungen von A1 bis A9 wahlweise auf 5V gelegt. Generell sind alle Adressleitungen über einen Pulldown-Widerstand mit Masse verbunden. Je nach Chip und je nach Betriebsmode müssen jedoch einige auf 5V gelegt werden. Daher sind hier gewöhnlich 3 Jumper zu stecken, siehe Bestückungsplan! Diese Belegung sollte nicht geändert werden, wenn das Board mit dem Betriebssystem von robotikhardware.de verwendet wird. Das Betriebsystem ist bei Bestellung über robotikhardware.de bereits auf dem Chip Mega8.

RS232 PC kompatible RS232-Schnittstelle

Über ein Adapterkabel kann die serielle Schnittstelle des PC direkt mit dem Board verbunden werden. Dies ist dann sinnvoll, wenn viele Messages automatisch mit dem PC übertragen werden sollen. Der PC kann dann automatisch Messages vorsprechen und haargenau die Aufnahme aktivieren und stoppen. Über die mitgelieferte Software lassen sich beliebig viele WAV-Dateizusammenstellungen speichern und blitzschnell aufnehmen. Auf diese Weise kann man den Sprachschatz auch sehr schnell ändern. Diese Schnittstelle ist auch notwendig, wenn man das Board über RS232 steuern möchte. Also wenn bestimmte Messages gezielt ausgesprochen werden sollen. Alternativ kann auch der I2C-Port dazu verwendet werden. Die Belegung ist kompatibel zum Conrad-Roboter CCRP5:

Pin 1 RX Pin 2 GND Pin 3 TX

Ein geeignetes Anschlusskabel kann schnell selbst angefertigt werden oder gibt es bei robotikhardware.de bereits fertig

ISP ISP – IN SYSTEM PROGRAMMING

Über diesen Anschluss kann der Controller auf dem Sprachboard mit einem Standard ISP-Kabel direkt an einen Parallelport des PCs angeschlossen und programmiert werden. Gewöhnlich ist das nicht notwendig, da das fertige Betriebssystem bereits mitgeliefert wird! Die Belegung des ISP-Anschlusses ist zu dem weit verbreiteten STK200-Programmier-Dongle kompatibel. Einen entsprechenden Dongle kann man sich entweder selber basteln oder kaufen (siehe Artikel AVR-ISP Programmierkabel). Pin 1 MOSI Pin 2 VCC Pin 3 Nicht belegt Pin 4 GND Pin 5 RESET Pin 6 GND Pin 7 SCK Pin 8 GND Pin 9 MISO Pin 10 GND

Achtung: Stecker nicht falsch herum einstecken.

JP2 Tasterleitungen

Über JP2 können die 3 Portleitungen, die zu den Tastern führen, abgegriffen werden. Diese können von anderen Boards zur Steuerung verwendet werden. Indem man einen Kontakt auf Masse legt, kann man einen Tastendruck simulieren. Gewöhnlich benötigt man dies nicht, da die Steuerung über I2C (oder RS232) wesentlich komfortabler erfolgen kann.

Taster Play Nachricht abspielen

Sind bereits Messages manuell oder per PC überspielt worden, so kann mit diesem Taster die jeweils nächste Nachricht abgespielt werden. Jeder Tastendruck spielt die nächste Nachricht ab.

Wird die Taste Next zusammen mit Taste Play gedrückt, so schaltet man von dem RS232-Steuerungsmodus auf den I2C-Modus um und umgekehrt. Befindet man sich im I2C-Modus, so sind keine anderen Tastenfunktionen möglich – man muss dann erst wieder auf den RS232-Mode (durch gleichzeitiges Drücken beider Tasten) zurückschalten.

Taste Record Message Aufnehmen

Um eine Message aufzunehmen muss dieser Taster gedrückt und festgehalten werden solange man spricht. Man kann bis zu 252 Nachrichten nacheinander aufsprechen (falls die Kapazität ausreicht), jeweils einfach neu drücken und bis zum Ende der Nachricht festhalten.

Taste Next Reset

Entgegen der Beschriftung wird diese Taste für einen Reset des Sprachchips verwendet. Duch kurzes Betätigen wird der Nachrichtenzeiger immer wieder auf die erste Nachricht umgestellt. Will man einen Chip von vorne neu besprechen oder wiedergeben, dann sollte man immer erst einmal diese Taste drücken.

Wird die Taste Next zusammen mit Taste Play gedrückt, so schaltet man von dem RS232-Steuerungsmodus auf den I2C-Modus um und umgekehrt. Befindet man sich im I2C-Modus, so sind keine anderen Tastenfunktionen möglich – man muss dann erst wieder auf den RS232 Mode (durch gleichzeitiges Drücken beider Tasten) zurückschalten.


Neue Platinenversion

Die zuvor beschriebene Dokumentation bezieht sich auf RN-Speak mit den Platinenversionen 1.0 und 1.1. Inzwischen ist auch die Platinenversion 1.2 erhältlich. Die Funktionen sind identisch jedoch ist die Platine weitergehend optimiert und erleichtert einem die Selektion von 1, 2 oder 3 Sprachchips per Jumper. Zudem bietet die neue Version einen 10 poligen Erweiterungs-Stecker nach der RN-Definition. Dieser soll in zukünftigeren Firmware-Version weitere Features bereitstellen. Die komplette Anleitung zu der neuen Platinenversion ist weiter unten unter Weblinks ebenfalls zu finden. Hier noch ein Foto der neuen Version:

Rnspeakaufgebaut1.2.gif


Viel Spaß beim Basteln. --Frank 12:56, 26. Nov 2005 (CET)

Siehe auch

Weblinks

Platinenservice.gif hier Bausatzservice.gif hier