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

[Atmega644P][c] Sterowanie modemem gsm przez uart

Scarab 05 Kwi 2011 20:56 3870 13
REKLAMA
  • #1 9364828
    Scarab
    Poziom 11  
    witam
    Chcę wysłać smsa przez modem gsm, sterując nim komendami AT. Od wczoraj stoję w miejscu, wykrywam ">", wpisuję treść smsa, teraz kolej na wysłanie CTRL-Z. Oczywiście badałem temat i wiem, że trzeba wysłać odpowiedni kod w ASCII, jednak w żaden sposób nie mogę tego zrobić, zresztą żadnego innego znaku przez ASCII nie udaje mi się wysłać. Jak to zrobić? Próbowałem na przykład:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    i kilku innych sposobów ale bez rezultatu.
  • REKLAMA
  • REKLAMA
  • #4 9365628
    Scarab
    Poziom 11  
    Obydwa sposoby działają, dzięki wielkie :)
    Na jakiej zasadzie działa pierwszy sposób jest jasne, ale skąd się bierze "\x1a"?

    Nie wiem jeszcze dlaczego nie działa wykrywanie > ,działa bez problemu gdy testuję z terminala w kompie, natomiast nie rozpoznaje, tzn. program zatrzymuje się gdy podłączę Atmegę do modemu. Wykrywam w ten sposób:
    while(uart_getc() !='>');

    Doraźnie problem rozwiązałem za pomocą delaya.
  • Pomocny post
    #5 9365725
    mirekk36
    Poziom 42  
    Scarab napisał:
    Obydwa sposoby działają, dzięki wielkie :)
    Na jakiej zasadzie działa pierwszy sposób jest jasne, ale skąd się bierze "\x1a"?


    Jak myślisz jaki znak by wyszedł gdybyś wpisał coś takiego?

    "\x41"

    podpowiem - duża literka A

    jak widzisz jest to hexadecymalna reprezentacja znaku. Dzięki takiemu zapisowi można przesyłać w stringu znaki niedrukowalne - jak twój znak ESC ale także ENTER "\x0d" , TAB, itd itd itd
  • #6 9370015
    Scarab
    Poziom 11  
    Mógłbym jeszcze prosić o podpowiedź odnośnie wykrycia ciągu znaków, pojawiającego się na uarcie? :)
  • Pomocny post
    #7 9370031
    mirekk36
    Poziom 42  
    Scarab napisał:
    Mógłbym jeszcze prosić o podpowiedź odnośnie wykrycia ciągu znaków, pojawiającego się na uarcie? :)


    Tak, zastosuj bufor cykliczny do odbioru, a później w przerwaniu badaj wystąpienie albo ilość wystąpień znaku 0x0d czyli (ENTER) .... wtedy będziesz wiedział ile przyleciało stringów do bufora i kiedy można je w całości ładnie odczytać.
  • REKLAMA
  • #8 9385947
    rk.
    Poziom 10  
    Podepnę się tutaj, mianowicie wiecie może w jaki sposób zrobić ctrl+Z w terminalu : "minicom" pod ubuntu? Mogą być jakieś inne komendy typu nowa linia czy przesunięcie kursora, składnia jest pewnie ta sama. Obowiązuje pod minicoma jakiś odpowiednik tabeli ASCII?
  • #10 9386479
    krru
    Poziom 33  
    rk. napisał:
    Podepnę się tutaj, mianowicie wiecie może w jaki sposób zrobić ctrl+Z w terminalu : "minicom" pod ubuntu? Mogą być jakieś inne komendy typu nowa linia czy przesunięcie kursora, składnia jest pewnie ta sama. Obowiązuje pod minicoma jakiś odpowiednik tabeli ASCII?


    Sprawdziłem - naciśniecie Ctrl-Z po prostu wysyła kod 0x1A. Minicom jedynie Ctrl-A przechwytuje dla własnych celów.
  • #11 9880928
    Danoda
    Poziom 10  
    Cześć.
    Pozwólcie, że odświeżę temat. Podobnie jak kolega Scarab próbuję wysłać wiadomość sms przy współpracy modemu firmy Motorola model: H24 oraz uKontrolera, które komunikują się przez uart. Korzystam chyba z tych samych bibliotek co kolega Scarab, jednak mimo wpisania w kodzie kodu znaku CTRL-Z w postaci dziesietnej jak i zarówno heksadecymalnej nie dzieje się nic jeśli chodzi o sms, natomiast puszcza sygnałka (komedna ADT). Jak wpisuję poniższą sekwencję komend "z palca" do modemu to wszystko działa. Smsy schodzą. Poniżej kod:

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

    Póki co nie sczytuję znaków odsyłanych przez modem, narazie pomijam to opóźnieniami.
  • REKLAMA
  • #12 9893678
    Danoda
    Poziom 10  
    Problem rozwiązany. Modem oczekiwał na znak ENTER przy przejsciu z trybu komend do trybu wpisywania treści sms. Śmieszne jest tylko to, że przy zwykłej komendzie, chociażby ADT dzwonił pomimo nie potwierdzenia jej znakiem ENTER(13). wystarczyło mu chyba tylko przejście do nowej linii "\n".
  • #14 10232386
    Scarab
    Poziom 11  
    mirekk36 napisał:
    Scarab napisał:
    Mógłbym jeszcze prosić o podpowiedź odnośnie wykrycia ciągu znaków, pojawiającego się na uarcie? :)


    Tak, zastosuj bufor cykliczny do odbioru, a później w przerwaniu badaj wystąpienie albo ilość wystąpień znaku 0x0d czyli (ENTER) .... wtedy będziesz wiedział ile przyleciało stringów do bufora i kiedy można je w całości ładnie odczytać.


    Tak właśnie zrobiłem i wszystko zaczęło działać jak należy. Dodam jeszcze, że modemy SonyEricsson GM/GR47 są dość wrażliwe na odpowiedni poziom sygnału. Musiałem się trochę namęczyć żeby je dostosować, w przeciwnym wypadku modem niby działa ale czasem się resetuje, co niekiedy ciężko wychwycić :)
REKLAMA