Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
5 / 5 / 4
Регистрация: 09.12.2017
Сообщений: 205
1

Посоветуйте библиотеку для LCD hd44780

06.04.2020, 11:13. Просмотров 1952. Ответов 49

Использоваться будет Atmel Studio 7. В основном, библиотека будет применяться при изготовлении амперметров, вольтметров и т.п, вывод данных с АЦП на дисплей 1602 - 1604. Основное, чтобы присутствовала возможность преобразования чисел с плавающей точкой (запятой) и вывода результата через строку, не используя Float. Те библиотеки, которые я нашел в интернете написаны лет 20 назад, Atmel Studio 7 при попытке использования вываливает кучу ошибок. Если есть необходимость, то могу выложить результаты своих мучений.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2020, 11:13
Ответы с готовыми решениями:

Инициализация lcd на HD44780
Здравствуйте! Пытаюсь освоить lcd на HD44780. Понимаю, что есть много уже готовых библиотек, я их...

Библиотерка LCD на контроллере HD44780
Для работы на си с данным дисплеем в winAVR есть библиотека "lcd_lib". Возьмем к примеру функцию...

О выводе на дисплей LCD HD44780
Пишу программу на Atmego32A. Столкнулся с проблемкой при выводе на дисплей. Функции вывода на...

Мигающий текст на LCD HD44780
Всем привет! А как проще всего сделать часть текста выводимого на LCD типа HD44780 мигающим? Именно...

49
Эксперт .NET
6860 / 4464 / 1072
Регистрация: 25.05.2015
Сообщений: 13,645
Записей в блоге: 13
06.04.2020, 11:48 2
Цитата Сообщение от gogaze Посмотреть сообщение
Основное, чтобы присутствовала возможность преобразования чисел с плавающей точкой (запятой) и вывода результата через строку, не используя Float.
Это задача вовсе не для библиотеки дисплея.
SPRINTF / От любви до ненависти. Или пару слов о стандартных библиотеках.
0
5 / 5 / 4
Регистрация: 09.12.2017
Сообщений: 205
07.04.2020, 00:46  [ТС] 3
Цитата Сообщение от Rius Посмотреть сообщение
Это задача вовсе не для библиотеки дисплея.
Но ведь есть есть же какие-то способы преобразования данных АЦП и вывода на дисплей не используя sprintf? Может кто-то поделится, как это можно сделать?
Из предложенного к просмотру видео, можно сделать вывод, что srintf наиболее простой и удобный способ не смотря на прожорливость к памяти и "тормозах" при выполнении кода.
0
Эксперт .NET
6860 / 4464 / 1072
Регистрация: 25.05.2015
Сообщений: 13,645
Записей в блоге: 13
07.04.2020, 05:24 4
Это не единственный вывод.
Есть всякие функции типа itoa, ftoa.
Есть множество самодельных реализаций микро-printf, которые можно найти в интернете.
0
Grey
08.04.2020, 00:58
  #5

Не по теме:

конечно не единственный.
на ассемблере этих функций нету.

0
1779 / 1109 / 109
Регистрация: 04.01.2010
Сообщений: 3,889
09.04.2020, 15:37 6
Цитата Сообщение от gogaze Посмотреть сообщение
написаны лет 20 назад
...к слову, лет 20 назад еще не было гигабайт оперативки, терабайт дисков и гигагерц в ЦП, тем более в МК. Так что такие библы написаны с учетом этого, и часто написаны намного лучше чем сейчас ).

PS: конечно, это не касается современных библиотек, написанных профессионально, с учетом нынешних реалий операционок, языков и компиляторов.
1
locm
09.04.2020, 16:25
  #7

Не по теме:

Цитата Сообщение от Voland_ Посмотреть сообщение
к слову, лет 20 назад еще не было гигабайт оперативки, терабайт дисков и гигагерц в ЦП
То есть в 2000 году.
В то время была память DDR1. В вики упоминаются 1 ГБ модули. https://ru.wikipedia.org/wiki/... ки_модулей

Тогда же появился процессор Pentium 4. https://ru.wikipedia.org/wiki/Pentium_4
Заявлена тактовая частота начиная с 1.3 ГГц.

Так что были в то время гигабайтные оперативки и гигагерцовые процессоры.

0
Тутошний я
1848 / 995 / 182
Регистрация: 03.11.2009
Сообщений: 3,321
Записей в блоге: 2
09.04.2020, 23:09 8

Не по теме:

