Strona główna Dokumentacja wariometru SkyAssistant Bloki funkcjonalne Generator komunikatów słownych

Zasada działania generatora komunikatów słownych

Układ generatora komunikatów słownych można przedstawić następująco:
schemat blokowy generatora komuniaktów słownych

Parametrem wejściowym generatora jest liczba binarna, zawierająca wartość jednego z parametrów: wysokości, temperatury lub napięcia. Liczba jest zamieniana na postać BCD, czyli zestaw cyfr dziesiętnych będących wartościami jednostek, dziesiątek, setek itd. Liczby wchodzące do generatora są powiększone 10-krotnie (wysokość), lub 100-krotnie (napięcie, temperatura).
Aby z takiej liczby zrobić liczbę zmiennoprzecinkową, procedura gramatyki ustawia przecinek między odpowiednimi cyframi.

Procedura gramatyki wybiera sample, które mają zostać wymówione i tworzy do nich listę indeksów. W zależności od pozycji dziesiętnej dana liczba może przybierać różne formy. Na przykład cyfra '2' może być samplem "dwa" (tysiące), "dwie" (dziesiąte, setne), "dwanaście" lub "dwadzieścia". Podobnie dzieje się z nazwami jednostek. Na przykład jednostka wysokości w zależności od wartości, może być wymawiana jako: (jeden) "metr", (dwa) "metry", (pięć) " metrów", (dwie dziesiąte) "metra".

Różne języki, lub grupy językowe będą miały różne reguły gramatyczne:
  • odmiany liczb,
  • odmiany jednostek,
  • kolejności liczb w zdaniu.
    Stąd dla każdego języka, oprócz zestawu sampli musi być opracowana osobna reguła.

    Utworzony przez procedurę gramatyki indeks sampla jest jednocześnie pozycją sampla w spisie treści. Lista sampli ułożonych według indeksu znajduje się w pliku sample.txt. Mając numer sampla, program odczytuje kolejne 4 bajty spisu treści sampli umieszczone na początku pamięci flash.
    W spisie treści zawarta jest informacja o adresie sampla i jego długości. Mając te dane program pobiera kolejne bajty sampla i umieszcza je w buforze sampli.

    Bufor sampli jest to kilkubajtowa tablica w pamięci RAM, służąca jako pamięć podręczna (cache). Jest po to, aby wyeliminować przerwy w generowaniu komunikatów w czasie gdy trzeba zaadresować kolejną stronę pamięci, obliczyć nowy adres sampla itp.
    Gdy dane są dostępne, wtedy bufor jest napełniany do pełna.

    Z bufora dane są przenoszone do przetwornika cyfrowo - analogowego (DAC) gdzie zamieniają się na sygnał elektryczny. Transmisja danych z bufora taktowana jest timerem odmierzającym czas miedzy kolejnymi próbkami, wynoszący 1/8kHz = 125us.