eddy_em: (Костерок)
[personal profile] eddy_em
На "казусе" попросили снять протоколы. Снял.
Снимаю данные по I2C
Вот так это происходило



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

  1. Вывод ведется с фиксированной точкой (в четвертой позиции, т.е. цифра2), поэтому либо 4 цифры отображается, либо все 5. Если отображается только 4, то 1 цикл длится 7.5мс, если же отображается 5 цифр, один цикл составляет около 8.5мс.

  2. Каждая цифра отображается по 1мс, на чтение уходит около 1.5мс (точнее, там совсем немного уходит на чтение, остальное время МК простаивает).

  3. Зачем-то китайцы целый такт (1мс) уделили десятичной точке вместо того, чтобы ее вместе со второй цифрой показывать. Ну, как говорится, восток — дело тонкое.

  4. Число отображается слева-направо (т.е. со старших разрядов к младшим).

АЦП

  1. Протокол обмена данными с АЦП в точности такой, как и указано в даташите → это точно MCP3421

  2. Я удивился, но китайцы работают в 16-битном режиме. Поэтому у них и получается квант == 2-3мВ (когда пляшет вывод).

  3. Судя по тому, что на 12.669В АЦП передал число 11560, а на 5.132В передал 4684, коэффициент K в формуле U=(Data*K)>>15 составляет примерно 35910.
    Это значит, что вольтметр калибровали (т.к. "умолчательный" коэффициент равен 35840), а реальный коэффициент ослабления входного напряжения составляет 17.534.

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

  1. Китайцы делают сложную таблицу калибровки (скажем, через полвольта), внутри каждого интервала свой коэффициент. Но в это верится примерно как в Деда Мороза.

  2. Китайцы используют float. Это более вероятно. Хотя и противоречит здравому смыслу.




UPD:
К сожалению, чип оказался залоченным от чтения. Но и почему-то не получилось ничего вместо существующей прошивки записать. На "казусе" посоветовали на Vcap припаять микрофарадный кондей. Попробую. Но, боюсь, что не поможет: есть подозрение, что китайцы научились делать одноразовые STM8S003.

Date: 2015-02-01 07:43 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
>>И вообще, float'ы в коде для
микроконтроллеров — это отличный индикатор
того, что автор что-то делает не так.

вы заблуждаетесь :)
есть множество задач, где float лучше чем городить огороды с целыми.

Date: 2015-02-01 09:03 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Возможно.
Но у меня нет задач, в которых нужно использовать float на микроконтроллере: нечто вроде этой (амперметр, вольтметр, термометр и т.п. с LED-экранчиком) значительно проще решается целочисленной арифметикой. А в более сложных задачах "голые" данные отправляются на компьютер, а там уже всякие вычисления и проводятся.

Вот, скажем, если бы я писал прошивку для три-, квадро-, пента- и т.п. коптера, то без целочисленной арифметики не обошелся бы никак. Кстати, для меня до сих пор загадка, как стабилизируют полет более чем трех винтов: ведь невозможно однозначно провести плоскость больше, чем через три точки!

Date: 2015-02-02 10:12 am (UTC)
From: [identity profile] alex-avr2.livejournal.com
Ну, то что нет задач - не значит что все остальные использующие float - идиоты :)

October 2025

S M T W T F S
   1234
567 89 1011
121314 15161718
19202122232425
2627 28293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 2nd, 2026 07:12 pm
Powered by Dreamwidth Studios