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.
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