Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 24.03.2012, 13:54  
arav
Прохожий
 
Регистрация: 23.12.2009
Сообщений: 6
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
arav на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Обработку нажатия кнопки лучше делать не в прерывании, а в обычном программном цикле - как никак 4 такта уйдут на вход в прерывание, а это перекроет жесткие тайминги на передачу D+/D-
Реклама:
arav вне форума  
Непрочитано 24.03.2012, 14:22  
arav
Прохожий
 
Регистрация: 23.12.2009
Сообщений: 6
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
arav на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Пожалуй, учитывая действительно очень малый временной запас, и основной цикл передачи данных лучше сделать в цикле.
Причем, это должен быть "развернутый" цикл - каждые ~10 тактов передача D+/D-, остальное - проверка кнопки и обработка дребезга (набираем по "кусочкам" в 1-2 такта) и потом возврат к началу цикла.
Если кнопка нажалась, то программа улетает в другой цикл (задержки), оттуда в третий цикл (дожидаемся отжатия кнопки) и уже оттуда возврат к первому циклу.
Кстати, в программной реализации USB на AVR как раз и применялись такие развернутые циклы.
arav вне форума  
Сказали "Спасибо" arav
slavik.ksu (24.03.2012)
Непрочитано 24.03.2012, 14:49  
Someone
Гражданин KAZUS.RU
 
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от Hives Посмотреть сообщение
Someone убого, но зачет

PS полная программная эмуляция MAX6816 (антидребезг), на будущее
ничего сложного даже для начинающих
Код:
if (KeyPressed())
  {
  if (KeyTimer ‹ KEY_TIMEOUT) { if (++KeyTimer ›= KEY_TIMEOUT) KeyFlag = 1; }
  }
else
  {
  if (KeyTimer › 0) { if (--KeyTimer == 0) KeyFlag = 0; }
  }
Браво! На том, что это не совсем антидребезг (правильно при отсутствии нажатия во время периода дребезга счётчик сбрасывать в 0, а не уменьшать) заострять внимание не будем, даёт задержку на время дребезга и ладно. А теперь включаем мозг и начинаем думать . И начнём с того, что попытаемся получить ассемблерный листинг данного куска кода (про библиотечные функции типа KeyPressed я пока промолчу). Дабы прикинуть, сколько же тактов займёт такой антидребезг. Приведите пожалуйста ассемблерный листинг, сформированный компилятором. Ну или сами на асме напишите эквивалентный по функциям кусок кода, посчитаем такты и требуемый для пресловутой 1 мкс задержки кварц. Ждёмс, так сказать, не убогого решения . И кстати, вы же за логику ратовали, потому процитирую себя ещё раз:
Сообщение от Someone Посмотреть сообщение
ЗЫ: Кстати, долг платежом красен, в ответ жду набросок схемки на логике
Сообщение от Prime Посмотреть сообщение
На логике и счётчиках делается легко...
Ключевые слова - "так легко" - по поводу лёгкости предполагаемой Hives - "2 D-триггера + управление их клоком от кнопки детский сад просто". И кстати, если это легко, нарисуйте пожалуйста схемку, да запостите сюда, а мы по восхищаемся. Да и просто интересно интересно, хотя в данной теме это и оффтоп.

Сообщение от omercury Посмотреть сообщение
Улыбнула 11-я и насмешила 15-я.
К последней его подключить вообще невозможно.
Ну да, опять по инерции перечислил почти всё восьминогое с которым раньше работал .
Someone вне форума  
Непрочитано 24.03.2012, 15:23  
Someone
Гражданин KAZUS.RU
 
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от slavik.ksu Посмотреть сообщение
Компания с AVRками работеат потому что и это специально "легкое" тестовое задание, чтобы посмотреть на каком уровне я знаю МК.
Задание и в самом деле лёгкое, без кавычек . На уровне: прослушал, сказал: "дайте листик, вот схема, вот 10 строк кода", т.е. решаемая прямо во время собеседования. Не в обиду, но после изучения приведённой программы я бы оценил уровень как "не сильно отличный от нуля, но выглядит перспективно, если вправить мозги. Полное отсутствие опыта. Слабое знание возможностей авр 8 бит." Персперктивность потому что хоть асм знаете, в отличии от некоторых писателей на данном сайте, которые без билдера даже инициализацию не могут написать.

