Обсуждаем контроллеры компании Atmel.
Ответить

Re: Помогите с кодом на си для AVR (Atmega8)

Вт дек 06, 2022 20:41:19

Доброе утро!
Вот я вроде всё сделал правильно но почему то экранчик чист.
А хотя логически всё вроде правильно.
Скрины прикрепил.
Вложения
Снимок экрана 2022-12-07 085554.png
(12.67 KiB) Скачиваний: 29
Снимок экрана 2022-12-07 085512.png
(33.13 KiB) Скачиваний: 26

Re: Помогите с кодом на си для AVR (Atmega8)

Ср дек 07, 2022 20:33:32

Добрый вечер!
Опять возник вопрос к знающим людям.
Вывожу слова но они в перемешку.
Прошу посмотрите что не так?



// запись в cgram и печать в строку
void stroka_rus(const void *text, uint8_t lines, uint8_t rows,uint8_t x,uint8_t y)
{
LCDcommand(0x40);
Busy_flag();
CPORT|=(1<<RS);
const uint8_t *ptext = text;
for (uint8_t i=0; i<lines; i++)
for(uint8_t j=0; j<rows; j++)
Send_byte(ptext[i*rows + j]);
CPORT&=~(1<<RS);
LCDGotoXY(x,y);
uint8_t i=0x00;
for(i=0x00;i<lines;i++)
LCDdata(i);
}
while(1)
{
stroka_rus(text_1,6,8,4,0);
clear();
stroka_rus(text_2,8,8,3,1);

}

https://disk.yandex.ru/i/lun55DhIp2JBmw вот видео в протеусе

Добавлено after 2 minutes 21 second:
void clear(void)
{

LCDcommand(0x40);
Busy_flag();
CPORT|=(1<<RS);
const uint8_t clr[8][8]={};
const uint8_t *pclr = clr;
for(uint8_t i=0; i<8; i++)
for(uint8_t h=0; h<8; h++)
Send_byte(pclr[i*8 + h]);
CPORT&=~(1<<RS);
}

Помогите с кодом на си

Вс дек 11, 2022 08:44:02

Доброго дня!
Я уже обращался ранее сюда в этот форум по вопросу вывода Кириллицы на LCD1602.
Люди помогли разобраться спасибо им.
Но тут появилась новая проблема.
Я не могу корректно вывести слова.
Проблема в том что один массив залазит на другой.
И всё смешивается. Я же не говорю про длинные слова более 8 байт.
Как можно затирать пред идущую информацию для повторного вывода слога
чтоб составить слово нормально?
Там на фотках видно как это всё выглядит.

void stroka_rus(const void *text, uint8_t lines, uint8_t rows,uint8_t x,uint8_t y)
{
LCDcommand(CGRAM_ADDR);
Busy_flag();
CPORT|=(1<<RS);
const uint8_t *ptext = text;
for (uint8_t i=0; i<lines; i++)
for(uint8_t j=0; j<rows; j++)
Send_byte(ptext[i*rows + j]);
CPORT&=~(1<<RS);
LCDGotoXY(x,y);
Busy_flag();
CPORT|=(1<<RS);
uint8_t i=0;
for(i=0;i<lines;i++)
LCDdata(i);
}
Вложения
3.jpg
(186.67 KiB) Скачиваний: 34
2.jpg
(200.08 KiB) Скачиваний: 33
1.jpg
(183.87 KiB) Скачиваний: 37

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 08:55:21

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

Проверил в подтверждении конкретно на дисплее… подопытный китаец... так и есть, "максимум 8 разных одновременно"… :)

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 09:07:16

Та Китаец!
Без Кириллицы.
Ну как-то можно обойти?
Наверное есть варианты?
Был бы с Кирилллицей вообщеб проблем не возникло бы...

Re: Помогите с кодом на си

Вс дек 11, 2022 09:08:33

Если вы при выводе слов в строке производите запись новой буквы в ОЗУ ЖКИ, то потом необходимо установить дополнительно курсор в то место откуда вы будете продолжать выводить буквы следующего слова… или выводите все слова в строке без дополнительных прерываний для записи новых букв в ОЗУ ЖКИ…
Это китаец без кириллицы :)
СпойлерИзображение
Последний раз редактировалось VNS Вс дек 11, 2022 12:31:27, всего редактировалось 3 раз(а).

Re: Помогите с кодом на си

Вс дек 11, 2022 09:19:49

Не вполне понятна суть вашей проблемы.
Не исключено, что вы путаете вывод слов длиной более восьми символов и загрузку знакогенератора для числа символов, больше восьми.
Пример:
1. Вы успешно загрузили 8 пользовательских символов в CGRAM.
2. Далее вы вывели на экран слово, содержащее все эти 8 символов.
До этого момента все ок.
3.Но, как только вы загрузите 8 новых пользовательских символов в CGRAM, на дисплее сразу же изменится изображение слова, которое вы написали на шаге 2

Из вышенаписанного следует, что лучше юзать дисплей с кириллицей или учить английский :)

Re: Помогите с кодом на си

Вс дек 11, 2022 09:54:40

aleksey chilov, Вы всё неправильно делаете. В знакогенератор надо не всю строку забивать, а только буквы которых нет в с латинском алфавите. В вашем примере строка "РАДИОКОТ ПРИВЕТ" в знакогенератор достаточно занести всего три буквы. Разделите функцию загрузки знакогенератора и вывода строки.
Последний раз редактировалось VladislavS Вс дек 11, 2022 10:02:55, всего редактировалось 1 раз.

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 09:59:15

Вывести разово на дисплей можно только 8 пользовательских символов… на следующем экране можно вывести ещё 8 других пользовательских символов… но сразу больше 8 не получится… :)

Re: Помогите с кодом на си

Вс дек 11, 2022 10:00:41

...а еще лучше купить на Алишке нормальный дисплей с кириллицей
https://aliexpress.ru/item/32897547605. ... 4aa6cZJ4dd
придется конечно подождать, зато окупится потом прекращением мучений.

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 10:02:57

https://aliexpress.ru/item/32897547605. ... 4aa6cZJ4dd
и прекратятся мучения

Re: Помогите с кодом на си

Вс дек 11, 2022 11:36:16

MLX90640, такая цена плюс стоимость доставки никогда не окупится.

Добавлено after 4 minutes 4 seconds:
Re: Помогите с кодом на си для AVR (Atmega8)
aleksey chilov, не надо плодить одинаковые темы.
я объединил твою новую тему с предыдущей твоей темой.

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 11:43:18

всё уже миллион раз обсуждалось...
11 английских заглавных: А, В, С, Е, Н, К, М, О, Р, Т, Х плюс 8 = 19 заглавных русских
7 английских строчных: а, с, е, о, р, х, k плюс 8 = 15 строчных русских, где к будет немножко странной
С учетом громадного количества синонимов в русском языке и возможных сокращений, трудности при отображении могут возникнуть ну в очень специфичных случаях.

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 12:22:28

А ещё лучше использовать графический. Один раз синтезировал шрифт (или несколько) - и нет простора фантазии. Хоть на грузинском.

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 12:29:42

Лучше пикать морзянкой - всего один динамик и одна нога микроконтроллера, зато можно передать практически любую информацию, и даже слепому грузину

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 15:55:07

Нельзя: враг подслушает! 8) :))

Re: Помогите с кодом на си для AVR (Atmega8)

Вс дек 11, 2022 16:35:00

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