Ну вот наконец добрался до Attiny85, все хотел чего-нибудь сделать на них. А тут коллеги решили с гальваническими покрытиями поиграться. Путем нехитрых доработок блок питания для светодиодных дисплеев на 5В 60А стал регулируемым. А вот контролировать такие токи нечем. Шунт на 75мВ при 50А в местных магазинах мы нашли, а вот головку к нему нет, а стоять считать чего там милливольты показывают на мультиметре- такое себе.

Ну вот такой проект на один вечер.

ATTINY85

Attiny85 является старшим контроллером из 8 ногой серии МК аттини. От своих собратьев Attiny25 и 45- отличается объемом памяти. У 25- 2кБ, у 45- 4кБ, у нашей 85 соответственно целых 8кБ памяти, та же история и с EEPROM и SRAM. Да что я рассказываю, смотрите сами:

В общем отличный представитель класса компактных 8 битных МК. Пригодится там где не нужны большая производительность и обилие портов.

Аттини у нас маленькая, значит и дисплей надо брать маленький. Выбор пал на 0.91 дюймовый OLED с разрешением 128х32, контроллер SSD1306. Дёшево, сердито, и у меня их есть целая куча. Есть у меня такое увлечение- попытаться уложится в плату размером с дисплей, если это конечно возможно. В этот раз получилось.

Схема

Все гениальное просто!
Все гениальное просто!

Тут ничего нового. Усилитель на ОУ, пара делителей с фильтрующими емкостями, и стандартная обвязка для SSD1306. Чтобы получить из 75мВ вменяемые для АЦП значения выбран коэффициент усиления 31, что дает нам 2.2В при 71мВ и токе 47.3А на шунте. После ОУ мы это значение пилим пополам. Опорное напряжение- внутреннее 1.1В. R3 и С2 выступают фильтром ВЧ, а так-же коллега подсказал что без такой цепочки можно легко спалить вход ОУ при резком скачке тока на шунте.

Второй канал АЦП заведен через делитель на 16, что позволяет измерять до 17.6В. Так-же присутствует емкость для подавления помех. Про линейный стабилизатор на 3.3В я думаю можно не рассказывать.

В конкретно моем случае особая точность не нужна, но вы конечно можете пересчитать делители и КУ ОУ и либо увеличить точность, либо расширить диапазоны пожертвовав первой. АЦП у нас, напомню, разрядностью всего 10 бит.

Плата

Плата нарисована односторонняя, под возможности ЛУТ. Дисплей на стороне компонентов, поверх них. Плата размером с дисплей, за его пределы выходят только контакты для пайки проводов.

Рисуем
Рисуем

Как вы можете заметить- все очень компактно получилось. Этому поспособствовали и несколько килограмм приехавших недавно резисторов и конденсаторов размера 0603, которые я 2 дня раскладывал по кассетницам, но это уже другая история) . Дорожки в основном 0.25.

После ЛУТа
После ЛУТа

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

После сборки
После сборки
Как итог
Как итог

Прошивка

ПО написано в среде Arduino IDE. Ядро используется AttinyCore. Библиотека дисплея Tiny4kOLED плюс шрифты . И то и другое доступно как по ссылкам выше, так и из менеджера плат и менеджера библиотек при помощи поиска.

Прошивал через USBasp и прищепку. Настройки остались все стандартные, если можно так сказать. Внутреннее тактирование на 8мГц. Прошивка грубо демонстрационная, прошу тапками не кидать, когда-нибудь скоро возможно напишу нормальную. А пока вдруг кто-нибудь решит повторить- все в ваших руках. Память используется почти вся, почти вся на шрифты. Это как первая цель для оптимизации. Еще парой строк можно добавить измерение мощности. Ну в общем есть где разгуляться.

Код
#include <Tiny4kOLED.h>
#include "ModernDos.h"
#include "ModernDos8.h"
#include "5x5_font.h"


int ADCV;
int ADCV1;
int ADCA;
int ADCA1;

float VOLT;
float AMP;

bool CH;

long MS;

//------------------------------------------------------------------------------
void setup() {
  analogReference(INTERNAL1V1);   //Устанавливаем опорное напряжение для АЦП- внутренее 1.1В

  Wire.begin();
  Wire.setClock(400000L);
  oled.begin();
  oled.clear();
  oled.on();


}
//------------------------------------------------------------------------------
void loop() {

  ADCV = analogRead(PB3) * 0.985;        //Читаем 3 канал АЦП и калибруем
  ADCA = analogRead(PB4);                //Читаем 2 канал


  /*

    Дальше идет конструкция с флагами чтобы не тратить ресурсы на обновление дисплея если нет изменений.

  */

  if (ADCV1 != ADCV) {                  //Если резервное значение не равно значению с АЦП
    ADCV1 = ADCV;                       //Записать в резервное значение новое значение АЦП
    CH = 1;                             //Поднимаем флаг означающий новые данные
    VOLT = float(map(ADCV, 0, 1023, 0, 1760)) / 100;    //Стандартной функцией приводим значение из диапазона АЦП в диапазон нужный нам. Все это безобразие конверуем во Float и делим до реального значения.
  }
  if (ADCA1 != ADCA) {
    ADCA1 = ADCA;
    CH = 1;
    AMP = float(map(ADCA, 0, 1023, 0, 47333)) / 1000;
  }



  if (CH && millis() > MS + 200) {              //Если произошло изменение в данных, но не чаще 200мС, запускаем отрисовку данных на дисплей
    MS = millis();

    oled.setFontX2(FONT8X16MDOS);
    oled.setCursor(0, 0);
    oled.print(AMP, 1);

    oled.setFontX2(FONT8X8MDOS);
    oled.setCursor(64, 0);
    oled.print("<A");

    oled.setFontX2(FONT5X5);
    oled.setCursor(64, 2);
    oled.print(VOLT, 2);
    oled.print("V");
    CH = 0;                                   //Сбрасываем флаг как только все сделано
  }

}

