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

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


Viktor26

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

#define Bit(n)    _BV(n)
void data (unsigned char dat)
{
 for(unsigned char counter=0;counter<8;counter++)
 {
	    if((dat&Bit(counter))!=0)
	    {
				 тут устанавливаем пин в 1
	    }else
	    {
				 тут устанавливаем пин в 0
	    };
 };
};

в if else еще нужно добавить управление стробами для сдвигового.

- А совесть в курсе? - А совесть в доле! :-D

Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле.

Все грамматические ошибки являются авторским стилем изложения материала.

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

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

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

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

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

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

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

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

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

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

блин что же все так сложно то,, ручками прописываю букву и она выводится. а вот сделал массив из 8ми байт и в цикле проверяю каждый бит каждого байта по очереди, и ппц, в первой строке тупо загораются все столбцы. код вечером скину, если не сложно глянте плиз где я туплю,

кстати в отладчике в watch все переменные принимают значения как надо, порты тоже дрыгаются как надо при проходе кода а в железе ппц

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

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

у меня еще лежат 5 матриц из отдельных светиков, вроде 16х8 каждая, не помню точно, вечером сфоткаю покажу)))post-166713-0-59100700-1422553517_thumb.jpgpost-166713-0-02535500-1422553530_thumb.jpg

Вот такие еще есть, 5 штук 7х16

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

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

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

unsigned char slovo[8]={0b11111111,//в массиве буква А
0b11111011,
0b11110101,
0b11101110,
0b11101110,
0b11100000,
0b11101110,
0b11101110,
};
unsigned char str=0;
unsigned char l=0;
unsigned char a=0;



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

}
// 0й,1й,2й PORTC биты выбор строки, 3й бит разрешает работу hc138
// pb0-тактовый, pb1-данные, pb2-защелка,PORTB


void vivod (void)
{

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

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

}
PORTC = str;// включить строку
PORTB |= (1<<PB2);//включить строб
PORTB &=~ (1<<PB2);//выключть строб
PORTC = 0;//выключить строку

}

}

вот код про который я говорил,

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

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

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

PORTC = 0;//выключить строку

В этой строке ты устанавливаешь на входе НС138 адрес 0 (т.е. первую строку)

и разрешаешь работу НС138 на выход, подавая на 4 ногу ноль.

СМ. ДАТАШИТ.

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

блин слона то я и не приметил)))) ща исправлю и попробую. просто забыл блин что вместо этой строки нужно на 3й бит 1 записывать чтоб отключить строку)))

Вот такое смещение получается, как я понял, из-за цикла проверки бита, его надо увеличить до количества столбцов))) ну а так я впринципе стал чуть ближе к истине)))post-166713-0-24616100-1422555302_thumb.jpg

блин с задержкой в 2 милисикунды ток потребления при 3х волтах 0.5 ампера :shok: а при задержке в 10 микросекунд свечение еле видно

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

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

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

Соответственно инфа сдвигается дальше. Записывай сразу все столбцы. Все правильно.

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

На прошлой картинке вывелось правильно, за исключением вертикальных и горизонтальных линий.

Попробуй писать не в одной подпрограмме, а как положено. Разбей на подпрограммы.

Напиши сначала подпрограмму ввода строки в регистры 595. Потом подпрограмму переключения

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

не одной программой. Одна подпрограмма будет двигать влево. Другая вправо. Вверх, вниз

мигать и т.д.

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

Этот момент с линиями я переделалpost-166713-0-39463800-1422559029_thumb.jpg

видно не очень это потому что я напряжение подубавил а то БП кипит

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

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

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

for (char i=0;i<=8;i++)

Не силен в си, но здесь i<=8 или равно7 или 8 без меньше.

А вместо if (a>8)a=0; присваивать а ноль при входе в подпрограмму.

Меньше кода будет после компиляции.

for (char i=0;i<=8;i++) перепиши

for (char i=0;i=7;i++) А то ты 9 столбцов выводишь, вместо 8.

Вроде так. И лучше подпрограммами. Легче искать ошибки будет.

Вот програмка.

Запускаешь. Выбираешь справа СВОЙСТВА. Выставляешь 64 на 8. Больше она не позволяет.

Продолжение можешь на 2 странице сделать или нолями добить до 96.

Пишешь текст или картинку. Нажимаешь РЕДАКТОР -- ЭКСПОРТ ФАЙЛА.

Слева вверху тип выход. файла -- С\СИ++ совместимый.

ФОРМИРОВАНИЕ ФАЙЛА --- горизонтальное.

ПОРЯДОК БИТ ПИКСЕЛЕЙ -- первый снизу или справа.

Дальше ЭКСПОРТИРОВАТЬ.

Название вписываешь и СОХРАНИТЬ.

Открываешь файл любым редактором. Там твой массив.

BitEditor.rar

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

Viktor26, а не было мысли заменить 138-й на 595-й и добавить его в общую линейку. Добавить байт в выводимую цепочку и двигать по нему 0, тогда управление 138-м отпадает и линии порта освободятся. Останется только алгоритм работы с 595-ми.

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

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

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

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

в 1-ном байте 8 бит. 0 - это тоже бит. В цикле

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

нужно писать или ...<8 или <=7 иначе получите неопределенное состояние в переменной которую выводите.

- А совесть в курсе? - А совесть в доле! :-D

Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле.

Все грамматические ошибки являются авторским стилем изложения материала.

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

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

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

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

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

Строка состоит из 96 бит.

В сроке двенадцать регистров 595. Они соединены последовательно.

Вы заталкиваете 8 раз по восемь бит первой сроки, заполняя её полностью.

Т.е. каждые новые 8 бит, продвигают старые дальше, по строке.

Включаете её на 2-10 мС через 138. Дольше не надо. Этого достаточно, чтоб первая строка

вспыхнула.

Затем её гасите.

Затем загоняете в регистры вторую строку . 8 раз по 8 бит --- 96 бит.

Включаете 2 строку.

И так все 8 строк.

Затем все заново.

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

это я понимаю, чтоб вывелась одна буква я использовал отдельно цикл 87 раз чтоб забить строку пустышками а остальные 8 раз я выводил байт, а теперь мне в переменную нужно загнать например 6 байт сразу чтоб вывести слово, или также поочереди подставлять по одному байту и проверять их?

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

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

Можно в однну переменную Загнать 12 байт и двигать 96 бит переменной в строку.

А можно 12 раз по байту загонять.

В первой строке будут верхушки всего текста.

Во второй строке следующие верхушки ВСЕГО текста.

И так до низа всего текста. Дерзай. Хочешь цикл на 96 бит сразу.

Хочешь 12 раз по 8 бит. Как удобнее

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

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

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

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

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

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

Поэтому писал про подпрограммы.

Сбрасывал тебе программу. В ней пишешь текст.

Получаешь массив из 64 байт

Делаешь из него массив 8 строк по 8 байт.

Но тебе нужно для строки 96 бит. Добиваешь каждую строку из 8 байт, еще 4-мя нолевыми

байтами, до 12 байт.

Получаешь массив из 8 строк по 12 байт == 96 бит.

И выводишь их по очереди на панель, меняя адреса в НС138.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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