oled 0.96'' 128x64 IIC

Тема в разделе "Флудилка", создана пользователем Igor68, 21 фев 2019.

  1. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Случилось так, что друг купил в Китае. Вот:
    http://adatum.ru/samyj-plohoj-arduino-displej-oled-lcd-display-i2c-0-96-iic-serial-128x64.html

    Ну и вот сегодня вечером пощупал его. Ардуины нет, а вот есть малина одна из первых, которую приспособил как программатор и т.п.

    Исходил из библиотеки
    oled_i2c_rus.zip

    Ну там и другие есть конечно. В них есть примеры для Ардуины.
    Долго не стал париться и вот сваял простенький тест, выдергивая функции из них. Обмен по I2C взял из своих ранних "черновиков" для малины. Вот:
    S2LKX212.zip

    Тут нет вывода текста - руки не дошли.
    Тут только:
    - очистка
    - вывод пикселя
    - вывод линии
    - вывод прямоугольника
    - вывод окружности

    Всё организовано в файле main.c а сами фунции в oled096.c доступ по i2c в i2c.c. На c++ не стал перетаскивать/делать, а взял свой шаблон для Си (чистого классического).
    Если у Вас не первая малина, то надо перекомпилировать

    Код (Text):
    make clean
    make
     
    Конечно есть предупреждения при компиляции - код не пригладил. Просто как черновик.
    Фото не выкладываю - смысла нет. Подключал согласно этому:
    GPIO_pinout_raspberry_pi_v1.jpg
    Подключал:
    VCC - к +5V
    GND - к GND
    SDA - к SDA
    SCL - к SCL

    А в main всё на "лету". Вот:
    Код (C++):
    int main(int argc, char* argv[])
    {
        //
        printf("---TEST LCD 0,96'---\n");
        i2c_OPEN(_slave_addr);
        //
        printf("clear...\n");
        oledSetup();
        oledClear();
        oledUpdate();
        //
        printf("Set Pixel...\n");
        oledSetPixel(64,32);
        oledUpdate();
        //
        printf("Clear Pixel...\n");
        oledClrPixel(64,32);
        oledUpdate();
        //
        printf("Draw Line...\n");
        oledDrawLine(3,61,124,3);
        oledDrawLine(61,3,3,124);
        oledUpdate();
        //
        printf("Clr Line...\n");
        oledClrLine(3,61,124,3);
        oledClrLine(61,3,3,124);
        oledUpdate();
        //
        printf("Draw Rect...\n");
        oledDrawRect(1,1,60,60);
        oledDrawRect(10,35,40,52);
        oledUpdate();
        //
        printf("Clr Rect...\n");
        oledClrRect(1,1,60,60);
        oledClrRect(10,35,40,52);
        oledUpdate();
        //
        printf("Draw RoundRect...\n");
        oledDrawRoundRect(3,3,124,61);
        oledUpdate();
        //
        printf("Clr RoundRect...\n");
        oledClrRoundRect(3,3,124,61);
        oledUpdate();
        //
        printf("Draw RoundRect...\n");
        oledDrawCircle(64,32,20);
        oledUpdate();
        //
        printf("Clr RoundRect...\n");
        oledClrCircle(64,32,20);
        oledUpdate();
        //
        i2c_CLOSE();
        printf("end!\n");
        //
        return 0;
    }
    То есть после выполнения экран чистый, а в работе сообщения в консоль. Задержки не делал - испытание индикатора.

    Кому над берите. Может вдруг надо кому... и вопросы задавать не потребуется.
     

    Вложения:

    • oled_i2c_rus.zip
      Размер файла:
      402,3 КБ
      Просмотров:
      65
    • S2LKX212.zip
      Размер файла:
      16,8 КБ
      Просмотров:
      53
    ИгорьК нравится это.
  2. ostrov

    ostrov Гуру

    Есть вариант тоньше вдвое. Хорошие, яркие, но по слухам быстро выгорают.
     
  3. Igor68

    Igor68 Гуру

    Неужели я призывал к его приобретению? Отнюдь!
    А куда и для чего его можно...
    Вот он у меня появился - подарок от Друга и товарищу по интересам к устройствам и их ремонту/созданию.
    В голову ничего не приходит... Разве что щуп-осциллограф с мелкими параметрами. Где-то видел такой. Ну как логический пробник - крокодил для GND - на проводе и щуп торчащий из торца корпуса. Если на МК с АЦП + входной усилитель + делитель для выбора предела + сабилизатор + батарейки, то можно такой сделать. Вот ADUC7024 пригоден. Питание 3.3 для него. 45МГц + 62Кб флеш + 32Кб ОЗУ + 12Бит АЦП(1Млн выборок в сек) + I2C(и др). А в измерении AD8554:
    FEATURES
    Low offset voltage: 1 μV
    Input offset drift: 0.005 μV/°C
    Rail-to-rail input and output swing
    5 V/2.7 V single-supply operation
    High gain, CMRR, PSRR: 130 dB
    Ultralow input bias current: 20 pA
    Low supply current: 700 μA/op amp
    Overload recovery time: 50 μs
    No external capacitors required

    Питание 2 литиевые батарейки через ADP330 5в на дисплей, 3.3 на контроллер и ОУ.
    Вот жаль руки не лежат к этому

    А предлагал просто пример применения на малине. Всё сделано (правда мусора много) с 18:50 до 22:00 примерно. А сейчас спать. Утром на работу.
     
  4. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Так вот: Друг настаивает - надо энтот самый щуп-осциллограф (лучше если будет показывать направление фаз - без средней точки это трудно). А вот форму сигнала с показанием как постоянной, так и с переменной составляющей. Причём учитывая всего 64 пикселя по вертикали то 8бит даже много. Но но можно сделать так:
    1 Измеряем в массив
    2 выделяем среднее - постоянная составляющая
    2 выделяем сумму разниц - переменная составляющая
    3 измеряем время между переходами через "0" "взвешенного" значения и определяем время относительно среднего переменной составляющей - время повторения, чем и определяем период.
    Ведь все так просто - построить датчик с измерением того и другого без переключения пределов... каковы Ваши соображения? Рука не лежит, а вместе это круто. А главное советов и подсказок не надо. А вдруг есть замечания? Ну к примеру: "Как быть если частота превысит частоту выборки АЦП и вообще время преобразования?"
    Да хрен его знает!
    Надо сначала сделать что бы устройство было не намного более индикатора вместе с питанием. Ну и возможность отладки/прошивки - JTAG потому как кроме ARM ничего видеть не желаю. Они и маленькие и достойные - напримет STM - онже Cortex и он же ARM.
     
  5. Igor68

    Igor68 Гуру

    По поводу советов и подсказок: это метафора - потому как мнения ВАЖНЫ!!!!!