[Решен] 4-проводной сенсорный экран на Bluepill STM23F103C8.

Рикв
Пн 19 ноября 2018 г., 18:04
Я делаю свой первый проект на чертеже, включая 2.8 8-битный TFT с 4-проводным сенсорным экраном.
У меня есть TFT, работающий с использованием adafruit_tftlcd_8bit_stm32.H, но теперь у меня есть проблемы с использованием сенсорного экрана.
На этом дисплее 4 провода MPX'ed с D0, D1 и RS/CS (PA2/PA1 в моей установке).
Что бы я ни делал (сенсорный.H используется LIB), y-значение-это примерно 3500, когда ничего не касается, когда касаются x и y return «разумные» значения, но z (давление) остается 0.
Я читаю аналоговые значения на PA1 и PA2, а значение XM читает около 0, однако показания YP - 4095, когда ничего не касается!
Я попробовал другой PA вместо PA2 с тем же результатом!
Я хотел бы попробовать новую доску, но они еще не прибыли.
У кого -то есть идея?
Кстати, дисплей + TS работает нормально на Arduino Dueed.

Стивестронг
Пн 19 ноября 2018 г., 19:27
Пожалуйста, опубликуйте ссылки на использованное ядро ​​и библиотеки (TFT и TS).

Рикв
Пн 19 ноября 2018 г., 20:15
Я скачал все по ссылкам, указанным в этом посте http: // stm32duino.com/viewtopic.PHP?f = 2&t = 3111 и установил его в соответствии с предоставленными инструкциями. Для ясности это заинтересованные в либе: "maple_upload.bat" COM13 2 1EAF:0003 "*.bin"

Стивестронг
Пн 19 ноября 2018 г., 21:32
Что «все» вы скачали? Из каких ссылок точно? Указанный пост имеет несколько ссылок...

Каждый файл источника (ядро и библиотека) доступен на Gitub. Так что могут быть следовали.

Рикв
Пн 19 ноября 2018 г. 22:20
Ну, я загрузил его с github (arduino_stm32-master от 20181001) и установил его после инструкций. Кроме того, я загрузил и установил ADAFRIT_TFTLCD_8BIT_STM32-MASTER и STM32EXAMPLES-MASTER. Все они из GitHub и все они в последние недели.
Я также нашел разные «выпуски» или Touchscreem_stm lib. Все они одинаковы.
Честно говоря, я подозреваю что -то большее похожее на проблему, связанную с оборудованием: чтение аналоговых входов (с удаленным дисплеем, входы плавают в данный момент) PA1 читает почти нулевое значение, тогда как PA0, 2 и PA3 дают полномасштабное чтение 4095. Итак, кажется, что PA1 «снят», где другие «подглушали». Обратите внимание, что для этого теста TFT и TS были отключены в программном обеспечении.

Mrburnette
Вт 20 ноября 2018 г., 3:34
Было несколько синих таблеток & Проекты сенсорного экрана...

Используйте поиск, ориентированный на сайт Google:

Bluepill Touch Screen сайт: STM32duino.компонент
и
Bluepill Touchscreen Sate: STM32DUINO.компонент

Проект Andy's O'Scope имеет сенсорный экран и был успешно воспроизведен.

Луча

Рикв
Вт 20 ноября 2018 г., 17:07
Конечно, я искал сеть, например, проекты, и да, я изучал O'Scope (кстати, хороший проект). Но это единственное, что я нашел для STM32, взаимодействующего с 4-проводным TS (без интерфейсного чипа!). Эта LIB - портированная версия из оригинальной Aduino, где он работает (проверен на должность).
Я верю, что что -то не так с инициализацией аналоговых входов. Я надеялся, что вы, ребята, знали, что есть и вышли из этих маленьких чудес.
Как определяется вход? Есть ли какая -либо конфигурация BI, описывающая входной импеданс? Можно ли вход «перевернут» по конфигурации?
Я наверняка буду искать руководство ST по этому вопросу, но у вас действительно нет намека?
Первое, что я сделаю сейчас, это добавить некоторые развязывающие колпачки на линии электропередачи 3V3 и 5 В. К счастью, контакты VSSA и VDDA подключены непосредственно к цифровым питаниям. Ну, это компромисс с стоимостью многослойной печатной платы Versu Double Layer.

Рикв
Вт 20 ноября 2018 г., 19:00
Я только что добавил несколько керамических многослойных колпачков, как описано. Нет эффекта.
Затем я запустил эскиз, чтобы прочитать аналоговое значение A1 и A2. 100kHz 400kHz 1MHz MAX_FREQUENCY

Mrburnette
Вт 20 ноября 2018 г., 19:38
[Рикв - Вт 20 ноября 2018 г., 19:00] - ...
Только доска, входные данные о плавании: A1/A2: 1962/1963 (я думаю, из 4096)
Освободительный резистор 1 мохна: оба около 700
Экран TFT на месте: 0/4090!! Выпадает 150 тыс. Обратите это только до 4070
Разочаровывает.
Да,
Мы знаем: https: // www.STM32duino.com/viewtopic.PHP?T = 1872

Луча

Flyboy74
Вт 20 ноября 2018 г., 21:04
Хорошо, я успешно написал программу для чтения резистивного сенсорного экрана на STM32407VET.

