Например TDA7294

Форум РадиоКот • Просмотр темы - Объединение разных PINов в один PORT
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 25, 2024 02:23:14

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 34 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Ср июл 11, 2012 17:51:47 
Родился

Зарегистрирован: Пн апр 25, 2011 15:39:38
Сообщений: 4
Рейтинг сообщения: 0
У меня есть два варианта решения задачи объединения группы пинов в один логический порт:
1 - на простом Си с использованием препроцессора. Используется так:
Код:
#define Group1 (Pa1), (Pa2), (Pa3), (Pb2), (Pb3), (Pb4)
GROUP_WRITE(0x55, Group1);

Найти можно тут: http://we.easyelectronics.ru/Soft/rabota-s-gruppami-liniy-vvoda-vyvoda-na-si-bez-plyusov.html
2 - вариант на С++ с использованием шаблонов:
Код:
typedef PinList<Pa1, Pa2, Pa3, Pb2, Pb3, Pb4> Group1;
Group1::Write(0x55);

Описано тут: http://easyelectronics.ru/rabota-s-portami-vvoda-vyvoda-mikrokontrollerov-na-si.html
Актуальная версия с примерами тут: https://github.com/KonstantinChizhov/Mcucpp


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Ср июл 11, 2012 18:23:12 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
сначала развожу плату, как мне удобнее, а потом под железо пишу код, а не наоборот.


А я обычно пытаюсь прикинуть сразу, что проще решить в железе, а что - в софте, и ищу компромисс.

Что касается здешнего случая - я бы вообще взял что-то восьминогое, а светодиоды подключил бы через HC595.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Ср июл 11, 2012 18:42:53 
Вымогатель припоя
Аватар пользователя

Карма: 5
Рейтинг сообщений: 74
Зарегистрирован: Пн июн 18, 2012 12:01:04
Сообщений: 650
Откуда: Челябинская область, Копейск
Рейтинг сообщения: 0
Ну если 22 светодиода было бы мало, а скажем, нужно штук 100 подключить, тогда согласен, чтобы как расширители использовать несколько HC595, а так зачем лишние микросхемы, да и разводка платы получается сложнее.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Ср июл 11, 2012 21:54:50 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
зачем лишние микросхемы


Можно взять более простой и дешевый МК. А насчет разводки - не думаю, что такой подход радикально ее усложнит.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Ср июл 11, 2012 23:07:06 
Вымогатель припоя
Аватар пользователя

Карма: 5
Рейтинг сообщений: 74
Зарегистрирован: Пн июн 18, 2012 12:01:04
Сообщений: 650
Откуда: Челябинская область, Копейск
Рейтинг сообщения: 0
Ну, скажем вариантов много, согласен. Мне вот интересно, у автора темы что нибудь сдвинулось, на каком этапе уже?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Чт июл 12, 2012 16:33:25 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Пн дек 13, 2010 13:01:59
Сообщений: 458
Откуда: Украина
Рейтинг сообщения: 0
А я обычно дефайню свои имена к пинам, согласно логике их использования, частенко прикручиваю макрос, который и разбрасывает скормелнный регистр по переназванным пинам.
Для удобства, макрос можно назвать почти_так_же, как оигинальные функции...
Вот только пишу я на асме.
И да, при сборке девайся - обычно стараюсь изначлаьно оценить, что проще в железе, а что програмно - чтоб не тратить время и место в контроллере на лишние участки кода, особенно актуально для контроллеров с малым объемом памяти программ.

_________________
мысли мысли штош вы вйотесь
над мойейу головойу
вы там мосга нинайдете
нед там мосга! йа тупойе (БОР)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Чт июл 12, 2012 18:52:09 
Открыл глаза

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Чт май 05, 2011 19:53:40
Сообщений: 42
Откуда: Харьков
Рейтинг сообщения: 0
По поводу сдвиговых регистров: нет места =\ я ограничительные резисторы ели втулил для диодов, вообщем места мало.
И как я понял мне надо общаться как с ПОРТОМ а не с каждым пином по отдельности

Спасибо всем отписавшимся ... буду усваивать полученную от Вас информацию)



PS кстати уже много раз перечитываю пост DiHalt'a ... очень интересное решение ... может ктото обьяснить принцип или запилить на Си ?

И еще вопрос :) я ж смогу к АСМовскому файлу обращатся в Си омпиляторе ? А то тут вроде бы удобно все так ... если это всеже возможно - смогбы ктото запилить (переделать немного) из того что выложил Ди, под мои нужды ?

А именно
Цитата:
Слева: PD0, PD1, PD2, PD3, PD4PB6, PB7, PD5, PD6, PD7, PB0
Cправа: PC5, PC4, PC3, PC2, PC1, PC0, PB5, PB4, PB3, PB2, PB1


Или там только до 8 пинов получится ?
Короче жду помощи от Вас :) а то сроки поджимают ... не хочу быдлокодить мигалку на ~500 cтрок дергая пинами через делей вручную, да и данный метод считаю очень полезным

Спасибо


Последний раз редактировалось Rondo Чт июл 12, 2012 19:57:23, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Чт июл 12, 2012 19:48:47 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 11
Зарегистрирован: Вт фев 21, 2012 20:42:26
Сообщений: 135
Откуда: Санкт-Петербург, Россия, Земля
Рейтинг сообщения: 0
Вот можно так управлять виртуальным портом.
Код:
#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;
}

_________________
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Чт июл 12, 2012 19:58:07 
Открыл глаза

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Чт май 05, 2011 19:53:40
Сообщений: 42
Откуда: Харьков
Рейтинг сообщения: 0
U235 спасибо, щас буду раскуривать Ваш код ! :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Чт июл 12, 2012 21:53:37 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 11
Зарегистрирован: Вт фев 21, 2012 20:42:26
Сообщений: 135
Откуда: Санкт-Петербург, Россия, Земля
Рейтинг сообщения: 0
Rondo писал(а):
U235 спасибо, щас буду раскуривать Ваш код !

Пожалуйста. Хотя алгоритм мне кажется очевидным, наверняка могут возникнуть вопросы. Спрашивайте, если что.

_________________
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Пт июл 13, 2012 10:29:32 
Вымогатель припоя

Зарегистрирован: Сб фев 19, 2011 18:04:08
Сообщений: 513
Откуда: Татарстан, пос. Актюбинский
Рейтинг сообщения: 0
Когда пришлось подключить семисегментник к разным пинам я сделал так.

Код:
#define seg_A  PORTB_Bit3
#define seg_B  PORTB_Bit6
#define seg_C  PORTC_Bit1
#define seg_D  PORTD_Bit7
#define seg_E  PORTB_Bit1
#define seg_F  PORTD_Bit1
#define seg_G  PORTD_Bit5
#define seg_DP PORTB_Bit5

#define seg_1  PORTC_Bit0
#define seg_2  PORTB_Bit4
#define seg_3  PORTB_Bit2
#define seg_4  PORTB_Bit0
#define seg_5  PORTD_Bit6
#define seg_6  PORTB_Bit7
#define seg_7  PORTD_Bit2
#define seg_8  PORTD_Bit0

void LED_DRIVER(unsigned char num,unsigned char data)
{

seg_A  = 0;
seg_B  = 0;
seg_C  = 0;
seg_D  = 0;
seg_E  = 0;
seg_F  = 0;
seg_G  = 0;
seg_DP = 0;

num ^= 0xFF;

seg_1 = num;
num>>=1;
seg_2 = num;
num>>=1;
seg_3 = num;
num>>=1;
seg_4 = num;
num>>=1;
seg_5 = num;
num>>=1;
seg_6 = num;
num>>=1;
seg_7 = num;
num>>=1;
seg_8 = num;


seg_A = data;
data>>=1;
seg_B = data;
data>>=1;
seg_C = data;
data>>=1;
seg_D = data;
data>>=1;
seg_E = data;
data>>=1;
seg_F= data;
data>>=1;
seg_G = data;
data>>=1;
seg_DP = data;

}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Сб июл 14, 2012 17:35:21 
Открыл глаза

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Чт май 05, 2011 19:53:40
Сообщений: 42
Откуда: Харьков
Рейтинг сообщения: 0
U235 можно по подробней о массиве соответствия виртуальных пинов ? я чтото не понял зачем он =\
И я чтото не понял как мне из вашего примера "собрать в кучу" разные пины в один порт? если не сложно - обьясните по пальцам :)

phanis спасибо за Ваш пример, ща буду его ковырять)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Сб июл 14, 2012 21:28:35 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 11
Зарегистрирован: Вт фев 21, 2012 20:42:26
Сообщений: 135
Откуда: Санкт-Петербург, Россия, Земля
Рейтинг сообщения: 0
Rondo писал(а):
U235 можно по подробней о массиве соответствия виртуальных пинов ? я что то не понял зачем он =\
И я что то не понял, как мне из вашего примера "собрать в кучу" разные пины в один порт? если не сложно - обьясните по пальцам :)

Массив и нужен для сборки в кучу разных пинов. Обычно мы управляем выводами портов просто записывая в него какое то число. Примерно так
Код:
PORTB=value;

В случае с виртуальным портом в моём примере для этой цели служит функция outVirtual. Если передать ей значение 0x0021, то она установит в единицу виртуальные пины 0 и 5. Остальные - сбросит в ноль.
Каждому виртуальному пину сопоставлена строка массива. Строка
Код:
{0b00010000, 0b00000000, 0b00000000}

означает, что некий виртуальный пин на самом деле - вывод 4 порта B. То есть первый байт - порт B, второй - порт C, третий - D. Массив должен содержать столько подобных строк, сколько нужно виртуальных пинов.

_________________
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Объединение разных PINов в один PORT
СообщениеДобавлено: Вс июл 15, 2012 10:40:18 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Только это, сей массив, конечно, надо объявить как лежащий во флеше, чтобы он не отжирал оперативку. Для этого перед ним пишем модификатор flash. Ну и можно еще const написать для верности.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 34 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y