Сегодня утром я добил прошивку платформы (обновлю на гитхабе позже, лень мне в эти выходные на работу идти, тем более после экскурсий на БТА). И оно таки заработало!
Час назад, когда я еще проводил последнюю экскурсию, прибор привезли вешать на БТА.
Вот в таком хаосе всю последнюю неделю находилось мое рабочее место:

Подробней )
Я уже давно набросал основной код для работы с этим экранчиком и даже составил шрифт для любимой кодировки, но никак руки не доходили это собрать воедино. Вот, за вчерашний вечер и сегодняшний день соединил. Видео на тытрубе:

Дальше )
Я еще где-то в июне подготовил код софтового I2C, но только вчера вечером руки дошли протестировать на железе. С таймингами я, конечно, намучился, а еще хуже было с порядком изменения состояния ног SDA и SCL (т.к. между последовательными сменами состояния возникали интервалы до 0.5мкс — все-таки, у меня еще и прерывания разные работают, то иногда получалось так, что в конце переданного байта "самопроизвольно" возникал STOP).
Но вроде бы со всем разобрался, выложил код на примере работы с SI7005. Кстати, заметил неплохую "очепятку": почему-то я везде humidity называл pressure (то ли забыл, что датчик не давление, а влажность измеряет, то ли с другим его поначалу перепутал). В этом коде все исправлено: команда 'H' запускает измерение влажности (результат выводится в виде H*10), а команда 'T' измеряет температуру (результат выводится в виде T*100).

Теперь при желании можно на основе "вольтметра" на STM8S003 сделать термометр-гигрометр.
Наконец-то добил я аппаратный I2C на STM8: мало того, что из ERRATA несколько "патчей" внести пришлось, так еще и кое-какие косяки свои исправить. Еще я долго бился, пытаясь понять, почему у меня ожидание кое-каких флагов отваливается. Оказывается, sdcc до gcc еще расти и расти: если аргумент макроса не окружить скобками, то он превращается в пустоту...
Вот код на гитхабе, на сосфорже, соответственно, тоже зеркало лежит.

Т.к. поверенных барометров и термометров у меня при себе нет, протестировать качество показаний этого датчика не по чем.
Сейчас закончил преобразование "термометра", позволяющего подключить до 14 DS18x20 к трехразрядному китайскому "вольтметру" на STM8. Код можно посмотреть здесь.
Переделка совсем несложная (выпаиваются несколько деталюшек, а один резистор перепаивается с одного места в другое, если под рукой нет 0603 на 4.7кОм — с 10-килоомным при коротких проводах все тоже вполне работает):
15.04.23_22:01:26
Схемка переделки

Чуть текста )
(написал бы вчера, но почти двое суток интернета не было в поселке)

Потихоньку мои сниппеты для STM8 разрастаются. Чтобы переделать "вольтметр" в термометр на 1-wire (кстати, можно и простое термореле сделать на трехсимвольном "вольтметре" — у него свободных ног достаточно),понадобилась поддержка 1-wire. Все, что в интернете находил, было реализовано совершенно некрасиво: ногодрыгом с жуткими задержками (по сути, операция опроса термодатчика везде делалась блокирующей, что не очень хорошо для таких вещей, как динамическая индикация, опрос клавиатуры и т.п.).
Я сделал на таймере: у трехсимвольного "вольтметра" как раз второй канал compare/capture таймера TIM2 используется как аналоговый вход для измеряемого напряжения, т.е. модифицировать будет проще всего. И Вот, что получилось. Пока что код непричесанный, содержит много отладочной информации + не до конца допиленный.

Что уже реализовано:
  • опрос одного-единственного датчика с командой Skip ROM,

  • вывод температуры в тысячных долях °C,

  • сохранение ROM-кода подключенного датчика в EEPROM (т.к. я рассчитывал на STM8S003, то, несмотря на то, что у 105-го, на котором я тренируюсь, 1кБ EEPROM, датчиков максимум 14, т.к. у 003-го всего лишь 128Б),

  • поочередный опрос всех датчиков с сохраненным ROM и выдача температуры.

Что еще нужно реализовать (UPD 08.04):
  • убрать тысячные (т.к. точность DS18 ниже плинтуса, там даже округление до целых градусов — многовато, по-хорошему, надо в сторону ближайшей тройки, а то и четверки округлять), (сделано), теперь по крайней мере не так в глаза бросается; вот, например, для "устаканившихся" трех B20 и одного (четвертого) S20: 23.6, 23.5, 23.4, 23.5. А то и вообще: 23.6, 23.6, 23.4, 24.0...

  • добавить возможность удаления ROM несуществующих датчиков, (сделано)

  • перенести весь код на "вольтметр".


Потом еще хочу с DHT11/DHT22 научиться работать. Но у них совсем все уныло, т.к. только 1 датчик на линию можно вешать. Да и точность там ну совсем жуткая, даже DS18 фору даст!

А еще надо бы закончить с реализацией аппаратного 1-wire (через таймер с DMA) на STM32.
Сегодня утром написал вольтметр на 4 разряда:
код на сосфорже, схема.

Алгоритм элементарный: раз в миллисекунду обновляется очередная цифра на экране индикатора + заносится очередное значение, полученное АЦП, в буфер из девяти чисел. Как только буфер заполняется, вычисляется медиана (18 операций сравнения/перестановки) и прибавляется к значению U (инкрементируя соответствующий счетчик). Один раз в 300мс происходит обновление измеренного значения: U усредняется, умножается на 3300 (3.3В — амплитуда питания, 10 — коэффициент делителя, 100 — т.к. напряжение в сотых долях Вольта считается) и сдвигается вправо на 10 разрядов (т.к. АЦП 10битный). Измерение на тестовом источнике 5/12В показало, что вполне нормально данные согласуются с измерением на обычном вольтметре (с точностью до LSB, равного 0.03В).
Этим "ночером" я срисовал схемы еще двух вольтметров:
3digit_voltmeter
Трехсимвольный

