У меня есть два варианта решения задачи объединения группы пинов в один логический порт: 1 - на простом Си с использованием препроцессора. Используется так:
Ну если 22 светодиода было бы мало, а скажем, нужно штук 100 подключить, тогда согласен, чтобы как расширители использовать несколько HC595, а так зачем лишние микросхемы, да и разводка платы получается сложнее.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
А я обычно дефайню свои имена к пинам, согласно логике их использования, частенко прикручиваю макрос, который и разбрасывает скормелнный регистр по переназванным пинам. Для удобства, макрос можно назвать почти_так_же, как оигинальные функции... Вот только пишу я на асме. И да, при сборке девайся - обычно стараюсь изначлаьно оценить, что проще в железе, а что програмно - чтоб не тратить время и место в контроллере на лишние участки кода, особенно актуально для контроллеров с малым объемом памяти программ.
_________________ мысли мысли штош вы вйотесь над мойейу головойу вы там мосга нинайдете нед там мосга! йа тупойе (БОР)
По поводу сдвиговых регистров: нет места =\ я ограничительные резисторы ели втулил для диодов, вообщем места мало. И как я понял мне надо общаться как с ПОРТОМ а не с каждым пином по отдельности
Спасибо всем отписавшимся ... буду усваивать полученную от Вас информацию)
PS кстати уже много раз перечитываю пост DiHalt'a ... очень интересное решение ... может ктото обьяснить принцип или запилить на Си ?
И еще вопрос я ж смогу к АСМовскому файлу обращатся в Си омпиляторе ? А то тут вроде бы удобно все так ... если это всеже возможно - смогбы ктото запилить (переделать немного) из того что выложил Ди, под мои нужды ?
Или там только до 8 пинов получится ? Короче жду помощи от Вас а то сроки поджимают ... не хочу быдлокодить мигалку на ~500 cтрок дергая пинами через делей вручную, да и данный метод считаю очень полезным
Спасибо
Последний раз редактировалось Rondo Чт июл 12, 2012 19:57:23, всего редактировалось 1 раз.
#define PIN_COUNT 11 // Количество виртуальных пинов
// Массив соответствия виртуальных пинов unsigned char ptable[PIN_COUNT,3]{ // Порт B Порт C Порт D {0b00010000, 0b00000000, 0b00000000}, // виртуальный пин 0: порт B, бит 4 {0b00000000, 0b00100000, 0b00000000}, {0b00000000, 0b10000000, 0b00000000}, {0b00001000, 0b00000000, 0b00100000}, {0b00000000, 0b00000100, 0b00000000}, {0b00000100, 0b00000000, 0b00000000}, {0b00000000, 0b00000000, 0b00000000}, {0b00000000, 0b00000001, 0b00000000}, // виртуальный пин 7: порт C, бит 0 {0b00000000, 0b00000000, 0b00001000}, {0b00000000, 0b00000000, 0b00000010}, {0b10000000, 0b00000000, 0b00000000} // виртуальный пин 10: порт B, бит 7 }
// Сброс виртуального пина // Если виртуальный порт должен вмещать больше 16 пинов, // то надо (unsigned int val) исправить на (unsigned long int val) void outVirtual(unsigned int val) { unsigned char tempB, tempC, tempD, i;
tempB=PORTB; tempC=PORTC; tempD=PORTD;
for (i=0; i < PIN_COUNT; i++) { if (val & 0x0001) { tempB|=ptable[i, 0]; tempC|=ptable[i, 1]; tempD|=ptable[i, 2]; } else { tempB&=(~ptable[i, 0]); tempC&=(~ptable[i, 1]); tempD&=(~ptable[i, 2]); }
val=val>>1; }
PORTB=tempB; PORTC=tempC; PORTD=tempD; }
_________________ А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
U235 можно по подробней о массиве соответствия виртуальных пинов ? я чтото не понял зачем он =\ И я чтото не понял как мне из вашего примера "собрать в кучу" разные пины в один порт? если не сложно - обьясните по пальцам
phanis спасибо за Ваш пример, ща буду его ковырять)
U235 можно по подробней о массиве соответствия виртуальных пинов ? я что то не понял зачем он =\ И я что то не понял, как мне из вашего примера "собрать в кучу" разные пины в один порт? если не сложно - обьясните по пальцам
Массив и нужен для сборки в кучу разных пинов. Обычно мы управляем выводами портов просто записывая в него какое то число. Примерно так
Код:
PORTB=value;
В случае с виртуальным портом в моём примере для этой цели служит функция outVirtual. Если передать ей значение 0x0021, то она установит в единицу виртуальные пины 0 и 5. Остальные - сбросит в ноль. Каждому виртуальному пину сопоставлена строка массива. Строка
Код:
{0b00010000, 0b00000000, 0b00000000}
означает, что некий виртуальный пин на самом деле - вывод 4 порта B. То есть первый байт - порт B, второй - порт C, третий - D. Массив должен содержать столько подобных строк, сколько нужно виртуальных пинов.
_________________ А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Только это, сей массив, конечно, надо объявить как лежащий во флеше, чтобы он не отжирал оперативку. Для этого перед ним пишем модификатор flash. Ну и можно еще const написать для верности.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения