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

[atmega8][BASCOM/C] me45+terminal-wysłanie smsa w trybie PDU

andrzej_krk 11 Paź 2009 12:18 4676 7
  • #1 11 Paź 2009 12:18
    andrzej_krk
    Poziom 9  

    Witam.

    Testuję telefon Siemensa ME45 przez RS-a. Chcę go później połączyć z atmegą, lecz napotkałem na problem - nie mogę wysłać z tego telefonu smsa w formacie PDU - pod terminalem.

    Czytam sobie równolegle książkę Pana Bogusza o modułach GSM i tematy z elektrody, mi.n. ten:

    https://www.elektroda.pl/rtvforum/viewtopic.ph...0791&sid=eb930b885fb37d4f40c07e188b7026e1

    na którym starałem się bazować.

    Widzę, że mój aparat - ME45 - winien wysyłać 8bitowe znaki ASCII. Toteż w parametrach PDU ustawiam wartości jak w powyższym poście - do czego zmierzam - gdzieś muszę mieć chyba błąd, więc proszę o pomoc.

    Mam dwa pytania:

    1. Czy poprawna jest podana poniżej komenda wysłania smsa w PDU?

    W Bray Terminalu, wpisuje odpowiednio:

    Code:
    at+cmgs=20            //polecenie wysłania SMSa
    
    >                          //pojawia się znak zachęty
    07918405210077F711000B918415017581F100F68F0848454C4C4F2054455354204F4B

    07 - długość pola C.U.
    91 - typ adresu (91 lub 81)
    8405210077F7 - nr C.U. 48501200777
    11 - PO - pierwszy oktet komunikatu
    00 - nr odniesienia dla wiadomości
    0B - liczba cyfr nr-u odbiorcy
    8415017581F1 - nr telefonu odbiorcy
    00 - wyślij jako zwykły SMS
    F6 - 8bitowy komunikat zapamiętany w karcie SIM
    8F - okres ważności
    08 - liczba oktetów wiadomości
    48454C4C4F2054455354204F4B - treść - witaj!

    Po wysłaniu otrzymuję: ERROR.

    2. Wyczytałem, że na końcu komendy należy wpisać <Ctrl+z>.

    Nie bardzo rozumiem w jakim celu i w "jakiej" postaci. W książce jest o tym wspomniane, ale nie przy trybie wysyłania PDU.

    Oba pytania mogę skrócić do jednego - co jest nieprawidłowe w treści którą wpisuję?

    Dziękuję z góry za odpowiedź.

    0 7
  • Pomocny post
    #2 11 Paź 2009 12:27
    M. S.
    Poziom 34  

    Dostosuj do swoich potrzeb i spróbuj tego:

    Code:


    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


    Numer_gsm = "48604604604"                                   ' tu wpisz numer komórki na którą wysyłasz
    Komunikat = "To jest SMS"




    Wyslij:
    Print "ATE0" ; Chr(13)                                   
    Locate 1 , 1
    Lcd "W Nr tel " ; Numer_gsm
    Locate 2 , 1
    Lcd "Text " ; Komunikat
    Wait 1

    Cls : Lcd "Wysylanie"
    Reset Watchdog
    Wait 1
    Cls


    I = 1
    Flaga = 0
    Do
    Reset Watchdog
    Pomoc = Mid(numer_gsm , I , 1 )
    J = Asc(pomoc)
    Incr I
    Loop Until J = 0
    Dlugosc1 = I - 2
    I = 1
    Do
    Reset Watchdog
    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
    Print "AT+CMGS=" ; Numer_tel
    Reset Watchdog
    Wait 1
    Print "000100" ;
    Print Hex(dlugosc1);
    Print "91";
    For I = 1 To Dlugosc1 Step 2
    J = I + 1
    If J >= Dlugosc1 Then
    Print "F";
    Else
    Pomoc = Mid(numer_gsm , J , 1 )
    K1 = Asc(pomoc)
    Print Chr(k1);
    End If
    Pomoc = Mid(numer_gsm , I , 1 )
    K1 = Asc(pomoc)
    Print Chr(k1);
    Next
    Print "0000";
    Print Hex(dlugosc2);
    I = 1
    J = 2
    Flaga = 0
    Do
    Reset Watchdog
    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 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 Chr(26);

    Return

    0
  • #3 11 Paź 2009 13:00
    andrzej_krk
    Poziom 9  

    Dziękuję za odpowiedź, ale..

    Mam gdzieś pewnie błąd w kodzie wysyłanym z terminala i najpierw chcę prawidłowo Bray-em wysłać, później się bawić prockiem.

    <Ctrl+Z> - w jaki sposób to dopisać? <0x1A> ?

    0
  • #4 11 Paź 2009 20:30
    michalko12
    Specjalista - Mikrokontrolery

    andrzej_krk napisał:
    Dziękuję za odpowiedź, ale..

    Mam gdzieś pewnie błąd w kodzie wysyłanym z terminala i najpierw chcę prawidłowo Bray-em wysłać, później się bawić prockiem.

    <Ctrl+Z> - w jaki sposób to dopisać? <0x1A> ?


    Spróbuj "lewy ALT" + "26" z klawiatury numerycznej
    Code:
    ↓♀$☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF...


    I jeżeli to jest terminal z tej strony Link to <0x1A> wstawiasz do stringu jako $1A

    0
  • #6 14 Gru 2009 15:04
    andrzej_krk
    Poziom 9  

    Witam ponownie

    Miałem wymuszoną przerwę ponad miesięczną - niestety - ale do rzeczy.

    Próbuję wysłać smsa pod terminalem - podpiąłem 2 inne telefony : C35i oraz S35 i dalej mam problem z wysłaniem smsa w PDU.

    Znak kończący ciąg znaków ASCII, sławny Ctrl+Z, ma być widziany w terminalu jako : ">"?

    Jeżeli tak to źle skonstruowałem PDU w takim razie. Fajny temat i szkoda by go zostawiać.

    Cytat:
    Xury
    - przeglądałem Twój kod z Bascoma - znak jaki wpisujesz na koniec komendy to Chr(26) - czyli tenże Ctrl+Z? Po kodzie PDU mam wpisać lewy alt + 26 z klawiatury numerycznej w terminalu? Tak oto otrzymuje symbol ">" na końcu i ERROR jako odpowiedź po próbie wysłania.

    Jeżeli tak to nie bardzo wiem gdzie może tkwić problem. Telefon reaguje na komendy AT, da się go "normalnie" konfigurować - tj. opisuje to p. Bogusz w swojej książce. No ale przy próbie wysłania smsa w PDU telefon dosłownie staje (C35 i S35) - nic nie reaguje, nie wysyła żadnych potwierdzeń. ME45 podpięty do terminala zwraca po ok 1 minucie ERROR bez numeru błędu. W telefonach w folderze pojawia się wiadomość wysyłana - gdy ją wybieram z menu telefonu, pokazuje mi komunikat o błędnej wiadomości:

    Po wpisaniu:
    Code:
    at+cmgw=19 
    w telefonie pojawia się błędna wiadomość i jakby czeka na wpisanie danych - tak to rozumiem.


    Gdzie może tkwić problem, czytam sobie inne posty na elektrodzie i kombinuję, kombinuję. Ma ktoś jakiś pomysł/ radę co sprawdzić? Może jednak to PDU źle napisałem.

    Moje PDU:

    07918406010013F011000B918415017581F10000C405D72435A804

    0
  • Pomocny post
    #7 14 Gru 2009 19:11
    xury
    Poziom 39  

    Robisz tak:

    Code:
    Print AT+CMGS= 19 ; Chr(13) ;

    Pamiętaj o średniku na końcu.
    Po tym telefon wysyła ">"
    I teraz dopiero dajesz PDU i kończysz Chr(26)
    19 to liczba długości Twojego PDU w hex minus numer SMSC
    Oblicza się ją tak:
    Ilość znaków w ciągu PDU minus 16 i podzielić przez 2
    Komenda AT+CMGW to zapisuje SMS do pamięci, a nie wysyła.

    Całościowe wysłanie SMS:
    Code:
    Print AT+CMGS= 19 ; Chr(13) ; 07918406010013F011000B918415017581F10000C405D72435A804 ;Chr(26) ;

    Z tym że lepiej dać chwilę opóźnienia po Chr(13)
    A w terminalu to po prostu dajesz CTRL-Z na końcu PDU

    0
  • #8 16 Gru 2009 19:13
    andrzej_krk
    Poziom 9  

    Dziękuję za odpowiedź. Będę próbować.

    Witam ponownie. Temat zmęczony - mam na myśli wymęczony. Błąd jaki popełniałem to nieprawidłowe kodowanie PDU (zamiast litery F w numerze centrum usług widniało E) oraz na końcu znak Ctrl+Z należało poprzedzić takim oto znakiem # (PDU i na końcu w terminalu #026). Przed chwilą wysłałem z procka smsa o własnej treści.

    Od jutra zabieram się za program do odczytu danych.

    Dziękuję Wszystkim za Pomoc. Tematu nie zamykam z prostego powodu - idę dalej z projektem.

    0