Sprachausgabe           

von Michael Gaus                     
      
Elektronik-Labor  Literatur  Projekte  Lernpakete  Kalender  Schaltungswettbewerb



Hier noch nachträglich ein Projekt passend zum NE556 Schaltungswettbewerb, bei dem mit dem NE556 eine Sprachausgabe realisiert wird. Es ist sozusagen "außer Konkurrenz" zu sehen, da zwei zusätzliche Bauteile zum Einsatz kamen und es somit die Wettbewerbskriterien nicht voll erfüllt. Verwendet wurden die Bauteile des Adventskalenders sowie zusätzlich ein SPI-Flash und ein Quarzoszillator.



Die Versorgungsspannung der Schaltung beträgt 5 V. Diese kann z.B. aus vier in Reihe geschalteten NiMH Mignon-Akkus gewonnen werden. Hierüber werden der Quarzoszillator sowie der NE556 versorgt. Da das SPI-Flash mit max. 3,6 V betrieben werden darf, muss noch eine passende Spannung erzeugt werden. Über den beiden in Serie geschalteten grünen Leuchtdioden LED1 und LED2 fällt eine Spannung von ca. 4 V ab, wovon dann durch die Basis-Emitter-Strecke des Emitterfolgers nochmals ca. 0,7 V abgezogen werden, sodass am Emitter von T1 eine Spannung von ca. 3,3V anliegt.

Timer1 des NE556 arbeitet hier als eine Art Verstärker. Die beiden Pins Trigger und Threshold sind hierbei der Eingang. Die am Pin Control angeschlossene rote LED3 bewirkt eine Spannung von ca. 1,8 V am negativen Komparatoreingang des Threshold Pins. Durch den an Control angeschlossenen internen Widerstand fließt ein Strom über die LED nach GND und bringt diese zum Leuchten. Wenn die Spannung an Threshold größer ist als 1,8 V (z.B. bei High-Pegel des Pins SO von IC2), dann wird der Reset-Pin des im NE556 integrierten Flipflops getriggert und der Ausgang (Pin 5) geht auf GND-Pegel. Die Triggerschwelle für den positiven Komparatoreingang des Trigger-Pins des NE556 liegt aufgrund der Innenbeschaltung bei ungefähr der halben Threshold-Triggerschwelle, also bei ca. 0,9 V. Wenn die Spannung an Trigger kleiner ist als 0,9 V (z.B. bei Low-Pegel des Pins SO von IC2), dann wird der Set-Pin des im NE556 integrierten Flipflops getriggert und der Ausgang (Pin 5) geht auf VCC-Pegel. Somit wird praktisch ein invertierender Verstärker gebildet. Am Ausgang ist der Piezo angeschlossen.

Timer2 des NE556 arbeitet als relativ langsame astabile Kippstufe. Die Frequenz beträgt ungefähr 1/(1,4 * R6 * (C3+C4+C5)). Bei der angegebenen Dimensionierung sind das ca. 1 Hz. Die Frequenz ist über die rote LED4 als Blinken sichtbar. Wenn die LED aus ist, dann hat der Ausgang Pin 9 High-Pegel, wenn die LED an ist, hat Pin 9 Low-Pegel. Die LED zeigt also invertiert den Ausgangspegel an. Der Ausgang ist auf J3 geführt und kann per Drahtbrücke mit dem Takteingang SCK des SPI-Flashs verbunden werden. R2 sorgt dafür, dass der 5-V-Pegel auf zulässige Werte begrenzt wird (die interne Schutzdiode gegen Vcc im SPI-Flash wird leitend und der Strom muss begrenzt werden).

Der Quarzgenerator QG1 liefert am Ausgang eine Frequenz von 6,144 MHz und ist auf J3 geführt. Per Drahtbrücke kann er mit dem Takteingang SCK des SPI-Flashs verbunden werden (der mittlere Pin 2 von J3). An J3 gibt es drei verschiedene zulässige Schaltmöglichkeiten:
1) eine Verbindung von Pin 1 nach Pin 2: Ausgang OUT2 des NE556 liegt an SCK des SPI-Flashs
2) eine Verbindung von Pin 3 nach Pin 2: Ausgang OUT des Quarzgenerators liegt an SCK des SPI-Flashs
3) keine Verbindung aktiv, Pin 2 ist offen: SCK des SPI-Flashs liegt über R7 auf GND Pegel

Beim SPI-Flash (IC2) ist der Writeprotect-Eingang (Pin 3) an GND angeschlossen, sodass der Schreibschutz aktiv ist. Es können somit nur Daten ausgelesen und nicht versehentlich überschrieben werden. Der low-aktive Chipselect-Pin 1 liegt über R3 auf Low-Pegel, kann jedoch über eine Drahtbrücke an J1 auf 3,3 V gelegt und somit deaktiviert werden. Der Dateneingang SI (Pin 5) liegt über R4 auf High-Pegel, kann jedoch über eine Drahtbrücke an J2 auf GND gelegt werden. Der Takteingang (Pin 6) kann über J3 entweder langsam mit ca. 1 Hz per NE556 oder aber schnell mit 6,144 MHz per Quarzgenerator getaktet werden. Der Datenausgang SO (Pin 2) ist über den "Verstärker" im NE556 mit dem Piezo verbunden.


Start der Sprachausgabe

Vor dem Einschalten der Versorgungsspannung muss zuerst folgende Konfiguration vorgenommen werden:
- an J1 müssen die Pins 1 und 2 über eine Drahtbrücke verbunden sein, dadurch ist CS des SPI-Flashs inaktiv
- an J2 müssen die Pins 1 und 2 über eine Drahtbrücke verbunden sein, dadurch ist SI des SPI-Flashs auf Low-Pegel
- an J3 müssen die Pins 1 und 2 über eine Drahtbrücke verbunden sein, dadurch wird SCK des SPI-Flashs mit ca. 1 Hz getaktet

Nun wird die Versorgungsspannung (5V) angelegt. LED1, LED2 und LED3 müssen leuchten, LED4 blinkt mit ca. 1 Hz. Dadurch dass der Chipselect-Pin des SPI-Flashs inaktiv ist, werden keine Daten an SO ausgegeben, somit ist zunächst am Piezo nichts zu hören. Damit das SPI-Flash Daten ausgibt, muss es per Befehl in den Read-Modus gebracht werden. Hierzu muss der Chipselect-Pin aktiviert werden und dann insgesamt 4 Bytes (32 Bits) eingetaktet werden. Zunächst muss als Befehl der Hexwert 03 (Read-Modus) gefolgt von der gewünschten 24-Bit Startadresse übertragen werden. Die Datenübertragung muss jeweils mit dem höchstwertigen Bit (MSB) eines Bytes beginnen. Nach den 32 Bits werden 1-Bits an SI eingetaktet, sodass dann die im SPI-Flash gespeicherten Daten über SO herausgesendet werden. Die Adresse wird dann im Flash nach jedem weiteren empfangenen Eingangsbyte automatisch hochgezählt und bricht bei Erreichen der höchsten Adresse wieder auf Null um. Man kann als Startadresse z.B. die höchste Adresse wählen, das wären dann 24 1-Bits. Somit ist folgendes Bitmuster erforderlich:
00000011 11111111 11111111 11111111 ...
Es sind also nach dem Aktivieren des Chipselects genau 6 Null-Bits erforderlich und danach nur noch 1-Bits.

Dies kann nun manuell mit folgenden Schritten erfolgen, wobei bei den Schritten 1 und 2 das richtige Timing eingehalten werden muss:
1) Die Drahtbrücke an J1 wird entfernt, während sich die blinkende rote LED4 gerade in einer Leuchtphase befindet. Immer wenn LED4 an    ist, hat der Ausgang OUT2 des NE556 Low-Pegel. Somit wird durch Entfernen der Drahtbrücke an J1 der Chipselect-Pin des SPI-Flashs    aktiviert (Low-Pegel), während der Takteingang SCK gerade Low-Pegel hat. Nun müssen genau 6 Blinkphasen (Wechsel von "LED an" nach    "LED aus") abgewartet werden, bevor Schritt 2 ausgeführt wird.
2) Die Drahtbrücke an J2 wird entfernt, während sich die blinkende rote LED4 gerade in der "Aus"-Phase nach dem insgesamt sechsten Taktimpuls nach Aktivieren des Chipselect befindet. Immer wenn LED4 aus ist, hat der Ausgang OUT2 des NE556 High-Pegel. Da das SPI-Flash die Daten bei der steigenden Flanke übernimmt, wurde das sechste Null-Bit bereits übernommen. Dadurch ist am Dateneingang SI des SPI-Flashs ab dem siebten Taktimpuls ein High-Pegel aktiv.
3) Der zeitkritische Teil ist nun vorbei. Es muss nun die Drahtbrücke an J3 zwischen den Pins 1 und 2 entfernt und stattdessen an die  Pins 2 und 3 gelegt werden. Dadurch wird nun der Takteingang SCK des SPI-Flashs statt mit dem 1 Hz Takt mit dem 6,144 MHz getaktet. Dadurch erfolgt nun die Datenausgabe des SPI-Flashs mit der richtigen Taktfrequenz, sodass nun die Sprachausgabe hörbar sein sollte.

Das Vorgehen hört sich zunächst kompliziert an, nach kurzer Übung funktioniert es aber zuverlässig. In den Videos ist der Startvorgang auch zu sehen. Die Sprachausgabe erfolgt in einer Endlosschleife, da das Spi-Flash intern nach Erreichen der höchsten Speicheradresse wieder bei Adresse Null von vorn beginnt.


Sprachdaten für das Spi-Flash

Damit die Sprachausgabe funktioniert, muss in das Spi-Flash einmalig mittels eines geeigneten Programmers eine Binärdatei geschrieben werden, die eine PWM-Ausgabe erzeugt. Nehmen wir an, dass wir eine WAV-Datei mit 4 kHz Samplerate und 8-bit Auflösung mono verwenden möchten. Um ein 8-bit Sample als PWM-Signal auszugeben sind 256 Bits erforderlich, das Bitmuster besteht je nach Samplewert x aus insgesamt x aufeinanderfolgenden Einsen und dann die restlichen (256 - x) Bits aus Nullen. Der Samplewert 128 wird z.B. als 128 Einsbits gefolgt von 128 Nullbits gespeichert. Bei 4000 Hz Samplerate werden also pro Sekunde 4000 * 256 Bits = 1024000 Bits benötigt. Jeder PWM-Wert soll 6-mal hintereinander ausgegeben werden, sodass die PWM-Frequenz 4000 * 6 Hz = 24 kHz beträgt. Somit ist eine Datenrate von 1024000 * 6 Bits = 6144000 Bits pro Sekunde erforderlich. Das ist genau die Frequenz des verwendeten Quarzgenerators. Das Spi-Flash hat eine Speicherkapazität von 32 MBits, somit ergibt sich eine Abspieldauer von (32*1024*1024) / 6144000 = 5,4 Sekunden.

Im wav_spiflash_convert.zip ist ein selbstgeschriebenes PC-Tool zu finden, das die Daten einer WAV-Datei (4 kHz, 8-bit mono) in eine passende Binärdatei konvertiert. Dort sind auch 2 Beispieldateien jeweils als WAV-Datei und als Binärdatei enthalten. Bei einer Spieldauer kleiner als 5,4 Sekunden werden die restlichen Bytes mit PWM-Daten entsprechend dem Samplewert 80(hex) aufgefüllt, was der Mittelstellung ("Stille") entspricht.


Videos:
http://youtu.be/e793ZCIJPD0
http://youtu.be/WkNxu7XozCw