4digit_voltmeter
Четырехсимвольный

Дальше )
На "казусе" попросили снять протоколы. Снял.
Снимаю данные по I2C
Вот так это происходило


Китая мать! )

UPD:
К сожалению, чип оказался залоченным от чтения. Но и почему-то не получилось ничего вместо существующей прошивки записать. На "казусе" посоветовали на Vcap припаять микрофарадный кондей. Попробую. Но, боюсь, что не поможет: есть подозрение, что китайцы научились делать одноразовые STM8S003.
Вчера я занимался "реверсом" пятизначного вольтметра (buyincoins), (ebay). Конечно, я так и не понял, зачем китайцы запихнули туда 5 знаков, если он и 4 вряд ли сможет точно во всем диапазоне (0..30В), но захотелось для него прошивку написать.
Реверсинг 5-значного вольтметра; тест на 12В
Вот и сам вольтметр, тест на 12В

Проведенный на кухне вечер дал плоды: я нарисовал в кикаде схему, а также определился с логикой работы. Остается "всего лишь" написать прошивку. Результаты — в репозитории stm8samples на сосфорже и гитхабе. Под катом — файл README с некоторыми пояснениями.
Схема вольтметра

README )
Я решил вечерком сделать очередное приближение к своему сверлильному микростаночку для печатных плат: поуправлять шаговым двигателем от старого оптического привода. Для этого использовался пришедший сегодня с ибея двойной H-мост на L9110s (еще я купил десяток этих мостов, чтобы всю систему управления станочком спаять) и давно уже купленная (покупал по-дешевке у китайца, который только-только раскручивался, сейчас уже у него цены такие же, как у всех) макетка на STM8S105.

Фото + видео )
Дело было вечером, делать было нечего…
Хоть и не вечер, но что-то скучно: выходной, а поезд у меня аж в 23:30. Вот и решил «потренироваться на кошках» — поизучать захваченные с собой на такой случай дальномеры.

1. Sharp 2Y0A02 )
2. HC-SR04 )

UPD. Забыл дать ссылку на код. Исправляюсь: на сосфорже, на гитхабе. Как часть репозитория stm8_samples.
Что-то этот простой тип микроконтроллеров прямо-таки пробудил во мне творчество! Очередной поделкой на них стала система управления шаговыми двигателями. Вчера я написал простую однозадачную управлялку пятью шаговиками (единовременно может двигаться только один ШД: у всех пяти двигателей общие DIR и STP[CLK] и индивидуальные EN). А сегодня развил идею и сделал многозадачную управлялку тремя шаговиками (можно еще повесить, но т.к. наружу торчит лишь три разных таймера, то пришлось бы мудрить, объединяя оба варианта). Все складываю в общий репозиторий stm8samples на сосфорже, т.к. для каждой подобной мелочевки заводить отдельную репу — перебор.
Ну, а реализована основная часть на двухдолларовой макетке с ибея на основе STM8S105K4T6C и долларового переходничка USB<->TTL оттуда же. Для затравки приведу еще картинку (набросал сегодня утром):
STM8-board
Схема макетки на STM8S105.

Подробности )

Ну и как же не похвастаться напоследок: в субботу выдался такой замечательный теплый день, что я весь день провозился с машиной. Смонтировал в багажник светодиодные ленты, чтобы лучше видно было в темноте, а еще воткнул две 12-вольтных розетки по бокам от полки (чтобы из салона можно было иметь к ним доступ) — теперь подзарядить всякую фигню сзади будет совершенно несложно.

STM8

Feb. 6th, 2014 12:15 pm
Я решил подбить результаты экспериментов с STM8. К сожалению, на БХ борзая администрация совсем офигела, поэтому выложил на freehabr.
Сегодня у меня, наконец-то, получилось «скрестить ужа с ежом»: использовать «вольтметр» на STM8S003 для измерения температуры по протоколу ZacWire с термометров TSic-506. Видео раз, видео два.

Read more... )

STM8 + ADC

Jan. 15th, 2014 08:38 pm
Добавил изменение периода мигания светодиодов при помощи АЦП (значение, полученное на АЦП, дает полупериод мигания):

Одной из моих покупок на ebay была макетка с STM8S003. Только купив ее я узнал, что надо было бы хотя бы S105 брать, т.к. у S003 гарантированное число перезаписей flash очень уж близко к нулю.
В свете опытов с термодатчиками подумал я, что можно использовать что-нибудь из линейки STM8 для обслуживания кластера из 8..16 термодатчиков TSic. Посадить их на общую шину UART или даже CAN. Другой вариант - коммутировать питание датчиков при помощи, скажем, дешифратора CD74HC154 (который я тоже задействовал в первых опытах).
Видео )

STM8

Jan. 9th, 2014 01:07 am
Вчера я попробовал-таки скомпилировать простенькую мигалку диодом на STM8-mini, чтобы проверить работоспособность sdcc. Чуть больше )
Диод замигал, замыкание контактов PD5 и PD2 изменяло частоту мигания. Можно пробовать что-нибудь посложнее.

July 2017

S M T W T F S
      1
23 4 5 6 78
9 101112 131415
16171819 202122
23242526272829
3031     

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 20th, 2017 02:41 pm
Powered by Dreamwidth Studios