logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega2560 i Motorola G24 - wysyłanie SMS przez AT commands, testowanie kodu

Ilidan18 17 Sty 2013 21:24 1482 2
REKLAMA
  • #1 11803783
    Ilidan18
    Poziom 9  
    Witam, mam za zadanie sterować modułem Motorola G24 poprzez atmege2560. Ogólnie w projekcie chodzi o wysłanie sms'a przez moduł. Sterowanie modułem odbywa się poprzez komendy AT. Napisałem wstępny program, którego niestety nie mam możliwości przetestować na komputerze.. Oto kod:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Ogólnie mam 3 pytanka.
    1. Czy ten kod w komunikacji AVR-PC zwróci mi 'T' czy popełniam jakiś błąd?
    2. Korzystam z wewnętrzne oscylatora 1Mhz, czy to wystarczy do BAUD 115200 ?
    3. Czy zamiast całego stringa "AT+CMGS" moge wysyłać modułowi znak po znaku?
  • REKLAMA
  • #2 11803901
    BlueDraco
    Specjalista - Mikrokontrolery
    Przy zegarze 1 MHz możesz transmitować najwyżej z szybkością 4800. Potrzebujesz odbioru danych z UART w przerwaniach. Po każdym poleceniu musisz wysłać CR, LF - najlepiej zapisz to od razu w łańcuchach poleceń, a po wysłaniu - odbierasz i sprawdzasz to, co odpowiedział modem.

    Modem na AT powinien odpowiedzieć AT - to na początek. Powinieneś też odczekać min. 100 ms po odebraniu końca wiersza z modemu, zanim wyślesz nowy wiersz. Ogólnie gadanie z modemem G24 to nie jest prosta rzecz dla początkujących. Jest tam sporo zależności czasowych, których trzeba przestrzegać inaczej łatwo zawiesić komunikację.

    Wysyłając cokolwiek do modemu powinieneś od razu sprawdzać echo z modemu, niekoniecznie po każdym znaku, ale np. po każdej linii. Ja najpierw wysyłałem i sprawdzałem samo "AT", a potem dalszy ciąg polecenia. Jeśli modem nie odbija AT, kończymy wiersz i próbujemy od nowa.

    Poza tym - po co czekasz przed procedurą WriteChar, skoro potem tak samo czekasz w tej procedurze - to się kupy nie trzyma.
  • #3 11804087
    mirekk36
    Poziom 42  
    Ilidan18 napisał:

    Ogólnie mam 3 pytanka.
    1. Czy ten kod w komunikacji AVR-PC zwróci mi 'T' czy popełniam jakiś błąd?


    Przede wszystkim źle napisany kod i tu popełniasz błąd. Poza tym jak chcesz efektywniej działać z modemem to wyłącz sobie echo poleceniem ATE0, bo do niczego ci to nie potrzebne a tylko będzie ci (skoro początkujesz jak widzę z pisaniem w ogóle programów w C) przeszkadzać. Musisz się podszkolić w programowaniu asynchronicznym. Przydałoby się jakieś timery programowe zastosować przy komunikacji z modemem. No a przede wszystkim to bez użycia buforowania np buforów cyklicznych przynajmniej dla odbioru danych z RS232 to będzie strasznie ciężko.

    Ilidan18 napisał:
    2. Korzystam z wewnętrzne oscylatora 1Mhz, czy to wystarczy do BAUD 115200 ?

    Posłuchaj - zajrzyj sobie w DOWOLNEJ nocie AVR do rozdziału UART/USART i tam przejdź do ostatniego podrozdziału. Ujrzysz tabelki z różnymi częstotliwościami taktowania począwszy od 1MHz i z typowymi prędkościami baud rate a do tego z procentem błędów. Zapamiętaj że możesz spokojnie używać tej prędkości z tabelki gdzie procent błędów jest mniejszy = 2% ..... Więc dla 1MHz jak zobaczysz to w ogóle zapomnij o 115200. Z tymi tabelkami nie będziesz musiał nikogo pytać o prędkość przy jakimś tam taktowaniu - zawsze sam zobaczysz ;)

    Ilidan18 napisał:
    3. Czy zamiast całego stringa "AT+CMGS" moge wysyłać modułowi znak po znaku?


    A czym się różni wysłanie stringa od znaku po znaku ???? niczym - tylko czasem pomiędzy wysyłaniem. Wysyłając znak po znaku w końcu się zakałapućkasz .... toż wysłanie stringa w C mając funckcję do wysłania pojedynczego znaku np uart_putc() to proste - sam zobacz ;)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA