Например TDA7294

Форум РадиоКот • Просмотр темы - Помогите с кодом на си для AVR (Atmega8)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 12:35:26

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


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



Начать новую тему Ответить на тему  [ Сообщений: 77 ]    , 2, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Ср ноя 30, 2022 15:03:54 
Вымогатель припоя

Карма: 6
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 06, 2010 10:01:46
Сообщений: 551
Рейтинг сообщения: 0
Попробуйте так

Код:
// в дефайны
const unsigned char updown_symbols[] = {
   0x04, 0x0e, 0x15, 0x04, 0x04, 0x04, 0x04, 0x00,
   0x04, 0x04, 0x04, 0x04, 0x15, 0x0e, 0x04, 0x00
};
#define LCD_CGRAM             6      /* DB6: set CG RAM address             */
...

  // в майн
  // загрузка знакогенератора (символы "стрелка вверх" и "стрелка вниз")
  LCDcommand((1<<LCD_CGRAM));
  for(a=0; a<16; a++) {
    LCDdata(updown_symbols[a]);
  }

  LCDdata(0); LCDdata(1); // вывод на экран загруженных стрелочек




Данный пример выдернул из рабочей поделки, грузит только 2 символа (стрелочки)
Но как писали коллеги выше, только 8 символов можно загрузить одновременно

ps

и вроде как, если биты порта идут по порядку, в библиотеке это место:

Код:
if ((i&1)==1)
{
   DPORT|=(1<<DB0);
}
i=i>>1;

if ((i&1)==1)
{
   DPORT|=(1<<DB1);
}
i=i>>1;

if ((i&1)==1)
{
   DPORT|=(1<<DB2);
}
i=i>>1;

if ((i&1)==1)
{
   DPORT|=(1<<DB3);
}
i=i>>1;

if ((i&1)==1)
{
   DPORT|=(1<<DB4);
}
i=i>>1;

if ((i&1)==1)
{
   DPORT|=(1<<DB5);
}
i=i>>1;

if ((i&1)==1)
{
   DPORT|=(1<<DB6);
}
i=i>>1;

if ((i&1)==1)
{
   DPORT|=(1<<DB7);
}


можно вполне заменить на:
Код:
   DPORT = i;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Ср ноя 30, 2022 15:20:15 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 296
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1220
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
aleksey chilov, написание/исправление чужого кода - это работа в 3 раза больше: сначала программист-помощник должен понять, как Вы написал метод, например. по pdf, потом что Вы пропустили или накосячили, в-третьих: с Ваши уже сделани готовые функции программист-помощник должен написать новые функции. Лучше всего находите свой пропуск самостоятельно :).

Что я вижу: Вы загружаете букву 'Д' в ячейку 0 в CGRAM. ОК.
Второе: Вызовите знак 'Д'. А компилятор еще не знает, что это 'Д'. Он знает, что есть data в ячейка 0.
На более позднем этапе, если необходимо, в другой функции свяжете ячейку 0 с 'Д'.

Вместо LCDstring("Д", 3, 0) попробуйте LCDdata(uint8_t(0)); 'Д' должен загореться.
---
И вопрос: в стремлении к универсальности: действительно ли Вам нужны все эти функции для работы с LCD-дисплеем? Обнаружил, что для "малых" и "средних" МК лучше всего подходит конкретное написание, без универсальности.


Последний раз редактировалось veso74 Ср ноя 30, 2022 15:30:29, всего редактировалось 4 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Ср ноя 30, 2022 15:24:12 
Это не хвост, это антенна

Карма: 15
Рейтинг сообщений: 177
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1326
Откуда: Тюмень
Рейтинг сообщения: 0
Мужики. Давайте я скину библиотеку свою ( что я использую ) вы посмотрите её и может быть подскажете как мне в ней добавить функцию записи в CGRAM и вывода оттуда?

Я не знаю Си, :dont_know: потому могу только на словах рассказать как записывается пользовательский символ… :) ну а как его выводить на экран, так это как и все остальные символы согласно указанного адреса… обычно применяют два способа вывода символа на экран:
1 указывают непосредственно адрес знака.
2 компилятор сам подставляет адрес знака согласно кодировке ASCII.

