Пните в правильную сторону. Ковыряюсь я сейчас со светодиодными матрицами, управляемыми max7219. Дошел до вывода отдельных слов. Допустим, беру строку, пропускаю ее через функцию, позволяющую получить ascii код каждого символа в строке, а затем полученным кодам присвоить начертание своего символа. Это несколько затратно по части памяти, в атмеге 8 ее почти не осталось после такого подхода. Напрашивается либо переход на более "жирный" МК, либо приляпывание spi флеш и/или пересмотр программного подхода, если это вообще возможно. В общем, часы нормально получается сделать, а вот информер с бегущей строкой нет. За что бы ни брался, всегда получаются часы
Комментарии: 25
Ogurezzz
Вот тут более менее видно все. А зачем ты получаешь код каждого символа в строке? Строка = массив ASCII кодов + завершающий NULL. Закидываешь свою строку в while и работаешь с ней как с массивом, пока не закончится строка. Массив передаешь как указатель.
Dmitriy
Ага, да я был неправ... Там гуд
Ivdor
а какая длина строки?
Paschendale
ну я пока научился работать с 5 матрицами 8*8(столько спаял), поэтому максимум вывожу одно слово из пяти букв (по букве на матрицу)
Ogurezzz
Строка у тебя меняется или нет? Если в строке меняется небольшой кусок, то разбей ее на 2 части. Константу в Progmem засунь, чтобы ОЗУ не занимать. И выводи константу отдельно, меняющуюся часть отдельно. А чего не хватает ОЗУ или flash?
Dmitriy
Для информера на сях придется попотеть. Переходи на асм ))))
Paschendale
да какой тут асм, ежели щи эти не могу победить))
Ivdor
Блин, не найти свой вариант от матриц. Но у меня были 10 матриц, т.е. 80 столбиков. Но короче суть в том, что тебе не надо забивать оперативную память. Тебе надо в цикле пропихнуть эти 80 столбиков = 80*2 байт (+адрес цифры), сразу в 7219, и забыть про них до следующего цикла. Соответственно, буквы у меня были в виде массивов. И через обычный цикл получал конкретный столбик. который кидал в 7219. Но архив с проектом, похоже, на старом компе остался. Не помню некоторых нюансов.. )
Ogurezzz
У него сам шрифт во Флеш не лезет :)
Ivdor
ну у меня же влез ))
Ogurezzz
Значит надо пробовать его из Case убирать в массив.
Ivdor
пусть 60 букв, по 5 столбиков = 300 байт. А у 8й меги, вроде, 8к
Ogurezzz
Там матрица 8х8, насколько я помню. И задача букву в эту матрицу записать. Одна буква 8 байт. Ну так-то да... Должно влезть. 480 байт на 60 буков
Ivdor
ну, я делал буквы по 5 столбиков, не квадратные :) И это была именно бегущая строка :)
Dmitriy
Кои7 был 5х7 знак
Ivdor
последовательно, но по 2 байта = номер разряда .. сегменты .. номер разряда .. сегменты Мне влом было по биту откусывать от каждого столбика ))
Ogurezzz
Точно. Для МК ведь это все выглядит как один длинный регистр? Они ж последовательно друг в друга передают.
Paschendale
Видимо, я совсем в начале пути. Одна из функций это отправка байта в целевую матрицу, а другая всех восьми байт, которые содержат мой символ. Последняя функция выводит отдельный символ слова на свою матрицу. Вот с ней у меня и загвоздка. Используемая внутри нее функция letter_to_ascii(msg); содержит все символы в себе и съедает всю память.
Ivdor
я и говорю - нет смысла разделять на матрицы. У тебя же заполняются по столбикам, или по строкам ?
Paschendale
по столбикам
Dmitriy
Сколько знакомест?
Paschendale
имеете ввиду сколько матриц 8*8? 5 штук Пока это выглядит вот так. Могу символ в свою матрицу вывести.