AT komutu yollarken CR & LF yi komuta eklemek için ?

Başlatan tekniker_murat, 09 Eylül 2022, 17:53:33

tekniker_murat

Herkese selamun aleyküm hayırlı akşamlar.



Termite diye bir terminal programı indirdim pc min usb portuna bağladığım bir dönüştürücü sayesinde oluşturduğum com port üzerinden elimde olan JDY-40 modülüne çeşitli AT kodları yolluyorum ve anında cevaplarını yolluyor yada gereken işleri yaptırabiliyorum.

Ama asıl mesele termitten önce kullandığım ve neredeyse bir hafta uğraşıp iletişim sağlayamadığım bir program daha var


Serial port terminal diye bir program. Bu programda yollamak istediğim mesaja CR LF eklemesi yapılamıyor ve bu yüzden de haberleşme sağlanamıyor olduğunu öğrendim.

Sonuç olarak termite ile bu işi çözdük ama bu mesajları ben bir de pic ile yollayıp almak istiyorum. Meselenin büyüğü de burada başlıyor :D

Şimdi ben proton basic ile bir at komutu yollamak istediğim zaman için yaptığım programın birazını buraya koyacağım zaten amaç sorumdaki mantığı anlatabilmek olduğu için.

        Device  16F627A
        Include "modedefs.bas"
        CMCON   =   7
        Config  BODEN_OFF,CP_OFF,DATA_CP_OFF,PWRTE_OFF,WDT_OFF,LVP_OFF,MCLRE_OFF,XT_OSC
TRISB=0
TRISA=255
        
        Symbol  tx=PORTB.0
        Symbol  rx=PORTB.1
        
basla:      
        SerOut  tx,N9600,["AT+CLSSA0\r\n"]

Şimdi ben bu kodları daha pic e yükleyerek denemedim sadece işin mantığını öğrenmek istiyorum.

SerOut  tx,N9600,["AT+CLSSA0\r\n"] // <<<<  Bu şekilde kod derleniyor ama at komutlarına uygun mu sizce?

Termite ile yaptığım çalışmada mavi ile yazılı olan benim jdy-40 a yolladığım mesaj yeşil ise onun bana yolladığı mesaj olarak geliyor.



Ben termite programında

Kırmızı ok ile gösterdiğim yeri değiştirip en başı işaretlediğim zaman yani "append nothing" yaptığım zaman iletişim kesiliyor yani hiç bir şey ekleme dolayısı ile cr lf eklememiş oluyorum ve iletişim kesiliyor.

Sonuç olarak ben bu cr lf yi nasıl göndermem gerekiyor 10,13 olarak mı yoksa \n\r olarak mı mesajın başında mı sonunda mı ? bunun mantığı nedir yardımcı olursanız çok sevinirim.
murat.yagci.1984@gmail.com

esensoy

CR = 0x0D
LF = 0x0A

Ben terminal by bray kullanıyorum,
İsterseniz check box eçerek sona CR+LF kendi ekliyor,
İsterseniz son $ işareti ile hex ekleyerek aşağıdaki gibi yapabilirsiniz,

AT+CLSSA0$0D$0A


Dec Oct Hex  Binary  Value
 --- --- --- -------- --------------------------
 000 000 000 00000000 NUL (Null char.)
 001 001 001 00000001 SOH (Start of Header)
 002 002 002 00000010 STX (Start of Text)
 003 003 003 00000011 ETX (End of Text)
 004 004 004 00000100 EOT (End of Transmission)
 005 005 005 00000101 ENQ (Enquiry)
 006 006 006 00000110 ACK (Acknowledgment)
 007 007 007 00000111 BEL (Bell)
 008 010 008 00001000 BS  (Backspace)
 009 011 009 00001001 HT  (Horizontal Tab)
 010 012 00A 00001010 LF  (Line Feed)
 011 013 00B 00001011 VT  (Vertical Tab)
 012 014 00C 00001100 FF  (Form Feed)
 013 015 00D 00001101 CR  (Carriage Return)
 014 016 00E 00001110 SO  (Shift Out)
 015 017 00F 00001111 SI  (Shift In)
 016 020 010 00010000 DLE (Data Link Escape)
 017 021 011 00010001 DC1 (XON)(Device Control 1)
 018 022 012 00010010 DC2 (Device Control 2)
 019 023 013 00010011 DC3 (XOFF)(Device Control 3)
 020 024 014 00010100 DC4 (Device Control 4)
 021 025 015 00010101 NAK (Negative Ack.)
 022 026 016 00010110 SYN (Synchronous Idle)
 023 027 017 00010111 ETB (End of Trans. Block)
 024 030 018 00011000 CAN (Cancel)
 025 031 019 00011001 EM  (End of Medium)
 026 032 01A 00011010 SUB (Substitute)
 027 033 01B 00011011 ESC (Escape)
 028 034 01C 00011100 FS  (File Separator)
 029 035 01D 00011101 GS  (Group Separator)
 030 036 01E 00011110 RS  (Record Separator)
 031 037 01F 00011111 US  (Unit Separator)
 032 040 020 00100000 SP  (Space)
En tehlikeli an "zafer" anıdır.

yas

CRLF olarak göndereceksen 13,10 şeklinde olması gerekiyor, sadece CR yeterli ise 13 göndermen yeterli.
Eğer Modüle gönderdiğin her komutta sonlandırma terminatörü kullanıyorsan her seferinde yazmana gerek yok.
Eğer donanımsal seri haberleşme yapıyorsan böyle tanımlaya bilirsin;
Declare Hserial1_Terminator = CRLF or LFCR or CR
Declare Hserial2_Terminator = CRLF or LFCR or CR
Declare Hserial3_Terminator = CRLF or LFCR or CR
Declare Hserial4_Terminator = CRLF or LFCR or CR
The parameter CR will transmit a single value of 13 at the end of transmission. 
The parameter CRLF will transmit a value of 13 then 10 at the end of transmission. 
The parameter LFCR will transmit a value of 10 then 13 at the end of transmission.

Kendi örneğindeki gibi yazılımsal seri iletişim kullanıyorsan da böyle tanımlaya bilirisin;
Declare Serial_Terminator = CRLF or LFCR or CR

dnacikaya

CR LF " işaretleri için örnekteki gibi 13 10 34 desimal şeklinde kullanabilirsiniz.

HSerOut ["AT+CMGF=1",13,10]
HSerIn 1000,tm,[Wait("OK")]

HSerOut["AT+CPMS=",34,"SM",34,13,10]
HSerIn 1000,m,[Wait("OK")]