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

Бегущая Строка На Led Матрицах 5Х8 И Ch595


Viktor26

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

У НС595 есть сигнал сброс. Прозвони, есть у тебя он на разъеме. Если есть, то можно

после вывода первой строки, неважно сколько бит, сбросить линейку 595. Они обнулятся.

Если нет, то принимая новую инфу по УСАРТ, сначала обнуляешь массив в озу, а потом

разбрасываешь новый текст по строкам в озу.

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

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

сброса нет на разьеме он подтянут, а про обнуление массива хорошая мысль)))) т олько наверное не массив буду обнулять а отдельную програму на 96 пустых циклов запускать буду))

ладно, все эксперименты оставлю на завтра, горшок звенит, пойду спать))

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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

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

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

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

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

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

...сначала обнуляешь массив в озу, а потом

разбрасываешь новый текст по строкам в озу.

...т олько наверное не массив буду обнулять а отдельную програму на 96 пустых циклов запускать буду))

Для чего? Для чего заниматься пустой работой?

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

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

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

ну как, если строку не обнулять то она будет в последующую подмешиваться, вот с этим алгоритмом у меня насущая беда блин

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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

Если правильно соблюдать фазы управления, то ничего подмешиваться не будет. А чистить последовательный регистр 595-го - бесполезная трата времени, т.к. результат появится на выходе только после параллельного строба. Это значит, что для очистки потребуется полный цикл заполнения 595-х. Зачем это нужно Вы и сами не представляете. Чистить буфер RAM - такое же пустое занятие, т.к. при следующем кадре он перезапишется полностью. Так не все-ли равно перезаписывать ячейки с нулевым содержимым или с предыдущим кадром?

Понятно, если бы 595-е регистры работали "в одиночку" и требовалось управление яркостью. Но тут, где стробировать свечение линейки можно через 138-й дешифратор (и даже вход для этого заведен на разъем), чистить 595-е - зря потраченное время и память МК.

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

хорошо, у меня есть цикл повторяющийся 95 раз, чтобы вывести один байт он все равно протикает 87 раз впустую и потом выведет этот байт в строку. но так как заполнение идет с права на лево то мне нужно в каждую букву записать по 11 байт пустых, это только чтоб вывести одну букву а если 2 вместе с таким раскладом выводить то они и появятся сначала одна потом потухнет и следом вторая. блин как то же она работала до того как мне в руки попала))) неужели она только статически может выводить? без всяких эфектов?

Не знаеш как? Спроси у Google'а !!!

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

Ну никак ты не хочешь врубиться в алгоритм. Не скачи по верхушкам.

Всеж просто. Ты выводишь построчно. В первою строку загоняется байт от первой

буквы, за ним байт от второй буквы и т.д

После этого включается строка. И высвечиваются верхушки всех букв одновременно.

И так поочередно ты зажигаешь 8 строк.

В строку ты загоняешь не поочередно,

а сразу кусочки от всех букв.

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

да это я понял)))) текст будет выводится сразу целым словом. )))) а чтоб он бежал какому кариесу помолиться?)))))

Не знаеш как? Спроси у Google'а !!!

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

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

Сначала выведи статический текст из буфера ОЗУ.

А уж потом будешь его двигать вверх, влево или туды-сюды.

И строка загоняется не на одну букву, а сразу вся, все 12 байт. И зажигается.

Сначала макушки текста (всего сразу)

Затем подмакушка, И так ниже и ниже.

Накосячил немного. Последний не 96 БАЙТ, а 12-ый естественно.

post-65195-0-99856000-1422791780_thumb.gif

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

да это я понял)))) текст будет выводится сразу целым словом. )))) а чтоб он бежал какому кариесу помолиться?)))))

Кариес тут вот такой.

Принимаешь строку в буфер (строковый). Законченный цикл.

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

Графический буфер выводишь в регистры (Построчно). Законченный цикл.

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