Второй способ применяется когда в программе символ указан в кавычках (к примеру "D") и тогда компилятор в место символа вставляет соответствующий код ASCII, это будет $44 (68)… в дисплее стандартные символы латиницы соответствуют кодам ASCII, но чтобы выводить и иные символы, то лучше указывать непосредственно адрес напрямую… то есть если записали допустим пользовательский символ Ж по адресу $00 то чтобы его вывести на экран, необходимо указывать непосредственно этот адрес $00 где непосредственно находится данный символ… ежели написать в кавычках данный символ ("Ж"), то компилятор подставит соответствующий код ASCII, а это соответственно будет $86 (134)… в индикаторе по данному адресу (если память полностью задействована) окажется другой знак, но в большинстве случаях по данному адресу ничего нет и тогда на экран будет выведен как бы пробел (нет символа)…


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Чт дек 01, 2022 16:52:22 
Встал на лапы

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 115
Рейтинг сообщения: 0
Добрый вечер участникам!
Снова прошу пощи.
Как вывести русский символ я уже понял.
А вот как вывести строку из двухмерного массива ну ни как не получается.
Что-то делаю не так.
Подсобите пожалуйста кому не сложно.
Фотки кода который используется я приложил.
Не могу функцию LCD_string переточить для вывода из массива кириллицы. :shock:


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Чт дек 01, 2022 17:10:49 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 160
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
А.. чо, это новая тема? А где та, предыдущая то? Я там как раз выкладывал таблицу перекодировки из ANSI в раскладку дисплея.


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Чт дек 01, 2022 17:12:23 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 296
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1220
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
... Как вывести русский символ я уже понял.

Расскажите и нам, пожалуйста. Нам тоже интересно. Иначе смысла в форумах нет (как ето уже писал в другом сообщении).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Чт дек 01, 2022 17:45:27 
Встал на лапы

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 115
Рейтинг сообщения: 0
У меня LCD без кириллицы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Чт дек 01, 2022 18:43:14 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 296
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1220
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Способы, комментариях были для кириллицы в LCD без кириллицы.


Последний раз редактировалось veso74 Пт дек 02, 2022 04:31:03, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Чт дек 01, 2022 19:25:09 
Встал на лапы

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 115
Рейтинг сообщения: 0
А что за функция WAIT(); ????

Добавлено after 2 minutes 9 seconds:
Что она выполняет?

Добавлено after 5 minutes 30 seconds:
_delay() или что значит ждать????


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Чт дек 01, 2022 19:55:56 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 160
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
Это макрос. В зависимости от того, используется ли ножка RW (чтение/запись) дисплея или нет, вызывается либо чтение дисплея до тех пор, пока бит BF не уйдет, либо если RW-ножка не используется, то в WAIT стоит небольшая задержка для того, чтобы в дисплей не писалось быстрее, чем он может принимать. На практике - 43 мкс минимум для всех команд и данных кроме двух.
В принципе, если МК работает медленно, на 8 МГц, то можно не использовать задержек, там и так всё уложится.

Да, но это был код для дисплея С КИРИЛЛИЦЕЙ! А раз в вашем дисплее её нет, то он не подойдет. Вернее, подойдет только в части вывода латиницы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Чт дек 01, 2022 22:45:05 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14054
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Смотря где массив строки расположен.
Или это стандартные сообщения из ПЗУ или специальный раздел "подставной строки" в ОЗУ.
У АВРок разное обращение к таким массивам...
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Пт дек 02, 2022 04:27:04 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 296
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1220
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
aleksey chilov, в поисках фрагмента кода, который Вы предоставили, я наткнулся вероятно на авторскую страницу кода. Можете найти информацию полезной. В приведенном примере LCD дисплей печатает массив кириллических букв.

Библиотека на СИ, для LCD дисплеев на базе процессора HD44780, для микроконтроллеров AVR
Цитата:
Перед использованием функции LCDline_of_flash, нужно фо флеш память вклинить например такую строку в конце не забываем символ 0 вставить, иначе эта функция
выведет на дисплей всю флеш память МК.

const uint8_t text[] PROGMEM = {0x20,0xA8,0x70,0xB8,0xB3,0x65,0xBF,0x20,0xE3, 0x65,0xBF,0xBA,0x61,0x21,0};//Привет детка!

