Страница 1 из 1

Переопределение выходов и создание виртуального порта

Добавлено: Пт сен 19, 2014 17:14:24
Ziper
Приветсвую любителей кошачьего семейства и электроники. :)
Обращаюсь я к вам за помощью так как попал в затруднительное положение первый раз столкнулся с такой задачей и не знаю как эффективно её реализовать.
Суть проблемы в чём, рассказываю. У меня есть автомобиль я сам за рулём ,так вот собрал я се как то такой забавный девайсес на Attiny2313 к контролеру подключались две RGB ленты в два канала одна лента подсвечивает панель приборов вторая лента отвечает за подсветку пола и находиться она под передними сиденьями управление цветом и яркостью каждого канала осуществляется с телефона через блютуз модуль (HC-05)подключенный к USART контролера.
Проработал у меня этот замечательный и очень нужный девайсесик (по другому его не как и не назовёшь)больше года на удивление всем кому я его демонстрировал все в восторге особенно девушкам очень нравится он а дружбанны говорят типа так > уууаааууу зделай мне так же.))) Во общем решил я ему зделать UPGRATE добавить дополнительно функций разных полезных . но обнаружел что памяти Attiny2313 не хватает для воплощения моих идей я решил портировать его на Atmega8 или другой контроллер с большей паметью. Портировать прошивку то я портировал это не сложно но вот с чем столкнулся!!!! В моём девайсеса первом на Attiny2313 там на подключение двух лент подсветки и каналов ШИМ выделен полностью PORTB то есть младшая тетрада PORTB управляет RGB лентой панели а старшая тетрада PORTB управляет RGB лентой пола. Код так реализован есть две функции с одним параметром цветом свечения ленты. Одна функция управляет лентой пола другая лентой панели.

void WritePortPanel(unsigned char Hi);//цвет панели
void WritePortPol(unsigned char Low);// цвет пола

А в контроллере Atmega8 нет единого порта чтоб так же использовать эти функции. Там или мешают ноги кварцевого резонатора или нога RESET или USART (см. фото )
:idea: Так вот я хочу переназначить выходы с других портов и обьеденить их в один виртуальный порт и через него разговаривать с выходами разных портов как будто это один физический порт. Тут то и возникает проблема как это реализовать??? я так думаю через указатели и адреса тортов и пинов но как конкретно??
Можно же конфигурировать шины USI или I2S или в библиотеке под жк экранов тоже можно настроить разные пины под конкретную нужду как там это реализовано кто знает помогите пожалуйста. :roll:
Надо что то в роди этого:
Создаём переменную виртуального порта PORTtest и настраиваем как то так
PORTtest.0 -> PORTB.1
PORTtest.1 -> PORTB.2
PORTtest.2 -> PORTB.3
PORTtest.3 -> PORTB.0
PORTtest.4 -> PORTB.5
PORTtest.5 -> PORTD.1
PORTtest.6 -> PORTD.2
PORTtest.7 -> PORTD.3
и уже в самой программе разговаривать с PORTtest (составленный который из пинов разных портов) как с обычным аппаратным портом.

PS; в CodeVision 2.05

Изображение

Re: Переопределение выходов и создание виртуального порта

Добавлено: Пт сен 19, 2014 17:53:20
uk8amk
Если совсем просто то примерно так:

Код: Выделить всё

void WritePortPanel(unsigned char Hi)//цвет панели
{
if(Hi & (1<<0)) // младший разряд тетрады
	PORTB.1 = 1;
else
	PORTB.1 = 0;

if(Hi & (1<<1)) 
	PORTB.2 = 1;
else
	PORTB.2 = 0;

if(Hi & (1<<2)) 
	PORTB.3 = 1;
else
	PORTB.3 = 0;

if(Hi & (1<<3)) // старший разряд
	PORTB.0 = 1;
else
	PORTB.0 = 0;
}
Отдельные разряды в AVR не адресуются. Их изменение доступно только через битовые операции и инструкции sbi, cbi.

Re: Переопределение выходов и создание виртуального порта

Добавлено: Пт сен 19, 2014 20:32:23
Ziper
ага спасибо uk8amk :)
у меня была идея так на скидочку чтоб эту тему реализовать через switch какой нибуть там всего 6 цветов каждый охотник желает знать сидит фазан
плюс белый и всё off когда и в switchем проверять и по отдельность каждый пин ставить и снимать где надо. А потом мысль пришла что можно число параметр по битно разобрать и пинам присваивать соответствующий бит тетрады :) посмотрел а ты как раз мне эту тему реализовал большое спасибо за это тебе дружище. :) я сам то не особо пьющий а еслиб был таковым тогдаб такого котика поставил бы обязательно -> :beer: но злоупотреблять алкоголем это не приемлемо для эффективный перспективных людей к тому же это плохо действует на потенцию :o поэтому ставлю два таких котика :) :) и одного такого 8) думаю так оно будет лучше даже!!!

Re: Переопределение выходов и создание виртуального порта

Добавлено: Сб сен 20, 2014 11:52:21
vek
Не проще порты переписать в асме?


помоему на сайте уважаемого ARV было про динамическую индикацию, и как это дело можно приспособить под безумно-любые ноги, думаю вам пригодиться.
Только очень вдумчиво читайте,а то там ошибки есть :) Но в целом очень доступно :)

Re: Переопределение выходов и создание виртуального порта

Добавлено: Сб сен 20, 2014 15:07:01
Ziper
Не проще порты переписать в асме?


помоему на сайте уважаемого ARV было про динамическую индикацию, и как это дело можно приспособить под безумно-любые ноги, думаю вам пригодиться.
а что за сайт такой можно ссылочку пожалуйста.
вот тут есть статьи http://radiokot.ru/search/?au=ARV от ARV в какой про это было написанно ? я чёт посмотрел не нашол нигде про это :(

Re: Переопределение выходов и создание виртуального порта

Добавлено: Сб сен 20, 2014 15:17:02
BOB51
В программе использовать буфер-регистр для результата всяческих обработок, а уж куда его содержимое перетыкивать - на усмотрение пользователя.
На асме есть автомат световых эффектов под АТтини2313:
http://radiokot.ru/cherdak/03/
там для рисунка псевдоязык описания с маанюсеньким ядром. Но... рисунок фиксированный - для смены надо часть кода, ответственную за рисунок сменить.
:beer:

Re: Переопределение выходов и создание виртуального порта

Добавлено: Вт сен 23, 2014 17:52:51
vek
http://www.radiokot.ru/forum/memberlist ... ile&u=1187
Это зиперу. В профиле найдешь его сайь