в 2000 не знаю. где то в 2006 у меня был amd 2х ядерный на 1,3 ГГц, 2 гига озу и винт на 250 гигов. и это была не игровая сборка. и был компилятор C++Builder6.


и эти библиотеки создавались под комп. а уже потом с языком С перекочевали в контроллеры.
Цитата Сообщение от gogaze Посмотреть сообщение
чтобы присутствовала возможность преобразования чисел с плавающей точкой (запятой) и вывода результата через строку, не используя Float
какая точность нужна? а если значение из АЦП сразу умножить на 10, 100? а потом преобразовывать.
потом в результате запятую в нужном месте ставишь. уже при выводе на дисплей.
1
1779 / 1109 / 109
Регистрация: 04.01.2010
Сообщений: 3,889
10.04.2020, 08:54 9
Цитата Сообщение от locm Посмотреть сообщение
То есть в 2000 году.
ну ок. Корень обсуждения не в этом же. Алгоритмы для чисел с плавающей запятой написаны были еще хрен знает кем, хрен знает когда. Трансляция их на Си (или Verilog, как альтернатива) - это дело недюжинных способностей человека, хоть что-то понимающего в языке исходника и языке целевой платформы. В любом случае - оптимизированы они были максимально возможным образом, и говорить в данном контексте "дайте что-то по-свежее" это по меньше мере странно (если это не разработчик низкоуровневых драйверов (или компилятора) под новый процессор, не имеющий FPU).
0
Тутошний я
1848 / 995 / 182
Регистрация: 03.11.2009
Сообщений: 3,321
Записей в блоге: 2
10.04.2020, 10:57 10
но в avr нету сопроцессора. и ТС хочет без дробей.
Если есть необходимость, то могу выложить результаты своих мучений.
давай.
0
5 / 5 / 4
Регистрация: 09.12.2017
Сообщений: 205
10.04.2020, 11:37  [ТС] 11
По-моему это одна и та же библиотека. Две, с которыми я сейчас разбираюсь, третья - первоисточник.
0
Вложения
Тип файла: rar 1602_0904.rar (54.7 Кб, 8 просмотров)
Тип файла: rar lcd-library_Atmel.rar (75.1 Кб, 8 просмотров)
Тип файла: zip lcd-library_Atmel.zip (6.4 Кб, 8 просмотров)
Тутошний я
1848 / 995 / 182
Регистрация: 03.11.2009
Сообщений: 3,321
Записей в блоге: 2
11.04.2020, 01:57 12
понятно.
Цитата Сообщение от gogaze Посмотреть сообщение
Основное, чтобы присутствовала возможность преобразования чисел с плавающей точкой (запятой) и вывода результата через строку, не используя Float.
этого я у тебя вообще не нашёл.
и это не в библиотеке. это отдельно делается. библиотека только для работы с дисплеем.

Добавлено через 14 минут
я не вольтметр делал. просто напряжение замерял.
разрядность ацп 8 бит. Vref = напряжению питания(3,3 или 5 вольт). пусть будет 5.
формула int vcc = adc * 50 / 255. да, умножаем не на 5, а на 50.

Добавлено через 32 минуты
создадим переменную char res[] = "0,0V";
поставили запятую в результате в нужном месте
потом займёмся немного математикой. поделим значение по разрядам. у нас оно от 0 до 50 в данном случае.
C++
1
2
3
4
5
6
7
int d10 = 0;
int d1 = 0;
while(vcc > 9){
vcc = vcc - 10;
d10++;
}
d1 = vcc;//остаток переносим
блин, забыл нумерация массива с какого значения начинается.
в общем как то так.
C++
1
2
res[0] = d10;
res[2] = d1;
потом эту строку скармливаем библиотеке.

с самой библиотекой не помогу. возможно там просто переменные нужно поправить.
1
5 / 5 / 4
Регистрация: 09.12.2017
Сообщений: 205
11.04.2020, 10:41  [ТС] 13
Grey, А я считал, что этот кусок кода как раз и должен преобразовывать число в строку
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
//*****************************************************************************
// DISPLAY n-DIGIT INTEGER NUMER
void lcd_num_to_str(uint16_t value, uint8_t nDigit)
{
 switch(nDigit)
 {
  case 4: lcd_dat((value/1000)+'0');
  case 3: lcd_dat(((value/100)%10)+'0');
  case 2: lcd_dat(((value/10)%10)+'0');
  case 1: lcd_dat((value%10)+'0');
 }
}
0
5 / 5 / 4
Регистрация: 09.12.2017
Сообщений: 205
11.04.2020, 10:51  [ТС] 14
Вот еще вариант с урока. Работает, но только когда переменная n типа Float. Если int - то только целые числа.
0
Вложения
Тип файла: zip My_New_ADCLCD.zip (99.8 Кб, 4 просмотров)
Тутошний я
1848 / 995 / 182
Регистрация: 03.11.2009
Сообщений: 3,321
Записей в блоге: 2
11.04.2020, 21:23 15
Цитата Сообщение от gogaze Посмотреть сообщение
Grey, А я считал, что этот кусок кода как раз и должен преобразовывать число в строку
я этот кусок не нашёл.
он не совсем в строку преобразует. он выбирает разряд и преобразует его в ASCII символ. и сразу выводит.

Добавлено через 4 минуты
изначально этот код выводил. целую строку.
C++
1
2
3
4
5
6
7
8
9
/*
  Выводит строку из RAM в позицию курсора.
*/
void lcdPuts(char *str) {
  while (*str){
    while (lcdIsBusy()) ;
    lcdRawSendByte(*str++, LCD_DATA);
  }
}
1
5 / 5 / 4
Регистрация: 09.12.2017
Сообщений: 205
11.04.2020, 23:36  [ТС] 16
Цитата Сообщение от Grey Посмотреть сообщение
я этот кусок не нашёл
Извиняюсь! Не ту библиотеку прицепил. Этот кусок отсюда
0
Вложения
Тип файла: zip HD44780_AVR_Lib.zip (3.7 Кб, 6 просмотров)
Тутошний я
1848 / 995 / 182
Регистрация: 03.11.2009
Сообщений: 3,321
Записей в блоге: 2
12.04.2020, 00:28 17
та функция выводит просто число. а ниже есть ещё такая
C++
1
2
3
4
5
6
7
8
9
10
11
void lcd_string(uint8_t* data, uint8_t nBytes)  // Вывод строки на дисплей
{
register uint8_t i;
    // check to make sure we have a good pointer
    if (!data) return;
    // print data
    for(i=0; i<nBytes; i++)
    {
        lcd_dat(data[i]);
    }
}
нужно остановиться на какой то библиотеке. разобраться в ошибках.
1
5 / 5 / 4
Регистрация: 09.12.2017
Сообщений: 205
12.04.2020, 06:22  [ТС] 18
Цитата Сообщение от Grey Посмотреть сообщение
нужно остановиться на какой то библиотеке. разобраться в ошибках.
Воот! Правильно! Что я и просил в начале темы. Ваше мнение - в какой удобней и проще разобраться? А то у меня все эти библиотеки ...
0
Тутошний я
1848 / 995 / 182
Регистрация: 03.11.2009
Сообщений: 3,321
Записей в блоге: 2
12.04.2020, 20:33 19
честно? не знаю.
я такие в ассемблере не использую.
1
5 / 5 / 4
Регистрация: 09.12.2017
Сообщений: 205
12.04.2020, 23:02  [ТС] 20
Grey, Спасибо, что пытались помочь! Время потратили. С другой стороны, если все это можно за пол-часа сделать в CVAVR - зачем все эти трудности. Ну Float так Float. Если сделанный мной "показометр" для блока питания или другой прибор прекрасно работает, точно показывает - какая разница, в какой программе написана прошивка.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2020, 23:02

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

Вывод на LCD HD44780 HEX кода
Доброго времени суток, господа. Прошу Вашей помощи в решение одной проблемы. Имею UHF RFID...

Работа с LCD дисплеем HD44780 из МК Atmega16 (GCC)
Здравствуйте, пытаюсь подключить LCD дисплей к микроконтроллеру, скачал библиотеку, но уже на...

Проблема с подключением lcd WD-C2002T (HD44780 + HD44100)
Имеется atmega8 и lcd WD-C2002T, даташита так и не нашел, единственное что есть...

ATMega8. Вывод данных с UART на LCD дисплей HD44780
Помогите разобраться с приемом данных с UART и выводом их на LCD-дисплей ...многое перепробовал, но...

LCD на базе HD44780+I2C+Atmega8 какие преимущества?
В общем-то в заголовке темы практически все есть. Небольшое уточнение вопроса: - какие...

Подключение LCD на HD44780 через I2C расширитель PCF8574 к Atmega8
Ребятки, срочно нужна помощь, голова скоро лопнет(( Нужно подключить сие чудо (lcd) к atmega8. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.