Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с ЖКИ на контроллере HD44780 и его аналогах
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 25, 2024 03:41:21

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2424 ]     ... , , , 108, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 06:53:51 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 1
Albert_V писал(а):
Вы будете последним, у кого я что-то спрошу при разработке очередного изделия.
------
Если хотите продолжить срач - дайте ссылку на новую тему.

Срач разводите вы, не сумев принять новую для вас информацию.

А я вам и не собираюсь ничем помогать. Прочтите даташит самостоятельно и изучите вопрос самостоятельно. Цитату из даташита я привёл, но вы уперлись и не верите даже даташиту вашего хваленого мэлта.
Минус вам пока что устный. За то же самое. Научитесь адекватно воспринимать новую для вас информацию.

_________________
Подпись убрал вместе с автором. aen


Последний раз редактировалось Мурато Мяуконни Вт янв 17, 2017 06:59:15, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 06:58:55 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Мурато Мяуконни, я работаю с реальными копонентами, а не с вашими советами.
Так понятно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 07:02:34 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
Лично вам я ничего не советую, не обольщайтесь. Создайте новую тему и обсуждайте там, с чем вы работаете.
Вы не способны принять новую для вас информацию, даже если она исходит от самого производителя. Вы просто устарели со своими старыми методами и в силу устаревания вы и понятия не имеете о других возможностях - вам они просто недоступны с вашим ассемлерным подходом.
Так что хотябы не вводите в заблуждение других людей.

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 07:10:37 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Типичный бред ардуинщика, скачавшего чужой скетч.
СпойлерЕсли у вас ума хватит - надеюсь, вы прекратите срач в этой теме.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 07:24:33 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 10
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
можно в порядке полуоффтопа выскажу своё мнение?

с моей т.з. существует общий, максимально общий, охватывающий абсолютно все случаи жизни, подход в выборе решений: если есть один способ, дающий 100% результат в любых условиях, именно он и является наиболее предпочтительным. почему? да потому, что полностью избавляет от необходимости задумываться об отклонениях.

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

трамвай над обходить спереди, автобус сзади и т.п. - эти правила в любом случае дают максимально качественный результат, и их и следует придерживаться. все "нюансы" и отступления от правил - допустимы, но не рекомендованы в качестве оптимальнейших.

так и с ЖКИ. есть метод, который с любым дисплеем, в любых услвиях, гарантированно дает положительный результат - это работа с контролем занятости контроллера ЖКИ. т.е. разработав соответствующую "библиотеку" можно вообще не беспокоиться о том, какой дисплей какие задержки обеспечивает, достаточно удостовериться, что он придерживается принятого протокола обмена. и абсолютно не стоит переживать, 40 мкС у него цикл или 43 или 37 или 98 вдруг. понимаете? раз - и навсегда.

если у вас в программе задержки (независимо от способа их формирования - циклы, таймеры или еще что), то при любых отступлениях от типа ЖКИ, для которого код проверен, вы обязаны удостовериться, что ваши задержки гарантированно более предельных для конкретного типа, без этого вы не можете быть уверены, что код сработает. и даже если вы закладываете 1 мс паузу там, где по даташиту ожидается 40 мкс, это ни от чего вас не спасает - все равно надо проверять даташит, иначе вы не разработчик, а шаляй-валяйщик.

и кому оно надо - лишние телодвижения? ради чего? ради утешения "я крут, потому что делаю не так, как проще"? можно делать по разному, но, имхо, лучше делать именно так, как я описал. не потому, что я описал, а потому что так правда лучше.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 07:26:43 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
Albert_V,
Если у вас ума хватит - прочтите наконец то даташит. Что за упорный чел то. Воистину - глупость не искоренить.
Бред вы пишете сами. И вы уже готовы признать это, только ущемленное чсв этого не даёт сделать.
Считаете ардуинщиками тех, кто пишет на Си? Ну-ну. А я вот считаю устаревшим динозавра тех, кто пыжится писать исключительно только на ассемблере и только на каких-нибудь древних 8-16-битках.

AVR, все случаи в жизни не предусмотрите. А пока будете предусматривать, технологии уйдут далеко вперёд и ваши наработки потеряют актуальность. Придётся заново переписывать. Универсальность - не есть оптимальность. Особенно на ассемблере вы не напишете универсального кода. Все равно придётся переделывать под другой контроллер. И даже на Си универсальность не полная. Где-то нужны одни ресурсы, один метод вывода, а где-то уже другой метод. Хорошие знания современной базы и быстрое ориентирование в ресурсах контроллера позволят не мучиться в создании сверхуниверсального метода.

Да и повторяю в который раз - "вдруг" в два-три раза параметры не изменятся. Это лажа дисплей иначе.
К тому же, никто не мешает скорректировать ваш код под лажовый дисплей.
А я вам толкую о другом методе, при котором можно после инита вообще забыть, что дисплей существует в системе. Но такой метод недоступен для устаревших динозавров, застрявших на этапе написания универсальной библиотеки

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 08:09:25 
Сверлит текстолит когтями
Аватар пользователя

Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07
Сообщений: 1272
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения: 0
Верно сказано:
Спойлерлюбой спор в Интернете это битва за ЧСВ

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 12:19:43 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Мурато Мяуконни писал(а):
Добавлено after 6 minutes 47 seconds:
ROMan2947 писал(а):
для чтения этого самого битика, как нужно выставить ножку RS? BF -это команда, данные или не имеет значение. кстати какие команды можно считать с LCD?

RS = 0. На выводах, помимо BF в последнем разряде, будет выведен и текущий адрес курсора. При RS = 1 читается содержимое (код символа) по текущему адресу курсора. Это и всё, что можно почесть.


спасибо, принял!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 14:13:13 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
trengtor писал(а):
Верно сказано:
это на 100% относится к жизни вообще. любой поступок человека в конечном итоге совершается ради этого.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 15:25:02 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
предлагаю отвлечься от битвы за ЧСВ, а поискать баг в данном коде :))) КАК пишет МОНСТЕР он НЕИСПРАВЕН :tea:

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

#define RS_command ~(1<<0)
#define RS_data (1<<0)
#define RW_write ~(1<<1)
#define RW_read (1<<1)
#define E (1<<2)
#define LCD_PORT PORTD
#define RUN_PORT PORTA
#define SIZE_BUS 4 // размер шины данных 4 или 8 бит



void busy_flag()
{
DDRD &= 0x00; // порт D на вход
LCD_PORT |= 0xFF; // включаем поддтяжку
RUN_PORT |= RW_read;
RUN_PORT |= E; // взводим строб
_delay_us(40);
RUN_PORT &= ~E; // команда на запись
_delay_us(40);
if(PIND&(1<<7))
busy_flag();
}

void write_nibbleCommand(int DATA)
{
DDRD |= 0xF0; // младшие три разряда порта А на выход
RUN_PORT &= RS_command; // пишем команду
RUN_PORT &= RW_write;
LCD_PORT &= 0x00; // очищаем шину данных
LCD_PORT |= DATA; // бaйт данных
RUN_PORT |= E; // взводим строб
_delay_us(40);
RUN_PORT &= ~E; // команда на запись
_delay_us(40);
LCD_PORT &= 0x00; // очищаем шину данных

}

void write_command(int DATA)
{
write_nibbleCommand(DATA);
if(SIZE_BUS==4)
write_nibbleCommand(DATA<<4);
busy_flag();
}

void write_nibbleData(int DATA)
{
DDRD |= 0xF0;
RUN_PORT |= RS_data; // пишем команду
RUN_PORT &= RW_write;
LCD_PORT &= 0x00; // очищаем шину данных
LCD_PORT |= DATA; // бaйт данных
RUN_PORT |= E; // взводим строб
_delay_us(40);
RUN_PORT &= ~E; // команда на запись
_delay_us(40);
LCD_PORT &= 0x00; // очищаем шину данных
}

void write_data(int DATA)
{
write_nibbleData(DATA);
if(SIZE_BUS==4)
write_nibbleData(DATA<<4);
busy_flag();

}
void init_LCD()
{
_delay_ms(20); // установка ном напряжения
write_nibbleCommand(0x30); //
_delay_ms(5);
write_nibbleCommand(0x30);
_delay_us(110);
write_nibbleCommand(0x30);
busy_flag();

write_nibbleCommand(0x20); // две строки 4 бита
busy_flag();

write_command(0x28); // две строки 4 бита

write_command(0x08); // отключаем

write_command(0x01); // очищаем

write_command(0x06); // двигаем курсор вправо

write_command(0xF); //включаем

}