Рассмотрим предложенную программу. Допустим меняется Д+ и Д-. Выставляются флаги инт0 и инт1. Но прерывание инт0 в таблице выше, а значит переход первый на Vnesh0. 6 тактов (время довыполнения текущей команды не считаем, хотя оно от 1 до 3 тактов может быть). само прерывание 2 такта и 4 такта на возврат. После чего выполнится одна команда (напоминаю, от 1 до 3 тактов) и произойдёт переход на Vnesh1, ещё 6 тактов, 2 и 4. И снова выполнится одна команда. Итоговое время выполнения данной связки от 25 до 28 тактов. Если взять кварц 12Мгц то 25 тактов дадут 2.08 микросекунды, что уже не соответствует заданной задержке вход-выход. А ведь ещё я не считал обработку кнопки, которая займёт сотни тактов . Я не думаю, что работодателю нужен программист, способный работать с прерываниями (что ты явно пытаешься показать), но не способный выполнить поставленную задачу в точном соответствии с ТЗ.

Подумай сам, чего от тебя хотят: при нажатии кнопки прервать непрерывный поток данных на заданное время с заданной точностью. Нажатие кнопки переходный процесс, которому свойственен дребезг. Есть конечно и бездребезговые коммутационные устройства, но они явно не относятся к данной теме. С учётом дефицита времени (напомню, задержка ретрансляции 1 мкс) проще сделать аппаратный антидребезг, простейший из которых это RC фильтр. Т.е. фактически твоё задание не в том, чтобы копировать данные, а в том, чтобы зафиксировав нажатие кнопки, выдержать паузу, заморозив состояние выходов. Следовательно, копируя в главном цикле вход на выход (общий принцип я показывал, маски и сдвиги сам добавишь, какие нужны) и по нажатию кнопки переходя в прерывание, ты замораживаешь состояние выхода (оно не меняется пока ты в прерывании). Проведя в прерывании заданное время, ты обеспечиваешь неизменность состояния выходов в течении всего этого времени, а выйдя из прерывания снова начинаешь копировать состояние входа на выход. Всё полностью соответствует ТЗ. С соблюдением всех временных интервалов. И точность ты можешь обеспечить до такта, посчитав и учтя время входа и выхода в прерывание, а главное легко можешь это доказать и гарантировать. И вся программа у тебя займёт команд 15-20 строк асма (инициализацию я не учитываю).

Последний раз редактировалось Someone; 24.03.2012 в 15:37.
Someone вне форума  
Эти 2 пользователя(ей) сказали Спасибо Someone за это сообщение:
slavik.ksu (24.03.2012), Uz_Sleep_Walker (26.03.2012)
Непрочитано 24.03.2012, 15:35  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: USB коннектор на AVR

Я бы использовал логику. Например 74HC573 (или аналог для 3,3 В).

У неё есть вход защёлки. А на контроллере сформировал бы задержку на 666 нс.

PHP код:
main(void
{
char BUTTON 0b00000001;
PORTD 1;

begin:
while(
PINC BUTTON);
PORTD 0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
PORTD 1;
delay_ms(100);
while(!(
PINC BUTTON));
delay_ms(20);
goto 
begin;

UPD: генератор на 12 МГц. То есть задержка на 8 тактов.

Вход-выход в прерывание - это как раз 8 тактов. Причём ещё неизвестно, где оно возникнет. То есть, надо разрешать прерывания в нужном месте. Так что уложиться в ТЗ довольно-таки проблематично.

Мой же вариант делает гарантированную задержку при нажатии кнопки, а также проходная задержка сигнала порядка пары сотен наносекунд.

Последний раз редактировалось Godzilla82; 24.03.2012 в 15:49.
Godzilla82 вне форума  
Непрочитано 24.03.2012, 17:42  
slavik.ksu
Частый гость
 
Регистрация: 20.02.2012
Сообщений: 30
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
slavik.ksu на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от Prime Посмотреть сообщение
2. Срабатывание кнопки - ..., либо также в основном цикле опрашивать состояние и запоминать.
3. При изменении состояния (путём сравнения текущего и предыдущего сохранённого) - запускать какой нибудь таймер, скажем, на 50 мс.
4. По истечению таймаута - ... или сразу на месте обрабатывать кнопку.
Правильно ли я Вас понял: идет опрос кнопки,как только нажали кнопку запускаем таймер 50мс, после чего( не опрашивая кнопку) делаем действия( в нашем случае задерживаем сигнал в 6мкс). А тогда вопрос зачем делаем задержку в 50 мс, может сразу начнем делать то что нам нужно?
то есть не понятно "обрабатывать кнопку" - это что значит?
Или Вы имели ввиду так:
1) по внешнему прерыванию от кнопки заходим в обработчик
2) ждем отпускание кнопки
3) запускаем таймер на 50мс
4) и после 50 мс выполняем действия!
В этом случае понятно что Вы имели ввиду

Сообщение от Godzilla82 Посмотреть сообщение
Случай для однократного срабатывания.
1. Ждём когда нажмут кнопку.
2. Делаем нужные действия.
3. Ждём 100 мс.
4. Ждём, когда кнопку отпустят.
5. Переход к 1 пункту.
В нашем случае при усливиях однократности и что действие выполняется 6мкс, 3ий пункт только после 4ого должен следовать?

Сообщение от arav Посмотреть сообщение
Кстати, в программной реализации USB на AVR как раз и применялись такие развернутые циклы
То есть такой подход самый оптимальный?
Сообщение от Someone Посмотреть сообщение
Итоговое время выполнения данной связки от 25 до 28 тактов. Если взять кварц 12Мгц то 25 тактов дадут 2.08 микросекунды, что уже не соответствует заданной задержке вход-выход.
Если на обоих входах одновременно изменится сигнал, то при выполнении Vnesh0 скопируются оба сигнала, а так как нас ждет второе прерывание, то во Vnesh1 просто скопируются те же сигналы. это означает что задержки в 2мкс в данном случае не будет! Уважаемый,Someone,Согласны со мной?
slavik.ksu вне форума  
Непрочитано 24.03.2012, 17:54  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: USB коннектор на AVR

Сообщение от slavik.ksu Посмотреть сообщение
В нашем случае при усливиях однократности и что действие выполняется 6мкс, 3ий пункт только после 4ого должен следовать?
Я уже описал развёрнуто логику работы. После п. 4 надо ещё одну задержку сделать на случай дребезга при отпускании.


Вообще-то, если верить написанному вами ТЗ,
Сообщение от slavik.ksu Посмотреть сообщение
Выкладываю полностью задание:
3. К каналу С подключена кнопка. При однократном нажатии на неё (устранить дребезг)
сигнал с каналов D+ и D- не должен передаваться на выходные
каналы В+ и B- на длительность 1 / 1,5Мгц сек. (+- 1/12000000).
При этом на выходных каналах должны присутствовать прежние уровни.
то задержка 1/1,5 МГц равна 666 нс, что всего навсего 8 тактов при клоке 12 МГц. Откуда взялась цифра 6 мкс?

Кстати, частота 1,5 МГц - это два фронта за период 666 нс. То есть, надо успевать передавать состояние сигналов не реже, чем через 4 такта.

1 такт - считывание порта.
1 такт - запись в порт
2 такта - переход

Вывод - программно отработать нажатие кнопки при такте 12 МГц невозможно. Надо или увеличивать тактовую до 20 МГц, и то - это на самом пределе.

Последний раз редактировалось Godzilla82; 24.03.2012 в 18:07.
Godzilla82 вне форума  
Непрочитано 24.03.2012, 18:37  
slavik.ksu
Частый гость
 
Регистрация: 20.02.2012
Сообщений: 30
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
slavik.ksu на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от Godzilla82 Посмотреть сообщение
задержка 1/1,5 МГц равна 666 нс
Правильно! и = 0,6мкс
просто спутался наверно, "0," забыл написать
slavik.ksu вне форума  
Непрочитано 24.03.2012, 19:44  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Someone Как бы сделал лично я: 573 в качестве ключа, тактирование cpu строго от кварца, шим для генерации запрета lock, нормальный программный антидребезг. Никакого плавания тактов, никаких подсчетов успеем-неуспееем. Все гарантрованно.

PS это именно антидребезг - устранение мусора на фронтах. проверьте и убедитесь. нажатие-отпускание - это след программный уровень над этим блоком.
PS2 и можно простыни постить по-короче?
Миниатюры:
Нажмите на изображение для увеличения
Название: Sch.gif
Просмотров: 51
Размер:	4.4 Кб
ID:	33060  
Hives вне форума  
Непрочитано 25.03.2012, 08:30  
Prime
Прописка
 
Регистрация: 11.06.2005
Сообщений: 266
Сказал спасибо: 9
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
Prime на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от Godzilla82 Посмотреть сообщение
Нет. Правильно именно PORT.

Не забывайте, вывод может быть сконфигурирован как вход с подтяжкой.
Не забывайте, что регистр PORT вы читать не можете, а только выводить в него!!!
__________________
Канал в Telegram об МК AVR @EasyAVR
Prime вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
usb джойстик на avr bobrozub Микроконтроллеры, АЦП, память и т.д 7 14.03.2012 20:24
USB клавиатура + AVR Serdgo96 Микроконтроллеры, АЦП, память и т.д 2 25.02.2010 22:55
USB Коннектор, разпиновка nerozero Информация по радиокомпонентам 2 05.10.2007 14:20
AVR...USB Edd-Layer Микроконтроллеры, АЦП, память и т.д 4 11.04.2007 21:37


Часовой пояс GMT +4, время: 08:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot