Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Problem z wysylaniem smsów przez komendy AT

18 Mar 2007 18:09 1590 5
  • Poziom 10  
    Witam,

    Wykonuję projekt w którym muszę wykorzystać komórkę i komendy AT. Mam program wykonujący konwertowanie do PDU. Nie wiem dlaczego komórka (siemens MT50) nie za każdym razem wysyła smsa.Na 10 prób ok 3 smsy nie zostają wysłane. Jest ona podłączona do Atmegi128 bez użycia Maxa232 tylko bezpośrednio, dodatkowo włączam diodę Zenera która ogranicza mi napięcie linii TX do 3.3V. Próbowałem na różnych szybkościach transmisji, ale nic to nie dało. Poniżej kod którego używam. wydaje mi sie ze procedura konwertowania jest poprawna by inaczej żadnego smsa nie udałoby sie wysłać. Co o tym myślicie?

    $regfile = "M128def.dat" 'typo mikrokontrolera
    $crystal = 16000000 'czestotliwosc zegara

    $hwstack = 100 'wartosc stosu
    $swstack = 120 'wartosc stosu
    $framesize = 100 'wartosc ramki

    $baud1 = 9600 ' predkosc transmisji RS232
    Open "COM2:" For Binary As #1

    Declare Sub Wyslij
    Dim I As Byte
    Dim J As Byte
    Dim K1 As Byte
    Dim K2 As Byte
    Dim K As Byte
    Dim Flaga As Byte
    Dim Pomoc As String * 2
    Dim Pomoc2 As String * 1
    Dim Dlugosc1 As Byte
    Dim Dlugosc2 As Byte
    Dim Numer_tel As Byte
    Dim Komunikat As String * 80
    Dim Numer_gsm As String * 13

    Config Portb.2 = Output
    Led Alias Portb.2

    Do
    Set Led
    Wait 5

    Numer_gsm = "48506778444" ' tu wpisz numer komórki na którą wysyłasz
    Komunikat = "Hej"
    Call Wyslij
    Reset Led

    Wait 20
    Loop
    End


    Sub Wyslij
    I = 1
    Flaga = 0
    Do
    Pomoc = Mid(numer_gsm , I , 1 )
    J = Asc(pomoc)
    Incr I
    Loop Until J = 0
    Dlugosc1 = I - 2
    I = 1
    Do
    Pomoc = Mid(komunikat , I , 1 )
    J = Asc(pomoc)
    Incr I
    Loop Until J = 0
    Dlugosc2 = I - 2
    I = Dlugosc1 Mod 2
    J = Dlugosc1 / 2
    I = I + J
    Numer_tel = 7 + I
    I = Dlugosc2 Mod 8
    J = Dlugosc2 / 8
    J = J * 7
    J = J + I
    Numer_tel = Numer_tel + J
    Numer_tel = Numer_tel + 1
    Print #1 , "AT+CMGS=" ; Numer_tel
    Wait 1
    Print #1 , "001100" ;
    Print #1 , "0B";
    Print #1 , "91";
    For I = 1 To Dlugosc1 Step 2
    J = I + 1
    If J >= Dlugosc1 Then
    Print #1 , "F";
    Else
    Pomoc = Mid(numer_gsm , J , 1 )
    K1 = Asc(pomoc)
    Print #1 , Chr(k1);
    End If

    Pomoc = Mid(numer_gsm , I , 1 )
    K1 = Asc(pomoc)
    Print #1 , Chr(k1);
    Next


    Print #1 , "0000A9";
    Print #1 , Hex(dlugosc2);
    I = 1
    J = 2
    Flaga = 0
    Do
    Pomoc = Mid(komunikat , I , 1 )
    K1 = Asc(pomoc)
    Pomoc2 = Mid(komunikat , J , 1 )
    K2 = Asc(pomoc2)
    K = Flaga Mod 8
    Shift K1 , Right , K
    K = 7 - K
    Shift K2 , Left , K
    K1 = K1 + K2
    Print #1 , Hex(k1);
    Incr I
    Incr J
    Incr Flaga
    If K = 1 Then
    Incr J
    Incr I
    Incr Flaga
    End If
    Loop Until Flaga >= Dlugosc2
    Print #1 , Chr(26);
    End Sub
  • Spec od GSM
    A terminal co zwraca po komendzie ? ok?
  • Poziom 17  
    moze modem w Twoim telefonie tylko przysypia
    w sagem myx7 modem zasypia po ok. minucie ciszy na linii
    jezeli nie chce Ci sie sprawdzac odpowiedzi modemu to wyslij dwa puste 'AT'tenzione z przerwa sekundowa i powinien wstac.
    jesli nie to no to chyba cos w kodzie(nie potrafie go przeczytac), spróbuj wyslac ta sama wiadomosc dokladajac jedna literke.
    jesli nic z tego to moze ten zenek na linii. nie wiem czy konieczny.
    pozdrawiam

    Dodano po 10 [minuty]:

    a i jeszcze takie malenstwo
    "the DCD signal shall be in ACTIVE state while PDU is given"
    to z notki do +CMGS sagem'a. nie wiem czy to standard. hej
  • Poziom 10  
    Witam,

    już poradziłem sobie z tym, problem tkwił w zbyt niskim napięciu na linii Rx procesora. Zrobiłem uklad dopasowujący poziomy napięci na dwóch tranzystorach.

    Może wiecie w jaki sposób najlepiej odebrać potwierdzenie wysłania smsa, chodzi o odebranie danych z telefonu przez RS-232 w języku Bascom
  • Poziom 13  
    na tym forum mówić tylko polska język....

    może chodzi Ci o Hyperterminal, który jest standardowo w Windowsie ?