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

USB коннектор на AVR

Добавлено: Вт мар 20, 2012 15:58:52
slavik.ksu
Здравствуйте уважаемые форумчане!
Похожей темы не нашел, поэтому решил создать новую :)
Работодатель дал задание, выкладываю первую часть задания, чтоб не путаться:
1. Процессор имеет каналы D+ и D- (вход) каналы В+ и B- (выход)
2. На каналы D+ и D- подаётся сигнал с частотой 1,5 Мгц. Этот сигнал должен проходить на каналы В+ и B- с задержкой не более 1 мкс. На выходе, между каналами, не должно быть задержки. (появление сигнала строго одновременно)
Напряжение питания 3,3 вольта.
Рекомендуемый кварц: см. в тех. задании. :)


Думаю каналы D+ и D- надо поставить на "внешнее прерывания" на ножки INT0 и INT1 и по прерыванию копировать значения например в порт В. правильно ли я мыслю?
На счет кварца:
Во первых надо посчитать сколько тактов займет обработчик прерывания:для входа в обработчик нужно не менее 4 тактов, плюс копирование с ножки INT0 в РегисторОН думаю 1 такт, плюс из РОН в порт В 1такт, ну и плюс 4 такта на выход из прерывания. и того 10 тактов. (думаю здесь точно нельзя подсчитать, но почемуто уверен на обработчик прерывания уйдет не более 20 тактов)
10 тактов за 1мкс = 1такт должен выполняться за 0,1мкс => кварц должен быть не менее 10МГц.
этот метод я придумал сам на логическом соображении, может есть какой другой способ подсчитать частоту кварца?

Re: USB коннектор на AVR

Добавлено: Вт мар 20, 2012 17:30:31
Engineer_Keen
В принципе расчет более менее верный, только вот непойму, нафига тут контроллер? Для решения этой задачи достаточно соеденить D+ с B+ и D- с B- :))) А если нужно делать что-то еще, то и расчет уже другой.

Re: USB коннектор на AVR

Добавлено: Вт мар 20, 2012 19:25:32
Мурик
slavik.ksu писал(а):умаю каналы D+ и D- надо поставить на "внешнее прерывания" на ножки INT0 и INT1
Вы забываете что USB это двунаправленная шина.
Поэтому линии В+ и B- тоже должны генерировать прерывание для трансляции данных из В в D.

Re: USB коннектор на AVR

Добавлено: Ср мар 21, 2012 08:04:13
Kavka
Да, и ещё надо определять смену направления передачи D->B или B->D.

Что-то я смысла практического не вижу в таком устройстве. Лаба?

Re: USB коннектор на AVR

Добавлено: Ср мар 21, 2012 15:56:06
slavik.ksu
Выкладываю полностью задание:
Тема: "эмулятор кратковременного пропадания сигнала"
1. Процессор имеет каналы D+ и D- (вход) каналы В+ и B- (выход) и канал С (вход)
2. На каналы D+ и D- подаётся сигнал с частотой 1,5 Мгц. Этот сигнал
должен проходить на каналы В+ и B- с задержкой не более 1 мкс. На выходе,
между каналами, не должно быть задержки. (появление сигнала строго одновременно)

3. К каналу С подключена кнопка. При однократном нажатии на неё (устранить дребезг)
сигнал с каналов D+ и D- не должен передаваться на выходные
каналы В+ и B- на длительность 1 / 1,5Мгц сек. (+- 1/12000000).
При этом на выходных каналах должны присутствовать прежние уровни.
Допускается подключение светодиода для индикации нажатии кнопки.

Напряжение питания 3,3 вольта.
Рекомендуемый кварц: см. в тех. задании.

Жирным выделил оставшуюся часть задания.
Вроде написал я програмку для Atmega8515, частота кваца 10МГц.
Правда на ассемблере( а желательно на Си )
Каналы D соответствуют проту D, а выходы В - проту В. Вход С с кнопкой, это на ножке PortD 4!
Вопросы:
1) "устранить дребезг"
Я слышал что можно поставить задержку после нажатия на 20мс? и все, будет работать?

Но я сам пошел другим путем, сам такое придумал, еще нигде не встечал, поэтому не знаю правильно ли так делать?:
sbic PinD,4 ; проверяем нажатие кнопки
rjmp Start
sbis PinD,4 ; проверяем отжали ли кнопку
rjmp PC-1
Можно ли так "устранить дребезг"?
2) теперь про обработчик внешнего прерывания
я запустил прерывание по"нарастающему фронту", то есть получаестся когда на вход D подастся сигнал лог.1 только в этом случае будет записано зачение из порта D в В. Програмно я написал это так:
Vnesh0:
in signal, PortD ;
out PortB,signal ;
reti
Получается во всех остальных моментах на выходе должны быть записаны 0 в проту В ? как бы это сделать?
Прилагаю в файле програмку мою програмку