Перейти к содержанию

Часы На Светодиодной Матрице 48Х8 Проект № 2


Кирилл84

Рекомендуемые сообщения

Доброго всем времени суток!!!

И так: Решил я воплотить в жизнь следующее устройство

Вот с чего я начал, реализовал простой вывод времени с микросхемы DS1307 на матрицу через сдвиговые регистры 74HC595. Не обращайте внимания на то что нет транзисторных ключей на катодах Протеус и без них умеет, а в реальности я про них помню, и буду использовать сборку что то вроде ULN2003 или ULN2803

post-104977-0-01729000-1357847964_thumb.jpg

А вот и сам проект c протеусом и исходником в CVAVR: Часы 2.rar

Помогите с поворотом символов ( скролинг вниз ) я тут кое что набросал вроде получилось но как то не корректно, так сказать простой тест без сдвиговых регистров просто мега и матрица 5х7

TEST V SCROLL.rar

#include <mega8.h>
#include <delay.h>
unsigned char i,g,k,l;
unsigned char addr, new_addr, result, ;
unsigned int tmp;
unsigned char ugol=16;
unsigned int Display_Image_1 [7] ;
unsigned int Base_simbol [44] [5] =
{
{ 0x3E, 0x51, 0x49, 0x45, 0x3E}, // 0 0
{ 0x00, 0x42, 0x7F, 0x40, 0x00}, // 1 1
{ 0x42, 0x61, 0x51, 0x49, 0x46}, // 2 2
{ 0x21, 0x41, 0x45, 0x4B, 0x31}, // 3 3
{ 0x18, 0x14, 0x12, 0x7F, 0x10}, // 4 4
{ 0x27, 0x45, 0x45, 0x45, 0x39}, // 5 5
{ 0x3C, 0x4A, 0x49, 0x49, 0x30}, // 6 6
{ 0x01, 0x71, 0x09, 0x05, 0x03}, // 7 7
{ 0x36, 0x49, 0x49, 0x49, 0x36}, // 8 8
{ 0x06, 0x49, 0x49, 0x29, 0x1E}, // 9 9
{ 0x00, 0x00, 0x36, 0x36, 0x00}, // : 10
{ 0x20, 0x10, 0x08, 0x04, 0x02}, // / 11
{ 0x7E, 0x11, 0x11, 0x11, 0x7E}, // А 12
{ 0x7F, 0x49, 0x49, 0x49, 0x33}, // Б 13
{ 0x7F, 0x49, 0x49, 0x49, 0x36}, // В 14
{ 0x7F, 0x01, 0x01, 0x01, 0x03}, // Г 15
{ 0xE0, 0x51, 0x4F, 0x41, 0xFF}, // Д 16
{ 0x7F, 0x49, 0x49, 0x49, 0x41}, // Е 17
{ 0x77, 0x08, 0x7F, 0x08, 0x77}, // Ж 18
{ 0x22, 0x41, 0x49, 0x49, 0x36}, // З 19
{ 0x7F, 0x10, 0x08, 0x04, 0x7F}, // И 20
{ 0x7F, 0x08, 0x14, 0x22, 0x41}, // К 21
{ 0x20, 0x41, 0x3F, 0x01, 0x7F}, // Л 22
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F}, // М 23
{ 0x7F, 0x08, 0x08, 0x08, 0x7F}, // Н 24
{ 0x3E, 0x41, 0x41, 0x41, 0x3E}, // О 25
{ 0x7F, 0x01, 0x01, 0x01, 0x7F}, // П 26
{ 0x7F, 0x09, 0x09, 0x09, 0x06}, // Р 27
{ 0x3E, 0x41, 0x41, 0x41, 0x22}, // С 28
{ 0x01, 0x01, 0x7F, 0x01, 0x01}, // Т 29
{ 0x27, 0x48, 0x48, 0x48, 0x3F}, // У 30
{ 0x1C, 0x22, 0x7F, 0x22, 0x1C}, // Ф 31
{ 0x63, 0x14, 0x08, 0x14, 0x63}, // Х 32
{ 0x7F, 0x40, 0x40, 0x40, 0xFF}, // Ц 33
{ 0x07, 0x08, 0x08, 0x08, 0x7F}, // Ч 34
{ 0x7F, 0x40, 0x7E, 0x40, 0x7F}, // Ш 35
{ 0x7F, 0x40, 0x7E, 0x40, 0xFF}, // Щ 36
{ 0x01, 0x7F, 0x48, 0x48, 0x30}, // Ъ 37
{ 0x7F, 0x48, 0x30, 0x00, 0x7F}, // Ы 38
{ 0x7F, 0x48, 0x48, 0x48, 0x30}, // Ь 39
{ 0x22, 0x41, 0x49, 0x49, 0x3E}, // Э 40
{ 0x7F, 0x08, 0x3E, 0x41, 0x3E}, // Ю 41
{ 0x46, 0x29, 0x19, 0x09, 0x7F}, // Я 42
{ 0x00, 0x00, 0x00, 0x00, 0x00} // пусто43
};
/*********************************************/

