|
Подскажите модем для arduino/stm8/android/Linux c++
Вопрос задан
Изменён 6 лет 4 месяца назад
Просмотрен 119 раз
Доброго времени суток. Есть несколько идей для экспериментов с ардуино, в рамках которых надо передавать данные с собственно ардуины/stm8 на телефон под андроидом, или на удалённый компьютер. Логичнее было бы использовать SIM900 и bluetooth модуль, но появилась идея использовать аудиоканал. В первом случае, ардуина подключается в гнездо наушников (даже где-то готовый шилд видал), а во втором к старому мобильнику, в который вставлена симка некоего оператора с бесплатными звонками внутри сети. Вообщем, может кто подсказать реализацию софтмодема на c/c++, которая позволить:
- Воспроизводить / записывать аудио через ШИМ на ардуино / stm8
- Генерировать / понимать RAW/WAV-поток 8000 бит моно для подачи в USB-модем
Нужна либо библиотека с примерами под 1 и 2 пункты, либо сам принцип, как это реализовать “для чайника”. Впринципе, я понял, что для генерации сигнала можно ШИМом генерировать импульсы разной длины/частоты для нулей и единиц, но вот как распознать их – не до конца ясно.
- c++
- arduino
- модемы
2
При помощи ШИМ-а невозможно промодулировать сигнал для описанных выше задач. ШИМ-это всего лишь перепады уровней между 0 и +5 в со скважностью от 1/255 до 255/255 на частоте около 500 Гц(если использовать стоковую библиотеку Ардуино).Есть куча других решений.
4
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Введение — Sduino
Портирование наиболее важных функций API Arduino на STM8S.
Через несколько минут вы готовы скомпилировать и загрузить свой первый Проект на основе STM8S, сохраняя при этом гибкость использования ST SPL функции.
Все, что вам нужно для начала, — это простая коммутационная плата STM8S103F на 70 центов и программатор флэш-памяти, совместимый с ST-Link V2, за 2,50 доллара. Три доски и один флэш-программатор вместе доступны менее чем за пять долларов. включая доставку по алиэкспресс.
Удивительно!
Использование
Рекомендуемый способ установки теперь — Arduino Board Manager:
- Откройте вкладку «Настройки» диалогового окна «Настройки»
- Войти
https://github.com/tenbaht/sduino/raw/master/package_sduino_stm8_index.json
в качестве менеджера дополнительных плат URL - Выберите sduino в списке Диспетчер плат (Инструменты->Плата:…->Диспетчер плат)
- Нажмите Установить
Дождитесь окончания загрузки и можете мигать:
- Откройте список досок в Tools->Board:. ..
- Вы должны найти новую запись «Платы STM8S».
- Выберите STM8S103F3 Breakout Board из списка
- Откройте стандартный пример Blink из File->Examples->01. Основы->Мигнуть
- Скомпилируйте его, нажав «Подтвердить»
Легко, не правда ли?
Для загрузки скомпилированного скетча на подключенную плату необходимо установить флешку.
Включенные библиотеки
Некоторые библиотеки Arduino уже перенесены на C-синтаксис. В результате API все еще очень близок к версии C++, и портирование существующего приложения не трудно. Ознакомьтесь с рекомендациями по миграции API для Детали.
Связь
- SPI: реальный аппаратный SPI до 10 МГц.
- I2C: порт основной библиотеки I2C от Wayne Truchsess
- HardwareSerial: стандартный последовательный интерфейс.
Дисплеи
- LiquidCrystal: текстовые ЖК-дисплеи на базе HD44780
- PCD8544: Монохромный графический ЖК-дисплей на базе PCD8544. контроллер, как дисплей Nokia 5110. Только режим SPI.
- Mini_SSD1306: монохромные OLED-дисплеи на базе SSD1306. с разрешением 128×64 пикселей. Только поддержка I2C.
Управление двигателем
- Шаговый двигатель: Шаговые двигатели с 2, 4 или 5 фазами.
- Сервопривод: до 12 сервоприводов с использованием только 1 таймера.
Поддерживаемое оборудование
Платы за один доллар: простой прорыв STM8S103 плата построена на процессоре STM8S103F3P6. Стоит меньше доллара. ЦП имеет внутренний генератор 16 МГц, флэш-память 8 КБ, ОЗУ 1 КБ, 640 байт ЭСППЗУ. Он включает в себя UART, SPI, I2C, PWM, 10-битный АЦП, 3 таймера и до 14 контактов ввода-вывода — очень похоже на Atmel ATmega8.
Wifi-платы ESP14 очень похожи. Они есть в основном вариант этих плат с добавленным Wifi-модулем ESP-01. Почти все программы должны работать и на этих китайских жемчужинах с поддержкой Wi-Fi.
Платы STM8S105Discovery очень похожи на Arduino Uno с процессором ATmega328. Поддержка б/у STM8S105 Процессор все еще довольно свежий, но теперь он должен работать.
sduino Uno похож на Плата STM8S105Discovery, построенная в том же форм-факторе, что и Arduino. Uno и с использованием очень похожего сопоставления выводов. Эти доски еще не (пока?) коммерчески доступен, но все файлы дизайна можно использовать бесплатно.
Китайские гаджеты на базе STM8S003, такие как ESP14 Wifi-плата, термостат W1209 контроллер, беспроводной трансивер HC12 модуль и многие другие.
Ограничения
SDCC не поддерживает C++. Некоторая магия препроцессора применяется, чтобы закрыть разрыв между синтаксисом C и C++ насколько это возможно, но это не 100% совместимая сменная замена для полных сред Arduino, таких как AVR или СТМ32. См. Ограничения и инструкции по миграции для получения подробной информации.
Поддерживаемые системы
- 64-разрядная версия Linux: протестировано на Ubuntu 20. 04, 18.04, 16.04
- 32-разрядная версия Linux: протестировано на Ubuntu 18.04, 16.04
- Windows: протестировано на Windows 7. Sduino может работать на XP (не тестировалось), но драйвер ST-Link/V2 больше не доступен для XP.
- MacOS: протестировано в версии 10.12 (Sierra)
- Raspian/Raspberry Pi: не проверено. Потребуется ручная установка.
Универсальная разделительная плата STM8S103F3 (stm8blue)
Эти простые разделительные платы доступны на aliexpress по цене менее одного Доллар (я получил свой по 67 центов каждый, включая доставку из Китая). Эти доски — моя основная платформа для разработки.
Характеристики
Аппаратные характеристики очень похожи на ATmega8:
Название платы | стм8синий |
---|---|
ЦП | СТМ8С103Ф3П6 |
Часы | 16 МГц, внутренний генератор |
Вспышка | 8кБ |
ОЗУ | 1кБ |
ЭСППЗУ | 640 байт |
Напряжение ввода/вывода | 3,3 В |
GPIO | 14 |
последовательные соединения | УАПП, SPI, I2C |
ШИМ | 4 (до 7 через альтернативное отображение) |
АЦП | 5 каналов, 10 бит |
Светодиод | PB5 (Arduino D3), активный низкий уровень, совместно с I2C, красный |
интерфейс программирования | SWIM, без серийного загрузчика |
Разъем USB | mini, только питание (линии передачи данных не подключены) |
Один (красный) светодиод подключен к GPIO PB5 (вывод 11 процессора). Этот светодиод имеет низкий уровень активности. Пожалуйста, имейте в виду, что это один из сигналов I2C и с использованием светодиода. блокирует шину I2C . Кнопка предназначена для сброса. Процессор работает от 3,3 В, линейный регулятор интегрирован на плате. Разъем micro USB только для источника питания (5 В) линии передачи данных не подключены.
Все контакты ЦП легко доступны на (дополнительных) контактных разъемах (шаг 2,54 мм, идеально подходит для хлебных досок).
Они очень похожи на Wifi-платы ESP14 и большинство программ будут нормально работать и с этими китайскими жемчужинами.
Подключение к флештулу
Я использую ST-Link V2-совместимый флештул из зеленого пластика Корпус. Тот, что в металлическом корпусе, использует другую распиновку.
Подключение к flashtool:
Название сигнала | P3 на плате ЦП | Зеленый флэш-инструмент | Металлический инструмент для зачистки |
---|---|---|---|
3V3 | 1 | 2 | 7 |
ПЛАВАТЬ | 2 | 5 | 5 |
Земля | 3 | 7 | 3 |
НРСТ | 4 | 9 | 1 |
Оповещение о дерьме
Из-за плохого качества производства печатных плат некоторые более свежие партии (по состоянию на 2020 г. ) Платы stm8blue, похоже, не имеют рабочего соединения с GND на SWIM разъем или короткое замыкание между контактом SWIM и GND.
Контакт SWIM сокращен до GND
Попробуйте подключить GND к другому контакту GND на плате или подайте питание на плату через USB.
Большинство плат поставляются с запрограммированным миганием. Если светодиод мигает, когда плата питается через USB, но не когда она подключена только к флэш-памяти инструмент, на вашей плате, вероятно, отсутствует соединение GND.
Разблокировка MCU с защитой от записи биты защиты от записи. Для разблокировки перед первым использованием с помощью команды строка:
stm8flash -cstlinkv2 -pstm8s103?3 -u
То же самое можно сделать из Arduino IDE, нажав Tools->Burn Загрузчик после выбора платы на базе STM8 и правильного выбора тип программатора (ST-Link V2). Имя этого пункта меню не говорит сам за себя, но я не мог найти способ изменить его или добавить другой запись с более удачным названием. (если знаете как, откройте тему)
Необходимый бинарник для stm8flash
включен в загрузку
автоматическая установка. В системах Windows его можно найти в каталоге AppData\Local\Arduino15\packages\sduino\tools\STM8Tools\2019.02.05\win
.
Альтернативой с графическим интерфейсом является инструмент STVP от ST, но он требует установки другой программный пакет (см. выпуск №85).
Сопоставление номеров контактов
Среда Arduino использует собственную схему нумерации контактов, независимую от физические номера контактов процессора. Многие скетчи и библиотеки Arduino содержат жестко закодированные предположения о количестве выводов со специальными функциями. В идеале все эти числа должны быть одинаковыми, и все программы могут быть компилируется без изменений.
Здесь я обсуждаю некоторые возможные сопоставления выводов схемы и проверить, насколько близко мы можем подобраться к идеальному отображению. К сожалению, оказывается, что идеальное отображение невозможно.
В итоге я выбрал простую геометрическую нумерацию для квадрата UFQFPN20 пакет, начиная с контакта порта PA1 и считая от 0. Это приводит к это сопоставление:
штырь sduino | STM8S103 порт ЦП контакт |
---|---|
0-2 | PA1-PA3 (PA1 и PA2 только слабые выходные драйверы) |
3-4 | ПБ5-ПБ4 (обратный порядок) |
5-9 | ПК3-ПК7 |
10-15 | ПД1-ПД6 |
- серийный номер: 14,15
- SPI: 2,7,8,9
- I2C: 3,4 (настоящий открытый сток. Не может управлять высоким сигналом без внешнего подтягивающий резистор)
- Аналог: 6,11,12,14,15
- ШИМ: 2,5,6,12 плюс только 13 или 7-9но не 13 (через альтернативное отображение)
плюсы этого подхода:
- Простота и логичность использования на макетной плате
- Четкий и логичный порядок контактов портов
- TX и RX будут редко используемыми аналоговыми номерами контактов A3/A4 на конец списка номеров аналоговых контактов
- По крайней мере, аналоговые контакты находятся в порядке листа данных
минусы этого подхода:
- Аналоговые пины все еще разбросаны вокруг
- Все функции используют совершенно другие номера контактов, чем Arduino
Я все еще не очень доволен этим отображением. Вместо упрощения вещей
это только добавляет еще один уровень абстракции и путаницы. Чтобы избежать этого, я
добавлены определения для обычных имен контактов ЦП, таких как PA1
и PD2
. в
конец, эта запись кажется мне намного проще. Я открыт для предложений
для лучшего сопоставления номеров контактов.
Выбранное назначение выводов для STM8S103 (возможна альтернативная функция в паратезы):
Физ. Штырь STM8 | Имя | Функции | Геометрическое отображение | специальная функция |
---|---|---|---|---|
1 | ПД4 | UART_CLK/T2-1/бип | 13 | ШИМ |
2 | ПД5 | ТХ/Ain5 | 14 | Аналоговый A3 |
3 | ПД6 | RX/Ain6 | 15 | Аналоговый A4 |
5 | ПА1 | (OscIn, без HS) | 0 | |
6 | ПА2 | (OscIn, без HS) | 1 | |
10 | ПА3 | СС/Т2-3 | 2 | ШИМ |
11 | ПБ5 | Светодиод SDA | 3 | |
12 | ПБ4 | СКЛ | 4 | |
13 | ПК3 | Т1-3/[Т1-n1] | 5 | ШИМ, (n~) |
14 | ПК4 | Т1-4/Айн2/[Т1-н2] | 6 | ШИМ, аналоговый A0, (n~) |
15 | ПК5 | СКК/[Т2-1] | 7 | (~) |
16 | ПК6 | МОСИ/[Т1-1] | 8 | (~) |
17 | ПК7 | МИСО/[T1-2] | 9 | (~) |
18 | ПД1 | (плавание) | 10 | |
19 | ПД2 | Айн3/[Т2-3] | 11 | Аналог A1, (~~) |
20 | ПД3 | Аин4/Т2-2 | 12 | ШИМ, аналоговый A2 |
Специальные штифты
Штифты D3/D4 (SDA/SCL, PB5/PB4) отличаются от других тем, что они настоящие открытые сливные штифты.