Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[M8][bascom] Sterownik GSM na tel Siemens C35

gray77 31 Dec 2011 12:23 3204 7
SterControl
  • #1
    gray77
    Level 12  
    Witam wszystkich w tym ostatnim dniu roku 2011 i przesylam serdeczne zyczenia na nadchodzacy rok.

    Ostatnio zainteresowalem sie sposobem sterowania powiedzmy na poczatek LEDami (on/off) za pomoca telefonu.
    Po przeszukaniu forum i innych stron, zdobylem wiele wiedzy (komendy AT, kodowanie PDu, itp), postanowilem stworzyc swoj sterownik.

    I teraz sie nasuwaja pytania.
    Stworzylem taki kod:
    Code: basic4gl
    Log in, to see the code

    Na poczatek chcialem reagowac na przychodzaca rozmowe, w pozniejszym czasie bede rozwijal program o kolejne funkcje. Podlaczenie pomiedzy M8 a C35 jest takie (pominalem wszystko inne bo dziala oporocz komunikacji). Dioda zenera jest wstawiona 3.3V.
    [M8][bascom] Sterownik GSM na tel Siemens C35

    1. Dlaczego czasami na LCD (sluzacym do monitorowania na razie co sie dzieje) dostaje odpowiedz z tel jako A zamiast OK? Czasami dostane OK lub ERROR ale zazwyczaj jest A. Podczas polaczenia tel z komp w HyperTerminalu wszystko jest ok. wysylajac jakakolwiek komende zawsze jest odpowiedz OK. Czy to jest normalne? Jak to naprawic?
    2. Czasami dostaje cos takiego w odpowiedzi na AT+CLIP: krzak krzak krzak OK Krzak krzak +CLIP krzaki. Czyli modem odpowiada ale gdzies pojawiaja sie zaklocenia.
    3. Co zaobserwowalem po dodaniu manualnego przycisku z komenda dzwon na moj nr, ze M8 nie za bardzo chce podjac komunikacje z tel. W HyperTerminalu wszystko jest ok, komenda jest poprawnie wysylana.
    4. Reakcja uC jest prawidlowa na nadchodzace polaczenie. Pokazuje RING na moim LCD nawet pomimo ustawienia prezentacji nr (powinien rowniez pokazac sie nr tel), jednak pomija komende rozlaczania polaczenia (znow wraca problem komunikacji M8 <-> tel)

    Mam nadzieje, ze uzyskam pomoc w rozwiazaniu powyzszych problemow i bede mogl nadal rozwijac swoj program. Oczywiscie beda sie pojawiac kolejne klopoty, ktore z pomoca kolegow, doprowadze do rozwiazania. Tak wiec watek jest jak najbardziej rozwojowy.
    Z gory dziekuje za odpowiedzi.
  • SterControl
  • SterControl
  • #3
    Jaca
    Level 31  
    1. Samo Print dodaje na końcu zakończenie linii więc Chr(13) i średniki nie są potrzebne
    2. Te "krzak krzak" to zapewne CR LF o kodach ASCII 13 i 10 i jest to normalne - wyfiltruj je z ciągów tekstowych i będzie po problemie.
  • #5
    Jaca
    Level 31  
    xury wrote:
    Samo Print bez średnika na końcu daje CRLF i dla tego są problemy.

    Cytat z helpa:
    Quote:
    You can use a semicolon (;) to print more than one variable at one line.

    When you end a line with a semicolon, no linefeed and carriage return will be added.


    Wyśle dodatkowy CR:

    Code: basic4gl
    Log in, to see the code


    Prawidłowe wysłanie komendy:

    Code: basic4gl
    Log in, to see the code


    Znaki CRLF "{013}{010}" wysyłane z modułu należy sparsować/wyfiltrować by podzielić odpowiedź z modułu na linie.
  • #6
    xury
    Automation specialist
    Właśnie, że nie kolego Jaca.
    Prawidłowe wysłanie to:
    Code: basic4gl
    Log in, to see the code

    Jeśli wyślesz samo tak jak Ty to otrzymasz Error po odebraniu przez TA znaku <LF>
    Wysyłanie komend do telefonu musi się kończyć tylko znakiem <CR> a Print standardowo wysyła <CR><LF>
  • #7
    Jaca
    Level 31  
    xury, masz rację, że komenda wysyłana do modułu powinna być zakończona samym <CR>. Z doświadczenia wiem jednak, że zakończenie <CR><LF> również działa poprawnie.

    Problemy w programie autora są raczej na poziomie odbioru odpowiedzi z modułu (trzeba wykryć <CR> jako znak końca linii oraz usunąć <CR> i <LF> do dalszej obróbki danych odpowiedzi).
  • #8
    gray77
    Level 12  
    Dziekuje za podpowiedzi.
    Pomimo, ze zastosowalem dopasowanie napiecia na lini UARTu, komunikacja nie zawsze chciala dzialac.
    Zmienilem wiec zasilanie Atmegi z 5V na 3.3V, polaczylem tel z uC bezposrednio i teraz smiga az mila. Za kazdym razem otrzymuje komunikat zwrotny OK.
    Wykrywanie dzwoniacego nr tez juz dziala jak nalezy i jest reakcja na "autoryzowany nr".

    Komenda np:
    Code: basic4gl
    Log in, to see the code
    dziala jak nalezy, lacznie ze srednikiem. To jest to czego oczekiwalem. Musialem tylko zmienic ten fragment w podprogramie odbierania danych z bufora:
    Code: basic4gl
    Log in, to see the code
    czyli odczytuje caly bufor a nie tylko do momentu dostania CHR(13).

    Teraz czas najwyzszy zaczac watek z odczytywaniem sms z telefonu i dekodowanie go. Mam kilkanascie przykladow, z ktorych sprobuje sklecic ten podprogram.
    Na pewno bede was prosil o pomoc w tym przypadku.

    I jeszcze jedno, jak wpiac sie pomiedzy uC i tel z MAX232 aby widziec w terminalu cala komunikacje pomiedzy uC a tel?
    Jakbym sie nie wpial to albo nic nie ma albo tel gubi zasieg (niedopasowane napiecia)?