Пните в правильную сторону. Ковыряюсь я сейчас со светодиодными матрицами, управляемыми max7219. Дошел до вывода отдельных слов. Допустим, беру строку, пропускаю ее через функцию, позволяющую получить ascii код каждого символа в строке, а затем полученным кодам присвоить начертание своего символа. Это несколько затратно по части памяти, в атмеге 8 ее почти не осталось после такого подхода. Напрашивается либо переход на более "жирный" МК, либо приляпывание spi флеш и/или пересмотр программного подхода, если это вообще возможно. В общем, часы нормально получается сделать, а вот информер с бегущей строкой нет. За что бы ни брался, всегда получаются часы

Комментарии: 25

  1. Ogurezzz

    Вот тут более менее видно все. А зачем ты получаешь код каждого символа в строке? Строка = массив ASCII кодов + завершающий NULL. Закидываешь свою строку в while и работаешь с ней как с массивом, пока не закончится строка. Массив передаешь как указатель.

    • Dmitriy

      Ага, да я был неправ... Там гуд

  2. Ivdor

    а какая длина строки?

    • Paschendale

      ну я пока научился работать с 5 матрицами 8*8(столько спаял), поэтому максимум вывожу одно слово из пяти букв (по букве на матрицу)

      • Ogurezzz

        Строка у тебя меняется или нет? Если в строке меняется небольшой кусок, то разбей ее на 2 части. Константу в Progmem засунь, чтобы ОЗУ не занимать. И выводи константу отдельно, меняющуюся часть отдельно. А чего не хватает ОЗУ или flash?

  3. Dmitriy

    Для информера на сях придется попотеть. Переходи на асм ))))

    • Paschendale

      да какой тут асм, ежели щи эти не могу победить))

  4. 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 штук Пока это выглядит вот так. Могу символ в свою матрицу вывести.

Не нашли ответ?

Вам также может быть интересно