с програмкой разобрался, крутая штука, ща буду прикручивать все это дело, посмотрим на сколько я безнадежен :mamba:

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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



вот так получилось пока что, во всех циклах использовал i<=8 если писать как советывали i<7 то не работает,
и теперь я понял что не понимаю как работает цикл for :unknw:

и теперь еще проблема с подпрограммами, у меня всего три цикла for и они расположены друг в друге, блин не могу разделить их)))) Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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

Нормально. В видео строки пробегают. В реальности так же или это из-за съемки?

i<8 нужно, т.е. 0т 0 до 7.

Исходник выложи. Больше советов дельных будет от спецов.

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

в реальности мерцание всей картинки 10-15Гц\сек думаю повысив частоту мк до 8МГц, пройдет


#define F_CPU 1000000
#include <avr/io.h>
#include <util/delay.h>
//#include "mymacros.h"

//глобальные переменные


unsigned char n=0; // указатель байта
unsigned char l = 0; // сюда записываем поочередно байты из переменной h
unsigned char a=0; //проверяемый бит (1<<a)
unsigned char str=0;
// 0й,1й,2й PORTC биты выбор строки, 3й бит разрешает работу hc138
// pb0-тактовый, pb1-данные, pb2-защелка,PORTB



const unsigned char table[8][12]=
{

{0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x11,0x41,0x3F,0x36,0x00,0x41,0x3F,0x1F,0x00,0x00},
{0x00,0x00,0x01,0x22,0x21,0x49,0x00,0x43,0x21,0x04,0x00,0x00},
{0x00,0x00,0x01,0x14,0x01,0x49,0x00,0x45,0x01,0x04,0x00,0x00},
{0x00,0x00,0x01,0x08,0x0F,0x49,0x00,0x49,0x0F,0x04,0x00,0x00},
{0x00,0x00,0x01,0x14,0x01,0x49,0x1C,0x51,0x01,0x04,0x00,0x00},
{0x00,0x00,0x11,0x22,0x21,0x49,0x1C,0x61,0x21,0x04,0x00,0x00},
{0x00,0x00,0x0E,0x41,0x3F,0x49,0x1C,0x41,0x3F,0x04,0x00,0x00}
};


void vivod ()
{
for (char str=0;str<8;str++)//str записываятся в порт С как указатель строки
// и в переменную l как указатель масива строки из массива
{

for(char r=0;r<12;r++)// цикл на 12 байт каждой строки
{
l=table[str][n];// здесь переменной l присваивается байт из массива

for (char i=0;i<8;i++)// цикл проверки битов
{
if ((l & (1<<a))!=0)//проверка бита переменная а прибавляется ниже
{
PORTB &=~ (1<<PB1);//данные 0
}
else
{
PORTB |= (1<<PB1);// данные 1
}
a++;//проверяемый бит
PORTB |= (1<<PB0);// тактовый для 595 on
PORTB &=~ (1<<PB0);//тактовый для 595 оff
if (a>=8)a=0;

}
n++;//инкремент байта строки
if (n>11)n=0;
}
PORTB |= (1<<PB2);//включить строб
PORTC = str;// включить строку
PORTB &=~ (1<<PB2);_delay_ms(1);//выключть строб
PORTC |= (1<<PC3);//выключить строку

}
}



void preset()
{
DDRC=0xFF;
DDRB=0xFF;
PORTC=0x00;
PORTB=0x00;

}







int main(void)
{
preset();

while(1)
{


vivod();




}
}




Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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

Все логично.

Есть одно замечание. Ты сначала включаешь строку, затем выдаешь строб на 595.

Получается, что при включении строки навыходах регистров старая информация.

И она несколько нС засвечивает строку. В твоем случае не страшно. Частота не велика.

Но в некоторых случаях может быть засветка. Лучше сначала строб. Затем включаешь

строку, затем пауза и гасишь строку.

И по улучшению алгоритма.

На выводе каждой строки присутствует задержка на 1 мС. Итого 8 строк на 1 мС на