Мне потребовалось некоторое время, чтобы заставить все работать должным образом, так как было несколько вещей, которые я нашел, которые остановили это хорошо работать.

Сначала есть время для булавок. Я обнаружил, что если я установил бы булавку на аналоговый, то прочитал его, на него повлияло предыдущее состояние булавки, поэтому мне пришлось добавить задержку около половины мс.

Теперь пытаюсь точно вспомнить, что я сделал, чтобы заставить это работать. Вне памяти, это было так, когда я хотел прочитать x_touch, затем я установил y+ для вывода высокого уровня, от Y- на низкий уровень, x+ к аналоговому и x- для ввода (я обнаружил, что мне нужен x- как вход Получите хорошие показания, так как он придерживается высокого выхода, делая хорошее аналоговое чтение на x+), тогда я жду половину мс, затем я беру 5 чтения, и сорван 5 чтений в порядке и использую медианное чтение (чтение в порядке 3).

Смотрите здесь на немного демонстрации, первую половину видео, я просто настраиваю аналоговое чтение и вторую половину, я просто настраиваю медианное аналоговое чтение https: // www.YouTube.com/watch?V = H51OZQL3BC8 Код здесь https: // github.com/outofthebots/ili9341_16bit_touch

Рикв
Вторник 20 ноября 2018 г. 23:10
Это вообще не надеется! У меня сложилось впечатление, что эта доска Bluepill бесполезна для аналоговой работы! Lib "touchscreen_stm", который я использую, делает некоторое усреднение, но thais, конечно, бесполезен, так как измеренные значения выходят из контроля. Завтра я сделаю попытку поставить 3.3V из неожиданного источника и выяснить, имеет ли это какое -либо значение.
Другое мудрый я вижу 2 решения:
Купить TFT-TS со встроенным преобразователем или перейти к более дорогому и менее мощному Arduino Dueed. Первый вариант будет самым дешевым.

Mrburnette
Вт 20 ноября 2018 г., 23:53
[Рикв - Вторник 20 ноября 2018 г. 23:10] - Это вообще не надеется! У меня сложилось впечатление, что эта доска Bluepill бесполезна для аналоговой работы!
...
"Бесполезно" слишком сильна словом, IMO. Но только так много можно сделать с доской, где UC стоит больше, чем цена, которую вы платите за модуль. Оригинальный дизайн Leaflabs был 4-слойной платой (отдельный аналог & цифровые основные самолеты.)

Это хорошее чтение: https: // www.STM32duino.com/viewtopic.pH ... 840#P49264

Луча

Flyboy74
Ср 21 ноября 2018 г., 2:51
Существует ли большая разница между аналоговыми входами на STM32F103 BP и STM32407 Black??

У меня было много проблем с шумом на аналоговых булавках на Black STM32F407, но после небольшого чистого чтения сенсорного экрана, как во второй половине видео, которое я разместил на предыдущей странице. Если читать аналог x+, то я установил x- на цифровой вход (чтобы прекратить плавающее чтение), я взял 5 чтений, но не в среднем, а затем, когда любое чтение, которое давно не исказило среднее значение, я вместо этого вместо этого. отсортировал заказ и взял медиана (среднее чтение). Это, казалось, дало мне довольно хорошие чтения, см. Вторая половина моего видео, размещенного на предыдущей странице.

Mrburnette
Ср 21 ноября 2018 г., 3:41
Я нашел ссылку, которая объясняет проблему (дизайн):
Фред Гамильтон:

Есть много возможных причин для шума, который вы видите. Важно понимать, что в АЦП есть три входных данных:

1) Входной штифт (ы) (тот, который предназначен для входа сигнала)
2) Справочный вход (ы) (dout = 2^n * vin/vref)
3) Power Pins (Supply + GND)

Шум на любом из них может создать шум, который вы видите, и предполагая, что сама АЦП не является дефектным, шум должен пройти через один из этих трех путей.

Можно иметь приличную производительность АЦП, используя ту же основу для аналоговых и цифровых, но вы должны тщательно выложить печатную плату, чтобы все цифровые токи цифровых петлей были выделены из аналоговых циклов.

В этом контексте цикл - это целый ток -путь. Линия сигнала или источника питания (который следует считать «шумовым» сигналом в этом контексте) берет на себя печатную плату. Таким образом, для линии источника питания это было бы от того, где питание входит в плату, вдоль трассировки, пока не дойдет до питания, через все транзисторы в IC, из заземления, а затем вдоль пути наименьшего сопротивления обратно к Где власть входит в доску. Это одна петля питания.

Но если вы выполняете хорошую работу с обходом предложения, в этом цикле не будет большого тока переменного тока, потому что у вас будет гораздо меньшая, более локализованная петля снабжения синхронизации к питанию к заземлению и обратно на землю сторона байпаса. Если все ваши цифровые принадлежности будут тесно обойдены, ваш цикл питания будет в основном чистым, а все шумные цифровые с ограниченными с ограниченными до коротки.

Сигнальные петли (включая петлю VREF) работают так же - сигнал поступает, вводит свой путь к АЦП, выходит на GND ADC и обратно на заземление сигнала (надеюсь, в то же место, где начался сигнал). Если эта петля пересекает цифровой цикл, вы можете получить шум. Таким образом, как правило, хороший конструкция смешанного сигнала, в котором используется один GND для аналогового и цифрового, будет держать цифровую все на одной стороне, а аналог на другой, с GND в конце платы прямо в разделении. Обычно это не так уж и сухое, вы должны идти на компромиссы, но это идея.

