Yellow Tiger писал(а):Что-то я не пойму... Эти символы - константы, то есть, во время работы не меняются, так нафига же их генерировать каким-то алгоритмом?
линия может быть наклонной под разными углами?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Sounds писал(а):To AVR
Спасибо что не отказали в помощи!
Если честно, то я не совсем понял как это сделать(((
возможно, мы не поняли друг друга оба.
я понял так: вы берете первый символ (который состоит из 8 байт) из вашего массива, выводите его в индикатор, потом выводите второй, третий и т.д. верно? если посмотреть, то все ваши 5 символов отличаются друг от друга всего-навсего одним байтом, причем байт этот содержит в первом символе один бит, во втором два рядом, в третьем три рядом и т.д.
я думаю, что иметь массив из 5 символов, которые практически одинаковы, нет смысла - можно просто менять один байт в символе и получать новый символ. но менять символы во FLASH не выйдет (прямо так уж просто), следовательно, переносим массив символа в ОЗУ и затем модифицируем его.
любая последовательность однотипных действий легко реализуется циклом. в цикле мы выводим наш теперь уже единственный символ, потом изменяем в нем нужный байт (добавляя по одному биту в ряд).
в коде я заменил операторы языка Си на слова человеческого языка, помещенные между звездочек - эту отсебятину вы должны заменить на правильный оператор Си - для сдвига и т.п.
что не понятно теперь? мне вот непонятно, когда будет скрипт форума откорректирован, чтобы можно было наконец код вставлять без извратов?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Администраторы! Исправьте скрипт! С добавкой кода действительно проблема!
во-первых, в цикле должен быть вывод символа, а не просто перелопачивание его без смысла.
во-вторых, посмотри внимательно, как именно я предлагал сделать изменение символа: индексировать элементы массива (ни с того ни с сего ставшего вдруг двумерным!) не нужно, и надо делать ИЛИ с присваиванием, а не просто присваивание...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
anco писал(а):Что то или я дико торможу или контроллер.
Написал 3 строчки кода, зашил его, начал эксперементировать и стал чувствовать себя еще хуже...
В прикрепленном файле, если его залить в контроллер, вачдог настроен на ресет через 1 сек. По идее портВ всегда должн быть равен 0xFF. Программа даже не должна доходить до главного цикла, но диод на портуВ моргает с постоянной периодичностью в 1 сек! Ресета не происходит...
Помогите плз, а то уже крыша едет.
WDTON=1
PS Может проектом подобным в меня кините (заведомо рабочим), что бы или себя потестировать или контроллер.
Вот что написано хелпе на функцию delay_ms:
"This function automatically resets the watchdog timer every 1ms by generating the wdr instruction."
"Эта функция автоматически производит сброс wdt каждую 1 мс инструкцией "wdr" "
Программа у вас никогда не сбросится по wdt. Может это поможет.
Однако долго до меня это доходило=)))
Кстати в этом варианте кода, я обратил внимание на то что при переходе к другой ячейки наблюдается какаято задержка(пауза)!
Я пока не разобрался из за чего она возникла, может есть какие мысли?
Опять у меня появилась очередная задумка! Вот теперь думаю как зделать управление этой строкой от кнопок, то есть нажал одну кнопку прибавилась на 2, другую убавилось на два.
Как граматней это будет реализовать?
Мне надо проверять состояния на ножках PIND.2 и PIND.3 одновременно и выполнять действия, работает только первый условный оператор, остальные нет. Что не так?
Lockdog писал(а):работает только первый условный оператор, остальные нет. Что не так?
Да все они работают, просто условия в if'ах со второго по третий тождественно равны false (на это ARV и намекал), вот ничего и не происходит.
Конструкции типа if (var != false){...} или if (var == true){...} я бы рекомендовал заменять на if ( var ){...}, это логичнее. Конструкции типа if ((PIND.2 & !0x00) бессмысленны, так как выражение !0x00 не имеет никакого конкретного численного значения - известно только, что это не ноль, а что именно - неизвестно. Там и 1 может оказаться, и 32767, и три с половиной (шучу) - и что потом делать с побитовым или с неизвестной величиной?
И последнее - всю эту длинноту нужно бы свести к двум переменным, отражающим состояние входов, и двум операторам вывода. Смешивать две разные переменные в кучу, с получением четырех сочетаний, и потом городить четыре ИФа и восемь операторов вывода - как-то некузяво; если спустя месяц-два придется вносить дополнения, эту логику с карандашиком проверять придется.