unsigned char Bitmask[5] = //битмаски
{
0b00000001,
0b00000010,
0b00000100,
0b00001000,
0b00010000
};
void SIMBOL (void)
{}

void main(void)
{

PORTB=0x00;
DDRB=0x1F;
PORTD=0x00;
DDRD=0x7F;

while (1)
 {
 for ( i=0;i<5;i++ )
{
addr = k;
new_addr = k+1;
tmp = Base_simbol [addr] [i];
tmp = tmp<<8;
tmp+=Base_simbol [new_addr] [i];
result = tmp>>ugol;
PORTB = Bitmask[i]; PORTD = ~result; delay_ms(5);
}
					 l++;
					 if (l == 5) ugol--;
					 if (ugol == 0) ugol=8;
					 if (l == 6) {l=0; g++;}
					 if (g == 8) k++;
					 if (g == 8) g=0;
					 if (k == 9) k=0;

 };
}

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А ведь тут нужно не только текущую цифру сдвигать, но и последующую выводить. На Асме это было бы так. Пишешь в два регистра текущую и последующую цифры и перед выводом сдвигаешь оба регистра с переносом. Старая цифра будет вытесняться, а новая заполнять место знакогенератора. Как это реализовать на Си не подскажу, в силу недолюбливания этого неуклюжего языка. Удачи.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Геннадий

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

Так я сообственно это и уловил, в моём коде в принципе так и реализовано только на СИ

addr = k; // записываем в 8 битный регистр (номер символа) из массива
new_addr = k+1; // записываем в 8 битный регистр ("новый" номер символа) из массива
tmp = Base_simbol [addr] [i]; // сохраняем в 16 битную переменную (номер символа) первый столбец символа
tmp = tmp<<8; // сдвигаем всё это на 8 бит влево
tmp+=Base_simbol [new_addr] [i]; // в освободившиеся 8 бит 16 битной переменной сохраняем ("новый" номер символа) первый столбец символа
result = tmp>>ugol; //сохраняем в 8 битную переменную значение 16 битной переменной со сдвигом на n
PORTB = Bitmask[i]; PORTD = ~result; delay_ms(5); // и выводим всё это на матрицу

А вот как вовремя менять символ? Из моего кода видно что у меня можно вывести всего 2 символо со (скролингом вниз) и они как бы повторяються! А мне нужно что бы в тот момент когда выводится 2 символ, первый уже сменился на 3ий и пополз как бы 3ий символ, соответственно пока выводится 3ий то 2ой сменился уже на 4ый и т.д.

Вот я тут начал пока реализовывать всё это на железе, но из за отсутствия элементов приходиться паять на том что есть.

Матрица пока 7ми строчная и сдвиговых регистров всего 4 пока так что не судите строго :)

Вот Фото:post-104977-0-35237800-1358191591_thumb.jpg

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

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

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

