Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Использование модуля SIM800l


Использование модуля SIM800l

Сообщений 211 страница 224 из 224

211

rom-i написал(а):

Если Flag = 1, то есть отключено. То при очередном приеме по UART, именно при выполнении этой части кода


вполне возможна накладка переменных

нужно всё в архиве ( симуляшка + исходник )

0

212

При первом пуске условие обнуления до Zero = 0. Далее при Flag = 1 должно оставаться Zero = 0.
Пример передачи по терминалу. Температура воды + температура в комнате(пока не использую) + контрольная сумма. Например 35.2 градуса котел, 24.1 комната. Строка для передачи 03522410352241 энтер. После копирования и передачи терминал добавит возврат каретки(в HEX 0A, или Chr(10)). Полная строка 03522410352241 + Chr(13) + Chr(10).
https://yadi.sk/d/MJGGb5VwnChFwg
С перехлестом переменных уже сталкивался. Вот появилась возможность понять как это избежать.
В архиве две версии. V1 про, что идет речь. V2 обработка без контрольной суммы. С этой проблемы нет.

Отредактировано rom-i (2019-07-21 13:40:22)

0

213

rom-i написал(а):

https://yadi.sk/d/MJGGb5VwnChFwg


А симуляция где ?

  Dim Crc As String * 7
  Dim Crcrx As String * 7
  Dim Flag_rx As Bit

Вот Вам и ошибка !
Crcrx = Right(stroka , 7)   -  затирается флаг

Увеличьте
  Dim Crc As String * 7
  Dim Crcrx As String * 7
Сделайте
  Dim Crc As String * 10
  Dim Crcrx As String * 10

0

214

sasha_1973
Симуляция под протеус 8. Все в там.
Дык если переменная 7 символов для чего ее увеличивать?  Dim Crcrx As String * 7
Не допонимаю самой сути. Давно заметил, что текстовые переменные лучьше задавать с плюсом.
Но для чего? Давно хотел задать этот вопрос.

0

215

rom-i написал(а):

Симуляция под протеус 8. Все в там.

нашел, обычно симка вместе с исходником

rom-i написал(а):

Дык если переменная 7 символов для чего ее увеличивать?

затем, что строковая переменная заканчивается "0", который не видно

Вы назначили переменную 7 символов, и все их используете, а в конце т.е., 8 символ = "0"

этот нолик Вам и обнуляет флаг

0

216

rom-i написал(а):

Симуляция под протеус 8


И как ей пользоваться, что бы попасть сюды

  If Flag_rx = 1 Then
     Temper1 = Left(stroka , 4) : Temper2 = Mid(stroka , 5 , 3) : Crcrx = Right(stroka , 7)
     Crc = Temper1 + Temper2
     Temp1 = Val(temper1) : Temp2 = Val(temper2)
     Flag_rx = 0
  End If

0

217

sasha_1973 написал(а):

И как ей пользоваться, что бы попасть сюды

Поставить точку останова на нужную строку и запустить отладочную симуляцию. В качестве прошивки нужно указать не hex, а obj файл.

0

218

Пётр написал(а):

Поставить точку останова на нужную строку и запустить отладочную симуляцию. В качестве прошивки нужно указать не hex, а obj файл.


Очень смешно !

:cool:  :flag:

0

219

rom-i написал(а):

Симуляция под протеус 8


И чем Вы передаете строку, если терминалом протеуса, то он 10 не передаёт, только 13 ?

0

220

sasha_1973

И как ей пользоваться, что бы попасть сюды

Толком не знаю. Но разбирался тыком. Добавил еще один терминал на приеме. Приемный перевел в HEX формат. Обязательно отключить эхо. МК только принимает. Дальше как в посте 214.
Набил строку например 03522410352241. Нажал Enter. Приемный терминал покажет, что к строке добавилось в HEX 00(есть Chr(13)). В терминале нажать Copy. Получается уже скопировал 03522410352241 + Chr(13). Дальше в терминале просто нажать Paste. Терминал добавит к сохраненному 03522410352241 + Chr(13) еще возврат каретки в HEX 0A, или Chr(10). Жутко неудобно, но ***.
Тож самое, и про.

строковая переменная заканчивается "0", который не видно

Огромное спасибо за объяснение. Интересно. Если выводить контрольно черезь UART переменную (в моем случае Crcrx) этот "0" виден будет?

0

221

rom-i написал(а):

Набил строку например 03522410352241. Нажал Enter. Приемный терминал покажет, что к строке добавилось в HEX 00(есть Chr(13)). В терминале нажать Copy. Получается уже скопировал 03522410352241 + Chr(13). Дальше в терминале просто нажать Paste. Терминал добавит к сохраненному 03522410352241 + Chr(13) еще возврат каретки в HEX 0A, или Chr(10). Жутко неудобно, но ***.


А не проще поставить ещё один МК который по кнопке будет этим заниматься, ещё есть COMPIM в протеусе, но нужен виртуальный COMPORT

переменная STRING отображает только символы таблицы, "0" это конец строки в переменной

0

222

Так не эротичнее ?

Reads:
'  $timeout = 10000

    Принятый_символ = Udr

    If Принятый_символ = 13 Then
        Goto Exit_reads
    End If

    If Принятый_символ = 10 Then
         Flag_rx = 1
         Stroka = Буфер_приема
         Буфер_приема = ""
         Goto Exit_reads
    End If

    Буфер_приема = Буфер_приема + Chr(принятый_символ)       '

   Exit_reads:

  Return

0

223

sasha_1973

А не проще поставить ещё один МК который по кнопке будет этим заниматься

)))Это была первая мысля при виде этого черного окна в протеус(про терминал). Но любопытство разобраться победило. Да, и времени было завались. На дежурстве был.

0

224

sasha_1973
Запустил в железе, все отлично. Без контрольной суммы даже при передаче 2400 не надежно. Очень большые пульсации. Кроме шагового движка, еще работает инвертер из 12/220В, и формирование двух токовых фаз. Синуносоидальной формы с помощью ШИМ. Все с Вашей помощью. Огромное спасибо.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Использование модуля SIM800l