Aus RN-Wissen.de
Version vom 26. November 2005, 13:36 Uhr von Frank (Diskussion | Beiträge) (Automatisches aufnehmen von Messages mit dem PC)

Wechseln zu: Navigation, Suche
Rasenmaehroboter fuer schwierige und grosse Gaerten im Test

Baustelle.gif An diesem Artikel arbeitet gerade Mitglied [[Benutzer:{{{1}}}|{{{1}}}]].

Am besten momentan noch keine gravierenden Ergänzungen / Änderungen vornehmen.

Dieser Hinweis verschwindet wenn der Autor soweit ist. Sollte dieser Hinweis länger als drei Tage auf einer Seite sein, bitte beim Autor [[Benutzer:{{{1}}}|{{{1}}}]] per PM / Mail oder Forum nachfragen ob er vergessen wurde.

RNSpeakFoto.jpg

RN-SPEAK - Sprachausgabe mit RS232 und I2C-Ansteuerung Diese Anleitung bezieht sich auf Platinen-Version 1.0 und 1.1 mit neuster Firmware 2.0 oder höher. Was unterscheidet ein 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 das ständig ein Display überwacht werden muß.

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 Nachichten 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: /www/htdocs/w0177223/rn-wissen.de/wiki/includes/limit.sh: line 101: 345544 Aborted /usr/bin/timeout $MW_WALL_CLOCK_LIMIT /bin/bash -c "$1" 3>&-

Error code: 134
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 läßt 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 mir 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 lautem 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 (Betriebsystem 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. 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 Controller wie C-Control, C-Control II abe rauch 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)
  4. Sollen Firmware-Update 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.
  5. 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!
  6. 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 leere 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 das mitgelieferte 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 Betiebsmodis 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, das man natürlich vermeiden sollte Befehle gleichzeitig von mehreren Schnittstellen zu senden. Abe rnacheinander können diese durchaus von verschiedenen Schnittstellen gesendet werden.

Für einen ersten Test sollte 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 das das Board gerade im Aufnahmemodi ist.
  3. Wiederholen Sie Schritt 2 einige male 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, paßt nix mehr drauf, so wird automatisch auch nix mehr gespeichert – es wird also nix überschrieben. Sie werden sich wundern wieviel Text drei Chips hineinpaßt, 270 Sekunden ist eine Menge.
  4. Nach dem 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 Nachricht 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ück schalten. Allerdings ist das gezeilte ü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äßt. 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 das Sie stets die neuste 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, indem 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 legen 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 9800 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 bestimmte 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 können 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 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 das 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 das 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 PC´s 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 von dem Mikrofon oder die Lautstärke am PC und das ganze auf Knopfdruck 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 eingebauter Terminalprogramm aktivieren. Verbinden Sie das Board mit der RS232 und aktivieren Sie das Terminalprogramm. Wenn sie die Stromversorgung des Board´s kurz unterbrechen, so das ein Rest ausgelöst wird (kurz blinkende LED´s 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 Sie 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 das 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äßt 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äßt 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äßt 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 das 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, der entsprechenden Befehl haben Sie ja sicher schon in der Befehlstabelle gesehen.

Da die Befehle RS232-Befehl 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. Vorallem 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 unf 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 wieviele I2C-Bytes von RN-Speak noch beachbeitet/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 das sich Daten (z.B. von Sensoren) verändert haben. In diesem Fall wird die Leitung solange auf Masse gelegt bis der entsprechde I2C-Baustein ausgelesen wird. Die 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 muß die 5V Spannung über die zweipolige Stiftleiste POWER zugeführt werden. Bei eingelöteter Brücke darf am Anschluß Power keine Spannung angeschlossen werden, wenn das oard 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 Anschluß 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 das die Message automatisch hintereinander aufgespielt werden. Dazu benötigt man nur 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 PC´s anschließen, allerdings ist das nicht notwendig da Kondensatormikrofone sehr empfindlich sind.

R9 Lautstärke

R9 ist ein Spindeltrimmer mit der die Lautstärke des Boards genau eingestellt werden kann. Speaker Kleiner Lautsprecher Über diesen Anschluß 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 das 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 Anschlußkabel kann schnell selbst angefertigt werden oder gibt es bei robotikhardware.de bereits fertig

ISP ISP – IN SYSTEM PROGRAMMING

Über diesen Anschluß kann der Controller auf dem Sprachboard mit einem Standard ISP-Kabel direkt an einen Parallelport des PC´s angeschlossen und programmiert werden. Gewöhnlich ist das nicht notwendig, da das fertige Betriebsystem bereits mitgeliefert wird! Die Belegung des ISP-Anschlusses ist zu dem weit verbreitetet STK200 Programmier Dongle kompatibel. Ein entsprechender Dongle kann man sich entweder selber basteln (siehe Artikel ISP Dongle). 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 widergeben, 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.


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

Siehe auch

Weblinks

Platinenservice.gif hier Bausatzservice.gif hier


LiFePO4 Speicher Test