10гц получаем 80мС простоя контроллера и снижение скорости вывода.

А если вместо паузы в 1 мС загонять новую инфу в регистры.

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

Затем выводишь и не гасишь. Загоняешь 3 строку. Гасишь панель. Выдаешь строб.

Новая инфа появляется на 595. Включаешь строку и начинаешь загонять следующую.

Таким образом заполнение регистров при включенной предыдущей строке будет

играть роль паузы.

Подумай.

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

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

поменял местами строб и включение строки как вы указали, все тоже самое, вы правильно заметили В моем случае не страшно. Частота не велика.

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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

Обычно такие панели подключаются к компу или клавиатуре. Загоняется в микроконтроллер инфа.

И пошла реклама. Я просто с точки зрения экономии времени предложил вариант с загрузкой в

процессе свечения строки. Как говорится оптимизация до ноля.

Теперь пора подумать над алгоритмом движения текста.

А насчет яркости, тоже используется. Плавное нарастание и угасание текста.

Тоже красиво будет.

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

нарастание и угасание не получится, выводы OE не выведены на разьем, вешать сопли из кучи проводв не хочется)))

с другой стороны у меня программа написана в образе для понимания сути работы всего этого(у других же не мерцает)

подумать над алгоритмом движения текста, согласен, надо подумать, но в моем случае это как заставить обезьяну сыграть лунную сонату на скрипке :vava:

я с тем что написал то бился долго и упорно :heat:

но останавливатся не собираюсь, буду пробывать))

Не знаеш как? Спроси у Google'а !!!

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

Яркость менять будешь временем включения строки.

Допиши в своей программе еще цикл снаружи, в котором меняй паузу засветки.

Соответственно получится ШИМ. Яркость будет меняться.

А можешь просто поставить не 1мС, а 0,5 мС. Светиться будет тусклее.

От паузы зависит яркость.

А насчет сможешь или нет, так ты два дня назад тоже не знал, как вывести строку.

А уже выводится.

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

я тут подумал над тем что написал Геннадий по поводу движения текста, разложил сказанное им логически помыслив и сейчас озвучу свою версию, надеюсь на вашу критику, и чем жестче тем лучше

и так

создаю пустой массив на [8][12]

из другого массива беру из каждой строки по одному байту и записываю их в ранее созданный пустой массив,

проверяю его и вывожу на табло

беру следующие байты из массива с фразой и загоняю их на те же места в массив который проверяю и вывожу на табло и так по кругу.

ПРОКАНАЕТ??? я уже повелитель лампочек??? :king:

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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

Все верно. Один из вариантов такой. Два массива. Один с текстом, другой

буфер. Пишешь из массива с текстом в буфер в нужном порядке и выводишь

буфер.

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

массива.

Первый вариан мне кажется проще.

Я спать. Пока. Удачи.

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

ну да, первый попроще,

а по времени какой из вариантов быстрее работает?? это чисто из интереса. учиться буду всеравно на вариантах попроще.

ёмаё, осенило,

в прерывании выводить текст а в оснавном цикле читать из массива и писать в буфер))

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

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

Подумал тут. Си ведь язык высокого уровня. Что мы все в регистрах пальцем ковыряемся.

Ну знаю пока как, но думаю можно, объявить переменную длинной 12 байт и сбросить

в нее всю строку массива. Соответственно и другие строки тоже в переменные.

Получаешь массив из 8 12-и байтных переменных.

Цикл получается одинарный. Загоняешь по очереди 96 бит одной переменной, затем

второй и так по кругу.

А со сдвигом картинки вообще красота. Делаешь второй пустой такой же массив.

Называешь его буфером для вывода. И когда нужно двигать, просто сдвигаешь

побитно переменные из первого массива в буфер для вывода и его соответственно

выводишь.

Правда все отдаешь на откуп компилятору, не понимая как все происходит в контроллере.

Но на то и СИ.

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

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

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

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

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

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

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

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

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

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

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

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