int main(void)
{
DDRA =0xFF;
PORTA =0x00;
DDRD =0xFF;
PORTD =0x00;
init_LCD();
// unsigned char znak = 0; // определяем переменную

//while (1)
//{
//write_command(0x80); // Вывод в верхнюю левую позицию 1 строки
//write_data(znak/100 + '0'); // Выделяем сотни
//write_data((znak/10)%10 + '0'); // Выделяем десятки
//write_data(znak%10 + '0'); // Выделяем единицы
//write_data('='); // Выводим знак равенства
//write_data(znak); // Выводим содержимое знакогенератора
//_delay_ms(1000); // Тут можно поменять задержку вывода символов
//znak++; // Следующий символ знакогенератора
//}
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 16:26:56 
Опытный кот

Карма: 16
Рейтинг сообщений: 74
Зарегистрирован: Вс янв 19, 2014 00:55:09
Сообщений: 736
Рейтинг сообщения: 0
ROMan2947 писал(а):
КАК пишет МОНСТЕР он НЕИСПРАВЕН
:)) Это касалось предыдущих версий. Сейчас код выглядит получше, хотя и здесь есть вопросы:
1 Зачем дергаете DDRD в процедурах отправки? Постоянно спрашиваю, но вы так и держите интригу... Порты ведь настраиваются однократно.
2 Зачем спамите дисплей стробом, проверяя его занятость? И зачем вообще с busy_flag() заморочились, если проверяете ее однократно?
3 Функции write_nibbleCommand(int DATA) и write_nibbleData(int DATA) различаются лишь одним битом (RS_data). Этот бит можно менять в write_command(int DATA) и write_data(int DATA), как менее "пушистых", а предыдущие процедуры свести в одну.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 18:19:24 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
с какой целью сделана рекурсия в busy_flag()? потенциально - это источник больших проблем!

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 20:09:10 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
if(SIZE_BUS==4) - для чего так? Если хотите сделать универсальный код под 4 и 8 бит ширины, применяйте условную компиляцию, не резервируя переменные. Сейчас у вас этот участок кода выглядит вот так: #define SIZE_BUS 4. То есть текст SIZE_BUS равнозначен тексту 4. И далее "если 4 равно 4 (а это истина всегда!) то сделать то-то ".
Условная компиляция выглядит вот так:

#define SIZE_BUS_4bit /* выбрана 4 бит ширина */

/* --- секция кода */

#ifdef SIZE_BUS_4bit // если определено 4 бита,
/* ------ код работы с 4 битной шириной */

#else // иначе,
/* ------ код работы с 8 битной по умолчанию */

#endif

Для тех, кто вдруг опять сфигали начнет спорить на пустом месте - объясняю: во время работы ширина шины не меняется, дорожки физически не добавляются и не убираются. Как нарисовали их, так они и остаются. 4/8 бит на ходу не переключаются - это бессмысленно. Потому условная компиляция выбирает во время компиляции кода либо один, либо другой блок, в зависимости от написанного в #define. Во время работы кода бессмысленно выполнять проверку "если константа 4 равна 4" или "если константа 8 равна 4".

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 20:36:38 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
По большому счёту, никаких проверок и не будет. При включенной оптимизиации и эта константа, и if() будет выброшен компилятором как абсолютно лишний. А оптимизация обычно всегда включена.

Собственно, такое поведение компилятора - это ещё одно подтверждение того, что так писать смысла нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 20:47:21 
Опытный кот

Карма: 16
Рейтинг сообщений: 74
Зарегистрирован: Вс янв 19, 2014 00:55:09
Сообщений: 736
Рейтинг сообщения: 0
А смысл? Переменных разных, как таковых - нет. Шина в коде "участвует" в 2-х местах: инсталляция и посылка байта/полубайта. В вашем варианте этот функционал придется дублировать, по видимому?
WiseLord, смысл - есть. Мне такой вариант потребовался, когда я переходил с 8 на 4 бита. Очень удобно контролировать код и девайс, меняя всего одну константу.


Последний раз редактировалось MOHCTEP Вт янв 17, 2017 22:35:14, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 20:51:13 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
В этом случае удобнее условная компиляция. Плюс хорошая IDE при этом отключенный код будет затемнять, чтобы он внимание не отвлекал:
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 21:13:36 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
Не вдаваясь в подробности конкретного ногодергания, абстрактно можно представить вот так (абстрактно - это значит без привязки к конкретному контроллеру, то есть в общих чертах):

Код:
//====================
/* -- функция записи в дисплей символа (данных) */
void Write_Data (char data)
{
    RS = 1;
    Send_Byte(data);
}
//..................................
/* -- функция записи в дисплей команды*/
void Write_Command (char data)
{
    RS = 0;
    Send_Byte(data);
}
//====================
/* -- функция передачи байта по интерфейсу */
void Send_Byte(char byte)
{
#ifdef  SIZE_BUS_4bit                       // если 4 бита ширина шины

    while(CheckBSY){}               // ожидание освобождения
    E = 1;                                  //   E _/-
    PORT = (byte>>4) & 0x0F     //   на выход старший полубайт
    E = 0;                                  //   E -\_

    while(CheckBSY){}               // ожидание освобождения (насколько помню, нужно тут ждать?)
    E = 1;                                  //   E _/-
    PORT = byte & 0x0F              //   на выход младший полубайт
    E = 0;                                  //   E -\_

#else            //............ иначе по умолчанию 8 бит ширина шины ............

    while(CheckBSY){}               // ожидание освобождения
    E = 1;                                  //   E _/-
    PORT = byte;                        //   на выход старший полубайт
    E = 0;                                  //   E -\_

#endif
}

// ----------
/* --- функция проверки бита занятости */
int CheckBSY(void)
{
     if (PORT & P7) return 1;         // читается бит занятости, если есть, то возвращается 1
     else return 0;                       // если нет, возвращается 0
}


_________________
Подпись убрал вместе с автором. aen


Последний раз редактировалось Мурато Мяуконни Вт янв 17, 2017 21:36:41, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 21:16:40 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
WiseLord писал(а):
По большому счёту, никаких проверок и не будет. При включенной оптимизиации и эта константа, и if() будет выброшен компилятором как абсолютно лишний. А оптимизация обычно всегда включена.

Оптимизация обычно включена на AVR, там отладчика почти ни у кого нет, а на STM32, например, он почти у всех есть, потому приходится задумываться над тем, что в дебаге размер может легко вырасти в несколько раз. Вчера как раз решал оставить два класса или совместить в одном, через if... Второй вариант вышел почти на пол Кб больше, оставил пока два класса, жду gcc 7, там есть constexpr if :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 21:22:22 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
WiseLord писал(а):
. При включенной оптимизиации и эта константа, и if() будет выброшен компилятором как абсолютно лишний..

А может все же лучше сразу писать правильно, не держа в уме то, что потом будет, возможно, выброшено.
Тем более, нормальные средства разработки имеют весьма удобные интерфейсы и условную прекомпиляцию делают на лету во время написания кода, затеняя не определенные блоки кода.

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт янв 17, 2017 22:58:42 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
ARV писал(а):
с какой целью сделана рекурсия в busy_flag()? потенциально - это источник больших проблем!

С целью прослушки PIN7 до тех пор пока условие станет ложью.

Добавлено after 19 minutes 24 seconds:
MOHCTEP писал(а):
:))
1 Зачем дергаете DDRD в процедурах отправки? Постоянно спрашиваю, но вы так и держите интригу... Порты ведь настраиваются однократно.
2 Зачем спамите дисплей стробом, проверяя его занятость? И зачем вообще с busy_flag() заморочились, если проверяете ее однократно?
3 Функции write_nibbleCommand(int DATA) и write_nibbleData(int DATA) различаются лишь одним битом (RS_data). Этот бит можно менять в write_command(int DATA) и write_data(int DATA), как менее "пушистых", а предыдущие процедуры свести в одну.


1. К коде есть функции чтения,в частности при проверке BF, то есть порт переопределяю на вход, при записи на выход.
2.Первую часть вопроса не понял :roll: byus_flag проверяю после каждого процесса записи/чтения о чем свидетельствует наличие вызова функции byus_flag() в конце функции записи/чтения.
3. согласен, но пока кабы не запутаться и не пропустить ошибку, решил написать громадно,но подробно.это же не является фатальной ошибкой?

Добавлено after 10 minutes 31 second:
Мурато Мяуконни писал(а):
if(SIZE_BUS==4) - для чего так? Если хотите сделать универсальный код под 4 и 8 бит ширины, применяйте условную компиляцию, не резервируя переменные. Сейчас у вас этот участок кода выглядит вот так: #define SIZE_BUS 4. То есть текст SIZE_BUS равнозначен тексту 4. И далее "если 4 равно 4 (а это истина всегда!) то сделать то-то ".
Условная компиляция выглядит вот так:

#define SIZE_BUS_4bit /* выбрана 4 бит ширина */

/* --- секция кода */

#ifdef SIZE_BUS_4bit // если определено 4 бита,
/* ------ код работы с 4 битной шириной */

#else // иначе,
/* ------ код работы с 8 битной по умолчанию */

#endif

Для тех, кто вдруг опять сфигали начнет спорить на пустом месте - объясняю: во время работы ширина шины не меняется, дорожки физически не добавляются и не убираются. Как нарисовали их, так они и остаются. 4/8 бит на ходу не переключаются - это бессмысленно. Потому условная компиляция выбирает во время компиляции кода либо один, либо другой блок, в зависимости от написанного в #define. Во время работы кода бессмысленно выполнять проверку "если константа 4 равна 4" или "если константа 8 равна 4".


Принято к сведению!А вариант отраженный в исходнике он что не рабочий?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2424 ]     ... , , , 108, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y