Уведомления
Очистить все

Прошу помощи! Atmega16 + GSM модуль +GNS-MC35iU (Siemens)

1 Посты
1 Пользователи
0 Likes
4,529 Просмотры
novus2004
(@novus2004)
New Member
Присоединился: 15 лет назад
Сообщения: 1
Topic starter  

Доброго времени суток, уважаемые форумчане.
В рамках курсовой работы, разбираюсь с сопряжением AVR c GSM модемом.
Итак, в наличие:
1) Отладочная плата AVR Easy http://kosmodrom.com.ua/data/avr-easy.php c установленным ATMEGA 16-16PU
2) GSM модем-терминал Novacom Wireless GNS-MC35iU (Siemens) c портами RS232 USB
3) BASCOM AVR в качетсве средства разработки, прошиваю МЕГУ через JTAG прямо на отладочной плате.
4) COM кабель между платой и модемом (1 к 1 все проводники - сам паял))
5) COM кабель между платой и модем 1 к 1 только 2-2, 3-3, 5-5 - RX,TX,GND
6) мои кривые руки....... Ж)

ЗАДАЧА: написать программу, чтобы при нажатии кнопок на отладочной плате (С0, С1, С3)- модем звонил по записанным в программе номерам.
Задача, разбита на несколько этапов и на данном этапе я пытаюсь инициализировать модем командой AT и получить ответ ОК
Апноуты изучил, но не совсем понял.

Фьзами выставил частоту внутр. кварца МК на 8 мгц
AT командой установил скорость порта модема в 9600
В данном коде, я в цикле отправляю АТ команду модему, получаю даные от модема и жду пока он мне ответит ОК - а затем включаю светодиоды на макетки (порт В)
В процессе отладки, выяснятся, что я получаю в ответ - ту же команду, что и послал модему.
Подключал COM порт AVR easy напрямую к компу - пакеты снифером принимаются отлично.
Подключал модем к компу - управляется отлично.
Подключение проводил двумя типами кабелей ( см. выше п.4 и п.5)
Не могу понять в чём дело - ПОМОГИТЕ!!!!!!!

Уже 4-й день бьюсь - зашёл в тупик.
и комп компанды с AVR видит - и модем с компа.
А связать модем и МК не получается.

Помогите советами!!! Очень жду... Огромное спасибо.

Вот мой код (данного этапа):

$regfile = "m16def.dat"
$baud = 9600
$crystal = 8000000

Config Portb = Output
Config Serialin = Buffered , Size = 16
Config Serialout = Buffered , Size = 64

Dim I As Byte
Dim J As Byte
Dim Nm As Byte
Dim S As String * 64
Dim Slen As Byte
Dim J1 As Byte

Declare Sub Getline(s As String)
Declare Sub Flushbuf()

Dim I1 As Byte , B As Byte
Dim Sret As String * 66 , Stemp As String * 6

Enable Interrupts

Portb = 255

Wait 1
M1:
Portb = 255
Flushbuf

Print "AT"
Portb = 0
S = ""
Slen = 0
J1 = 0
Getline S
Flushbuf
Slen = Len(s)

If Slen > 1 Then
J1 = Instr(s , "ОK")
If J1 <> 0 Then
'' УРА
Portb = 100
Wait 2
Wait 25
Else
Goto M1

End If

Else
Goto M1

End If

Goto M1

End

Sub Getline(s As String)
S = ""
Do
Waitms 50
B = Inkey()
Select Case B
Case 0 'nothing
Case 13 ' we do not need this one
Case 10 : If S <> "" Then Exit Do ' if we have received something
Case Else
S = S + Chr(b) ' build string
End Select
Loop
End Sub

'flush input buffer
Sub Flushbuf()
Waitms 100 'give some time to get data if it is there
Do
B = Inkey()
Waitms 50 ' flush buffer
Loop Until B = 0
End Sub


Цитата