Обмен информацией между модулем и ардуиной не такой уж и объёмный. Сколько там занимают АТ команды и ответы на них. Почти ничего. Так-что скорость здесь не критична. Модуль дольше обрабатывает команды. А вот чем меньше скорость обмена, тем меньше вероятность сбоев от помех и всяких наводок. По моему мнению снижение скорости не только не повредит, но и будет полезным.
Опыт работы с UART говорит об обратном, низкие скорости сбоят сильнее средних (порядка 19200), во всяком случае на МК с частотами 16МГц.
очень спорное, неоднозначное и в общем неверное утверждение. Один частный случай (что с вами произошло) не является доказательством.
Погуглил на эту тему, нашел похожие наблюдения когда при высокой частоте МК низкая скорость UART работает нестабильно. Но до конца не понял почему именно.
в хороших (а атмел - хорошие) мк при любой скорости на любой частоте мк при кратности частоты кварца частоте выборки модуля (а при низкой скорости usart всегда) usart мк все работает стабильно. Погуглив на темы "опровержение теории Эйнштейна" или "опровержение теории Дарвина", и даже "опровержение таблицы умножения" любой может найти якобы аргументы в пользу этого антинаучного треша.
брр... вы вообще про какой уарт? программный или аппаратный? или каждый уже себе вживил блок телепатии на ардуине?? аппаратный на любых скоростях работает стабильно, программный на любых скоростях работает не стабильно.
отнюдь. Если кварц имеет некратную частоте выборок usart частоту, то не при любых. Ну usart-то конечно работает стабильно, но на левой, нестандартной частоте. А программный, если частота таймера четко равна частоте выборок usartа, работает абсолютно стабильно. Пуркуа бы не па? По крайней мере тот программный uart, который я делаю для себя. Но вообще -то речь про аппаратный.
тут конечно микроконтроллер виноват и интерфейс, что кварц нестабилен. и от кварца частота таймера конечно не зависит.
речь не о стабильности, а о невозможности ТОЧНО выбрать частоту usart поясню: UBRR = ( F /( B * 16 ) ) - 1 Где: F — тактовая частота, на которой работает микроконтроллер avr, например 11059200 для кварца 11.0592 МГц B — требуемая скорость, например 115200 (бит/с) так вот не для любой частоты кварца можно точно выбрать требуюмую скорость B Зависит, не зря же я написал:
Ребят, подскажите, а что такое пин VDO, и как пользоваться им и пином RST у вот такого модуля - http://ru.aliexpress.com/item/SIM80...uad-Band-W-Antenna-Cable-Cap/32468864144.html
Модуль получил, запитал через понижающий dc-dc на чипе mp2307 (самый маленький который, еще меньше, чем mp1584). Взял мощный БП 12V / 3A, снижаю до 4.1V. Модуль включается, звонок на него проходит, но в терминале на любые команды в ответ реакция есть, но крякозябрами. Перебрал все скорости - ситуация не меняется. Очень редко проскакивают осмысленные куски типа "ING", "RROR", "+PBR" Грешу на то, что RX и TX напрямую в uno идут, без I2C преобразователя. Но видел, что у многих работает и так. Через usb-ttl пока не пробовал, под рукой нет. У кого-нибудь есть идеи, как чинить?
На модуле есть контакт 5В. Туда надо подать именно 5В, дальше через диод напряжение еще снизится. Ну и подключение RX TX проверьте. У меня такое было, когда контакт нормальный отсутствовал. Чуть не забыл - скорость порта тоже надо выяснить, и правильно выставить в скетче.
Как я понял, подавать 5V через диод или сразу 4.1-4.2V - без разницы. Для надежности, подал ровно 5V, эффект тот же. Звонки идут, но на любых скоростях в ответ крякозябры. Складывается впечатление, что проблема не с питанием (модуль стартует, звонки на него идут, реакция какая-то на команды присутствует), а именно со скоростями и rx-tx входами. Vladis_a, у вас rx/tx напрямую в дуину идут или через согласование уровней?
Дорожки целые (вроде бы). Использую этот скетч. Сериал с компом - 19200, сериалы с модемом перебираю все, после заливки в дуину перезагружаю модуль, ситуация одинаковая. Код (C++): #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX void setup() { Serial.begin(19200); //Скорость порта для связи Arduino с компьютером Serial.println("Goodnight moon!"); mySerial.begin(19200); //Скорость порта для связи Arduino с GSM модулем mySerial.println("AT"); } void loop() { if (mySerial.available()) Serial.write(mySerial.read()); if (Serial.available()) mySerial.write(Serial.read()); }