Ваше упоминание «Поскольку потребление доски минимально, ниже 100 мА, я думаю, что это не должно вызывать такого шума."Это больше связано с тем, насколько хорошо обходится система. Система 100 мА с плохим обходом будет иметь гораздо больше цифрового шума в грузовой плоскости, чем система 1000 мА с хорошим обходом.

Рикв
Ср 21 ноября 2018 г., 23:24
Новые фишки прибыли сегодня. Я пропустил загрузчик в одном из них и загрузил эскиз.
Результаты - это то, что можно ожидать: точно то же самое, вообще не работает.
Что касается LIB, упомянутого в вкладе Flyboy74: мои знания об этом программировании «низкого уровня» недостаточно, чтобы выяснить, какой ввод -вывод используется, и, конечно, не изменять его в соответствии с моей конфигурацией PB8/9 PA0/1.
На данный момент я глубоко сожалею, что сделал шаг к STM. Я знаю, что это гораздо более мощно и гораздо больше власти за деньги, но это не работает так, как должно. Есть ли какая -либо гарантия, что это будет работать, если я использую другой тип платы? может это:
https: // www.Бангуд.com/stm32f103c8t6- ... rehouse = cn
или это:
https: // www.Бангуд.com/stm32f103c8t6- ... rehouse = cn
Кстати, я внимательно посмотрел под микроскоп, и у меня есть входные!!

