BASCOM-AVR: składnia komendy ATD dla modemów GSM, SIMCom, Quectel – wybieranie numeru przez UART

Pytanie

jaka jest składnia dla komendy ATD w bascomie

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

  • W BASCOM-AVR nie istnieje instrukcja ATD jako słowo kluczowe języka. ATD to komenda modemu (Hayes/AT).
  • Składnia, którą wysyłasz z BASCOM do modemu przez UART, to:
    • połączenie głosowe: ATD;
    • w BASCOM: Print "ATD" ; Numer ; ";" (bez średnika na końcu linii BASCOM, aby dodać CR/LF)

Kluczowe punkty

  • ATD wybiera numer; średnik „;” na końcu wymusza połączenie głosowe (bez „;” modem spróbuje połączenia danych CSD).
  • W BASCOM wysyłasz ciąg ASCII komendą Print przez UART; CR (ASCII 13) kończy linię polecenia (BASCOM domyślnie dodaje CR/LF).

Szczegółowa analiza problemu

  • Kontekst: ATD jest interpretowane przez modem GSM/LTE, nie przez kompilator BASCOM. Rola BASCOM to poprawne zestawienie UART i wysłanie/obsługa odpowiedzi.
  • Składnia AT: „AT” + „D” (Dial) + numer + „;” dla głosu + CR.
  • Zakończenie komendy: standard AT wymaga CR. BASCOM po Print dodaje CR i LF (LF zwykle tolerowany przez modemy).
  • Konkatenacja w BASCOM:
    • Średnik w instrukcji Print łączy pola bez spacji. Nie dodawaj średnika na końcu linii, jeśli chcesz, aby BASCOM dodał CR/LF.

Przykład (sprzętowy UART)

$regfile = "m328pdef.dat"
$crystal = 16000000
$baud = 9600
Dim Numer As String * 16
Numer = "+48123456789"
' Dobre praktyki inicjalizacji modemu:
Print "ATE0"        ' wyłącz echo
Waitms 100
Print "AT+CMEE=2"   ' czytelne kody błędów
Waitms 100
' Wybieranie numeru – połączenie głosowe (średnik na końcu numeru)
Print "ATD" ; Numer ; ";"

Obsługa odpowiedzi (wariant prosty, blokujący)

Dim R As String * 64
Input R                      ' czyta do CR
If Instr(R , "OK") > 0 Then
   ' komenda przyjęta
Elseif Instr(R , "BUSY") > 0 Or Instr(R , "NO CARRIER") > 0 Then
   ' brak połączenia
Elseif Instr(R , "ERROR") > 0 Then
   ' błąd (szczegóły przy AT+CMEE=2)
End If

Wysyłanie z programowego UART (Soft UART)

Open "COMD.1:9600,8,N,1" For Output As #1
Dim Numer As String * 16 : Numer = "+48123456789"
Print #1 , "ATD" ; Numer ; ";"
Close #1

Uwagi praktyczne

  • Bez „;” na końcu numeru większość modemów spróbuje połączenia danych (CSD) i w nowoczesnych sieciach zwróci „NO CARRIER”.
  • Zadbaj o: $baud zgodny z modemem, zasilanie modemu (impulsy 1–2 A), poziomy logiczne (wiele modułów 1,8–2,8/3,3 V – konieczny konwerter poziomów przy MCU 5 V), ewentualnie RTS/CTS lub niższy baud bez sprzętowego flow-control.
  • Parsowanie odpowiedzi uwzględnia echo (jeśli ATE1). Zwykle warto ustawić ATE0.

Aktualne informacje i trendy

  • W wielu sieciach 2G/3G (CS voice) jest wygaszane; połączenia głosowe wymagają VoLTE i wsparcia głosu w module/modemie. ATD pozostaje komendą wybierającą, ale sukces zależy od:
    • wsparcia CSFB/VoLTE w module,
    • konfiguracji operatora/SIM (np. brak VoLTE → NO CARRIER/ERROR),
    • poprawnej rejestracji i profilu usług.
  • Korzystaj z AT+CLCC/AT+CPAS do monitorowania stanu połączenia oraz ATH do rozłączenia.

Wspierające wyjaśnienia i detale

  • Minimalna sekwencja przed ATD:
    • sprawdź komunikację: „AT” → „OK”
    • PIN: „AT+CPIN?” → „READY”
    • rejestracja: „AT+CREG?” lub „AT+CEREG?” (LTE)
    • siła sygnału: „AT+CSQ”
  • Zakończenie połączenia: „ATH” (lub „AT+CHUP” w niektórych modułach).
  • Dla większej niezawodności w BASCOM:
    • Config Serialin = Buffered , Size = 128
    • Odbiór bajtów w przerwaniu i prosty parser linii zakończonych CR.

Aspekty etyczne i prawne

  • Automatyczne wybieranie numerów może podlegać ograniczeniom (np. regulacje dot. autodialerów, zgód odbiorcy).
  • Połączenia alarmowe (112/911) mogą wymagać spełnienia dodatkowych wymogów – nie polegaj wyłącznie na module bez weryfikacji zgodności.

Praktyczne wskazówki

  • Zawsze rozpoczynaj od ATE0 i ATV1 (odpowiedzi tekstowe), ustaw CMEE=2.
  • Loguj surową komunikację (np. przez UART debug) – ułatwia diagnozę.
  • Dodaj time‑outy i ponawianie prób (np. 30–60 s na zestawienie).
  • Testuj najpierw z terminala PC (USB‑UART), potem przenieś sekwencję do BASCOM.

Ewentualne zastrzeżenia lub uwagi dodatkowe

  • Składnia ATD jest stała, ale zachowanie i kody odpowiedzi różnią się między producentami (SIMCom, Quectel, Telit). Zawsze weryfikuj w manualu konkretnego modułu (sekcja „Dialing/Voice Call”).
  • Niektóre modemy wymagają formatu numeru E.164 (z „+”) i poprawnego profilu audio (np. AT+CLVL, AT+CHFA) do połączeń głosowych.

Sugestie dalszych badań

  • Dokumentacja AT twojego modułu (rozdziały: „ATD Dial”, „Call control”, „Error codes”).
  • Przykłady producenta dla Voice/CS/VoLTE.
  • Implementacja bufora kołowego i parsera w BASCOM (przerwania UART).

Krótkie podsumowanie

  • Składnia komendy, którą wysyłasz z BASCOM do modemu, to: ATD; zakończone CR.
  • W BASCOM realizujesz to przez UART, np.: Print "ATD" ; Numer ; ";" (pozostaw Print bez końcowego „;”, aby BASCOM dodał CR/LF).
  • Średnik po numerze jest istotny dla połączeń głosowych; bez niego modem podejmie próbę połączenia danych.
  • Upewnij się, że modem/sieć wspierają głos (CS/VoLTE), a warstwa sprzętowa i zasilanie są poprawnie zaprojektowane.

Oceń odpowiedź:
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.

Zadaj dodatkowe pytanie Sztucznej Inteligencji

Czekaj (2min)...