Demiurg писал(а):Вот обсуждение, в топике ссылки. Ссылка 1, Ссылка 2.
посмотрел... оказалось, я даже участвовал в той теме... с 2008 года позабыл.
признаю свою неправоту, на тот момент проблема была, сомневаться в словах ReAl-а у меня нет никаких оснований. но в моей практике никогда ничего подобного не было, хотя программный ШИМ на attiny13 я делал именно выводом в порт сразу. правда, при этом между выводами было больше нескольких десятков тактов...
тем не менее, к засветке индикаторов упомянутый эффект явно никакого отношения не имел.
если поборю лень, проверю дома, как нынче с этой бедой - есть несколько 8-ногих тинек, в т.ч. явно китайские клоны. любопытство все-таки раздирает.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
ARV, с засветкой вопрос решён. Dimon456. Я пример дал, что докопался? Может где то и есть чёрновой вариант. Проект выложил. Проверил на железе. Доводи до ума сам.
[uquote="Demiurg",url="/forum/viewtopic.php?p=3883478#p3883478"]В текущей версии проекта прогон вывода сегментов и разрядов занимает 566 тактов. 35.38 мкс. Когда я чуток изменил логику, получилось - 507 тактов. 31.69 мкс. При тактовой частоте 16 МГц.[/uquote]
немного поборол лень и накропал такой вариант:
Спойлер
все в одном файле, без наворотов, с магическими числами, ибо лень.
константа FLASH позволяет переместить таблицу "распиновки" сегментов и общих катодов/анодов в память программ, если определить ей значение __flash
так вот, от певого push в обработчике прерываний до reti при тактовой 16 МГц проходит 25 мкС (если таблицы в памяти программ) или 24 мкС (если таблицы в ОЗУ). тип индикатора можно переключать на лету:
имхо, вариант с тибличным распределением сегментов по пинам портов - вполне рабочий, накладные расходы небольшие.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Я как раз занимаюсь именно оптимизацией. И именно как у вас. Сразу готовые маски в таблицах. Вообще я этим проектом занялся из поиска баланса. Эффективности.
В данный момент делаю три варианта проекта. В лоб. If-а ми. Массивы функций, и по вашему способу. Это я делаю чисто для себя. Никакого писькомеряния. Эксперимент с индексным обращением к портам и поиск баланса.
За макрос pn(p,b) благодарствую. Вы показали хороший способ сэкономить время на писанине.
все в одном файле, без наворотов, с магическими числами
это очень хорошо, один файл и попроще!
без комментариев сложно для меня разобраться, но я пытаюсь.
Спойлер#include <avr/io.h>
#include <avr/interrupt.h>
TCCR0 = 4;
TIMSK = _BV(TOIE0);
sei();
while(1);
}
хорошо с "движком" боле менее понял. а дальше ? как эффекты делать? тема называется эффекты анимации, прошу объясните дальше.
к примеру чтобы "HELLO" уползло влево и выползло "FIK" или цифры неважно...
Serzh2000, в же делали скрипты эффектов DIGISCRIPT, с его примитивным языком, неужели на Си, с его богатыми возможностями, не можете ничего придумать?!
знакогенератор с буквами мне писать лень, но вот вам тупейший "эффект" катающегося колобка:Спойлер
сначала слева направо поочередно рисуем колобка в верхней части дисплея, а потом справа налево в нижней.
по уму, конечно, надо все "строки" заранее подготовить, поместить в массивы, а потом по прерыванию копировать в "экранную область". но я показал тупой способ с тупыми задержками в главном цикле, потому что ленивый я
Добавлено after 13 minutes 15 seconds:
если вы вывели на дисплей, предположим, 1234, то при помощи вот этого кода вы сможете "прокручивать" это число:
в же делали скрипты эффектов DIGISCRIPT, с его примитивным языком, неужели на Си, с его богатыми возможностями, не можете ничего придумать?!
спасибо большое буду изучать и пробовать.
в DIGISCRIPT там все просто, Вы за нас придумали все, я только придумывал эффект, брал команду, красил шарик и направлял в нужную сторону.
я писать пробовал в CodeVisionAVR и в ардуине, а Вы все в других программах пишите, вот нашел Atmel Studio
которая понимает Ваши программы, но я ее не понимаю... пока не понимаю.
ARV. Хвалю. Очень интересное решение получилось. Особенно понравился перескок переключения общих выводов. Что значительно решило проблему засветку. У вас с указателями, я попробовал, но IAR закапризничал, выдал что то непонятное. Поэтому сделал пока с прямым обращением к данным. Уже поздно, завтра займусь.
Что у меня пока получилось. 370 тактов. 23.13 мкс. 16 МГц. На этом варианте я останавливаюсь. Меня вполне устраивает.
Спойлер
тема анимации на 7 сегментниках не раскрыта! Спойлер
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
[uquote="Demiurg",url="/forum/viewtopic.php?p=3884801#p3884801"]volatile - потому что обращение к портам. Потому, прибиваем гвоздями, чтобы компилятор даже помыслить не мог что-то наоптимизировать.[/uquote]
А какие причины "помыслить"?
Dimon456. Спасибо за пример "бегущего червячка" пр кругу
я разобрался как писать эффекты, спасибо Всем.
теперь другая дилемма, куда бы семисегментный LED-индикатор с эффектами анимации пристроить, чего бы этакого сделать?
кроме часов на ум ни чего не приходит, но часы не хочется.
новогоднюю звездочку на макушку елки я сделал, гирлянда (DIGISCRIPT) есть.
может вместо семисегментника взять отдельные светики и сделать снежинку к новому году?
восемь лучей (разрядов) в каждом до 14 светиков и клепай эффекты
надо подумать