Mikrokontroler + modem - koncepcja komunikacji
raF - 09-02-2007 19:45
Mikrokontroler + modem - koncepcja komunikacji Witam
Chciałbym sterować modemem GSM za pomocą ATmega8 lub wyższym w związku z czym po
głowie chodzi mi taka koncepcja działania. Czy ide dobrą drogą?
Kod:
RESET:
; ustawienie początku stosu
; ustawienie prędkości transmisji
; inne ustawienia początkowe, przerwania itp
Loop1: ; Tu realizacja głównych zadań czyli wysyłanie poleceń do
modemu, odbieranie...
rjmp Loop1
USART_RXC: ; przerwanie gdy odebrano kompletny znak
rcall RxAnal ; czy znak w ASCII=10 to koniec lini i analizuj to
co w buforze (1)
; zapisz znak do bufora
; zwieksz index bufora dla ewentualnego zapisu kolejnego
znaku
reti
RxAnal: ; analiza tego co przyszlo z modemu do znaku końca linii (2)
ret
USART_TXC: ; skopiowanie znaku z RAM do USART Register Description
;obsługa danej która będzie za każdym razem przy wywołaniu tego
przerwania zmniejszała
; się jeden aby wskazywać kolejny znak do wysłania i tak do
osiągnięcia wartości 0
; i jak osiagnie 0 to wyłączamy zezwolenia na przerwanie od
"transmisji kompletnej"
reti
SendCmd: ; wysyłanie polecenia do modemu
; zapisanie w RAM kompletnego polecenia do wysłania
; sprawdzenie ile znaków do wysłania i zapis tej liczby do ram
; wysłanie znaku ENTER do modemu
; zezwolenie na przerwanie od zdarzenia "transmisja kompletna"
ret
(1) czy modem po odpowiedzi wysyła znak końca linii czy również powrotu karetki?
(2) Mam na razie jedną koncepcję polegającą na porównywaniu tego co dostałem z
wzorcami, tylko to dość czasochłonne i zawodne wg mnie ;(
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
Adam Dybkowski - 10-02-2007 02:45
raF napisał(a):
> Chciałbym sterować modemem GSM za pomocą ATmega8 lub wyższym w związku z czym po
> głowie chodzi mi taka koncepcja działania. Czy ide dobrą drogą?
Zdecydowanie nie. Napisz program raczej w języku C. Do takich zadań jak
parsowanie odpowiedzi na komendy AT (szczególnie tych wieloelementowych,
np. zapytanie o zapamiętane SMSy) i tak trzeba będzie napisać nieco
kodu. A pisząc w czystym asemblerze urobisz się po pachy i stracisz masę
czasu. Chociaż nie twierdzę, że nie da się - tylko po prostu nie ma
sensu jeżeli ma to chodzić jak napisałeś na ATmega8 lub większym procu.
Odnośnie pytań: komendy wysyłane do modemu zawsze kończ znakiem CR (13).
Modem zawsze odpowiada kończąc linie znakami CR,LF (13,10). Takie jest
ustawienie standardowe a AFAIR kod końca linii można zmienić którymś
S-rejestrem.
BTW: I nie nazywaj funkcji RxAnal. ;)
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl