Telefoniczny automat informacyjny

Podobnie jak programowanie komputerów, tak i technika mikroprocesorowa oraz budowa urządzeń z mikroprocesorami staje się dostępna dla każdego hobbysty - amatora, który jest w stanie połączyć pasję pisania programów z tworzeniem rozmaitych urządzeń elektronicznych. Ciągły postęp technologiczny doprowadził do powstania między innymi mikrokomputerów jednoukładowych, których użycie wielokrotnie upraszcza urządzenie elektroniczne i wzbogaca je o funkcje częstokroć niedostępne przy użyciu tradycyjnych metod dyskretnych, albo też bardzo trudne do zrealizowania.

Programowanie mikroprocesorów, nawet w języku asembler, nie jest jednak trudne a uruchomienie programu przy użyciu ogólnie dostępnych środków jest możliwe i znacznie mniej kosztowne, aniżeli szukanie błędu w równoważnym funkcjonalnie układzie przy pomocy oscyloskopu, analizatora-rejestratora stanów logicznych oraz innych kosztownych przyrządów.
Prezentowane w artykule urządzenie powstało całkowicie w warunkach amatorskich bez emulatorów, sond itp.

Opis układu
Opracowane przeze mnie urządzenie to telefoniczna "gaduła". Jest ona w stanie odtworzyć komunikat zapisany w pamięci układu ISD informujący osobę dzwoniącą o zmianie numeru telefonu, zmianie siedziby, numerze telefonu kontaktowego itp. Komunikat jest nagrywany z mikrofonu. Jego treść jest dowolna, a długość zależy od wersji układu pamięci analogowej użytego do konstrukcji. W urządzeniu modelowym wykorzystano układ ISD2560 produkcji Information Storage Devices, który może zapamiętywać komunikaty o czasie trwania do 60 sekund. Jest on sterowany przez mikrokomputer jednoukładowy firmy STM (dawniej SGS-Thomson) ST6210 (lub ST6220). Mikrokomputer spełnia rolę sterownika, kontrolera klawiatury oraz wprowadza całość urządzenia w stan czuwania, w którym pobierana jest znikoma ilość prądu z baterii (ok. 300<m>A).
Schemat elektryczny urządzenia znajduje się na rys. 1. Telefoniczna "gaduła" składa się z trzech bloków funkcjonalnych. Pierwszy to zasilacz i modulator zbudowany przy użyciu tranzystorów T2, T3 i T4. Drugi blok to układ zapamiętania i odtwarzania komunikatu zbudowany przy użyciu układu ISD2560, wzmacniacza m.cz. LM386 oraz tranzystora T1. Trzeci blok składa się z mikrokomputera ST6210 i to on steruje całością urządzenia. Układ wymaga podłączenia linii telefonicznej do zacisków LN1.1 oraz LN1.2 oraz zasilania z baterii 6V.