Потом эту строку из флеша выводим на LCD так:
LCDline_of_flash(text,0,1);//В позицию 0,1 на русском выведется Привет детка!, если твой LCD поддерживает русские символы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Пт дек 02, 2022 19:23:18 
Встал на лапы

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 115
Рейтинг сообщения: 0
Здравствуйте форумчане опять!
Блин ну ни как!
Научился выводить по 1-й букве.
Где-то прочитал где-то под смотрел что-то изменил и вроде выводит
Русские символы но только по 1-му.
А вот как зарядить функцию чтоб я мог в неё предать допустим номера массива и
чтоб она прописала все 64 бита в CGRAM 0x00-0x07 а потом вытащить ну вообще не вариант!
Ни как! всё сыпется всё валится компилятор скоро нах*й меня начнёт по Русски посылать!
Вопрос, как сделать функцию?
Пример кода. Можно организовать? Хоть посмотреть как это правильно делают...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Пт дек 02, 2022 20:14:49 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 160
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
Возможно, стоит потренироваться передавать массив в функцию, прочитав вначале в книжке Кернигана "Язык программирования Си" как это делается.
Допустим имеем маасив байтов char array[10], и нам их надо передать в функцию.
Запишем функцию так:
Код:
void Function(char *input)
{
   /* всё, мы приняли указатель на массив *input, теперь можем работать с ним */
   Write(*input); // отправляем в функцию Write первый байт принятого массива
   input++;  // передвигаем указатель на следующий байт массива   
   Write(*input); // отправляем второй байт массива
    input++;  // передвигаем указатель на следующий байт
   /* и так дальше. Можем сделать это в цикле for от 0 до числа байт принятого массива */
}

А можно записать немного иначе, вот так:
Код:
void Function(char *input)
{
   /* а тут с указателем можем работать через индексы как с обычным массивом: */
   Write(input[0]);
   Write(input[1]);
   Write(input[2]);
     /* или в цикле for */
}

И передаем массив в функцию, имя массива служит его адресом:
Код:
Function(array);

а если хотим передать в функцию массив не с его начала, а с некоторого энного элемента, надо прямо указать адрес этого элемента через его индекс:
Код:
Function(&array[2]);  // передать массив, начиная с третьего элемента (индекс 2)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Пт дек 02, 2022 20:25:46 
Встал на лапы

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 115
Рейтинг сообщения: 0
Ну это уже ближе к теме!
Спасибо. Сейчас над этим подумаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Вс дек 04, 2022 13:32:18 
Встал на лапы

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 115
Рейтинг сообщения: 0
Добрый день!
Как можно переписать функцию чтоб выводить строку?
Я там пробовал но не получается.
Посмотрите видео пожалуйста.
https://disk.yandex.ru/i/2k4sZP3Rzrh99Q
https://disk.yandex.ru/i/guyTx3f12I4l2g
Видео яндекс диск.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Вс дек 04, 2022 15:00:37 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

Добавлено after 2 minutes 10 seconds:
если строка s, а функция вывода символа put, то функция вывода строки будет такой: while(*s) put(*s++);

Добавлено after 1 minute 34 seconds:
видео не смотрел

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Вс дек 04, 2022 15:23:34 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 160
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
Цитата:
видео не смотре

А зря! Там был раскрыт секрет "как сделать невидимой инфо на дисплее" :)))

Вообще же, работа с текстовой строкой аналогична работе с массивом при передаче его в фукнцию. Потому как текстовая строка в Си представляет собой массив элементов типа char. Чтобы понять, как это все работает, нужно прочитать в книжке про арифметику указателей и про работу с ними вообще.
А дисплей-двухстрочник сам по себе имеет механизм автоинкремента позиции выводимого символа и ему не надо вручную указывать новую позицию.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Вт дек 06, 2022 07:52:23 
Встал на лапы

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 115
Рейтинг сообщения: 0
Доброе утро всем!
Я тут чутка почитал и накалякал вот такое.
Подскажите имеет ли право на жизнь вот эта конструкция?
Ожидается что она будет из массива пререписывать щт 1-го до 8-ми байт
в CGRAM для дальнейшего вывода слов на LCD 1602.



void stroka_rus(uint8_t (*text)[uint8_t line])
{
LCDcommand(0x40);
Busy_flag();
CPORT|=(1<<RS);
for (uint8_t i=0;i<text;i++)
{
Send_byte(i);
for(uint8_t k=0;k<line;k++);
Send_byte(k);
}
CPORT&=~(1<<RS);
LCDdata(text[line]);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
СообщениеДобавлено: Вт дек 06, 2022 07:57:32 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 160
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
А это вообще скомпилироваться могёт?


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

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


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

Сейчас этот форум просматривают: codenamehawk, Varlakotam и гости: 38


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

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


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