Рикв
Чт 22 ноября 2018 г. 12:31
Я наконец купил это:
https: // www.Бангуд.com/nl/arm-cortex- ... rehouse = cn
Существует отдельная развязка на VDDA (см. Схему.

Mrburnette
Чт 22 ноября 2018 г. 1:04
[Рикв - Ср 21 ноября 2018 г., 23:24] - ...
На данный момент я глубоко сожалею, что сделал шаг к STM. Я знаю, что это гораздо более мощно и гораздо больше власти за деньги, но это не работает так, как должно. Есть ли какая -либо гарантия, что это будет работать, если я использую другой тип платы?
...
Кстати, я внимательно посмотрел под микроскоп, и у меня есть входные!!
Синие таблетки не являются многослойными-они 2-й борьбы.

Нет никаких гарантий, что любой «дешевый» совет по развитию удовлетворит ваши требования. Если бы такие решения гарантированы, вы не увидите, что форумы, подобные этой, имеют инициативу по проектированию & Создайте нашу собственную плату F4 с низким шумом, которая правильно разработана для минимизации шума на недорогих двухслойных досках по почте.

В этом конкретном случае ваше разочарование не имеет ничего общего с микроконтроллерами STM, которые являются качественными микроконтроллерами; Скорее я бы предположил, что разочарование происходит с вашим первоначальным предположением/ожиданием, что движение от 8-бит/16 МГц до 32-битного/72 МГц будет безболезненным. Ясно, что ваше ожидание нереально... Вы не первые, кто попадет в эту ловушку. Не волнуйтесь, есть надежда, но это «растяжка» и требует, чтобы вы выйдете за рамки уровня хобби знаний о кодировании UC.

Из проспективного инженера программного обеспечения часто решаются с кодом. В области A/D шума все применения записываются на эту тему, но они сильно математические в области цифровой фильтрации.

PDF, как получить лучшую точность ADC в микроконтроллерах STM32

Входной шум АЦП: хороший, плохой и некрасивый

Удачи,

Луча

Стивестронг
Чт 22 ноября 2018 г. 9:57 утра
Если вы не понимаете оборудования и не знаете, что делает SW, то «разочарование» предварительно запрограммировано, независимо от используемого контроллера.

Mrburnette
Чт 22 ноября 2018 г., 19:05
[Рикв - Чт 22 ноября 2018 г. 12:31] - Я наконец купил это:
https: // www.Бангуд.com/nl/arm-cortex- ... rehouse = cn
Существует отдельная развязка на VDDA (см. Схему.
Я считаю, что совет представлен в вики:
https: // wiki.STM32duino.com/index.PHP?Т ... 103_boards

Помните, что фильтрация по низким частотам VDDA только 1 из 3 факторов, о которых я опубликовал ранее.

От опыта за эти годы, помогая в Arduino.CC, я рекомендую:
- Используйте металлическую проектную коробку, используйте одну точку на коробке, чтобы прикрепить заземление для экранирования,
- DC к AD Ссылка должна быть через небольшой дроссельный (из ферритового шарика),
- При расточке выключите все люминесцентные светильники (некоторые светодиодные лампы тоже создают RF Hash),
- Используйте только лампы филаментов, если не известно, что ваша светодиодная молния не является RF,
- Не используйте стены переменного тока для лабораторного снабжения, купите лабораторный поставки или используйте батареи,
- Сохраняйте прототипирование приводит к коротким, очень коротким,
- Подумайте о том, чтобы поместить на землю металлическую пластину под вашу профилирующую плату.
- Поверните все метр, O'Scope приводит к снижению напряжения, вызванных RF, индуцированным переменным напряжением,
- обходите DC у входа в коробку.

И помните, аналоговая ссылка номинально 3.3000 вольт. Волновая или шум на ссылке напрямую влияет на преобразование AD!

Удачи,
Луча

AG123
Ср 28 ноября 2018 г. 10:38
Я сделал это однажды, я использовал пластиковую коробку проекта, и одна из головных болей - как сделать это большое прямоугольное отверстие для ЖК -дисплеев
В итоге я просвечивал много отверстий, пока разделенная секция не станет перфорированной, а затем использовал молоток и отвертку с плоской головкой, я использовал его в качестве зубчатого долога, чтобы вырвать часть этого ЖК -дисплей подходит, много пота, действительно грубая сила, должен быть лучший способ

Существует множество «не электрических» проблем, пытающихся установить детали в коробке, и если ваша доска не поставляется с монтажными отверстиями, будет еще больше проблем, которые вам нужно будет изобретать способы установить доску коробка

Для бурения отверстий я следовал по некоторым советам от этого

Это помогает хорошо отмечать отверстия, один из тех способов для плат, имеющих монтажные отверстия, я использую карандаш, чтобы протянуть отверстие на доске на маскирующую ленту, чтобы расположения отверстия были выровнены с платой. 3 -миллиметровые буровые биты подходят для M3
Это для пластика, нити буквально настолько плотно прилегают, что я буквально вкрутил его (винт), а не пропускаю винт через отверстие
Для металла он может быть слишком плотным, поищите в Интернете подсказки к соответствующим размерам битов и т. Д
:ржу не могу:

AG123
Ср 28 ноября 2018 г. 12:48
[Flyboy74 - Вторник 20 ноября 2018 г., 21:04] - Хорошо, я успешно написал программу для чтения резистивного сенсорного экрана на STM32407VET.

Мне потребовалось некоторое время, чтобы заставить все работать должным образом, так как было несколько вещей, которые я нашел, которые остановили это хорошо работать.

Сначала есть время для булавок. Я обнаружил, что если я установил бы булавку на аналоговый, то прочитал его, на него повлияло предыдущее состояние булавки, поэтому мне пришлось добавить задержку около половины мс.

Теперь пытаюсь точно вспомнить, что я сделал, чтобы заставить это работать. Вне памяти, это было так, когда я хотел прочитать x_touch, затем я установил y+ для вывода высокого уровня, от Y- на низкий уровень, x+ к аналоговому и x- для ввода (я обнаружил, что мне нужен x- как вход Получите хорошие показания, так как он придерживается высокого выхода, делая хорошее аналоговое чтение на x+), тогда я жду половину мс, затем я беру 5 чтения, и сорван 5 чтений в порядке и использую медианное чтение (чтение в порядке 3).

Смотрите здесь на немного демонстрации, первую половину видео, я просто настраиваю аналоговое чтение и вторую половину, я просто настраиваю медианное аналоговое чтение https: // www.YouTube.com/watch?V = H51OZQL3BC8 Код здесь https: // github.com/outofthebots/ili9341_16bit_touch
+1 Это довольно хорошо, я заметил, что показания АЦП от STM32F103CB (Maple Mini) немного колеблются, сглаживание их, вероятно, поможет здесь

https: // www.Sparkfun.com/dataheets/ЖК -дисплей ... 20work.PDF
казалось, что некоторые резистивные сенсорные экраны ITO могут иметь довольно низкие сопротивления
https: // www.Сигмаалдрич.com/catalog/pr ... 92?lang = en
https: // www.2spi.com/item/06463b-ab/
Если это правда, может потребоваться разные / дополнительные схемы, такие как OP -усилитель, чтобы получить приличные показания, выполняя разделитель резисторов с скажем, даже 1K OM серии с резистивным сенсорным экраном ITO к VCC или GND, как скажем, если это сопротивление 1 Ом, ты получишь в лучшем случае 3 мВ через сенсорный экран от конца до конца

Рикв
Пт, 07 декабря 2018 г., 16:41
Я получил товар сейчас. Плата F1038C "Uggly" и SPI -версия 2.8 "Tft.
Что касается комментариев по этому типу платы: это определенно многослойный, VBATT подключен к VDD по ссылке 0OM. Почему? Когда кто -то читает это справочное руководство STM, вы абсолютно ненужные: Th Clock и резервное мемори. это автоматически и внутренне переключается на VDD. STM предлагает подключить VBATT к VDD через конденсатор, когда батарея не поставляется.
Я заменю ссылку OOHM .1 UF Cap.
Пока теперь я смог только подключить 4 TS -провода к новой плате: результат - то же самое, аналоговые входы, вытянутые до VDD.
У меня проблемы с поиском полезной библиотеки для SPI ILI9341 (да, в сети много, но вы можете решить, какой порт SPI использовать?а также для XPT2046 с выбором CONTROL или нет.
Один вопрос новичков: могу ли я поставить более одного устройства SPI на одном порту, даже если один или несколько контролируется IRQ?
Проблема заключается не в шуме на входе A/D (VREF проверяется и «без пульса»), но, как так или иначе тянется к VDD, и да, у меня есть некоторый опыт с аналоговой электроникой после того, как я инженером электроники на 40 годы.

Стивестронг
Пт, 07 декабря 2018 г., 16:51
ILI9341 LIB, где вы можете указать используемый порт SPI: https: // github.com/stevstrong/arduino_s ... Li9341_stm

Текущие реализации SPI не используют IRQ, поскольку они не так эффективны, как DMA на высоких скоростях.
Здесь У вас есть SPI LIB, где конец транзакции DMA может выполнить какой -то код пользователя.

Рикв
Пт, 07 декабря 2018 г., 17:08
Извините, но «скачать. Нажмите кнопку Загрузки в правом верхнем углу ». Там нет такой кнопки, и я вписался????

Mrburnette
Пт, 07 декабря 2018 г., 17:30
[Рикв - Пт, 07 декабря 2018 г., 17:08] - Извините, но «скачать. Нажмите кнопку Загрузки в правом верхнем углу ». Там нет такой кнопки, и я вписался????
Вы видите только кнопку загрузки: https: // github.com/stevstrong/arduino_stm32/

Вы можете скачать файл по файлу, или просто загрузить весь Zip, раскапывать и взять то, что вы хотите.

Пример:
Rogersgithub.png
Rogersgithub.PNG (7.5 киб) просмотрено 812 раз

Рикв
SAT 08 декабря 2018 12:32
ХОРОШО. Я обнаружил, что один, но не понял, что в него был включен adafruit_ili9341_stm. Моя ошибка. Спасибо.
Первое, чтобы попробовать по утрам. Сейчас 1:30 утра, время сделать что -то более подходящее.

Рикв
Солнце 16 декабря 2018 г., 21:38
Ну, я наконец -то подключил все это, используя SPI1 (или это SPI0?) на синей таблетке.
ILI9341, MAX31855 и XPT2046, конечно, каждый со своим CS.
Сначала попробовал все с поставленными примерами: все работы от первой попытки.
Но возникает проблема: при написании в TFT при использовании библиотеки MAX, вещь запуталась.
Команды TFT больше не выполняются (TFT.Печать не выполняется, пока сериал.Печать в следующей строке выполняется нормально!) и артефакты появляются на экране: зеленый текст на экране имеет красное изображение «призрака», рисунок линии создает некоторые фрагменты в других местах на экране...
Я подозреваю, что проводка макета (некоторые провода имеют длину до 20 см), но прежде чем я пожертвую временем и ресурсами на «чистого» припять прототип, я хотел бы получить страховку, что эта установка может работать. Сколько рабов может реально справиться с одним портом SPI?
С точки зрения библиотеки, я подозреваю, что MAX31855 LIB в качестве нажима.
Любые конструктивные предложения?

Беннебой
Солнце 16 декабря 2018 г., 21:51
У меня были всевозможные проблемы с получением MAX31856 (более способного, но значительно более дорогого чипа) для работы на одном и том же автобусе SPI, что и SSD1306.

Основная проблема заключалась в том, что библиотека просто топала по всему SPI, она не была разработана с учетом транзакций.

В конце я нашел какой -то пользовательский код, чтобы привести к напрямую 31856 - только что реализовано как функциональные вызовы в моем эскизе, я завернул его с правильным кодом SPI.

Возможно, стоит подумать о том, чтобы сделать «простой» и сделать это самостоятельно, провести поиск о.

Беннебой
Солнце 16 декабря 2018 г., 22:21
Это может привести вас в правильном направлении -> https: // форумы.нити.com/t5/labview-interf ... -P/3392471

Рикв
Солнце 16 декабря 2018 г., 22:30
Спасибо, Беннебой. Это, вероятно, самый простой способ перейти на «Software SPI», используя любые 3 доступных io.
Но даже когда это работает, это все еще держит меня в некотором роде бессонным, потому что я не знаю, почему аппаратная версия не работает! Зная, почему наверняка предотвратить будущие ошибки!
Я буду держать вас в курсе.

Беннебой
Пн 17 декабря 2018 г. 8:25 утра
Вам не нужно использовать Software SPI, используйте один и тот же экземпляр HW SPI, но не используйте библиотеку. Библиотека Adafruit, которую я использовал (в то время), нуждалась в значительной переделке, чтобы хорошо играть с другими устройствами на автобусе, она была быстрее и более эффективным для развода от библиотеки.

Стивестронг
Пн 17 декабря 2018 г. 9:35 утра
Обмен несколькими устройствами на той же шине SPI обсуждался много раз, поиск должен показать, что, а также альтернативные решения.

Беннебой
Пн 17 декабря 2018 г., 10:52 утра
Возможно, стоит взглянуть на то, как я управляю несколькими устройствами SPI на одном автобусе в этом моем проекте -> https: // github.com/bennehboy/lrduinotd5

Может быть, не проще всего следовать, но у меня есть SSD1306, SPI SD -карта и MAX31856, все сосуществуют на одной шине SPI - очевидно, это не поможет вам с конкретным кодом для 31855, но ссылка, которую я предоставил ранее, должна дать у вас мясо необходимых вам нужных для этого устройства.

Рикв
Ср 19 декабря 2018 г., 16:01
Прямо сейчас я пытаюсь переместить MAX31855 на SPI2 (PB12...PB15), используя пример Rogerclack (https: // www.STM32duino.com/viewtopic.PHP?t = 423.
Но мне совершенно неясно, как я должен «подключить» максимальное устройство (MAX31855.h) вернуть определенный класс SPI2.

Используя SPI.SetModule (2) генерирует ошибку компиляции "" SPI 'не называет типа ".

Стивестронг
Ср 19 декабря 2018 г., 16:27
Просто вставьте EDIT: removed non-working code, see http://www.stm32duino.com/viewtopic.php?f=3&t=757&p=8474#p8474 for working code

Рикв
Ср 19 декабря 2018 г., 16:34
Это - конечно, уже вставлено. Но в SPI.PCC/H Нет функции «setModule», хотя я использую недавнюю версию ваших модулей.

Рикв
Ср 19 декабря 2018 г., 22:23
Для ясности это вызывающие проблемы: /* MapleDualADC - A sample to perform dual ADC conversions using DMA */ // // As written it performs a total of NUM_SAMPLES dual conversions (ADC1 and ADC2) on Maple Mini // continuosly scanning the defined channels (D3->IN8 and D5->IN7 in the first conversion // followed by D4->IN6 and D6->IN5 on the second conversion). In the example, repeated 4 times // NUM_SAMPLES=(number INx channels converted/2) * number of times each channel is scanned /* Copyright (c) 2015 Roberto Cazzaro. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. */ #include #define CHANNELS_PER_ADC 2 // number of channels for each ADC. Must match values in ADCx_Sequence array below #define NUM_SAMPLES 8 // number of samples for each ADCx. Each channel will be sampled NUM_SAMPLES/CHANNELS_PER_ADC #define SAMPLE_RATE ADC_SMPR_71_5 // when using dual mode, each pair of channels must have same rate. Here all channels have the same uint32 adcbuf[NUM_SAMPLES+1]; // buffer to hold samples, ADC1 16bit, ADC2 16 bit uint8 ADC1_Sequence[]={8,6,0,0,0,0}; // ADC1 channels sequence, left to right. Unused values must be 0. Note that these are ADC channels, not pins uint8 ADC2_Sequence[]={7,5,0,0,0,0}; // ADC2 channels sequence, left to right. Unused values must be 0 // calculate values for SQR3. Function could be extended to also work for SQR2 and SQR1. As is, you can sequence only 6 sequences per ADC uint32 calc_adc_SQR3(uint8 adc_sequence[6]){ int SQR3=0; for (int i=0;i<6;i++) // There are 6 available sequences in SQR3 (SQR2 also 6, and 4 in SQR1). { //each sequence is 5 bits SQR3 |= adc_sequence[i] << ((i*5)); } return SQR3; } // initialize DMA1, Channel1 (ADC) void set_dma() { dma_init(DMA1); dma_setup_transfer(DMA1, DMA_CH1, &ADC1->regs->DR, DMA_SIZE_32BITS, adcbuf, DMA_SIZE_32BITS, DMA_MINC_MODE); dma_set_num_transfers(DMA1, DMA_CH1,NUM_SAMPLES); dma_set_priority(DMA1, DMA_CH1, DMA_PRIORITY_VERY_HIGH); dma_enable(DMA1, DMA_CH1); } // calibrate ADC1 and ADC2, then set all registers for regular simultaneous dual ADC conversion with DMA transfer void set_adc() { adc_set_sample_rate(ADC1, SAMPLE_RATE); // sets sample rate for all channels, all identical (critical in dual mode, even if only pairs sampled together need to be identical) adc_set_sample_rate(ADC2, SAMPLE_RATE); adc_calibrate(ADC1); adc_calibrate(ADC2); ADC1->regs->CR1 = 1 << 8; // Set scan mode ADC1->regs->CR1 |= 6 << 16; //Regular simultaneous mode. Required for ADC1 only, ADC2 is slave ADC1->regs->CR2 = ( ADC_CR2_CONT | ADC_CR2_DMA | ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG); //0xe0102; cont conversion, DMA, right aligned, disable external; EXTSEL, exttrig=0,jswstart=0 adc_set_reg_seqlen(ADC1, CHANNELS_PER_ADC); // how many channels per ADC //ADCx->regs->SQR3-1 holds the sequence of channels to convert. A conversion function is provided calc_adc_sequence(ADC1_Sequence) only for SQR3. //If more than 6 channels are needed, repeat the same for SQR2 and SQR1 (SQR1 only holds 4 sequences) ADC1->regs->SQR3 |= calc_adc_SQR3(ADC1_Sequence); //200; for IN8 and IN6, on Maple Mini these are D3, D5 ADC2->regs->CR1 = 1 << 8; // Set scan mode ADC2->regs->CR2 = ( ADC_CR2_CONT | ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG); //0xe0003; adc_set_reg_seqlen(ADC2, CHANNELS_PER_ADC); ADC2->regs->SQR3 |= calc_adc_SQR3(ADC2_Sequence); //= 167 forIN7 and IN5, on Maple Mini these are D4, D6 respectively ADC1->regs->CR2 |= ADC_CR2_ADON; // it is critical to enable ADC (bit 0=1) independently of all other changes to the CR2 register ADC2->regs->CR2 |= ADC_CR2_ADON; // enabling all at once (i.e. ADC_CR2_ADON | ADC_CR2_CONT | ADC_CR2_EXTSEL ) will cause problems when used with continuous mode } // set only the registers that need to be reset before each conversion void adc_to_ready() { ADC1->regs->CR2 = ( ADC_CR2_CONT | ADC_CR2_DMA | ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG); //0xe0102; cont conversion, DMA, right aligned, disable external; EXTSEL, exttrig=0,jswstart=0 ADC2->regs->CR2 = ( ADC_CR2_CONT | ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG); //0xe0002; ADC1->regs->CR2 |= ADC_CR2_ADON; // it is critical to enable ADC (bit 0=1) independently of all other changes to the CR2 register ADC2->regs->CR2 |= ADC_CR2_ADON; // enabling all at once (i.e. ADC_CR2_ADON | ADC_CR2_CONT | ADC_CR2_EXTSEL ) will cause problems when used with continuous mode } // check for DMA transfer finished, resetting isr bit uint8 dma_transfer_finished() { if(dma_get_isr_bits(DMA1,DMA_CH1)==0x07) { int result=dma_get_irq_cause(DMA1,DMA_CH1);//<--clears isr bits return 1; } return 0; } void setup() { Serial.begin(115200); // Ignored by Maple. But needed by boards using Hardware serial via a USB to Serial Adaptor pinMode(3,INPUT_ANALOG); //set all used pins as INPUT_ANALOG, in the example 3,4,5,6 pinMode(4,INPUT_ANALOG); pinMode(5,INPUT_ANALOG); pinMode(6,INPUT_ANALOG); set_adc(); // initial ADCa and ADC2 settings } void loop() { adc_to_ready(); // it is critical to set ADC before DMA, to avoid partial DMA transfers being stored. If the ADC is in continuous mode while DMA is being set set_dma(); // the DMA transfer will be triggered and the DMA counter will start from the wrong value ADC1->regs->CR2 |= ADC_CR2_SWSTART; //start conversion, STM32 will reset this bit immediately. Only ADC1 (master) needs to be started while(!dma_transfer_finished()); dma_disable(DMA1,DMA_CH1); //stop dma transfer for(int i=0;i<(NUM_SAMPLES);i++) { Serial.print(i); Serial.print(" "); Serial.print(adcbuf[i] & 0xFFFF); Serial.print(" - "); Serial.println((adcbuf[i] & 0xFFFF0000) >>16); } Serial.println(); delay(750); }

Беннебой
Ср 19 декабря 2018 г., 23:59
Не видя, что библиотека MAX31855, невозможно сказать, просто ли она.

Рикв
Солнце 23 декабря 2018 г., 19:11
Я думаю, что я был неправ.
MAX31855 и XPT2046 отлично работают над тем же SPI, так же как и ILI9341 для первого запуска в «Цикле».
Я разместил звонки на сенсорный экран и температуру в самом начале «петли» и продолжил с TFT.Begin () и TFT работает (ну, я теряю все настройки, сделанные в настройке, конечно). Я полагаю, что это означает, что процедуры TS и/или температура оставляют SPI в настройке, которая не исправлена ​​при входе в какую -либо из функций TFT, настройка SPI Params - это одна из вещей, сделанных в «Begin».
Наиболее логичным решением было бы исправить ADAFRIT_ILI9341_STM LIB, а не? Или я могу добавить линию в свою программу, чтобы исправить только настройку SPI (не теряя никаких настроек)?
Я обнаружил, что все настройки являются Mode0 MSBFirst, частоты 2, 4 и 48 МГц для TS, TEMP и TFT RESP.
Или я -ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа?

Беннебой
Пн 24 декабря 2018 г. 10:19
Проверили ли вы, что все линии CS сбрасываются правильно, они должны быть низкими только для каждого устройства, пока вы хотите, чтобы это устройство ответило.

Стивестронг
Пн 24 декабря 2018 г., 10:41
Решение, предложенное уже на форуме, состоит в том, чтобы использовать отдельные .../Arduino_STM32$ grep -r include |grep adc.h |grep f1 STM32F1/system/libmaple/include/libmaple/adc.h:#include "stm32f1/include/series/adc.h" STM32F1/system/libmaple/stm32f1/include/series/adc.h: * included in all copies or substantial portions of the Software. STM32F1/system/libmaple/stm32f1/include/series/adc.h: * @file libmaple/stm32f1/include/series/adc.h STM32F1/system/libmaple/stm32f1/include/series/adc.h:#include STM32F1/system/libmaple/stm32f1/include/series/adc.h:#include STM32F1/system/libmaple/stm32f1/include/series/adc.h:#include /* For the prescalers */ STM32F1/cores/maple/stm32f1/util_hooks.c:#include STM32F1/cores/maple/libmaple/adc_f1.c:#include

Беннебой
Пн 24 декабря 2018 г., 10:44
[Стивестронг - Пн 24 декабря 2018 г., 10:41] - Решение, предложенное уже на форуме, состоит в том, чтобы использовать отдельные #define SAMPLES_CH 2048 //ADC Samples per channel (each 16 bit) #define SAMPLES_BUF SAMPLES_CH*4 //Total size of 16 bit buffer #define SAMPLES_32 SAMPLES_CH*2 //ADC buffer (2 CH per conversion) int32_t adcbuf32[SAMPLES_32+1]; // buffer to hold samples, ADC1 16bit, ADC2 16 bit int16_t *adcbuf16 = (int16_t *)&adcbuf32; //same buffer, but as 16 bits int16_t gcc(int16_t *trigger, int16_t *array2) { int32_t dotprod = 0; int32_t maxv = 0; int pos = 0; for (int j = 0; j < SAMPLES_BUF; j+=4) // creates a sliding window (positive only, since first array is always trigger). Array is made of four 16 bits elements, need to move in 4 increments { dotprod = 0; for (int i = 0; i < MIN(SAMPLES_BUF/3, SAMPLES_BUF-j); i+=4) // no need to check all samples for trigger microphone, roughly first 1/3th should be enough; stop when i+j=SAMPLES_BUF { dotprod += trigger[i] * array2[i+j]; //weighting function. If more than 2048 samples per channel, might overflow } if (dotprod > maxv) { maxv = dotprod; pos = j/4; } } return pos; }

Стивестронг
Пн 24 декабря 2018 г., 11:01
Не идентичны, разные частоты:
[Рикв - Sun 23 декабря 2018 г., 19:11] - Я обнаружил, что все настройки являются Mode0 MSBFirst, частоты 2, 4 и 48 МГц для TS, TEMP и TFT RESP.

Беннебой
Пн 24 декабря 2018 12:58
[Стивестронг - Пн 24 декабря 2018 г. 11:01] - Не идентичны, разные частоты:
[Рикв - Sun 23 декабря 2018 г., 19:11] - Я обнаружил, что все настройки являются Mode0 MSBFirst, частоты 2, 4 и 48 МГц для TS, TEMP и TFT RESP.
Упс, похмелья и форумы плохо смешиваются! Удачного Рождества : D

Рикв
Пн 24 декабря 2018 г., 13:06
Я сделал это, и они правы.
Я добавил
тфу.начинать();
тфу.Установление (2); // портрет, SD-карта на правой стороне, xy = 0,0
И все, кажется, работает нормально. Я могу сделать это, потому что MAX31855 и XPT2046 называются только один раз на петлю. Тем не менее, эта LIB (ADAFRIT_ILI9341_STM) должна быть исправлена, я думаю.
Было бы преимуществом, если бы я использовал управление прерыванием на сенсорном экране? Просто для развлечения?

Рикв
Вт 25 декабря 2018 г., 19:07
Стив,
SPI.BeginTransaction (Spisettings (48000000, MSBFirst, SPI_MODE0, DATA_SIZE_8BIT));

не работает (я считаю, что настройки верны, но как я могу получить правильные?)
Это, однако, работает (но, без сомнения, больше потребляет ресурсы):

тфу.начинать();
тфу.Установление (2); // портрет, SD-карта на правой стороне, xy = 0,0

Рикв
Пн, 07 января 2019 11:04
До сих пор развитие GUI продолжается. До вчерашней ночи.
Прошло пару дней с тех пор, как я в последний раз собрал проект, когда я бродил вокруг www и открыл разные .Ино для вдохновения.
Затем я попытался «проверить» свой проект после незначительной модификации.
Ошибки компилятора везде! Почему? Ничего не изменилось? После некоторого расследования я считаю, что линкер жалуется на PID_V1.CPP.о. Эта LIB находится в каталоге проектов вместе с его .час. До тех пор, пока все работало нормально, но теперь линкер говорит во всех функциях PID: множественное определение `pid :: compute () '(в качестве примера).
Когда я удаляю либера.
Какие правила используются компилятором для поиска включенных библиотек? Как я могу решить свою проблему?

Рикв
Ср. 09 января 2019 г. 20:36
Может кто -нибудь помочь мне из этого:
тфу.начинать();
тфу.Установление (2); // портрет, SD-карта на правой стороне, xy = 0,0
занимает 320 мс (!!!!!) для завершения. Я просто не могу позволить себе иметь это внутри моего "главного".
SPI.BeginTransaction (Spisettings (48000000, MSBFirst, SPI_MODE0, DATA_SIZE_8BIT)); Почему это не работает? где я могу найти правильные параметры?

Mrburnette
Ср. 09 января 2019 11:05
[Рикв - Sun 23 декабря 2018 г., 19:11] - ...
Наиболее логичным решением было бы исправить ADAFRIT_ILI9341_STM LIB, а не? Или я могу добавить линию в свою программу, чтобы исправить только настройку SPI (не теряя никаких настроек)?
...
Втяните библиотеку Adafruit (копирование) в свой каталог эскизов, чтобы инкапсулировать ее... изменить #include, чтобы выглядеть как "./lib_name "
Внесите изменения в локальную копию эскиза.
Никогда не меняйте копии библиотеки в Arduino/Libraries

STM32duino не Arduino.CC Codebase, и хотя много усилий пришло в попытку полной совместимости, факт, что мы знаем, что существуют некоторые проблемы, и некоторые «исправления» могут иметь ограниченный объем для корректирующей деятельности. Итак, пока SPI 1&2 может работать отдельно, нет никакого плана испытаний, чтобы убедиться, что вы можете успешно протянуть несколько устройств ADHOC.

То, что вы получаете с STM32duino (Hosted Core Roger) - это продвинутая версия Leaflabs Original Core взломан для работы под текущим ардуиноидом. Просто нет никакой гарантии, что портированное ядро ​​работает, что оно совместимо с каким -либо оборудованием или что он соответствует любой пригодности. Конечный пользователь в конечном итоге несет ответственность за адаптацию эскизов, библиотек или основного кода, чтобы смягчить проблемы. Не полагайтесь на это ядро, которое будет поддерживать каким -либо образом; Вещи сломаны, ваша проблема.

С моей точки зрения вы должны мигрировать в официальное ядро ​​как можно скорее:
https: // github.com/stm32duino/arduino_core_stm32

Луча