Comments 60
Когда я увидел заголовок, сразу вспомнилась проблема с выбором конкретного дисплея, так как не во всех винстаровских дисплеях зашита кириллица. Нарочно не искал способ решения, думал в своё время просто дорисовать недостающие символы в CGRAM, но в итоге просто отложил дисплей на полку.
Это для более быстрой отрисовки и экономии RAM?
В либе для ssd1306 которую я нашел вся таблица лежит в массиве, можно спокойно рисовать свои символы. Инересно, там тоже есть зашитая в контроллер таблица?
Чтобы это выяснить нужно 30 секунд на поиск в гугле и еще 40-50 секунд для беглого просмотра результата поиска — http://www.buydisplay.com/download/ic/SSD1306.pdf :)
Если это слишком сложно, то ответ — в контроллере нет зашитых таблиц.
М-да, мое мнение об ардуинщиках после этой статьи ничуть не повысилось :)
с пустым профилем без единой статьи
А если бы у меня в профиле было два десятка статей на медицинскую тему — мое мнение об ардуинах было бы более весомым? :))
на которой создано бесчисленное количество замечательных проектов и которая позволила приобщиться к миру микроконтроллеров миллионам людей
Да, а Лего позволил приобщиться миллионам людей к архитектуре и роботостроению :)
Я не умаляю достоинств ардуины, но нужно называть вещи своими именами: миллионы людей приобщились не к миру микроконтроллеров, а к миру конструктора на их основе.
Кто-то делает?
"Любители" используют широко распространенные ардуиновские библиотеки. Шаг влево или вправо от этих библиотек — и это уже "профессионал" :)
Которые при необходимости можно чуток подрихтовать, не теряя времени на отладку всего массива кода. Я ведь не программы пишу, а работающую схему ваяю. И коли схема работает, то совершенно неважно как там вы все это оформили — чем быстрее справились, тем лучше. Это, если вы не в курсе, нормальный подход электронщика, программеры могут возмущаться сколько влезет.
На ассемблере много надежней
Не надо бросаться в крайности. Он лишь быстрее, но надежность с ним ни чем не выше. Да и выигрыш в скорости есть лишь при выполнение каких-то сложных расчетов, для которых AVR в принципе не сильно подходит. Есть еще выигрыш в размере прошивки, но сейчас это мало актуально.
дает замедление сразу в два-три раза на каждую операцию с данными.
И часто вам надо производить высокоскоростные операции на таких убогих МК (да, да, AVR одни из самых убогих и малофункциональных МК на рыке)? Да такие, когда разница в 2-6 тактов играет существенную роль? Что-то сомневаюсь.
А что до надежности, то когда я сам отвечаю за то, где что разместить и каким путем выполнить, а не дядя, неизвестно какую оптимизацию наворотивший в компиляторе, то это уже не убеждение, а уверенность.
И что вам дает это знание? Ровным счетом ничего. И уж точно никак не влияет на надежность работы МК.
— вы не поверите, но часто. Причем именно 8-разрядные тут рулят. Насчет убогости — это типичное приглашение поучаствовать в очередном холиваре, и не заслуживает внимания.
Си вообще пофиг где располагаются переменные — это епархия компилятора. И архитектура к Си имеет очень слабое отношение.
когда я сам отвечаю за то, где что разместить и каким путем выполнить, а не дядя, неизвестно какую оптимизацию наворотивший в компиляторе
Я же говорю — Вы просто не освоили нормально Си и директивы его компилятора :) И имеете какое-то устаревшее лет на 15 представление о возможностях нормальных компиляторов :)
На ассемблере много надежней
Обычно так говорят те, кто не освоил нормально С/С++ :) На ассемблере не надежнее, и даже почти не быстрее и почти не компактнее. Современные компиляторы в умелых руках создают очень оптимальный код.
В том-то и разница между электронщиком и программистом, что для первого чем меньше посредников, тем лучше.
То электронщик у Вас любит ардуину потому что "совершенно неважно как там вы все это оформили — чем быстрее справились, тем лучше", то электронщик не любит лишних посредников, чьим очень жирным представителем является ардуина. Вас, электронщик, не поймешь :)
С наследованием такого не будет — вам только нужно будет перезаписать LiquidCrystal_I2C в папке библиотек и все.
Особенно актуально при наводках или помехах по питанию.
А дело всего-навсего в одной проверке, которая резко повысит стабильность системы.
Он и спроектирован так, чтобы работать с минимальными хлопотами.
К TWI у меня никаких претензий, только к ардуйне, с ее внезапными бесконечными циклами ожидания.
искал способы выхода из таких бесконечных циклов
Ок. Представим ситуацию. МК управляет неким объектом, пусть будет теплица. К нему подключена та же EEPROM по I2C, в которую он раз в некий промежуток времени записывает температуру, влажность и т.п. Как видно, функция второстепенная. А теперь представим, что EEPROM перестала отвечать (умерла, намокла, и.д.) и МК тупо висит в цикле и ждет второго пришествия, вместо того, чтобы сообщить оператору о неисправности. Считаете, что это нормальная ситуация? Лично я нет. МК никогда и ни при каких ситуациях не должен виснуть. Если же он виснет от элементарной поломки I2C периферии, то место такого девайса на свалке.
Использование библиотек с такими "бомбами" — это катастрофа и есть. Потому что их используют по большей части те, кто не сможет их проверить, даже если и захочет — элементарно знаний не хватит.
Вас вон не хватило даже на то, чтобы найти причину глюка в библиотеке LiquidCrystalRus, то есть Вы не знаете что творится внутри используемой Вами библиотеки, хотя точно знаете, что работает она некорректно.
Нет, извините, но такой подход к проектированию — это диагноз, и большинство ардуинщиков как раз его и практикуют. Взять какие-то библиотеки, зачастую левые, найденные в сети, кое-как костылями заставить их заработать по нужному сценарию — и все, изделие готово!
Представляю беседу инженеров в каком-нить самсунге:
- У нас тут одна подпрограмма в смартфоне не очень, может зависнуть и привести к возгоранию батареи...
- Да хрен с ней, это же не для военки. Все равно пользователь скорее всего раньше уронит и разобьет телефон.
Но дело в том, что нет никаких оснований считать интерфейс TWI менее надежным, чем компоненты терморегулятора. Скорее (точнее, наверняка) наоборот.
Как бы то ни было, но любую часть системы нужно делать максимально надежной. Вы-то, как электронщик, должны знать как считается надежность изделия в целом :) А рассуждать "да все равно вон та деталь менее надежна, так что можно и над надежностью других деталей не париться" :)
И под этот редчайший случай загромождать библиотеку операциями, которые никогда не будут востребованы?
Простите, но по отношению к ардуине это выглядит просто смешным :) Когда при использовании ее библиотек код имеет объем раза в полтора-два больше, чем написанный без ее использования :) И быстродействие настолько же меньшее.
В космосе или военке, в медицине я бы, безусловно, так и сделал, а для бытового прибора, у которого скорее перегорит нагреватель от того, что забыли налить воду — совершенно ни к чему.
А вот это вообще прекрасно. Бытовому прибору надежность ни к чему :) В ногу со временем шагаете, любой производитель Вас поддержит. Главное, чтобы Ваше "ни к чему" в период гарантии не случилось :)
Ну и никто Вас не пустит к военке или космосу с ардуинами, разумеется :)
Я прочитал и даже процитировал что написано.
И доказать я стараюсь, что Ваш подход к разработке микроконтроллерных систем непригоден для серьезных задач, применять его можно только для мелких домашних поделок типа часов или "метеостанций".
Микроконтроллеры и компиляторы для них за 30 лет сильно изменились, но Вы, кажется, этого не заметили.
ЗЫ: Вы мне напоминаете моего знакомого, который тоже перешел от ассемблера к бейсику для AVR, так и не сумев освоить Си, и всем доказывал, что Си — это глючно и сложно, Си++ вообще неприменим для контроллеров, а вот Бейсик — это самое то.
ЗЫ: А насчет того, что «Си — это глючно и сложно» я с вашим знакомым согласен. Бейсик, правда, для контролеров не годится напрочь, потому что еще хуже Си, и вообще не годится не для чего — это говорит человек, который когда-то на встроенном MS-Бейсике кучу программ наваял, и ими пользовались. Но Си (который я изучал, когда вы еще в школу ходили, наверное) всегда мне напоминал произведение пьяного художника-конструктивиста. Менее логичный, хуже читаемый и более неудобный практически синтаксис еще надо очень постараться придумать.
Посмотрите на аппноты Atmel — там куча образцов алгоритмов, в которых бесконечные циклы ожидания без всяких выходов. Почему так?
- Примеры они на то и примеры чтобы быть максимально простыми и прозрачными для понимания. Чтобы ничего не отвлекало от конкретной темы. При использовании код, разумеется, корректируется исходя из потребностей конкретной системы.
- Из бесконечного цикла таки могут быть выходы. Вспомним про прерывания. Грамотно построенный диспетчер прерываний позволит системе продолжать работать даже при наличии некоторых проблем с кодом. Хотя, конечно, таких ситуаций лучше не допускать.
- В конце концов, существует механизм watch dog. Вообще не здорово его применять в рабочем цикле, но вытащить систему из сумрака он поможет. Проблему с железом это не решит, но может помочь диагностировать (опять же, если программист об этом позаботится).
К тому же SPI помогает не сильно — вместо шести соединений получаем четыре и опять же наглухо привязанные к дисплею, потому что еще для каких-то целей SPI в любительской практике употребляют нечасто.
Прошу извинить, если недостаточно внимательно прочитал статью и обсуждение, но это… это похоже на незнание основ схемотехники, а именно — наличия входов разрешения (ChipSelect, CS, Enable, Inh[ibit] и т.п.). Всё с чем не требуется общение в данное время может быть отключено от шины.
Даже, внезапно!, ЖКИ с параллельной шиной. И именно тем самым входом E[nable], которым снабжены контроллер HD44780 и армия его клонов. К сожалению, этот момент работы контроллера не выделен явно в тексте datasheet. Но из анализа временных диаграмм обмена и транзисторной структуры порта ввода-вывода данных — это следует как 2х2. Пытлиыве читатели могут найти не только явное подтверждение моим словам в документации на HD44780 или SPLC780, но и косвенные — в документации на алфавитно-цифровые модули с размером 40х4.
Русификация библиотеки LiquidCrystal_I2C для OLED-дисплеев Winstar