На Асме это было бы так. Пишешь в два регистра текущую и последующую цифры и перед выводом сдвигаешь оба регистра с переносом. Старая цифра будет вытесняться, а новая заполнять место знакогенератора. Как это реализовать на Си не подскажу, в силу недолюбливания этого неуклюжего языка. Удачи.

Насколько я вижу здесь так неполучится потому как байты здесь вертикальные а не горизонтальные. Здесь нужно двигать массив из 10 байтов, 5 байт стоящей цифры и 5 замещающей цифры. Здесь просто двигать в сторону а вертикально надо мозговать потому как уже при переходе с 23:59:59 на 00:00:00 надо двигать массив в свыше 60 байт. Выкладываю код как двигать строку (в сторону) из восьми семисегментных индикаторов может на мысль какую натолкнёт.

#include <mega162.h>

#define uchar unsigned char

#define uint unsigned int

uchar display[ ]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xBF,0xBF,0x89,0x86,0xC7,0xC7,0xC0,0xBF,0xBF, // двигаем надпись --H E L L O --

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};

uchar shift,j=0;

/******************************************/

/* Функция задержки */

/******************************************/

void delayms(uint ms)

{uchar t;

while(ms--)

{for(t = 0; t < 120; t++);

}

}

/******************************************************/

/* Функция вывода на индикатор(8 индикаторов) */

/******************************************************/

void disp(void)

{uchar i; //переменная для счёта

shift=0x01; //переменная для анодов

for(i=8; i>0; i--) //повторить цикл 8 раз для восьми индикаторов

{PORTA=display[i+j]; //Вывести в порт значениe из массива

PORTB=shift; //Включаем нужный индикатор (анод)

shift=(shift<<1); //Сдвигаем переменную индикатора на один

delayms(1);

}

PORTB=0x00 ; //Гасим аноды

}

/******************************************************/

/* */

/******************************************************/

void main(void)

{uchar k;

DDRA=0xff;

DDRB=0xff;

while(1)

{for(j=0;j<17;j++) //Повторить 17 раз для семнадцати значений из массива

{for(k=0;k<170;k++) //Задержка для скорости движения

disp(); //Вызвать функцию вывода индикации

}

}

}

Посмотрел ещё раз видео мне кажется что если использовать матрицу 8х8 то это не представляется сложным просто нужно два разных массива для цифр тогда в вашем случае (движение вниз) можно собирать цифру из горизонтальных байт а при движении в сторону из вертикальных. И схема меняется с общих анодов на общие катоды или наоборот. С матрицами 5х7 никогда не работал. хотя может и с ними получится.

Изменено пользователем Ittido
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Помогите с поворотом символов ( скролинг вниз ) я тут кое что набросал вроде получилось но как то не корректно, так сказать простой тест без сдвиговых регистров просто мега и матрица 5х7

Я так думаю что надо в памяти создать 2 ГРАФИЧЕСКИХ буфера.... первый чисто для часов, второй ОСНОВНОЙ, для непосредственного вывода в строку.... (каждый буфер получается по 48 или 56 байт, смотря как кодировать символы)

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

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ittido

а вертикально надо мозговать потому как уже при переходе с 23:59:59 на 00:00:00 надо двигать массив в свыше 60 байт.

Давайте помозгуем?! Я уже вроде как разобрался с одним символом и вроде как получаеться!

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

В принципе мысль правильная, но есть одно НО! Как заставить крутиться каждый символ по отдельности, в зависимости от того какой счёт времени на данный момент.

Вот я тут подкорректировал код который в 1ом посте с "ТЕСТОМ СКРОЛИНГА" и перенёс его в проект с установленными сдвиговыми регистрами.

Вроде получилось!

Вот видео:

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

...Как заставить крутиться каждый символ по отдельности...

Вот именно, по отдельности. Сдвигаешь по отдельности (в массиве графики), а выводишь все вместе на дисплей. На тик сдвинул (хоть все цифры по очереди), а потом этот один тик вывел на дисплей (как один такт регенерации дисплея). Получится эффект одновременного сдвига (если потребуется сдвинуть все цифры или более одной). Решение о сдвигаемых одновременно цифрах принимай сравнивая предыдущее значение часов с последующим, разбивая значение времени на отдельные элементы (цифры). Какие элементы не совпадают, те и двигай (обновляй).

