This is great! Over the past few days since you've sent this post I have purchased a prepaid gsm sim-card for use with my GBoard (original, non-pro version, http://imall.iteadstudio.com/im120411004.html ). I will try using TCP over GPRS ( http://vsblogs.wordpress.com/2013/11/28/tcp-connection-over-gprs-using-sim900-and-at-commands/) as soon as I get the time.
Matthias, I have been translating the untranslated comments to English. I can post my tcp example for a sim900-test.frt file soon enough. My sourceforge.net username is "lowfatcomputing" btw. Regards, Andreas Wagner On Sat, May 17, 2014 at 11:21 AM, Абдрахимов Илья <ily...@inbox.ru> wrote: > Hi! > Please forgive me for not knowing the English language! Forced to use > the computer translator. Want to offer for consideration a small library > to work with the controller GSM/GPRS SIM900, which is located on the > module GBoard Pro http://imall.iteadstudio.com/im130514001.html . > > > \ > \ sim900.f > \ ~ilya > \ 12.02.2014 > \ SIM900_TXD - PH0 > \ SIM900_RXD - PH1 > \ SIM900_RST - PL2 > \ SIM900_PWR - PL3 > > > \ Для начала общения с sim900 надо выдать в порт "AT" > > marker =sim900= > \ USART2 > &214 constant UDR2 \ USART I/O Data Register > &208 constant UCSR2A \ USART Control and Status Register A > $80 constant UCSR2A_RXC2 \ USART Receive Complete > $40 constant UCSR2A_TXC2 \ USART Transmitt Complete > $20 constant UCSR2A_UDRE2 \ USART Data Register Empty > $10 constant UCSR2A_FE2 \ Framing Error > $08 constant UCSR2A_DOR2 \ Data overRun > $04 constant UCSR2A_UPE2 \ Parity Error > $02 constant UCSR2A_U2X2 \ Double the USART transmission speed > $01 constant UCSR2A_MPCM2 \ Multi-processor Communication Mode > &209 constant UCSR2B \ USART Control and Status Register B > $80 constant UCSR2B_RXCIE2 \ RX Complete Interrupt Enable > $40 constant UCSR2B_TXCIE2 \ TX Complete Interrupt Enable > $20 constant UCSR2B_UDRIE2 \ USART Data register Empty Interrupt Enable > $10 constant UCSR2B_RXEN2 \ Receiver Enable > $08 constant UCSR2B_TXEN2 \ Transmitter Enable > $04 constant UCSR2B_UCSZ22 \ Character Size > $02 constant UCSR2B_RXB82 \ Receive Data Bit 8 > $01 constant UCSR2B_TXB82 \ Transmit Data Bit 8 > &210 constant UCSR2C \ USART Control and Status Register C > $C0 constant UCSR2C_UMSEL2 \ USART Mode Select > $30 constant UCSR2C_UPM2 \ Parity Mode Bits > $08 constant UCSR2C_USBS2 \ Stop Bit Select > $06 constant UCSR2C_UCSZ2 \ Character Size > $01 constant UCSR2C_UCPOL2 \ Clock Polarity > &212 constant UBRR2 \ USART Baud Rate Register Bytes > > &102 constant USART2__RXAddr \ USART2, Rx Complete > > > &258 constant PORTH \ PORT H Data Register > &267 constant PORTL \ PORT L Data Register > 250 constant rbufsize \ размер буфера > > PORTH 0 portpin: SIM900_RXD \ > PORTH 1 portpin: SIM900_TXD \ > PORTL 2 portpin: SIM900_RST \ > PORTL 3 portpin: SIM900_PWR \ > > rbufsize buffer: rx-buf \ Приёмный буфер / Receive buffer > rbufsize buffer: tx-buf \ > variable b-count \ кол-во принятых байт / The number of bytes received > variable cr-flag \ флаг конца строки / the flag of the end of the > line > > > \ Включаем/выключаем питание / Included on/off power > : sim900-pwr > SIM900_PWR low > 100 ms > SIM900_PWR high > 1000 ms > SIM900_PWR low > ; > > \ Ини > : usart2-init ( n -- ) \ Где n - константа скорости COM-порта / Where n > is the rate constant of the COM port > UBRR2 c! \ > [ UCSR2B_RXCIE2 \ Прерывение по получению символа > UCSR2B_RXEN2 \ Прием вкл. > UCSR2B_TXEN2 \ Передача вкл. > or or ] literal UCSR2B c! > ; > > \ Начинаем писать в буфер с начала > : b2begin rx-buf rbufsize erase 0 b-count ! ; > \ Помещаем байт в буфер > : b2buf ( n -- ) rx-buf b-count @ + c! ; > \ Проверяем/устанавливаем флаг конца строки > : ?cr rx-buf b-count @ 1 cells - + @ $0a0d = cr-flag ! ; > \ Принимаем один байт в буфер > : 1b-rcv > UDR2 c@ > b-count @ rbufsize < > if > b2buf 1 b-count +! > else > b2begin \ Стираем буфер и счетчик байт > b2buf > then > ?cr > ; > \ Отправляем один байт / Send one byte > : 1b-send ( n -- ) > 1000 0 \ Тупой таймаут > do > UCSR2A c@ UCSR2A_UDRE2 and > if leave then > loop UDR2 c! ; > > : cr-send $0d 1b-send $0a 1b-send ; > > \ Посылаем счетную строку (RAM) / Send counting string (RAM) > : _str-send ( adr n -- ) b2begin over + swap ?do i c@ 1b-send loop > cr-send ; > : str-send tx-buf asciiz> _str-send ; > > \ Посылаем счетную строку (FLASH) / Send counting string (FLASH) > : fstr-send ( adr n -- ) tx-buf dup rbufsize erase imove str-send ; > > \ Добавить скомпилированную строку в буфер / Add compiled a string to > the buffer > : +txf ( adr n -- ) tx-buf +buff ; > \ Добавить скомпилированную строку с начала буфера / Add compiled a row > since the beginning of the buffer > : >txf ( adr n -- ) tx-buf rbufsize erase +txf ; > > : +tx tx-buf +buf ; > \ Добавить символ в буфер > : +txc ( c -- ) tx-buf +sym ; > > char " constant \q > : \" \q +txc ; > > > : sim900-init > SIM900_RXD pin_input > SIM900_TXD pin_output > SIM900_PWR pin_output > SIM900_RST pin_output > ['] 1b-rcv USART2__RXAddr int! +int \ Устанавливаем прерывание > ; > > Usage example: > > \ Инициализация GSM (SIM900) > : gsm-init > 0 cr-flag ! > b2begin > sim900-init > 103 usart2-init \ Скорость 9600 / Speed 9600 > sim900-pwr \ Включаем модуль / Power on > 1000 ms > s" AT+CMGF=1" fstr-send > s" AT+CSCS=" ( rx-tx-buf imove) >txf > s" GSM" +txf \" > str-send \ tx-buf asciiz> str-send \ Устанавливаем GSM кодировку / > Installed GSM encoding > s" ATE0" fstr-send \ Убираем эхо / Remove the echo > s" AT+CNMI=2,2,0,0,0" fstr-send \ Сразу видим текст SMS / > Go see text SMS > ; > > > : main > gsm-init > s" ATI" fstr-send 200 ms rx-buf asciiz> type cr \ Display Product > Identification Information > s" AT+CCLK?" fstr-send 200 ms rx-buf asciiz> type cr \ Get the value of > the built-in clock > ; > > > The library is the word from the library strm.f > > \ String manipulations > \ ~ilya > \ 19.12.12 > marker =mystring= > : zlen dup begin dup c@ while 1+ repeat swap - ; > : asciiz> dup zlen ; > : zplace ( a u buf -- ) swap over over + 0 swap c! cmove ; > : +zplace ( a u buf -- ) asciiz> + zplace ; > \ Добавить символ c в конец строки adr > : +sym ( c adr -- ) asciiz> + c! ; > > : +buf ( adr n adr1 -- ) +zplace ; > > \ Копируем строку из flash в ram > : fmove ( f-adr r-adr n -- ) > rot swap > dup 2/ swap over 2* - + > over + swap > ?do > i @i over ! cell+ > loop > drop > ; > > : +buff ( adr n adr1 -- ) asciiz> + swap fmove ; > > -- > Bye! > Илья > > > > ------------------------------------------------------------------------------ > "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE > Instantly run your Selenium tests across 300+ browser/OS combos. > Get unparalleled scalability from the best Selenium testing platform > available > Simple to use. Nothing to install. Get started now for free." > http://p.sf.net/sfu/SauceLabs > _______________________________________________ > Amforth-devel mailing list for http://amforth.sf.net/ > Amforth-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/amforth-devel > ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Amforth-devel mailing list for http://amforth.sf.net/ Amforth-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amforth-devel