Использование программного UART.

Программа «Звонилка».
На примере GSM/GPRS Goouuu Tech IOT-GA6-B 
и микроконтроллере ATtiny85.

Из этого, легко можно сделать сигнализацию. Например: вместо кнопки S2 использовать датчик движения, а  кнопку S1 использовать для того, чтобы успеть выйти из помещения или автомобиля, заменив на фиксированную вкл/выкл
При включении:
- если светится светодиод больше 11 секунд значит модуль не отвечает;
- если мигает светодиод значит идёт инициализация параметров. Если это долго тянется  - значит нужно проверить ответы на соответствие;
- если светодиод погас - значит всё ОК! Можно звонить. 
При нажатии на кнопку S2 светодиод включится, после завершения звонка, через 5 секунд, выключится и можно повторно звонить. Если что-то нештатное произойдёт, то программа перейдёт на инициализацию параметров.  

Программа на BASCOM-AVR. 
'Авторская работа. Автор: Дмитрий Абловацкий.
'Настройка модуля GOOUUU TECH_GA6-B: ATE0, ATV0, AT+IPR=9600
'Настройка микроконтроллера Attiny85: фюзы, изменение только LOW на $E2
$Regfile="attiny85.dat"
$Crystal=8000000
$hwstack=40
$swstack=16
$framesize=32
Dim Buffered As String*30
Dim i_INC As Byte
Dim In_str As Byte

Config Portb.2 = Input
Config Portb.3 = Output
Config Portb.4 = Output
Set PortB.3
CONFIG DEBOUNCE = 100

Open "comb.1:9600,8,n,1" For Output As #1 'TXD-выход
Open "comb.0:9600,8,n,1" For Input As #2  'RXD-вход
M1:
 Do
 WAIT 10 'Пропуск первых ответов и ожидание
 i_INC = 0

  Print #1,"AT+CPAS" 'AT+CPAS Готовность к выполнению команд
  Gosub RXD_IN
  In_str = Instr(Buffered, "0")
  Gosub LED_

  Print #1,"AT+GMM" 'AT+GMM  - Идентификатор модуля
  Gosub RXD_IN
  In_str = Instr(Buffered, "GOOUUU TECH_GA6-B")
  Gosub LED_

  Print #1,"AT+CPIN?" 'Готовность модуля к работе с картой
  Gosub RXD_IN
  In_str = Instr(Buffered, "READY")
  If In_str = 0 Then
  WAIT 2
  Print #1,"AT+CPIN=XXXX" 'XXXX PIN - код
  Gosub RXD_IN
  In_str = Instr(Buffered, "0") '!
  End If
  Gosub LED_

  Print #1,"AT" 'AT Готовность модуля к работе
  Gosub RXD_IN
  In_str = Instr(Buffered, "0")
  Gosub LED_

  Print #1,"AT+CSQ" 'AT+CSQ Уровеь сигнала
  Gosub RXD_IN
  In_str = Instr(Buffered, " ")
  INCR In_str
  Buffered=Mid(Buffered,In_str,4)
  If VAL(Buffered) > 8 Then
  In_str = 1
  Else
  In_str = 0
  End If
  Gosub LED_

  Print #1,"AT+CREG?" 'AT+CREG? Тип регистрации сети
  Gosub RXD_IN
  In_str = Instr(Buffered, "1,1")
  Gosub LED_

  Print #1,"AT+CBC?" 'AT+CBC? Напряжеие питания
  Gosub RXD_IN
  In_str = Instr(Buffered, ",")
  INCR In_str
  INCR In_str
  Buffered=Mid(Buffered,In_str,2)
  If VAL(Buffered) > 20 Then
  In_str = 1
  Else
  In_str = 0
  End If
  Gosub LED_

  Loop Until i_INC = 7

  Reset PortB.3

  Do
  i_INC = 0
  BITWAIT Pinb.2, Set
  Set PortB.3

  Print #1,"ATD+7XXXXXXXXXX;" 'Набрать номер 
  Gosub RXD_IN
  In_str = Instr(Buffered, "0")
  Gosub ATD_

  WAIT 20 'ждать 20 сек

  Print #1,"ATH" 'Повесить трубку
  Gosub RXD_IN
  Gosub RXD_IN
  Gosub RXD_IN
  In_str = Instr(Buffered, "0")
  Gosub ATD_

  If i_INC < 2 Then
  GOTO M1
  End If

  WAIT 5
  Reset PortB.3
  Loop
  End
RXD_IN:
Input #2, Buffered
Return
LED_:
   If In_str > 0 Then
   Reset PortB.3
   INCR i_INC
   End If
   WAIT 2  'Пропуск ненужных ответов
   Set PortB.3
   WAIT 1
   Return
ATD_:
If In_str > 0 Then
INCR i_INC
End If
Return

Скачать файл программы GOOUUU TECH_GA6-B.bas

Ответы от GOOUUU TECH_GA6-B на команды микроконтроллера. 

Комментариев нет:

Отправить комментарий