SIM800L змінює швидкість обміну за умовчанням

Я використовую ATmega328P з внутрішніми годинниками (8 МГц) з модулем SIM800L. Швидкість обміну даними SIM800L за замовчуванням становить 115 200 бод, і я не можу змусити їх правильно спілкуватися один з одним. Хоча мені вдалося змусити їх розмовляти дуже легко при швидкості передачі в 9600 бод. Але тепер, з новим SIM800L я не можу.

Питання:

Як змінити швидкість передачі даних за замовчуванням для SIM800L? Чи можна запустити ATmega328P за швидкістю обміну 115 200 бод?

Спасибі заздалегідь!

EDIT:

Я знаю, що я можу запустити atmega328p на швидкості передачі даних 115200 з різними кристалами, але це можливо, використовуючи внутрішній кристал.

2

5 Відповіді

Відповідно до спец. SIM800 + Series_Serial + Port_Application + Note_V1.01.pdf , SIM800 налаштовано на автоматичне об’єднання, коли він починається:

Серія SIM800 розроблена в режимі автозавантаження за замовчуванням. Autobauding дозволяє серії SIM800 автоматично визначати швидкість передачі даних про хост-пристрої. У додатку хост-пристрій повинен синхронізувати швидкість передачі даних з серією SIM800. Хост-пристрій повинен спочатку посилати символи "AT" або "at" для синхронізації швидкості передачі даних. Рекомендується відправляти "AT" до тих пір, поки хост-пристрій не отримає відповідь "OK", що означає, що хост-пристрій і серія SIM800 правильно синхронізуються. Після того, як швидкість передачі даних синхронізується, пропонується використовувати команду AT "AT + IPR" для встановлення швидкості передачі даних SIM800 серії відповідно до швидкості передачі даних від хоста. ...

Таким чином, ви можете організувати ваше програмне забезпечення, щоб продовжувати намагатися на 9600 біт/с. Якщо ви отримуєте нормальне з'єднання з такою швидкістю, ви можете або продовжувати використовувати його або переходити на більш високу частоту через "AT + IPR". [Я не прочитав специфікацію, достатню для того, щоб знати, що автоматичне аудіозапис за замовчуванням завжди увімкнено або може бути вимкнено.]

При збільшенні серійних даних bps необхідна точність годинника стає жорсткішою. Де кілька відсотків помилок може бути нормально на 9600 біт/с, під відсоток, ймовірно, необхідно на 115200 біт/с.

На декількох платах я виміряв частоту помилок RC генератора близько 2%, які відповідно до питання Як критичні частоти UART? може бути або не бути достатньо хорошим, щоб дозволити високошвидкісний послідовний зв'язок.

Якщо ви можете виміряти частоту генератора RC ATmega328P, ви можете застосувати поправочний коефіцієнт при запуску. У специфікації (наприклад, Atmel-8271J-AVR-ATmega-Datasheet_11/2015) див. §9.12.1, OSCCAL - Реєстр калібрування осциляторів .

Ваша програма може почати з осцилятора RC використовуючи заводське значення, а потім можете завантажити своє власне значення калібрування в реєстр калібрування осциляторів для перемикання частоти RC, як це необхідно, щоб дошка працювала нормально для серійних даних 115200 біт/с. Або, ви можете перезаписати (в запобіжник EEPROM або область підпису) заводське значення зі своїм власним номером.

Рисунок 32-37, ATmega48PA: Калібрована частота осцилятора на 8 МГц відносно OSCCAL , показує типові частоти для різних значень Реєстру калібрування осциляторів. Можна налаштувати тактову частоту досить близько, щоб послідовний зв'язок працювала нормально.

Значення байтів високого діапазону від 144 до 160 зазвичай переміщують частоту від приблизно 7,4 МГц до 8 МГц (при 85 ℃). У цьому діапазоні кожен лічильник зміщує тактову частоту приблизно на 0,5%. Деталі див. На малюнку. Наприклад, якщо значення 158 дає частоту RC приблизно 7820 кГц, тоді значення 159 може підвищити частоту RC до приблизно 7860 кГц.

Записи з низьким діапазоном 96 через 112 рухаються частотою від приблизно 7,5 МГц до 8,5 МГц. Таке перекриття потребує спроб як низького, так і високого діапазону значень при пошуку кращого значення Calibration Register.

Зауважимо, що на ebay існують недорогі цимометри (частотні лічильники), які можуть достатньо точно виміряти частоти осциляторів, щоб включити запропоноване вище калібрування.

2
додано

Як ви говорите, швидкість обміну даними SIM800L за замовчуванням становить 115200. Отже, вам слід встановити швидкість передачі даних на стороні arduino. І так, можна запустити ATmega328P при швидкості передачі даних 115200 бод.

Ви можете використовувати бібліотеку SoftwareSerial і визначити власний tx і rx pin і встановити швидкість передачі даних відповідно до ваших вимог.

#include   //SoftwareSerial library
SoftwareSerial mySerial(2,3);//RX, TX for your module

void setup()
{
   mySerial.begin(115200);     //Set your buad rate
}

І ви також можете обійтися без цієї бібліотеки.

void setup()
{
  Serial.begin(115200);       //Set your baud rate
}
2
додано
Вибачте, але це не так, ви можете змінити швидкість передачі даних SIM800 відповідною командою AT, AT + IPR (як вже було сказано в іншій відповіді).
додано Автор alancalvitti, джерело
@BenceKaulics Дякуємо за цю інформацію.
додано Автор FirstLastname, джерело

Ну, я не думаю, що швидкість передачі даних за замовчуванням становить 115200. За замовчуванням це autobaud, який не підтримує 115200 baudrate. З таблиці .

serial port properties

Ви можете змінити його за допомогою вже згаданої команди AT + IPR . З інструкції AT можна також перевірити, чи за замовчуванням - autobaud, а також вибрані швидкості передачі даних.

Примітка: Користувач може використовувати команду AT «AT + IPR = x», щоб встановити фіксовану швидкість передачі даних, і налаштування буде автоматично збережено в енергонезалежній флеш-пам'яті.

AT+IPR command

Якщо ви використовуєте 57600, ви, мабуть, все в порядку, і вам навіть не доведеться змінювати налаштування швидкості передачі даних, оскільки це значення підтримується.

1
додано

Швидкість передачі даних можна змінити на 9600 на SIM800L за допомогою команди:

AT+IPR=9600

Потім, щоб зберегти це (щоб тривати між циклами завантаження), дайте команду:

AT&W

Щоб переглянути збережені налаштування, надайте таку команду:

AT&V 
0
додано

З того, що я прочитав до цих пір, проблема в тому, що немає хорошого дільника з 8 МГц осцилятор, щоб отримати в межах специфікації швидкості вище 57,600. Використання внутрішнього генератора також сприйнятливі до зміни температури, так що, здається, це також є непоганим рішенням у багатьох додатках. Проблема полягає в тому, що вона може працювати на одному MPU, але не з наступним.

Наскільки я можу сказати, кращим рішенням є використання осцилятора 7.372800 МГц. Це призводить до того, що процесор працює трохи повільніше, але це також призводить до того, що дільники швидкості передачі даних стають спотовими для майже всіх стандартних і популярних швидкості передачі даних, тобто ви повинні мати можливість працювати не менше 921 000 бодів.

Якщо хтось має краще рішення, я хотів би його почути, оскільки я маю справу з подібною проблемою в тому, що я маю намір взяти у виробництво, яке буде в різних середовищах.

0
додано