Файлы

Исходники на гитхаб. Схема и печатная плата в DipTrace.

Забавный факт. Когда рендерил 3D вид- вдруг пришла мысль что плата на что-то похожа. А похожа она на плату от USB флешки, или на тот же Digispark в варианте что втыкается в USB. Приложил плату от флешки и понял что по ширине они практически одинаковы. Но я так думаю что человек способный такую плату изготовить не додумается ее сунуть в USB.

А еще ко мне приехало некоторое количество Attiny10. Так что будет продолжение с еще более мелким устройством и уже точно нормальным кодом. Правда я так и не придумал что это будет. Предлагайте в комментариях.

Комментарии (11)


  1. kimor
    07.01.2023 14:39
    +4

    "проект на один вечер"? Мне кажется Вы сильно переоценили мои силы и способности :-)


  1. Pyhesty
    07.01.2023 14:55
    +8

    рекомендую посмотреть в сторону MG8F6 на разогнаном ядре 8051 от мегавин, у них есть вариант в корпусе tsop-20. Так как много пришлось сделать проектов на tiny25 выявил следующие проблемы, которых mg8f6 лишены (ну и ценник адекватнее)

    1. реально мало ног

    2. нет нормальной внутрисхемной отладки

    3. нестабильная частота внутреннего RC

    4. 2кб и даже 8кБ памяти бывает мало

    5. опорное напряжение АЦП плавающее от температуры

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

    1. точность внутреннего генератора 1%

    2. 16кБ памяти (после мучительных 2кБ... это море возможностей)

    3. внутрисхемная отладка

    4. прошивка по uart по умолчанию без программатора

    5. нормальное кол-во ног при удобстве сборке и сохранении габаритов

    6. два uart!

    короче мне показалось, что это тини на стероидах, жаль раньше не знал...


    1. pharo
      07.01.2023 17:47

      рекомендую посмотреть в сторону MG8F6 на разогнаном ядре 8051 от мегавин

      А, где их продают в России, если не обращаться на Ali?
      На том же ЧипДип находятся пара позиций от Megawn и они не на 8051 ядре


      1. Pyhesty
        07.01.2023 17:52
        +1

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

        ps: достал из загашника для примера как выглядят отладки для них и программаторы (один программатор внутрисхемный, второй для прошивки по UART, довольно интересная тема, что с завода процы уже идут с загрузчиком, что позволяет их прошить без программатора любым USB-UART переходником)


    1. ENGIN33RRR Автор
      09.01.2023 13:04

      В tssop20 у меня есть STM8S103 и STM32F030. Но ставить тот же G030 с его 32кБ памяти и частотой 48мГц в вольтметр я считаю богохульством.


      1. Pyhesty
        09.01.2023 13:17

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

        ну и бонусы в части внутрисхемной отладки и 1% внутреннего генератора - это песня... откровенно надоело отлаживаться по логам и пилить подстраиваемый на ходу uart..., более того, нормальные логи не влезали в attiny25.


        1. ENGIN33RRR Автор
          09.01.2023 14:01
          +1

          Есть еще у меня LGT где-то, тоже копейки стоят, насколько помню это AVR на максималках, там частоту и чего то еще прямо из программы менять можно.


  1. nerudo
    07.01.2023 15:33
    +5

    Чего только не придумаешь, чтобы не искать по складам какой-нибудь ina219 ;)


  1. Nunter
    09.01.2023 13:05

    День добрый!
    А подскажите пожалуйста в каком софте можно нарисовать не сложную схему и отрисовать на ее основе плату?
    Я по старинке все делал на макетных платах но с одной схемой что то никак не могу поладить, то ли компонент какой то битый то ли схема не правильная

    PS наверное вопрос из области фантастики, есть схема нарисованная от руки на бумаге, есть в природе софт который ее перетянет к себе и поймет хотя бы элементы и связи между ними?

    Спасибо!


    1. ENGIN33RRR Автор
      09.01.2023 13:09

      Опознание схемы с рисунка- из раздела фантастики. CAD для электроники огромное множество. Например тот же DipTrace, Pcad, Altium, но у каждой свои заморочки. Есть еще Proteus и Multisim позволяющие еще и сэмулировать работу схемы там же, первая больше для цифры, вторая больше для аналога.


    1. Pyhesty
      09.01.2023 13:23

      мне зашел в последнее время KiCad - он свободный.