Надо придумать как 4-8 экранов на одну Ардуино посадить.
А какие проблемы?
Учитывая, что I2C экран можно сконфигурировать на любой из двух адресов, нужно лишь 2-4 I2C интерфейса, что составит 4-8 пинов. Такое имеется на любой Ардуине.
тогда уж мультиплексор можно поставить и наращивать скокахошь
В принципе можно, меня подкупила как раз минимизация. Хоть линия и работает в одну сторону, но физически вход - выход сменяют друг друга на выводах?, бит подтверждения вроде.
В принципе можно, меня подкупила как раз минимизация. Хоть линия и работает в одну сторону, но физически вход - выход сменяют друг друга на выводах?, бит подтверждения вроде.
В принципе можно, меня подкупила как раз минимизация. Хоть линия и работает в одну сторону, но физически вход - выход сменяют друг друга на выводах?, бит подтверждения вроде.
На плате дисплеев обычно над один резистор или перемычку переставить и адрес меняется 3C<->3D
Речь идёт от 2 до 18 штук (чисто гипотетически) с одним адресом и выводом картинок по очереди.
Вот мой вариант:
Ваш вариант отличается от схемы из 54 поста, только тем, что использует два выхода ардуино для коммутации дисплеев. Для использования большего количества дисплеев, лучше применить аналоговые коммутаторы которые имеют встроенный дешифратор или специализированные микросхемы.
Оооо! Я хочу от него детей вот это вот все на свои проекты! Еще не знаю куда, но куда то надо!
Евгений, тут разрешение 128х64, меньше будет коряво. А так смотрите выше - код довольно простой, перетащить его матрицы как нефиг делать. думаю
Да, все скетчи тут, массивы картинок тоже могу выложить, вариации с рисовашками ещё не закончены. Аппаратно все идеи проверить не могу - второй экранчик всё ещё не дойдёт :-(
С транзисторами почему то захотелось - тоска по дискретности наверное.
Дмитрий, мой следующий планируемый проект - экраны для автоматических моек на модулях с шагом 4 (80*40) или 2,5 (как раз 128*64). Возможно, что и вообще всю голову буду делать на эти мойки, но это не точно. Экраны точно - сейчас там у меня беленький P10 цифры и буквы рисует, но заказчик мечтает на новых мойках красивую мультимедию. Вот туда воткнуть такие шкалы - он аж пищать будет)
Правда пока еще на стадии раздумья, заказчик денег еще не дал - денег нет, держимся...
Хорошо. Опять по порядку - скетч, массив, картинка?
пролистал назад ветку, линейную и круглую шкалу вы уже выкладывали. Из картинок, если не ошибаюсь, нет только термометра. А все остальное на "чистой математике", достаточно одного кода.
так что второй раз, наверно, все подряд выкладывать не надо... Выложите только то, что еше не выложено.
А еще... Может имеет смысл все собрать вместе, запаковать в архив и выложить на какой-то хостинг? Но это выкладывание в ветку не отменяет.
Хорошо. Опять по порядку - скетч, массив, картинка?
пролистал назад ветку, линейную и круглую шкалу вы уже выкладывали. Из картинок, если не ошибаюсь, нет только термометра. А все остальное на "чистой математике", достаточно одного кода.
так что второй раз, наверно, все подряд выкладывать не надо... Выложите только то, что еше не выложено.
А еще... Может имеет смысл все собрать вместе, запаковать в архив и выложить на какой-то хостинг? Но это выкладывание в ветку не отменяет.
Где то выкладывать... это как будут закончены вариации и аппаратно - завершённое получится что то.
Вы тоже, если получится покажите, как оно смотрится на цветном :-)
void loop()
{
int X = map(analogRead(A0), 0, 1000, 0, 9); //считывание данных с потенциометра и определение цифры
if (X != st_X) {// если цифра поменялась - перерисуем её
funk_1(st_X); funk_2(X);
st_X = X;
}
}
/////////////////////////////////////////////////////////
void funk_1(int x) { // убирает цифру старую
for (int i = 0; i < 16; i=i+2) {
myOLED.clrScr(); // очищаем дисплей
if (x != 1 && x != 4) {
myOLED.drawBitmap(8 - i, 12, schkala_B, 8, 40); // a
}
if (x != 5 && x != 6) myOLED.drawBitmap(18, 3 - i, schkala_A, 40, 8); // b
if (x != 2) myOLED.drawBitmap(71, 3 - i, schkala_A, 40, 8); // c
if (x != 1 && x != 4 && x != 7)myOLED.drawBitmap(114 + i, 12, schkala_B, 8, 40); // d
if (x != 1 && x != 3 && x != 4 && x != 5 && x != 7 && x != 9) myOLED.drawBitmap(71, 55 + i, schkala_A, 40, 8); // e
if (x != 1 && x != 2 && x != 3 && x != 7) myOLED.drawBitmap(18, 55 + i, schkala_A, 40, 8); // f
if (i < 8 && x != 0 && x != 1 && x != 7) {
myOLED.drawBitmap(62, 12, schkala_B, 8, 40); // g
}
myOLED.update(); delay(t);
}
}
/////////////////////////
void funk_2(int x) {// выводит цифру новую
for (int i = 15; i >= 0; i=i-2) {
myOLED.clrScr(); // очищаем дисплей
if (x != 1 && x != 4) {
myOLED.drawBitmap(8 - i, 12, schkala_B, 8, 40); // a
}
if (x != 5 && x != 6) myOLED.drawBitmap(18, 3 - i, schkala_A, 40, 8); // b
if (x != 2) myOLED.drawBitmap(71, 3 - i, schkala_A, 40, 8); // c
if (x != 1 && x != 4 && x != 7)myOLED.drawBitmap(114 + i, 12, schkala_B, 8, 40); // d
if (x != 1 && x != 3 && x != 4 && x != 5 && x != 7 && x != 9) myOLED.drawBitmap(71, 55 + i, schkala_A, 40, 8); // e
if (x != 1 && x != 2 && x != 3 && x != 7) myOLED.drawBitmap(18, 55 + i, schkala_A, 40, 8); // f
if (i < 8 && x != 0 && x != 1 && x != 7) {
myOLED.drawBitmap(62, 12, schkala_B, 8, 40); // g
}
myOLED.update(); delay(t);
}
}
7 дюймов и Nextion сразу )) Тут-то цимус в том, что из говна и палок все делается.
Ну смысл не только в использовании натуральных удобрений :-) Сам экран, где всё и сразу не воспринимается натурально как приборная панель , нет смысла на нём рисовать аналоговую шкалу, рядом с термометром, красивше каждому своё окошечко прорезать. Или, например, ленту из экранчиков можно полукругом согнуть, или их "ёлочкой" расставить - уйти от общей плоскости расположения.
1. По моему опыту i2c на SSD1306 можно разогнать максимум до 2 МГц. Уже 2.1 МГц приводит к жесткому зависанию, из которого - только отключением питания. Проверял на Due.
2. Аппаратный i2c на Atmega328, насколько помню, максимум где-то 880 кГц. При попытке установить больше пачки импульсов сливаются в один (если верить осциллографу).
Нет, была мысль сделать шкалу приёмника - там как раз подошло бы 3-4 экранчика в цепочку, но это уже за рамки одного. Ещё не пробовал лепестковую, похожая - роза ветров, циферблаты не пробовал.
1. По моему опыту i2c на SSD1306 можно разогнать максимум до 2 МГц. Уже 2.1 МГц приводит к жесткому зависанию, из которого - только отключением питания. Проверял на Due.
2. Аппаратный i2c на Atmega328, насколько помню, максимум где-то 880 кГц. При попытке установить больше пачки импульсов сливаются в один (если верить осциллографу).
А как разогнать? Используемая здесь библиотека ссылается на Wire, а в той есть команда Wire.setClock( 400000L );
Пробовал ставить числа больше, подключая библиотеку. Визуально ничего не менялось. Внутри OLED_I2C не нашёл способа регулировки.
Теме я первый плюсанул, есичо)) Слежу)) Еще осталось свечной график нарулить и можно на биржЕ с ардуины спекулировать)) Кстати, удобно для отображения статистики за длинный период с разными таймфреймами
Совсем забыл о стрелочных индикаторах уровня сигнала из советского детства.
Мне кажется, слишком контрастно.
Я бы попробовал вместо сплошной заливки использовать полутона, реализуемые чем-то вроде шахматного поля (квадратик - 1 пиксель).
И еще одно замечание: судя по myOLED.upgate(), используется библиотека с буферизацией. Во многих проектах это недопустимо ресурсоемко. Ну и, кроме того, не позволяет подключить к одному контроллеру типа Atmega328 более одного дисплея.
Отсюда пожелание: переделать все примеры на библиотеку без экранного буфера. К сожалению, это вопрос не чисто механического переноса, т.к. нужно будет адаптировать сами "картинки" под аппаратные возможности дисплея.
Сейчас точно не помню насчет железа, но в Proteus точно работает.
С железками мне своих нескольких строк на ASM хватает с головой, плюс на любых ножках ...
andriano пишет:
Отсюда пожелание: переделать все примеры на библиотеку без экранного буфера. К сожалению, это вопрос не чисто механического переноса, т.к. нужно будет адаптировать сами "картинки" под аппаратные возможности дисплея.
Решил трансформировать угольники :-), превратить четверть окружности в прямой угол пока не смог.
Имитация приборной панели. Надо придумать как 4-8 экранов на одну Ардуино посадить.
Надо придумать как 4-8 экранов на одну Ардуино посадить.
А какие проблемы?
Учитывая, что I2C экран можно сконфигурировать на любой из двух адресов, нужно лишь 2-4 I2C интерфейса, что составит 4-8 пинов. Такое имеется на любой Ардуине.
Экранчик маленький, не подпаяюсь я как надо :-(, один интерфейс аппаратный на уно. Нашёл такую революционную тут идею:
http://arduino.ru/forum/programmirovanie/podklyuchenie-neskolkikh-i2c-ustroistv-s-odinakovymi-adresami-0
со схемой
Упростить попробую её, вопрос КЗ волнует.
А смысл привязываться к аппаратному I2C ?
На плате дисплеев обычно над один резистор или перемычку переставить и адрес меняется 3C<->3D
А смысл привязываться к аппаратному I2C ?
На плате дисплеев обычно над один резистор или перемычку переставить и адрес меняется 3C<->3D
Речь идёт от 2 до 18 штук (чисто гипотетически) с одним адресом и выводом картинок по очереди.
Вот мой вариант:
тогда уж мультиплексор можно поставить и наращивать скокахошь
Для этих дисплеев I2C работает только на передачу.
Лучше мультиплексоры на обе линии поставить тогда.
тогда уж мультиплексор можно поставить и наращивать скокахошь
В принципе можно, меня подкупила как раз минимизация. Хоть линия и работает в одну сторону, но физически вход - выход сменяют друг друга на выводах?, бит подтверждения вроде.
В принципе можно, меня подкупила как раз минимизация. Хоть линия и работает в одну сторону, но физически вход - выход сменяют друг друга на выводах?, бит подтверждения вроде.
Чо?
В принципе можно, меня подкупила как раз минимизация. Хоть линия и работает в одну сторону, но физически вход - выход сменяют друг друга на выводах?, бит подтверждения вроде.
Чо?
http://easyelectronics.ru/interface-bus-iic-i2c.html
Картинки на зелёном фоне - 4 случая, вначале статьи.
Имитация приборной панели. Надо придумать как 4-8 экранов на одну Ардуино посадить.
Оооо! Я хочу
от него детейвот это вот все на свои проекты! Еще не знаю куда, но куда то надо!А не затруднит вас все это в кучу собрать и опубликовать на гите? Ну или хотя бы в каком то облаке общедоступном?
А смысл привязываться к аппаратному I2C ?
На плате дисплеев обычно над один резистор или перемычку переставить и адрес меняется 3C<->3D
Речь идёт от 2 до 18 штук (чисто гипотетически) с одним адресом и выводом картинок по очереди.
Вот мой вариант:
Ваш вариант отличается от схемы из 54 поста, только тем, что использует два выхода ардуино для коммутации дисплеев. Для использования большего количества дисплеев, лучше применить аналоговые коммутаторы которые имеют встроенный дешифратор или специализированные микросхемы.
Оооо! Я хочу
от него детейвот это вот все на свои проекты! Еще не знаю куда, но куда то надо!Евгений, тут разрешение 128х64, меньше будет коряво. А так смотрите выше - код довольно простой, перетащить его матрицы как нефиг делать. думаю
Не забываем что линия должна быть типа открытый коллектор !!!
Оооо! Я хочу
от него детейвот это вот все на свои проекты! Еще не знаю куда, но куда то надо!Евгений, тут разрешение 128х64, меньше будет коряво. А так смотрите выше - код довольно простой, перетащить его матрицы как нефиг делать. думаю
Да, все скетчи тут, массивы картинок тоже могу выложить, вариации с рисовашками ещё не закончены. Аппаратно все идеи проверить не могу - второй экранчик всё ещё не дойдёт :-(
С транзисторами почему то захотелось - тоска по дискретности наверное.
Дмитрий, мой следующий планируемый проект - экраны для автоматических моек на модулях с шагом 4 (80*40) или 2,5 (как раз 128*64). Возможно, что и вообще всю голову буду делать на эти мойки, но это не точно. Экраны точно - сейчас там у меня беленький P10 цифры и буквы рисует, но заказчик мечтает на новых мойках красивую мультимедию. Вот туда воткнуть такие шкалы - он аж пищать будет)
Правда пока еще на стадии раздумья, заказчик денег еще не дал - денег нет, держимся...
Да, все скетчи тут, массивы картинок тоже могу выложить
выкладывайте, если не сложно.попробую ваши шкалы на RGB-матрицы перетащить, у меня как раз есть под рукой массив 128х64
Хорошо. Опять по порядку - скетч, массив, картинка?
Хорошо. Опять по порядку - скетч, массив, картинка?
пролистал назад ветку, линейную и круглую шкалу вы уже выкладывали. Из картинок, если не ошибаюсь, нет только термометра. А все остальное на "чистой математике", достаточно одного кода.
так что второй раз, наверно, все подряд выкладывать не надо... Выложите только то, что еше не выложено.
А еще... Может имеет смысл все собрать вместе, запаковать в архив и выложить на какой-то хостинг? Но это выкладывание в ветку не отменяет.
Хорошо. Опять по порядку - скетч, массив, картинка?
пролистал назад ветку, линейную и круглую шкалу вы уже выкладывали. Из картинок, если не ошибаюсь, нет только термометра. А все остальное на "чистой математике", достаточно одного кода.
так что второй раз, наверно, все подряд выкладывать не надо... Выложите только то, что еше не выложено.
А еще... Может имеет смысл все собрать вместе, запаковать в архив и выложить на какой-то хостинг? Но это выкладывание в ветку не отменяет.
Где то выкладывать... это как будут закончены вариации и аппаратно - завершённое получится что то.
Вы тоже, если получится покажите, как оно смотрится на цветном :-)
Попробую сообразить чего я ещё не выдал сюда.
Вы тоже, если получится покажите, как оно смотрится на цветном :-)
конечно похвастаю :)
Только оно если будет = хоть и "на цветном", но в моноцвете, у вас битмапы монохромные, раскрашивать их - я не художник :)
Ещё как вариант , если дисплей поддерживает, использовать fast mode I2C - 400кгц, что в 4ре раза быстрее обычного.
Но возможно придётся в библиотеке покопаться...
Имитация индикатора на приводах по типу:
Картинки сегментов.
конечно похвастаю :)
Только оно если будет = хоть и "на цветном", но в моноцвете, у вас битмапы монохромные, раскрашивать их - я не художник :)
Можно цвет привязать к изменяемой потенциометром переменной - будет "цветоизмерение".
Можно пиксели из массивов к одному цвету, из вычислений к другому - глаз например или термометр.
Впрочем форма изображения важнее.
тема тянет на нормальный проект, может ее переместить но ссылку оставить в песочнице?
Ещё как вариант , если дисплей поддерживает, использовать fast mode I2C - 400кгц, что в 4ре раза быстрее обычного.
Но возможно придётся в библиотеке покопаться...
Вот тут SSD1306 работал на почти 1.5 МГц - http://arduino.ru/forum/programmirovanie/programmnyi-i2c-1-mgts-dlya-16-mgts-ustroistv-dlya-avr - для 128х64 это ~144 FPS
Быстрее уже AVR на 16 МГц не может :-(
Также на 1 МГц можно запустить и аппаратный I2C.
Имитация приборной панели. Надо придумать как 4-8 экранов на одну Ардуино посадить.
Оооо! Я хочу
от него детейвот это вот все на свои проекты! Еще не знаю куда, но куда то надо!А не затруднит вас все это в кучу собрать и опубликовать на гите? Ну или хотя бы в каком то облаке общедоступном?
а если взять один большой дисплей дюймов на 7 не лучше будет?
7 дюймов и Nextion сразу )) Тут-то цимус в том, что из говна и палок все делается.
Вот тут SSD1306 работал на почти 1.5 МГц - http://arduino.ru/forum/programmirovanie/programmnyi-i2c-1-mgts-dlya-16-mgts-ustroistv-dlya-avr - для 128х64 это ~144 FPS
Быстрее уже AVR на 16 МГц не может :-(
Также на 1 МГц можно запустить и аппаратный I2C.
Очень интересно, спсб
А какие проблемы?
Известно какие.
7 дюймов и Nextion сразу )) Тут-то цимус в том, что из говна и палок все делается.
Ну смысл не только в использовании натуральных удобрений :-) Сам экран, где всё и сразу не воспринимается натурально как приборная панель , нет смысла на нём рисовать аналоговую шкалу, рядом с термометром, красивше каждому своё окошечко прорезать. Или, например, ленту из экранчиков можно полукругом согнуть, или их "ёлочкой" расставить - уйти от общей плоскости расположения.
А какие проблемы?
Известно какие.
Вот рецепт избавления
http://arduino.ru/forum/programmirovanie/oledi2c-i-millis-ili-1000mls-24-sek
от Logik(a), попробовал, миллис восстановился.
Вот рецепт избавления
Спасибо, буду знать.
Баннер на ветру.
Управляем скоростью планет.
Шкалы закончились, начался энтертеймент.
Вот тут SSD1306 работал на почти 1.5 МГц - http://arduino.ru/forum/programmirovanie/programmnyi-i2c-1-mgts-dlya-16-mgts-ustroistv-dlya-avr - для 128х64 это ~144 FPS
Быстрее уже AVR на 16 МГц не может :-(
Также на 1 МГц можно запустить и аппаратный I2C.
1. По моему опыту i2c на SSD1306 можно разогнать максимум до 2 МГц. Уже 2.1 МГц приводит к жесткому зависанию, из которого - только отключением питания. Проверял на Due.
2. Аппаратный i2c на Atmega328, насколько помню, максимум где-то 880 кГц. При попытке установить больше пачки импульсов сливаются в один (если верить осциллографу).
Нет, была мысль сделать шкалу приёмника - там как раз подошло бы 3-4 экранчика в цепочку, но это уже за рамки одного. Ещё не пробовал лепестковую, похожая - роза ветров, циферблаты не пробовал.
Вот тут SSD1306 работал на почти 1.5 МГц - http://arduino.ru/forum/programmirovanie/programmnyi-i2c-1-mgts-dlya-16-mgts-ustroistv-dlya-avr - для 128х64 это ~144 FPS
Быстрее уже AVR на 16 МГц не может :-(
Также на 1 МГц можно запустить и аппаратный I2C.
1. По моему опыту i2c на SSD1306 можно разогнать максимум до 2 МГц. Уже 2.1 МГц приводит к жесткому зависанию, из которого - только отключением питания. Проверял на Due.
2. Аппаратный i2c на Atmega328, насколько помню, максимум где-то 880 кГц. При попытке установить больше пачки импульсов сливаются в один (если верить осциллографу).
А как разогнать? Используемая здесь библиотека ссылается на Wire, а в той есть команда Wire.setClock( 400000L );
Пробовал ставить числа больше, подключая библиотеку. Визуально ничего не менялось. Внутри OLED_I2C не нашёл способа регулировки.
lilik SCL frequency = CPU Clock frequency / (16 + 2(TWBR) PrescalerValue)
Запись 0 в TWBR = 1 МГц
Или http://arduino.ru/forum/programmirovanie/programmnyi-i2c-1-mgts-dlya-16-mgts-ustroistv-dlya-avr?page=1#comment-572687
максимальная программная скорость на любых пинах (прописывается в первых строках)
для 128х64 нужно в 97 строке 0x03 поменять на 0x07
Тёмный лес. Нашёл в файлах библиотеки используемой вот этот фрагмент. Строка для изменений 11 ?
Теме я первый плюсанул, есичо)) Слежу)) Еще осталось свечной график нарулить и можно на биржЕ с ардуины спекулировать)) Кстати, удобно для отображения статистики за длинный период с разными таймфреймами
Японская свеча... интересно, одну попробую реализовать, заодно и миллис повторю.
Совсем забыл о стрелочных индикаторах уровня сигнала из советского детства.
А как разогнать? Используемая здесь библиотека ссылается на Wire, а в той есть команда Wire.setClock( 400000L );
Прежде, чем задавать вопрос "как?", следовало бы ответить на вопрос "что?". Т.е. что именно Вы хотите разогнать?
Пробовал ставить числа больше, подключая библиотеку. Визуально ничего не менялось. Внутри OLED_I2C не нашёл способа регулировки.
"Визуально" - это совершенно негодный способ измерения. Для измерения существуют осциллограф, логический анализатор и собственные таймеры Ардуино.
lilik SCL frequency = CPU Clock frequency / (16 + 2(TWBR) PrescalerValue)
Запись 0 в TWBR = 1 МГц
А Вы пробовали?
И к какому выводу пришли?
Записать 0 в TWBR, конечно, возможно. Но, увы, при такой настройке аппаратный I2c перестает выдавать адекватный сигнал.
Соответственно, максимальная частота, на которой аппаратный i2c еще сохраняет работоспособность, 16млн/(16 + 2(TWBR=1)) т.е. 16000/18=889кГц.
Совсем забыл о стрелочных индикаторах уровня сигнала из советского детства.
Мне кажется, слишком контрастно.
Я бы попробовал вместо сплошной заливки использовать полутона, реализуемые чем-то вроде шахматного поля (квадратик - 1 пиксель).
И еще одно замечание: судя по myOLED.upgate(), используется библиотека с буферизацией. Во многих проектах это недопустимо ресурсоемко. Ну и, кроме того, не позволяет подключить к одному контроллеру типа Atmega328 более одного дисплея.
Отсюда пожелание: переделать все примеры на библиотеку без экранного буфера. К сожалению, это вопрос не чисто механического переноса, т.к. нужно будет адаптировать сами "картинки" под аппаратные возможности дисплея.
А Вы пробовали?
Сейчас точно не помню насчет железа, но в Proteus точно работает.
С железками мне своих нескольких строк на ASM хватает с головой, плюс на любых ножках ...
Отсюда пожелание: переделать все примеры на библиотеку без экранного буфера. К сожалению, это вопрос не чисто механического переноса, т.к. нужно будет адаптировать сами "картинки" под аппаратные возможности дисплея.
drawCircle без экранного буфера ?