Аппаратное раздвоение шины UART


• О проекте
• Обратная связь
• Полезные ссылки
• Полезные программы
• Друзья сайта


Последние комментарии

Алексей: Чтение и запись Flash памяти AT45DB041
А еще вопрос тако...

Алексей: Чтение и запись Flash памяти AT45DB041
WP это блокировка...




           

Библиотека для AVR





AXLIB Генератор





Помощь сайту


   
				

Аппаратное раздвоение шины UART

	
	
	

Дата: 4 Ноября 2016. Автор: Алексей

	
	
Всем привет!
Вот такие вопросы часто появляются в сети.

"Нужно 2 UART на мк , как быть?"
Как размножить UART в AVR?

И тому подобные.

Отсюда я задался этим вопросом и решил как-нибудь его решить. Первое что пришло на ум, так это программный UART. Из плюсов только возможность использовать любые ноги МК, а вот минусов куча. Первый, это отъедание памяти на реализацию шины. Второй, это необходимость использования таймера для точных тайменгов. Конечно если у МК нет вообще данной шины, то это единственный вариант, но сейчас мы рассмотрим пример с раздвоением именно аппаратного UART. Для этих целей нам понадобится микросхема-переключатель. Порывшись в номенклатуре я нашел микруху которая подходит в самый раз по цене и качеству. Называется сей девайс CD4066BM. Это микросхема представляет собой что-то типа счетверенного слаботочного твердотельного реле с управлением на каждую линию индивидуально. То есть проще говоря, это просто четыре линии с возможностью передачи данных по ним туда-сюда и каждую можно включать, либо отключать. Давайте рассмотрим кишечник одного из каналов.


Как видно из схемы, левая часть это линия контроля. Если мы на этот вход подаем единицу, то канал открывается и дает возможность передавать данные туда-сюда. Если же мы подаем ноль, то канал закрывается. Правда тут есть один нюанс. В мануале написано, что если канал закрыт, то линии IN/OUT побоку что на нее подают, а вот в тоже время на линии этого же канала будет висеть ноль. По идее для UART это бит старта, но на практике я косяков при передаче не заметил.
Правее на схеме изображен сам канал. Выводы in и out это как раз линии входа и выхода. Правда на схеме можно подумать что канал односторонний, а нет, он работает в обе стороны.
Теперь давайте разберемся с самой микросхемой.


Глядя на картинку можно увидеть четыре канала A, B, C, D которые управляются одноименными контрольными линиями. Для теста давайте соберем схемку. Каналы A и D мы отдадим на линию один, а каналы B и C на линию два. Для управления переключения используем на втором канале транзистор для инверсии сигнала. Теперь для переключения нам нужно будет подать единицу чтобы работала первая линия и ноль для работы второй линии.


А теперь пишем код.


#include <avr/io.h>

#include "main_init.h"
#include "axlib/ports.h"
#include "axlib/usart.h"

// Здесь должны находиться ваши подключаемые файлы


// Здесь должны находиться ваши глобальные переменные


int main(void)
{
// Здесь должны находиться ваши локальные переменные


// Настройка портов
PORTB_OUT(0);
PORTB_ON(0);

// Инициализация UART
usart_init(38400);

	while(1)
	{
		if(PORTB_RD(1))
		{
			_delay_ms(200);
			while(PORTB_RD(1));
			
			PORTB_XOR(0);
		}
		
		if(PORTB_RD(2))
		{
			_delay_ms(200);
			
			while(PORTB_RD(2));
			
			usart_str_out("UART_Switch\r\n", 13);
		}
		// Здесь должен находиться ваш код 
	}
}

Что здесь за белиберда. Сначала настраиваем порты и сам UART. Далее в бесконечном цикле слушаем кнопки на пинах 1 и 2 порта В на нажатие. Если нажали кнопку на пине 1, то инвертируем управляющий вывод микросхемы. Если нажали кнопку на пине 2, то кидаем в порт пакет в виде строки. Собираем проект, прошиваем МК и радуемся. Для более понятного объяснения изложенного можно посмотреть кино ниже этажом. Смысла выкладывать проект для студии я не вижу. Если появится желание повторить, то можно просто скопировать код прям отсюда.
Ну вроде бы как и все) Удачи в покорении МК.)

Микрухи покупал тут.




Роман    09.12.16 21:38

Алексей, спасибо за статью. Не совсем понятно, как вход1 и вход2 подключать к UART МК (просто параллельно?), если не затруднит нарисуйте.

Алексей    09.12.16 21:42

Входы параллелятся. Они же идут на один UART.




Чтобы вставить ссылку используйте форму вида[url]http://www.адрес.ru[/url][text]текст ссылки[/text]
Чтобы вставить код используйте форму вида[code]код[/code]

Имя:   





  








Вверх


Рейтинг@Mail.ru Яндекс.Метрика