Tryby pracy
Stan czuwania. Gdy układ nie odtwarza żadnego komunikatu i brak jest sygnału wywołania na linii telefonicznej, wprowadzony zostaje przez mikrokomputer w stan czuwania. Tranzystory T1 i T2 zostają zatkane dzięki niskiemu napięciu na wyprowadzeniu PB0 mikrokomputera. Zatkanie T2 pociąga za sobą zatkanie T4 i układ nie pobiera żadnego prądu z sieci telefonicznej, natomiast T1 przerywa zasilanie wzmacniacza małej częstotliwości oszczędzając baterie. Pobierany jest jedynie minimalny prąd z baterii zasilającej.
Stan odtwarzania komunikatu. Sygnał wywołania - dzwonek telefonu - to pojawienie się przebiegu sinusoidalnego na zaciskach LN1.1 i 1.2. Zmiana ta wykrywana jest przez mikrokomputer sprzęgnięty z linią telefoniczną za pomocą transoptora ISO1. Mikrokomputer przechodzi ze stanu czuwania do pracy licząc kolejne dzwonki. Po zaprogramowanej ilości dzwonków, w czasie której nikt nie podniesie słuchawki telefonu, mikrokomputer poleca układowi ISD odtwarzanie komunikatu. Komunikat w formie sygnału analogowego wzmacniany jest poprzez układ U1 i trafia na bazę T3 modulując amplitudowo napięcie linii telefonicznej. Dodatkowo zasilanie bateryjne zaczyna być wspomagane zasilaniem z sieci telefonicznej. Wydatnie zmniejsza to zużycie baterii i przedłuża okres ich stosowania, nie powodując żadnych konsekwencji dla linii telefonicznej. Wprowadzane jest tylko dopuszczalne jej obciążenie. Oprócz T2 z wyprowadzenia PB0 sterowany jest również tranzystor T1 spełniający rolę wyłącznika zasilania wzmacniacza m.cz. Odtwarzanie komunikatu sygnalizowane jest świeceniem diody D1. Jeżeli do zacisków PL1 i PL2 podłączony jest głośnik, można go również odsłuchać. Ilość powtórzeń komunikatu oraz ilość dzwonków, po której układ zacznie go odtwarzać, zależy od stanu przełącznika SW4 (bezpośrednio bitów 1 i 2 portu PB). Komunikat można odsłuchać również po naciśnięciu klawisza "PLAY/STOP" bez udziału linii telefonicznej.
Stan zapisu komunikatu. Zapis (nagranie) komunikatu odbywa się po jednoczesnym naciśnięciu przycisków SW2 i SW3. Klawisze te połączone są szeregowo aby uniknąć przypadkowego ich wciśnięcia. Układ mikrokomputera przechodzi ze stanu czuwania do pracy wysyłając rozkaz nagrania do ISD. Zapis sygnalizowany jest mruganiem diody LED. Układ pamięci analogowej ISD próbkuje sygnał docierający z mikrofonu zamieniając go na postać cyfrową i zapisując w wewnętrznej pamięci nieulotnej. Zapis kończy się po naciśnięciu klawisza "PLAY/STOP" lub po wysłaniu sygnału przepełnienia pamięci przez układ ISD do mikrokomputera. W trybie pracy, który wykorzystuje "gaduła", komunikat zapamiętany uprzednio jest kasowany.

Opis programu
Program napisany został w asemblerze mikroprocesorów rodziny ST62, opisanym dokładnie w katalogu producenta. Posłużyłem się symulatorem i asemblerem pochodzącymi z pakietu programów dołączonego do firmowego Starter Kit. Oprócz narzędzi programowych, pakiet zawiera również programator układów z rodziny ST6210, 15, 20 i 25.
Bardzo ważną częścią programu jest tak zwana tablica przerwań umieszczona pod adresem 0FF0h w pamięci stałej mikrokomputera (listing 1). Spełnia ona rolę wskaźnika obsługi zdarzeń takich jak: załączenie napięcia zasilania, zerowanie, przerwanie maskowalne czy niemaskowalne.
Pierwsza wykonywana po załączeniu zasilania przez procesor instrukcja umieszczona jest pod adresem 0FFEh. Znajduje się tam rozkaz wykonywany po sygnale RESET. W programie umieszczone zostało pod tym adresem polecenie skoku do procedury inicjującej rejestry oraz programującej przerwanie zegarowe, wykorzystywane później do odmierzania czasu.


Listing 1. Tablica wektorów przerwań
;Wektory przerwań
;Wektor przerwania zawiera rozkaz skoku do określonego
;programu obsługi. Dla układu ST6200 wektory te są stale
;i nie można ich zmienić

.ORG      0FF0H
IT_ADC    NOP           ;Przerwanie z przetwornika A/D
          RETI          ;Powrót z obsługi przerwania
IT_TMR    JP IRQ_TMR    ;Przerwanie układu zegarowego
                        ;- skocz do IRQ_TMR
IT_PBC    NOP           ;Przerwanie z portu B lub C-nic nie rób
          RETI
IT_PA     JP IRQ_PA     ;Przerwanie z portu A
          NOP           ;Zarezerwowane
          NOP           ;
          NOP           ;
          NOP           ;
NMI       NOP           ;Przerwanie niemaskowalne - nic nie rób
          RETI          ;
RES       JP INIT       ;Wektor obsługi programu po RESET

