Jump to content
snaut

Работа С Массивами На Avr. Не Понимаю, Помогите Разобраться

Recommended Posts

Всем здравствуйте. Продолжаю осваивать МК AVR. Возникла задача выводить на семисегментный индикатор некоторые цифры. Для начала решил сделать простую программу, которая будет выводить цифры на двухразрядный семисегмент от 0 до 99.

Нужно использовать массивы и директиву «.db»

Что это такое и с какой стороны подойти, я не знаю.

Вот значения для моих семисегментов, а что дальше делать с этими .db ума не приложу…

array:
.db 0x03, 0x9F ;0,1
.db 0x25, 0x0D ;2,3
.db 0x99, 0x49 ;4,5
.db 0x41, 0x1F ;6,7
.db 0x01, 0x09 ;8,9

Подскажите где искать ответы

Share this post


Link to post
Share on other sites

У тебя есть массив с меткой array. Теперь загружаешь начальный адрес массива в адресный регистр Z. Например так, ldi zl,(array<<1), ldi zh,(array<<1). Если тебе нужен элемент массива №3, то прибавляешь к адресу 3. Теперь можешь читать содержимое ячейки в регистр командой LPM. LPM R16,Z. Этот пример для AVR.

Edited by Геннадий

Share this post


Link to post
Share on other sites

Добрый день. Экспериментирую с выводом текста на дисплей Nokia N82 в такой связке- Мега32+ LCD . разрулил вывод текста- инглиш и русский размером 8х8 пикселей. Но поскольку дисплей имеет разрешение 320х240 то текст получается слишком мелким. За сим вопрос: прошу ткнуть носом в ссылку с примером, или привести пример вывода текста большей размерности. Думаю, вариант с увеличением количества строк и столбцов и символе - имеет право на жизнь. Пишу на Си в AVRStudio4, вот моя функция вывода символа и строки символов. Здоровая критика - приветствуется.

void nlcd_Char(char c, unsigned int x, unsigned long int y, unsigned long fcolor, unsigned long bcolor)

{

int i;

int j;

unsigned int nCols; // количество столбцов !!! Все это указывается в первой строке файла с шрифтом !!!

unsigned int nRows; // количество строк

unsigned int nBytes;// количество байт

unsigned int PixelRow;

unsigned int Mask;

unsigned long Word0;

unsigned char *pFont;

unsigned char *pChar;

if (c>127) c=c-64; // Переносим символы кирилицы в начало второй

// половины таблицы (начиная с кода 0x80).

pFont = (unsigned char *)Nokia6610_fnt8x8; // получаем указатель на таблицу шрифтов, их может быть несколько- см. PDF

nCols = pgm_read_byte(pFont);

nRows = pgm_read_byte(pFont + 1);

nBytes = pgm_read_byte(pFont + 2);

pChar = pFont + (nBytes * (c - 0x1F));

for (i = 0; i<nCols; i++)

{

PixelRow = pgm_read_byte(pChar++);

Mask = 0x80;

for (j = 0; j < nRows; j += 1)

{

if ((PixelRow & Mask) == 0)

Word0 = bcolor;

else

Word0 = fcolor;

nlcdPixel( x+i,y-j, Word0);

Mask = Mask >> 1;

}

}

nlcd_SendByte_CMD(LCD_NOP); // Задержка

Вывод строки символов

void nlcd_Text(char *ptext, unsigned char x, unsigned char y,unsigned long fcolor, unsigned long bcolor)

{

while (*ptext != 0x00) // цикл- пока символ не равен нолю

{

nlcd_Char(*ptext++, x, y,fcolor,bcolor);

// LCDPutChar(*pString++, x, y, Size, fColor, bColor);

x=x+8;

if (y > 319) break;

}

}

Edited by -Валера-

Share this post


Link to post
Share on other sites

Новые контролллеры VIPerPLUS - практический вебинар 10 июня от ST

В программе вебинара - новые контроллеры VIPerPlus, расширяющие границы применения этих компонентов. Обзор их характеристик и преимуществ. Практика. Демонстрация испытаний из лаборатории ST. Пример моделирования в среде E-DesignSuite.

Зарегистрироваться

Если вы знаете алгоритм прорисовки буквы, то вам не составит труда накатать шрифт иных размеров. Существуют даже програмки, где выбираешь размерность шрифта и по клеткам рисуешь букву, а прога компилит код в текстовик.

Сам составлял шрифты, поверьте это не сложно

Share this post


Link to post
Share on other sites

Алгоритм известен, но вот программы-конвертеры Font-ов не корректно отображают массив с шрифтом свыше 10х12 А рисовать в клеточку весь инглиш + раша- это время которое можно было-бы провести с большей пользой)) В свое время - накатал с пяток шрифтов для Нокии 1202, 1100 и т.д. Вот и заморочился с увеличением шрифта 8х8 - вдвое. Так сказать, хочется обойтись малой кровью.

Share this post


Link to post
Share on other sites
                     

Технология SOI против паразитных эффектов в драйверах затвора

