AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
09.08.2019, 20:37
|
|
Частый гость
Регистрация: 27.05.2016
Сообщений: 31
Сказал спасибо: 46
Сказали Спасибо 12 раз(а) в 6 сообщении(ях)
|
UART, SoftUART и SIM800L
Добрый день!
Собираю девайс, среда - arduino (не ругайтесь ) модем подключаю через программную реализацию UART, аппаратный для отладки пока. Процессор Atmega328P, без кварца, с внутренним генератором 8 МГц
Расклад такой: начинал я с Atmega168P так как они были в наличии. Отлаживал электрическую часть, работу с периферией, обмен данными с модемом. Но вся реализация не помещается в 16 кб памяти, поэтому сразу планировал на Atmega328P. И когда он пришел, я его впаял и программный UART перестал работать. Впаиваю обратно 168-ю - работает. Естественно перекомпилировал под чипы все как положено. Код простой, просто пересылает данные из порта в порт:
Код:
|
#include ‹SoftwareSerial.h›
SoftwareSerial SIM800(9, 8); // 8 - RX (TX SIM800L), 9 - TX (RX SIM800L)
void setup() {
Serial.begin(9600); // Скорость обмена данными с компьютером
Serial.println("Start!");
SIM800.begin(9600); // Скорость обмена данными с модемом
SIM800.println("AT"); // Автонастройка скорости для модема
}
void loop() {
if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема...
{
Serial.write(SIM800.read()); // ...и выводим их в Serial
}
if (Serial.available()) // Ожидаем команды по Serial...
{
SIM800.write(Serial.read()); // ...и отправляем полученную команду модему
}
} |
Проверял осциллографом все тайминги, все в пределах нормы. Уровни логической 1 и 0 от модема в пределах нормы: 2.8 и 0.5 вольт соответственно. Жду логического анализатора с декодером, может что-то подскажет.
Модем от меги команды понимает и выдает на свой TX, но мега и на софтовом, и на аппаратном его не понимает. Если подключаю USB-UART адаптер так:
USB_TX=›SOFR_RX[MEGA]HW_TX=›USB_RX
байты проходят. Т.е. мега через себя пропускает то что, по идее, модем должен выдавать...
Впаиваю чип 168Р с тем же кодом - все работает.
Грешил на прерывания, но ведь данные ходят. Разница между 168P и 328P минимальна.
Прошу идей куда смотреть...
|
|
|
|
09.08.2019, 22:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,031
Сказал спасибо: 3,034
Сказали Спасибо 3,205 раз(а) в 2,175 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
Сообщение от worke2
|
Модем от меги команды понимает и выдает на свой TX,
|
Непонятно, кто на ком стоял... Передача SoftUART 328-й корректно распознаётся модемом? Чем это проверено?
Сообщение от worke2
|
но мега и на софтовом, и на аппаратном его не понимает.
|
Т.е. пробовал переключить весь обмен 328-й с модемом на аппаратный UART и всё равно не работает? "Соплей" на плате при этом точно нет?
Какой итоговый объём кода в 168-й и 328-й? Пока могу предположить, что компилятору пришлось использовать JMP вместо RJMP, отчего съехали времянки SoftUART.
__________________
Экзорцист 40-го уровня.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
09.08.2019, 23:43
|
|
Частый гость
Регистрация: 27.05.2016
Сообщений: 31
Сказал спасибо: 46
Сказали Спасибо 12 раз(а) в 6 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
Спасибо за ответ!
Цитата:
|
Непонятно, кто на ком стоял... Передача SoftUART 328-й корректно распознаётся модемом? Чем это проверено?
|
это проверено тем, что я передавал AT команды в модем через мегу, а принимал напрямую с модема. Т.е. RX вход USB-UART подключил прямо к модему и видел правильные ответы.
Цитата:
|
Т.е. пробовал переключить весь обмен 328-й с модемом на аппаратный UART и всё равно не работает?
|
да, именно так.
Цитата:
|
"Соплей" на плате при этом точно нет?
|
плату на заводе заказывал, качественная. Напаиваю 168P чип и тот же самый код работает
Цитата:
|
Какой итоговый объём кода в 168-й и 328-й?
|
3424 байта ровно.
Цитата:
|
отчего съехали времянки SoftUART.
|
возможно если только на вход. Но я сравнивал временные характеристики с TX пина модема и USB-UART, они одинаковые. Один бит передается 104 мс ровно. Единственно что модем передает следующий байт сразу после стоп бита, а как USB-UART - не запомнил
|
|
|
|
10.08.2019, 12:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,031
Сказал спасибо: 3,034
Сказали Спасибо 3,205 раз(а) в 2,175 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
Сообщение от worke2
|
Цитата:
|
Т.е. пробовал переключить весь обмен 328-й с модемом на аппаратный UART и всё равно не работает?
|
да, именно так.
|
Поскольку
Сообщение от worke2
|
... UART, аппаратный - для отладки пока.
|
то надо коммутировать дорожки на плате. Под "соплями" я понимаю - при этом ничего не напутано? Всё, что надо отключить от RxD/TxD - отключено?
Меги от чего тактируются и какая частота? Если от внутреннего генератора - то сделана-ли калибровка? Что значит "SIM800.println("AT");" - Мега тоже пытается автонастраивать скорость передачи?
__________________
Экзорцист 40-го уровня.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
12.08.2019, 00:07
|
|
Частый гость
Регистрация: 27.05.2016
Сообщений: 31
Сказал спасибо: 46
Сказали Спасибо 12 раз(а) в 6 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
Цитата:
|
Под "соплями" я понимаю - при этом ничего не напутано? Всё, что надо отключить от RxD/TxD - отключено?
|
нет, не напутано. Сама плата изготовлена промышленным способом, все UART выведены на штыревые разъемы как раз для того чтобы все это переключать/подключать и экспериментировать. И опять же - на 168-й работает. Без перекоммутации. Просто сдуваю один чип и паяю другой.
Цитата:
|
Меги от чего тактируются и какая частота? Если от внутреннего генератора - то сделана-ли калибровка?
|
тактируется от внутреннего, калибровку не делал. Если честно, совсем забыл про эту фичу... Завтра попробую
Цитата:
|
"SIM800.println("AT");" - Мега тоже пытается автонастраивать скорость передачи?
|
нет, это для модема. По-умолчанию он на 9600 настроен, но ждет AT после включения и высчитывает по ней скорость. Вроде как рекомендуется первую команду АТ выдавать.
|
|
|
|
12.08.2019, 01:05
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,704
Сказал спасибо: 189
Сказали Спасибо 3,193 раз(а) в 2,070 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
Сообщение от worke2
|
тактируется от внутреннего
|
софтовый уарт........
__________________
кагмаподэ магмаподэ
|
|
|
|
12.08.2019, 01:07
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,704
Сказал спасибо: 189
Сказали Спасибо 3,193 раз(а) в 2,070 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
бери осцил и смотри тайминги своего ужаса.
генерируй на скорости 9600 на компе букву А английского алфавита и смотри длину импульсов, срвнивай со своими.
__________________
кагмаподэ магмаподэ
|
|
|
|
12.08.2019, 01:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,031
Сказал спасибо: 3,034
Сказали Спасибо 3,205 раз(а) в 2,175 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
Сообщение от индюк
|
софтовый уарт
|
И чё? У меня на 38400 работало от калиброванного RC.
Сообщение от индюк
|
на скорости 9600 на компе букву А английского алфавита
|
Другие буквы и скорости - харам?
__________________
Экзорцист 40-го уровня.
Последний раз редактировалось ForcePoint; 12.08.2019 в 01:27.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
12.08.2019, 01:43
|
|
Заблокирован
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
Разумеется не мое дело знать почему и зачем, да софтовый уарт анахронизм.
Неужели сии меги не имеют аппаратного ?
|
|
|
|
12.08.2019, 11:55
|
|
Частый гость
Регистрация: 27.05.2016
Сообщений: 31
Сказал спасибо: 46
Сказали Спасибо 12 раз(а) в 6 сообщении(ях)
|
Re: UART, SoftUART и SIM800L
Цитата:
|
бери осцил и смотри тайминги своего ужаса.
генерируй на скорости 9600 на компе букву А английского алфавита и смотри длину импульсов, срвнивай со своими.
|
Я так и сделал. Все четко. Что удивляет это то что софтовый UART принимает данные от USB-UART, а от модема - нет. От модема и аппаратный UART не принимает.
Сообщение от OakRidge
|
Разумеется не мое дело знать почему и зачем, да софтовый уарт анахронизм.
Неужели сии меги не имеют аппаратного ?
|
Одного мало, а на борту только один.
В общем предположение пока такое: модем отправляет байты и между ними только один стоп бит, нету паузы, по времени байты слипаются. Из-за того что генератор не калиброванный. В общем на прототипе поковыряюсь, но в готовом устройстве все же поставлю кварц.
Просто я хотел использовать все выводы меги, с кварцем не хватало. Теперь решил все же мультиплексоры использовать, нечего мудрить...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:22.
|
|