Czas jest liczony przez procedurę IRQ_TMR (listing 2). Zegar mikroprocesora po podziale, co około 0,01 sekundy, wysyła sygnał pobudzenia przerwania zegarowego, co w konsekwencji powoduje skok do adresu 0FF2h i wywołanie procedury IRQ_TMR. Częstotliwość przerwania zegarowego zmienia się programując licznik TCR i jego rejestr kontrolny TSCR. Liczony czas zapamiętany zostaje w komórkach M10CNT (dziesiątki sekund) oraz SEC (jednostki sekund). Komórka SEC porównywana jest z czasem SLEEPTM. Jeśli SEC jest równe SLEEPTM, to mikroprocesor wprowadza układ w stan czuwania. Komórka SEC jest zerowania, jeśli tylko program podejmuje jakąś akcję, dzięki czemu wartość SEC nie osiąga SLEEPTM i możliwa jest praca programu. W innym przypadku, ciągłe powiększanie licznika sekund, doprowadza do stanu, gdy spełniony zostaje warunek SEC=SLEEPTM i w konsekwencji wymuszenie czuwania układu.
Czuwający układ ST62 może zostać aktywowany przez przerwanie lub sygnał RESET. Tej pierwszej możliwości nie brałem pod uwagę. Układ zaczyna działać po przerwaniu z portu PA, do którego podłączona jest klawiatura oraz, poprzez transoptor, linia telefoniczna. Pobudzenie PA0,1 lub 2 powoduje skok do adresu 0FF6h i wywołanie procedury IRQ_PA. Jedynym jej zadaniem jest odczyt stanu portu. PA i jego zapamiętanie w zmiennej STAKBD.

Listing 2. Obsługa przerwania Timer’a
;Przerwanie zegarowe służy do skasowania licznika wywołań (dzwonków)
;Uruchamiane w momencie wywołania, blokowane po skasowaniu licznika
;wywołań RINGCNT
;W nim również właściwy rozkaz uśpienia układu STOP. WAIT umieszczone
;w pętli głównej nie powoduje uśpienia a jedynie oczekiwanie na
;przerwanie, które może pochodzić z dowolnego miejsca

IRQ_TMR
LD        COPY_A,A    ;Przechowanie zawartości akumulatora na
                      ;czas obsługi przerwania
                      ;Przerwanie następuje w dowolnym stanie
                      ;programu, toteż jest konieczne zapamiętanie
LDI       TCR,0FFH    ;stanu rejestru A
RES       7,TSCR      ;Start nowego odliczania
INC       M10CNT      ;Dziesiąte części sekundy
LD        A,M10CNT
CPI       A,10        ;Jeśli 10 dziesiątych to cała sekunda
JRZ       IQ_TMR1
JP        IQ_TMR2

IQ_TMR1
          CLR    M10CNT
          INC    SEC
          LD     A,SEC ;Czy minęło około SLEEPTM sekund od
                       ;ostatniego wywołania?
          SUBI   A,SLEEPTM
          JRC    IQ_TMR2
          CLR    RINGCNT  ;Jeśli tak - skasuj licznik wywołań
          STOP         ;"Uśpienie" układu, zatrzymanie zegara
IQ_TMR2

          LD    A,COPY_A

Po takim działaniu następuje powrót do programu głównego i podjęcie akcji zależnej od stanu STAKBD (procedura AKCJA).
Starałem się w trakcie pisania programu umieścić dużo komentarzy tak, aby program był czytelny. Uważam, że przy minimalnej znajomości zasad programowania i listy rozkazów ST62 można go zrozumieć i wręcz samemu modyfikować. Oczywiście jest to trudniejsze, jeżeli stawia się dopiero pierwsze kroki, ale wówczas mogę służyć pomocą.

Jacek Bogusz
j.bogusz@easy-soft.net.pl

http://www.tomaszbogusz.blox.pl/

ZałącznikWielkość
Schemat i płytka (gadacz-sch.zip)112.25 KB
Plik wynikowy do zaprogramowania procesora (gadacz-hex.zip)539 bajtów
Źródło programu "gadacza" w asemblerze (gadacz-asm.zip)4.48 KB

Dodaj nowy komentarz

Zawartość pola nie będzie udostępniana publicznie.