Микросхемы драйверов затвора силовых транзисторов, изготавливаемые по технологии монолитного кремния, подвержены негативному влиянию отрицательных напряжений, возникающих на опорном выводе для верхнего плеча. Технология «Кремний-на-изоляторе» (Silicon-on-insulator, SOI) является надежным решением этой проблемы, о чем свидетельствуют результаты испытаний трех микросхем драйверов затвора полумостовой схемы, в том числе – SOI-драйвера производства Infineon.

Читать статью

Эх. Я в асме- полный ноль, может просто своими словами алгоритм вывода символа- думаю дальше сам смогу справиться))

Share this post


Link to post
Share on other sites

Допустим у вас 8-ми разрядный МК. Для вывода символа 8х8 вам потребуется описать 8 байт т.к.: Допустим, если взять листок в клетку, то 1 клетка = 1 пикселю = 1 биту. Т е 1 байт символа описывает 1 строчку. Этим объясняется кратность 8 всех шрифтов. Можно сделать символ 4х6 (4-ширина, 6-высота), т е каждый символ будет описан 3 байтами.

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

естественно 16 разрядным МК всё это будет шустрее. Сам юзал дисплей от nokia6280.

Share this post


Link to post
Share on other sites

To fuckir Хотя мой ответ и запоздал- все равно, спасибо. разобрался я с выводом шрифта размерностью более 8х8 пикселей, реализовал в одной функции вывод двух шрифтов- 8х8 и 8х16. Как говорится аппетит приходит во время еды)), захотелось вывести символ превышающий ширину в 8 пикселей. Мои размышления: при отрисовке, допустим символа 24 пиксела ширина и 32 пиксела высота, вероятно нужно изображение разбивать на части и выводить- по 1 байту в ширину и до полной отрисовки по высоте т.е.32 байта, затем по ширине 2-й байт изображения и до полной высоты - 32 байта , ну и так далее... Прошу подсказать правильность моих размышлений, или ошибочность... Может существует более простой алгоритм вывода шрифтов более 8 пикселей по ширине.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Я обмотки изолирую пленкой от видеомагнитофонов.
    • Переменный ток (ток синуса). Будет меньше размер дросселя\зазора.
    • Так сначала соответствующие форумы читают, потом вопросы задают. Вот аналог.
    • 2 витка обычного скотча держат 15 кВ - это еще на РС-5 Толик - KENT проверял и описывал .... а так - фторопласт, ФУМ-сантехнический и т.п. - отличные изоляторы. Вот, нашел оригинал поста: 21482.  KENT Один слой обычного канцелярского скотча держит 16КВольт! Для изоляции высоковольтного провода достаточно 2 витка скотча!!!   У нас в городке, один КИП-овец электрик скрытую проводку в квартирах делает Берет лету скотча, на нее из медной фольги полоски-проводники приклеевает. Сверхе еще одной полоской скотча. И все это вместе в термо-пленку (для обертки книг, что утюгом приклеивается). Испытания в КИП-е делал, такая проводка держит (при ширене полос-проводников в 2см.) до 5КилоВатт на 10 метров, при питании от сети 220В. Применяет, в том числе, для подключения новых стиральных машин... Хороша идея. Но как со временем ведет  себя термопленка ? Скотч проверен уже лет 5-6  не пробивается в телевизорах. А качестве электропроводки, там же сырость может быть. Гвозди бы делать из этих людей! и еще я не понял про 5 киловатт на 10 метров. Какая собственно разница сколько метров? А вообще таких "специалистов" самих изолировать надо ИМХО. И не термопленкой, а чем-нть понадёжнее... Сергеевич овец электрик скрытую проводку в квартирах-----А ЗАЧЕМ ТАК? приключений захотел? Один слой обычного канцелярского скотча держит 16КВольт! Для изоляции высоковольтного провода достаточно 2 витка скотча!!!. А зачем так рисковать? Ссылку в студию где, на каком оборудовании исследовано или это голословно,тогда и жувачкой заклейте  
    • Абсолютно никакого смысла.Самый лучший вариант на TEA5711,там и звук чистый и настройку держит.А если ещё подтянуть синтезатор частот+МК-вообще красота.Но...схема усложнится.
    • Потестил при посрействе самовозбудного дрища мумуковый регулятор для варылки. Выставил 10 ампериев и посверкал электродом. Сваркой это, ясен пень, не назовёшь, но на испортить воздуся в лабалатории и расплавить электрод троечку силёнок у дрищика хватило.
    • @Serjmaster Интересная статья. Глаз особенно зацепился за "(уменьшение C0 обычно возможно только до определенного предела, поскольку при этом для сохранения резонансной частоты контура на прежнем уровне приходится изменять намоточные данные индуктивности, входящей в контур, что увеличивает ее собственную емкость и влияет на общую добротность контура)". А у меня этого конденсатора и вовсе нет. Уменьшил, что называется, до 0 Ф. Правильно ли я понимаю, что, допустим, короткая катушка (малая собст. ёмкость) и конденсатор С0 будут обладать бóльшей добротностью, чем длинная катушка без оного конденсатора? Если так, то есть ли смысл с таким дешёвым приёмником морочиться и повышать добротность контура? Или же достаточно имеющейся схемы? Интересная это тема, как оказалось.
×
×
  • Create New...