Вообще-то микросхема PCF8574 может быть приспособлена к большому количеству самых разных применений (считывание кнопок, засвечивание светодиодов и т. п.). В режиме записи микросхема при этом напрямую транслирует значение битов в переданном по шине I2C байте в состояние восьми выходов (при чтении, наоборот, состояние восьми линий передается в передаваемый байт). I2C-адрес в PCF8574 может меняться установкой уровня на трех входах задания адреса, так что с помощью одной шины по двум проводам можно устанавливать или читать состояние до 64 линий. В этом деле имеются некоторые особенности из-за несимметрии состояний «0» и «1» выводов параллельного порта PCF8574, причем как при работе на вход, так и на выход (см. здесь), но нашей задаче управления ЖК- или OLED-дисплеями по шине I2C они не помешают.
Нет даже необходимости разводить переходную плату для дисплеев самостоятельно. Специально для управления HD44780-совместимыми дисплеями выпускаются многочисленные разновидности модулей-переходников (см. фото). По одному краю у них установлен игольчатый однорядный разъем типа PLS, разводка которого позволяет напрямую стыковать такой модуль с ЖК- или OLED-дисплеем.
Если при этом ориентировать модуль так, чтобы вывод модуля номер 1 (отсчет ведется от входного разъема, см. фото выше) совпадал с выводом 1 дисплея, то плату-переходник можно установить прямо на плату дисплея так, как показано на фото ниже (фото с сайта 9zip.ru). При этом, конечно, должен совпадать и шаг выводов и сам тип разъема. Поэтому среди распространенных строчных OLED-дисплеев Winstar так, как на картинке, подключить можно только типы WEH1602A и 2004A, для типа 1602B модуль придется поворчивать на 180, а для любимых народом 2002A/B и 1202/1204 изготавливать переходные кабелЯ.
Разводка выводов для случая OLED-дисплея показана в таблице. Если вы хотите вместо готового модуля самостоятельно подключить микросхему (что позволит уменьшить габариты), но собираетесь использовать описанную далее библиотеку, то по этой таблице можно также определить правильное подключение «голой» микросхемы. Отметим, что фактически здесь используется четырехпроводная схема подключения дисплея и биты DB0-DB3 не подключены никуда, поэтому в таблице обозначены серым цветом.
Разводка выводов при подключении PCF8574 и модуля на ее основе к OLED-дисплею
Синенький подстроечный резистор, а также перемычка на торце платы, которые видны на фото, предназначены для управления подсветкой в ЖК-дисплеях (выводы 15 и 16) и в нашем случае не задействуется. (Кстати, то же самое относится к биту Р3 выходного порта PCF8574, который в нашем случае не используется.) Поэтому при подключении напрямую OLED-дисплея 1602B, у которого выводы 15 и 16 находятся перед выводом 1, их можно просто не подключать (а у модуля при этом 15 и 16 выводы придется удалить, чтобы не мешались).
Под этим резистором на плате имеются контакты A0, A1 и A2 для задания младших битов I2C-адреса. По умолчанию они подключены к высокому уровню, поэтому адрес имеет наибольшее возможное значение из заданного диапазона. Микросхемы PCF8574 выпускаются в нескольких модификациях, отличающихся этим диапазоном. Для PCF8574 без буквенного индекса (или у PCF8574Т) адрес по умолчанию будет равен 0x27, и может меняться в меньшую сторону до 0x20. У PCF8574A адрес по умолчанию равен 0x3F и меняется до 0x38.
Для работы с дисплеем, подключенным через PCF8574 по I2C-интерфейсу, имеется рекомендованная библиотека под названием LiquidCrystal_I2C (см. официальный сайт arduino.cc). Разумеется, как и оригинальная LiquidCrystal, она работает только с английским языком. Русскоязычных версий ее не имеется (по крайней мере, таких, которые бы уверенно работали в современных версиях Arduino IDE), и вариант для работы с OLED-дисплеем тоже отсутствует. Поэтому автор взял на себя труд доработки, приняв за исходный самый простой из вариантов LiquidCrystal_I2C.
Очевидным методом русификации было бы объединить LiquidCrystal_I2C и LiquidCrystalRus, доработав последнюю в части инициализации OLED-дисплеев. Но лобовое решение здесь не прокатывает — в I2C-режиме LiquidCrystalRus выводит только первую букву посланной через функцию print() строки. С чем это связано, я разбираться не стал, попросту дополнив библиотеку LiquidCrystal_I2C своей функцией вывода outStr(), которая отбрасывает старший байт кодировки UTF-8, а младший перекодирует в символ из внутренней таблицы ENGLISH_RUSSIAN (0x02) контроллера WS0010.
Исправленную и дополненную версию под названием LiquidCrystal_I2C_OLED можно скачать отсюда. Если строка не содержит русских букв, то ее следует выводить обычной функцией print(), которая работает быстрее. Значок градуса, а также буквы «ё» и «Ё» выводить можно только прямым указанием восьмеричных кодов (например, «всё» — «вс\265», «22,5°» — «22,5\337», см. таблицу далее). Примеры вывода имеются в папке examples (не забудьте сменить адрес микросхемы PCF8574, если у вас версия, отличная от PCF8574A или адрес изменен переключением бит модификации). Пример вывода русского алфавита на дисплей конфигурации 1602 (микросхема PCF8574A, адрес по умолчанию 0x3F):
#include <Wire.h>
#include <LiquidCrystal_I2C_OLED.h>
LiquidCrystal_I2C OLED1(0x3F,16,2); // Устанавливаем дисплей
void setup()
{
OLED1.init();
OLED1.clear();
OLED1.print("Proba"); //вывод английского
OLED1.setCursor(7, 0); //середина верхней строки
OLED1.outStr("Проба"); //вывод русского
OLED1.setCursor(7, 1);//середина нижней строки
OLED1.print("-22,3\337C"); //"-22,3°C"
delay(1000);
}
void loop()
{//для дисплея 16х2 или 20х2!!!!
OLED1.setCursor(0, 0); //начало верхней строки
OLED1.outStr("АБВГДЕЖЗИЙКЛМНОП");
OLED1.setCursor(0, 1);//начало нижней строки
OLED1.outStr("абвгдежзийклмноп");
delay(2000);
OLED1.setCursor(0, 0); //начало верхней строки
OLED1.outStr("РСТУФХЦЧШЩЪЫЬЭЮЯ");
OLED1.setCursor(0, 1);//начало нижней строки
OLED1.outStr("рстуфхцчшщъыьэюя");
delay(3000);
}
Корректный результат вывода первой половины алфавита показан на фото:
Подчеркнем, что такая русифицированная библиотека (как и LiquidCrystalRus, кстати) предназначена для работы в современных версиях Arduino IDE (начиная примерно с 1.6.1 и далее) в среде Windows 7/8/10. В среде Arduino IDE 1.0, а также в других редакторах и ОС, работающих в однобайтовой кодировке win1251 (ANSI, cp1251), эти библиотеки прямой русский текст в строке не воспринимают. В этом случае следует пользоваться функцией print() с указанием восьмеричных кодов русских букв, согласно таблице ниже, только библиотеку все равно придется использовать эту (либо доработать LiquidCrystal_I2C для переключения в таблицу ENGLISH_RUSSIAN при инициализации, см. здесь). В контроллере WS0010 применен экономичный метод кодирования — вводятся только русские буквы, не совпадающие с английскими по начертанию. Например, «суббота» будет выглядеть, как «cy\262\262o\277a».
Коды кириллических символов и значка градуса для контроллера WS0010 (таблица ENGLISH_RUSSIAN, код 0x02)
Признаком того, что ваша среда/редактор выдает вместо UTF-8 однобайтную кодировку win1251 будет вывод вместо «А» — «ч», вместо «а» — «Д» и т. п. (фото прислал Tomasina):
Если не справитесь с выяснением причин, откуда в современных средах под Windows берется однобайтовая кодировка, то остается только либо воспользоваться прямым выводом кодов, как указано выше, либо просто изменить в моей функции outStr() по очереди все коды младшего байта UTF-8 на код из таблицы win1251. Например, оператор case 0x90 (заглавная «А») заменяем на case 0xC0 и так далее, при этом строки, фильтрующие старший байт (case 0xd0: break; и case 0xd1: break;) необходимо удалить.
Комментарии (59)
WebConn
15.11.2017 13:32Ваша работа, бесспорно, полезна. Но заголовок в самом деле неоднозначный.
Когда я увидел заголовок, сразу вспомнилась проблема с выбором конкретного дисплея, так как не во всех винстаровских дисплеях зашита кириллица. Нарочно не искал способ решения, думал в своё время просто дорисовать недостающие символы в CGRAM, но в итоге просто отложил дисплей на полку.Barnaby
15.11.2017 16:18Это для более быстрой отрисовки и экономии RAM?
В либе для ssd1306 которую я нашел вся таблица лежит в массиве, можно спокойно рисовать свои символы. Инересно, там тоже есть зашитая в контроллер таблица?Andy_Big
15.11.2017 16:23Чтобы это выяснить нужно 30 секунд на поиск в гугле и еще 40-50 секунд для беглого просмотра результата поиска — http://www.buydisplay.com/download/ic/SSD1306.pdf :)
Если это слишком сложно, то ответ — в контроллере нет зашитых таблиц.
Andy_Big
15.11.2017 13:53М-да, мое мнение об ардуинщиках после этой статьи ничуть не повысилось :)
smart_alex
15.11.2017 15:22Наше мнение о снобах, с пустым профилем без единой статьи и проекта тоже не повысилось. И при этом позволяющим себе пренебрежительно высказываться о системе на которой создано бесчисленное количество замечательных проектов и которая позволила приобщиться к миру микроконтроллеров миллионам людей во всём мире. (Это безотносительно этой конкретной статьи.)
Andy_Big
15.11.2017 15:51с пустым профилем без единой статьи
А если бы у меня в профиле было два десятка статей на медицинскую тему — мое мнение об ардуинах было бы более весомым? :))
на которой создано бесчисленное количество замечательных проектов и которая позволила приобщиться к миру микроконтроллеров миллионам людей
Да, а Лего позволил приобщиться миллионам людей к архитектуре и роботостроению :)
Я не умаляю достоинств ардуины, но нужно называть вещи своими именами: миллионы людей приобщились не к миру микроконтроллеров, а к миру конструктора на их основе.smart_alex
15.11.2017 16:07Если бы у вас в профиле было 20 статей на медицинскую тему, то тогда была бы объективная возможность отличить вас от досужего болтуна. По моим наблюдениям, чем большее пренебрежение к Ардуино высказывает человек, тем меньше у него проектов, статей и реальных дел.
Andy_Big
15.11.2017 16:19Ваши наблюдения ошибочны :) Я, например, живу за счет своих проектов и реальных дел, которыми пользуются тысячи людей :)
sav13
15.11.2017 16:06Лучше скажите, где брать недорогие дисплей 1602 с кириллицей?
Кто-то делает?WebConn
16.11.2017 00:41Тот же Winstar делает, надо только смотреть даташиты на конкретные дисплеи на предмет кириллической таблицы (там прямо отдельные страницы с этими таблицами).
YRevich Автор
16.11.2017 06:41Их еще делает МЭЛТ у нас, там кириллица гарантированная и притом никаких переключений таблиц не требуется. ЖК у них очень дешевые, но OLED-разновидностей мало, и за ту же цену — думаю, они матрицы готовые покупают.
BARSRAB
15.11.2017 19:48SPI используется нечасто? Серьёзно? При том, что это один из самых быстрых интерфейсов? Может быть у ардуинщиков и не часто, но разработчиков очень часто.
YRevich Автор
16.11.2017 06:50Вы невнимательно читали, там русским по белому написано: «в любительской практике».
BARSRAB
16.11.2017 07:33А для любителей выпускаются отдельные серии микросхем без spi? Дисплеи, АЦП, ЦАП, датчики. Что тогда вообще используют «любители»? Голый МК, кнопки и светодиоды?
Andy_Big
17.11.2017 02:20"Любители" используют широко распространенные ардуиновские библиотеки. Шаг влево или вправо от этих библиотек — и это уже "профессионал" :)
BARSRAB
17.11.2017 07:23Кажется, я выбрал не тот уровень сложности, когда начинал изучать МК, ибо делал это без ардуйни xD
YRevich Автор
17.11.2017 07:46Когда я начинал изучать МК, у них еще не было флеш-памяти, а стирание производилось ультрафиолетом. И о таких инструментах, как AVRStudio, еще и не мечтали, Ардуино и в проекте не существовало, потому как не существовало AVR. Си-компилятор от IAR стоил бешеные деньги, потому все всё делали на ассемблере в текстовом редакторе. Первый AVR1200 встречали, как манну небесную. Я с удовольствием воспринимаю все новое, если оно действительно помогает, облегчает, упрощает и т.п. Но не более того: бритву Оккама никто никогда не отменял.
BARSRAB
17.11.2017 09:07Ардуйня далеко не новое и на счет облегчения и упрощения можно сильно поспорить, т.к. на выходе получаем абсолютно непредсказуемую прошивку, которая может в любой момент повиснуть. Точнее дело не в самой ардуйне, а в их калечных библиотеках. Хотя проблема с готовыми библиотеками не только там. Например встроенная в CodeVision библиотеку 1-Wire запрещает все прерывания при работе с шиной. К зависанию, конечно, это не приводит, но все равно довольно неприятная «фишка». Хотите использовать плюшки ардуйни в виде кучи готовых модулей? Да пожалуйста. Только для этого совсем не обязательно писать код в Arduino IDE. Открываем ту же AVR Studio, пишем свои библиотеки и получаем отличную платформу для обкатки прошивок. Только результат становится абсолютно предсказуемым.
BARSRAB
15.11.2017 19:54Ну и зря считаете, что если у человека нет десятка статей на гиктаймс, то он болтун. На их написание нужно время, а когда человек занят работой, а не баловством с ардуйней, то как раз его у него и нет.
enjoyneering
16.11.2017 06:41Зачем вы переписали библиотеку? Можно было создать свою и унаследовать все классы оригинальной, разбавив своим кодом.
YRevich Автор
16.11.2017 06:46А еще можно создать свою среду Arduino — мне в ней тоже не все нравится. Но почему-то я этого не делаю. Интересно, почему?
BARSRAB
16.11.2017 07:39Ясное дело, не умеете, вот и не делаете.
YRevich Автор
16.11.2017 08:22Да ну? Научиться этому не так уж сложно. Проще, чем написать все на чистом ассемблере, как я это делал ранее. Но если у высокоуровневого языка и есть преимущества, то они заключаются именно в готовых библиотеках, макросах и т.п.
Которые при необходимости можно чуток подрихтовать, не теряя времени на отладку всего массива кода. Я ведь не программы пишу, а работающую схему ваяю. И коли схема работает, то совершенно неважно как там вы все это оформили — чем быстрее справились, тем лучше. Это, если вы не в курсе, нормальный подход электронщика, программеры могут возмущаться сколько влезет.BARSRAB
16.11.2017 12:08Не сложно, но вам не дано, т.к. без готовых библиотек вы работать не умеете. При этом в корне неверно понимаете смысл применения ОО языков.
YRevich Автор
16.11.2017 14:29Ну, конечно, автор вот этой книги, выдержавшей три издания, работать без готовых библиотек ну совершенно не умеет.
YRevich Автор
16.11.2017 14:39Да, и еще вдогонку: если мне сейчас предложили делать серьезный проект на AVR, я бы не только от ОО отказался, я бы и простое С обошел. На ассемблере много надежней. В том-то и разница между электронщиком и программистом, что для первого чем меньше посредников, тем лучше. Есть и другие принципиальные соображения, применимые конкретно к архитектуре AVR. Ардуино — это удобная прибамбасина, которая позволяет минимумом усилий достичь вполне рабочих результатов. И ничего за этими пределами — если усилия превышают некоторый порог, то проще от такого инструмента отказаться, и делать все руками.
BARSRAB
16.11.2017 15:17На ассемблере много надежней
Не надо бросаться в крайности. Он лишь быстрее, но надежность с ним ни чем не выше. Да и выигрыш в скорости есть лишь при выполнение каких-то сложных расчетов, для которых AVR в принципе не сильно подходит. Есть еще выигрыш в размере прошивки, но сейчас это мало актуально.YRevich Автор
16.11.2017 15:53Вы просто не в курсе. Размещение данных в SRAM, а не сразу в регистрах (которых у AVR аж 32) дает замедление сразу в два-три раза на каждую операцию с данными. Это если не говорить о таких наворотах, как PROGMEM. А С по-другому не умеет, ибо приспособлен к фон-неймановской архитектуре, а не гарвардской. Это касается скорости. А что до надежности, то когда я сам отвечаю за то, где что разместить и каким путем выполнить, а не дядя, неизвестно какую оптимизацию наворотивший в компиляторе, то это уже не убеждение, а уверенность.
BARSRAB
16.11.2017 16:49дает замедление сразу в два-три раза на каждую операцию с данными.
И часто вам надо производить высокоскоростные операции на таких убогих МК (да, да, AVR одни из самых убогих и малофункциональных МК на рыке)? Да такие, когда разница в 2-6 тактов играет существенную роль? Что-то сомневаюсь.
А что до надежности, то когда я сам отвечаю за то, где что разместить и каким путем выполнить, а не дядя, неизвестно какую оптимизацию наворотивший в компиляторе, то это уже не убеждение, а уверенность.
И что вам дает это знание? Ровным счетом ничего. И уж точно никак не влияет на надежность работы МК.YRevich Автор
16.11.2017 17:29+1«И часто вам надо производить высокоскоростные операции на таких убогих МК (да, да, AVR одни из самых убогих и малофункциональных МК на рыке)»
— вы не поверите, но часто. Причем именно 8-разрядные тут рулят. Насчет убогости — это типичное приглашение поучаствовать в очередном холиваре, и не заслуживает внимания.BARSRAB
16.11.2017 17:39-1Расскажите, в чем же они рулят. И почему именно AVR, где даже тактовую на ходу поменять нельзя. Или рулят по тому, что с другими вы не умеете работать?
BARSRAB
17.11.2017 08:55Так что же, расскажете, по какой причине AVR и 8-битники «рулят»?
P.S.Вот и минусовщики подтянулись. Самим сказать нечего, а вот оценки ляпать — самое то.
Andy_Big
17.11.2017 02:39Си вообще пофиг где располагаются переменные — это епархия компилятора. И архитектура к Си имеет очень слабое отношение.
когда я сам отвечаю за то, где что разместить и каким путем выполнить, а не дядя, неизвестно какую оптимизацию наворотивший в компиляторе
Я же говорю — Вы просто не освоили нормально Си и директивы его компилятора :) И имеете какое-то устаревшее лет на 15 представление о возможностях нормальных компиляторов :)
Andy_Big
17.11.2017 02:29На ассемблере много надежней
Обычно так говорят те, кто не освоил нормально С/С++ :) На ассемблере не надежнее, и даже почти не быстрее и почти не компактнее. Современные компиляторы в умелых руках создают очень оптимальный код.
В том-то и разница между электронщиком и программистом, что для первого чем меньше посредников, тем лучше.
То электронщик у Вас любит ардуину потому что "совершенно неважно как там вы все это оформили — чем быстрее справились, тем лучше", то электронщик не любит лишних посредников, чьим очень жирным представителем является ардуина. Вас, электронщик, не поймешь :)
enjoyneering
16.11.2017 19:59Ну вот смотрите, например автор исходников LiquidCrystal_I2C исправит кучу багов или перелопатит весь код сделая ее быстрее. Вам придется посидеть вечерок занимаясь копи-пастой, чтоб привести ваш код к новому виду.
С наследованием такого не будет — вам только нужно будет перезаписать LiquidCrystal_I2C в папке библиотек и все.
CyberKot
16.11.2017 08:52Ардуинскую библиотеку TWI тоже поправить нужно. У неё внутре
неонкаесть весёлый while без выхода по таймауту (или количеству циклов), который вешает всю ардуину при малейших косяках при коммуникации по этому протоколу.
Особенно актуально при наводках или помехах по питанию.YRevich Автор
16.11.2017 09:23Вы, наверное, программист, а не электронщик. Посмотрите на аппноты Atmel — там куча образцов алгоритмов, в которых бесконечные циклы ожидания без всяких выходов. Почему так? А потому, что конструкция все равно не будет работать, если в TWI обрыв. Куда ее выводить по таймауту? Эта только лишнее и ничем не оправданное усложнение в программе, все равно ничего продуктивного она не сделает.
CyberKot
16.11.2017 09:45Если, доспустим, мой терморегулятор будет делать своё дело, но на экране будет пусто или крякозябры — то флаг ему в руки. А если при попытке вывода температуры на экран он зависнет и заморозит (или наоборот вскипятит) всё вокруг — то тут начинаются вопросы.
А дело всего-навсего в одной проверке, которая резко повысит стабильность системы.YRevich Автор
16.11.2017 11:18В этом конкретном случае возможно. Но дело в том, что нет никаких оснований считать интерфейс TWI менее надежным, чем компоненты терморегулятора. Скорее (точнее, наверняка) наоборот. И под этот редчайший случай загромождать библиотеку операциями, которые никогда не будут востребованы? В космосе или военке, в медицине я бы, безусловно, так и сделал, а для бытового прибора, у которого скорее перегорит нагреватель от того, что забыли налить воду — совершенно ни к чему.
BARSRAB
16.11.2017 13:11TWI надежен ровно до тех пор, пока к нему не лепят библиотеки от ардуйни, 90% которых кривые и глючные. И не надо думать, что для бытовых применений не нужна надёжность. Представьте, что ваш телевизор по 5 раз в день зависает. Понравится?
YRevich Автор
16.11.2017 14:25BARSRAB, мне казалось, что мы серьезно обсуждаем организацию процесса, а не «библиотеки от ардуйни, 90% которых кривые и глючные». Это вообще не о том и голословная болтовня, а не аргумент. Никакой такой особой глючности в TWI я не замечал. Ни при собственной реализации на ассемблере, ни путем ардуино-библиотеки. Годами работает без единого сбоя, по собственному опыту. Там, что ни говори, есть немало упущений, но уж к TWI это точно не относится. Он и спроектирован так, чтобы работать с минимальными хлопотами.
BARSRAB
16.11.2017 15:34Он и спроектирован так, чтобы работать с минимальными хлопотами.
К TWI у меня никаких претензий, только к ардуйне, с ее внезапными бесконечными циклами ожидания.YRevich Автор
16.11.2017 16:04Еще раз — поглядите аппноты от Atmel. Я попервоначалу — лет двадцать назад — тоже дергался, искал способы выхода из таких бесконечных циклов, но потом понял, что это просто не надо.
BARSRAB
16.11.2017 16:32искал способы выхода из таких бесконечных циклов
Ок. Представим ситуацию. МК управляет неким объектом, пусть будет теплица. К нему подключена та же EEPROM по I2C, в которую он раз в некий промежуток времени записывает температуру, влажность и т.п. Как видно, функция второстепенная. А теперь представим, что EEPROM перестала отвечать (умерла, намокла, и.д.) и МК тупо висит в цикле и ждет второго пришествия, вместо того, чтобы сообщить оператору о неисправности. Считаете, что это нормальная ситуация? Лично я нет. МК никогда и ни при каких ситуациях не должен виснуть. Если же он виснет от элементарной поломки I2C периферии, то место такого девайса на свалке.YRevich Автор
16.11.2017 16:47Я же совсем не отрицаю, что такие ситуации бывают. Сам искал когда-то выходы из неисправности EEPROM и внутренней (в Classic она была слабо защищена) и внешней, хотя бы в виде диагностики ошибок. И намоделировать таких случаев можно много. Но это не значит, что всегда и во всех случаях бесконечные циклы совершенно неприемлемы и их нужно пугаться. Просто трезво оценивать вероятности и последствия и цену их преодоления. То, что в библиотеках Arduino их применяют — не катастрофа, и даже не противоречит официальной идеологии производителя. Вот я о чем.
Andy_Big
17.11.2017 03:04Использование библиотек с такими "бомбами" — это катастрофа и есть. Потому что их используют по большей части те, кто не сможет их проверить, даже если и захочет — элементарно знаний не хватит.
Вас вон не хватило даже на то, чтобы найти причину глюка в библиотеке LiquidCrystalRus, то есть Вы не знаете что творится внутри используемой Вами библиотеки, хотя точно знаете, что работает она некорректно.
Нет, извините, но такой подход к проектированию — это диагноз, и большинство ардуинщиков как раз его и практикуют. Взять какие-то библиотеки, зачастую левые, найденные в сети, кое-как костылями заставить их заработать по нужному сценарию — и все, изделие готово!
Представляю беседу инженеров в каком-нить самсунге:
- У нас тут одна подпрограмма в смартфоне не очень, может зависнуть и привести к возгоранию батареи...
- Да хрен с ней, это же не для военки. Все равно пользователь скорее всего раньше уронит и разобьет телефон.
Andy_Big
17.11.2017 02:49Но дело в том, что нет никаких оснований считать интерфейс TWI менее надежным, чем компоненты терморегулятора. Скорее (точнее, наверняка) наоборот.
Как бы то ни было, но любую часть системы нужно делать максимально надежной. Вы-то, как электронщик, должны знать как считается надежность изделия в целом :) А рассуждать "да все равно вон та деталь менее надежна, так что можно и над надежностью других деталей не париться" :)
И под этот редчайший случай загромождать библиотеку операциями, которые никогда не будут востребованы?
Простите, но по отношению к ардуине это выглядит просто смешным :) Когда при использовании ее библиотек код имеет объем раза в полтора-два больше, чем написанный без ее использования :) И быстродействие настолько же меньшее.
В космосе или военке, в медицине я бы, безусловно, так и сделал, а для бытового прибора, у которого скорее перегорит нагреватель от того, что забыли налить воду — совершенно ни к чему.
А вот это вообще прекрасно. Бытовому прибору надежность ни к чему :) В ногу со временем шагаете, любой производитель Вас поддержит. Главное, чтобы Ваше "ни к чему" в период гарантии не случилось :)
Ну и никто Вас не пустит к военке или космосу с ардуинами, разумеется :)YRevich Автор
17.11.2017 07:02Andy, когда некто упорно не желает читать то, что написано, а выдумывает из собственной головы за оппонента, и сутками приходится доказывать, что «я имел в виду это, а не это» (хотя там все было сформулировано и без того), желание общаться пропадает напрочь. Вы вместе с BARSRAB — сутяжники, цель которых, очевидно, доказать, что оппонент дурак и недоучка. А я уже скоро лет тридцать, как вышел из возраста, в котором непременно требуется сказать последнее слово. Удачи вам в ваших добрых делах!
BARSRAB
17.11.2017 08:39Если бы проблема была лишь в одной библиотеке, то ладно. Но это болезнь агрдуйни.
Andy_Big
17.11.2017 17:05Я прочитал и даже процитировал что написано.
И доказать я стараюсь, что Ваш подход к разработке микроконтроллерных систем непригоден для серьезных задач, применять его можно только для мелких домашних поделок типа часов или "метеостанций".
Микроконтроллеры и компиляторы для них за 30 лет сильно изменились, но Вы, кажется, этого не заметили.
ЗЫ: Вы мне напоминаете моего знакомого, который тоже перешел от ассемблера к бейсику для AVR, так и не сумев освоить Си, и всем доказывал, что Си — это глючно и сложно, Си++ вообще неприменим для контроллеров, а вот Бейсик — это самое то.
YRevich Автор
17.11.2017 18:06А откуда вы знаете мой «подход к разработке микроконтроллерных систем»? По этой публикации? А, да, по моим комментам, я понял. Я бы не стал на вашем месте делать подобных обобщений (и, собственно, никогда и не делал). Чтобы понять «подход к разработке микроконтроллерных систем», никаких комментов не может быть достаточно (потому я обычно на них не реагирую, и очень жалею, что сейчас ввязался). Я не считаю вообще правомерным понятие «подход к разработке микроконтроллерных систем». Этих подходов ровно столько, сколько проектов. И крупной ошибкой будет считать, что в этом плане существуют готовые рецепты на все случаи жизни. Для любительского термостата более, чем достаточно того, что я здесь излагал. Для медицинского прибора недостаточно даже этих ваших гарантированных выходов из цикла — там куда более крутые меры надо применять, чтобы ничего и ни-ни. Для космического аппарата без тщательно продуманного дублирования, линий связи с квитанциями, восстановлением ошибок и так далее даже подходить к проекту не стоит. И, кстати, там в начале всего даже не эта программная уйня, а продуманная схемотехника и выбор компонентов. Потому вы ничего не можете заключить о «подходе» из анализа того, что я говорил о любительском термостате.
ЗЫ: А насчет того, что «Си — это глючно и сложно» я с вашим знакомым согласен. Бейсик, правда, для контролеров не годится напрочь, потому что еще хуже Си, и вообще не годится не для чего — это говорит человек, который когда-то на встроенном MS-Бейсике кучу программ наваял, и ими пользовались. Но Си (который я изучал, когда вы еще в школу ходили, наверное) всегда мне напоминал произведение пьяного художника-конструктивиста. Менее логичный, хуже читаемый и более неудобный практически синтаксис еще надо очень постараться придумать.
VT100
18.11.2017 19:42К тому же SPI помогает не сильно — вместо шести соединений получаем четыре и опять же наглухо привязанные к дисплею, потому что еще для каких-то целей SPI в любительской практике употребляют нечасто.
Прошу извинить, если недостаточно внимательно прочитал статью и обсуждение, но это… это похоже на незнание основ схемотехники, а именно — наличия входов разрешения (ChipSelect, CS, Enable, Inh[ibit] и т.п.). Всё с чем не требуется общение в данное время может быть отключено от шины.
Даже, внезапно!, ЖКИ с параллельной шиной. И именно тем самым входом E[nable], которым снабжены контроллер HD44780 и армия его клонов. К сожалению, этот момент работы контроллера не выделен явно в тексте datasheet. Но из анализа временных диаграмм обмена и транзисторной структуры порта ввода-вывода данных — это следует как 2х2. Пытлиыве читатели могут найти не только явное подтверждение моим словам в документации на HD44780 или SPLC780, но и косвенные — в документации на алфавитно-цифровые модули с размером 40х4.
Dark_Purple
Заголовок безграмотный.