Ссылка на комментарий
Поделиться на другие сайты

Геннадий

Спасибо за совет, я так и решил, теперь буду "буферный массив" создавать и с ним уже работать!

Moto_v3x

Смотрел, кстати кое что от туда подчеркнул для себя

Ну чтож, по совету Генадия, я добился данного эфекта "скролинга вниз"

вот видео:

изменения цифр пока идет по простой инкрементации просто тест

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

При сдвиге размазывание есть.

Да это эффект съемки. Глазами не видно размазывание

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Теперь еще бегущую строку осилить (по горизонтали) и добавишь в проект. После сигнала будильника и нажатии кнопки выкл. (будильник) выведешь что-нибудь типа "С добрым утром!".

Ссылка на комментарий
Поделиться на другие сайты

Геннадий Я думаю что и бегущую строку осилю)))

А пока я тут добавил в проект микросхему DS1307 и реализовал вывод минут и секунд.

вот видео:

P.S.

Кот на видео помощник мой :)

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Схемка не изменена? Осталась как в проекте протеуса в первом сообщении? Хочу тоже побаловаться со своим вариантом, только я пишу в WinAvr.....

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

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

Немного изменилась схема, ибо 8х48 матрицу нет пока финансов собрать. Поэтому использую пока подручные средства, матричные блоки 5х7.

Сейчас изготовлю печатку под эти матричные блоки 5х7, поставлю 10 блоков и сдвиговые регистры 74HC595, ибо из за отсутствия "сдвиговых регистров в дип корпусе" не могу задействовать весь экран. А вот в SOIC корпусе у меня их пруд пруди. так что буду делать плату индикации.

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

ЭХ... уже поздно! Я уже печатку сделал!

Да и потом "земля" не сильно повлияет на "тестовый" вариант!

Вот что я уже "слепил"

post-104977-0-06221300-1358806543_thumb.jpg

post-104977-0-12082800-1358806559_thumb.jpg

P.S. Как же я замучался с переходными отверстиями, почти 200 штук!!!

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Ну что-ж Уважаемые!!!

Вот и запустил я свой самодельный индикатор :dance2:

Вот видео:

Там в начале происходит прокрутка сразу всех символов, не обращайте внимания, я в функции скролинга не переделал проверку изменения всех часов, у меня проверка на смену только секунд, вот он и прогоняет весь цикл функции один раз. Вообщем поправлю)))

Да и кстати , как правильно поставить микросхему ULN2003A на катоды??? Ставлю как по даташиту, в ПРОТЕУСЕ появляется минус на всех катодах сразу :aggressive:

вот схема "немного изменённого проекта"

post-104977-0-84610300-1358969358_thumb.jpg

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Пробывал я инвертацию порта делать, эффекта ни какого.

Интересно даже то, что при подключении катодов индикатора к микросхеме ULN2003A но не подключая входные выводы микросхемы ULN2003A к ATmega8 на всех катодах появляется "-" минус

post-104977-0-99330900-1359136375_thumb.jpg

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

для отладки в протеусе возможно необходимо повесить резисторы подтяжку на "+" по выходу УЛН,

и обновленный проект в протеусе не помешал бы с .hex для проб

Ссылка на комментарий
Поделиться на другие сайты

Спасибо ща попробую.

вот сам обновлённый проект с исходником CVAVR и PROTEUSO'm CLOCK MATRIX v.1.3.rar

Получилось

post-104977-0-66047800-1359138224_thumb.jpg

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

9-й вывод ULN2003 (COM), когда соберешь в железе, оставляй в воздухе. Это катоды внутренних диодов, предназначенных для гашения самоиндукции подключаемых обмоток реле. Если подключишь его к минусу, то посадишь все выходы в минус (через эти диоды), независимо от входных сигналов. Да, ULN-ки инвертируют сигнал. ULN2004 лучше (на будущее), у них входной ток меньше.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...