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

ATMEGA32 + Siemens S35i - prośba o wyjasnienie

odkuszacz 25 Kwi 2010 11:28 1209 3
  • #1 8000824
    odkuszacz
    Poziom 10  
    Jestem świeży w temacie i mam elementarny problem.
    W sposób właściwy podłączyłem telefon z µP (dzięki temu forum).

    Do przetestowania dwukierunkowej komunikacji (zapytanie-odpowiedź) z Siemens S35i wykorzystałem program użytkownika arkadius - delikatnie zmodyfikowałem wyświetlanie komunikatów na lcd µP.

    Kod cały programu zamieszczę poniżej a teraz pytanie:
    Dlaczego w odpowiedzi otrzymuję AT(...i 2 spacje) a nie odpowiedź na zapytanie czyli OK?

    Próbowałem też innych komend np. AT+CGSN - zapytanie o IMEI - efekt podobny w odpowiedzi: AT+CGSN(...i 2 spacje)

    Za pomoc z góry wielkie dzięki.

    
    $regfile = "m32def.dat"                                     'informuje kompilator o pliku dyrektyw mikrokontrolera
    Set Portc.1                                                 'podswietlenie lcd
    
    $crystal = 8000000                                          'informuje kompilator o częstotliwości oscylatora taktującego mikrokontroler
    $baud = 19200
    
    Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
    Config Lcd = 16 * 2
    
    Const Sizebuff = 200
    Config Serialin = Buffered , Size = Sizebuff                'konfiguracja bufora odbioru
    
    Dim Bajt As Byte
    Dim Odb_txt As String * 200                                 'odb_txt do odbioru danych z telefonu
    Dim Test As Byte
    Enable Interrupts                                           'uruchom przerwania
    
    Cls                                                         'czyszczenie LCD
    Wait 1                                                      'czekaj 1 sek.
    'Print "ATE0"                                                'wyłącz echo
    
    Print "ATE0" ; Chr(13)
    
    
    '---------------------------------
    'Program główny
    
    Do
       Wait 1
       Cls
       'Lcd "wysylam zapytanie"
       Lcd "sending qry"
       Wait 2
    Print "AT" ; Chr(10) ; Chr(13)
     Wait 1
    Cls
    'Lcd "zapytanie wyslane"
    Lcd "qry sended"
    Wait 1
       Cls                                                      'zaczekajmy moment
    
       If Bufspace(1) <> 200 Then                               'jeżeli coś jest w buforze
          Cls
          Lcd "sth in buff"
          Wait 3
          Gosub Dane                                            'przejdź do programu dane
       End If
    
    Loop
    End                                                         'koniec programu
    
    
    '---------------------------------
    'Podprogram odbierania danych
    
    Dane:
    Odb_txt = ""                                                'wyczyść odb_txt
       While Bufspace(1) < Sizebuff                             'dopuki jest coś w buforze
          Bajt = Inkey()                                        'pobierz znak
          Cls
          Lcd "Bajt: " ; Bajt
          Wait 3
          If Bajt <> 13 And Bajt <> 10 Then                     'jeżeli nie jest to znak CR lub LF
             Odb_txt = Odb_txt + Chr(bajt)                      'dodaj znak do Odb_txt
          Else                                                  'w przeciwnym wypadku
             Odb_txt = Odb_txt + " "                            'zastąp je spacją
          End If
       Wend
    
    Cls
    Lcd "receiving"
    Wait 3
    Cls
    
    Lcd "re: " ; Odb_txt
    Wait 3
    
    Cls
    Lcd "and what?"
    Wait 3
    
    Return                                          'end program
    
  • #2 8002404
    OlekM
    Poziom 17  
    Nie mam doświadczenia z tym telefonem, ale większość urządzeń chyba oczekuje znaków 13 i 10 w przeciwnej kolejności. Artykuł na Wikipedii
  • #3 8003450
    rotux
    Poziom 11  
    zanim zapodasz komendę "ATE0" puść ze dwa trzy razy pod rząd komendę "AT", niech ten biedny telefon dowie się, że chcesz z nim gadać z prędkością 19200 ;)
    nie sprawdzaj nawet co telefon odpowiedział na "AT", wyczyść ewentualnie bufor odbiorczy i dopiero puść "ATE0", powinno wrócić "OK"
    jeśli nie pomoże to zmień dodatkowo prędkość gadania na 9600

    pozdr
REKLAMA