Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
31.03.2012, 14:12
|
|
Прописка
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
|
Re: USB коннектор на AVR
Даже хуже ![Прикольно](images/smilies/icon_wink3.gif) Нужно всегда помнить, что у сигнала есть время нарастания, когда он, строго говоря, неопределен, и время спада. И если мы ничем не синхронизируемся (спадом или нарастанием - в прерывании, например), то легко момент считывания входов может попасть на неопределенное состояние сигнала на входе.
|
|
|
|
31.03.2012, 14:21
|
|
Частый гость
Регистрация: 20.02.2012
Сообщений: 30
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USB коннектор на AVR
Хорошо! тогда на "время нарастания" мы можем наложить какие нить границы? например: время нарастания не более 30нс из таких то таких предположений,убеждений. Или например : время нарастания обычно сотсавляет 50% от длительности самого сигнала и получим что время нарастания может быть ~165нс в нашем случае?
Или например:оно вапще не определено и поэтому время нарастания даже может быть больше времени сигнала?
|
|
|
|
31.03.2012, 15:06
|
|
Прописка
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
|
Re: USB коннектор на AVR
Время нарастания в нашем случае (с ограничением полосы сверху) можно принять половину длины импулься, те 166 нс. Если будем пытаться расчитывать точно, то залезем в такие дебри, что оно того не стоит. В качестве фильтрации помех принимаем, что нам нужно 2 подряд одинаковые выборки и они должны "поместиться" в "валидную" часть импулься, т.е. во вторые 166 нс, значит выборки нужно делать не реже, чем через 83 нс, тогда мы получим общую задержку 166 нс + время выборки и сравнения с предыдущей выборкой (меньше, чем 83 нс, потому что проанализировать нужно успеть до следующей выборки) + время установки выходов = примерно 300 нс
|
|
|
|
31.03.2012, 16:41
|
|
Частый гость
Регистрация: 20.02.2012
Сообщений: 30
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USB коннектор на AVR
главный цикл:
Start:
in r16,PinD
cp r16,r17
mov r17,r16
BRNE Start
out PortB,r16
rjmp Start
1такт in + 1такт cp + 1такт mov + 2тактa BRNE =5 тактов должно выполниться за 83 нс. У меня получилось частота должна быть 60МГц.
Правильно?
а с такой частотой могут какие нибудь AVRки работать?
|
|
|
|
31.03.2012, 16:52
|
|
Частый гость
Регистрация: 20.02.2012
Сообщений: 30
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от a-fisher
|
По скольку судя по тз у нас сигнал дифференциальный, то он может быть или 01, или 10, любая другая считанная комбинация ошибочна (неважно, из-за чего).
|
что значит дифференциальный? как я понимаю между двумя сигналами должна быть какая то разница(напряжений, хотя наверно может быть и разница меду фазами сигналов). Если они одинаковы то это синфазный сигнал, да ведь?
А из каких слов вы поняли что он дифферинциальный?
На 11странице там тоже так пишут
Цитата:
|
Входной сигнал дифференциальный противофазный?
|
Ссылаясь на слова:
Цитата:
|
На выходе, между каналами, не должно быть задержки. (появление сигнала строго одновременно)
|
|
|
|
|
31.03.2012, 17:09
|
|
Прописка
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от slavik.ksu
|
это синфазный сигнал, да ведь?
А из каких слов вы поняли что он дифферинциальный?
|
Помнится, там было D+ и D-, обычно так обозначают дифференциальный сигнал. Если одинаковый, то, конечно, синфазный. Я имел в виду противофазный сигнал.
Тактовая - да, 60 МГц. АВРки не знаю, STM на 72 МГц знаю
|
|
|
|
31.03.2012, 17:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: USB коннектор на AVR
Не забывайте о сохранении длительности импульса.
Есть цикл. 333 нс.
==›
В начале цикла мы отслеживаем изменение, ля-ля-ля, убеждаемся, что всё в порядке.
‹==
В конце цикла мы меняем выходной сигнал.
Так вот. Длительность команд между ==› и ‹== должна всегда быть одной и той же. Независимо от того, сразу мы убедились, что сигнал верен, или для этого нам потребовалось ещё одно чтение-сравнение.
Хотя формально для ТЗ этого и не нужно. Но для реального устройства это важно.
|
|
|
|
31.03.2012, 17:55
|
|
Прописка
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от Godzilla82
|
Длительность команд между ==› и ‹== должна всегда быть одной и той же.
|
Ну это, конечно, нужно учесть. Скажем, если выборки разные, то пишем в регистр сравнения, если одинаковые - то в выходной регистр, ибо, если одинаковые, то операция mov r17,r16 становится избыточной.
|
|
|
|
31.03.2012, 18:09
|
|
Частый гость
Регистрация: 20.02.2012
Сообщений: 30
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от a-fisher
|
там было D+ и D-, обычно так обозначают дифференциальный сигнал
|
кроме обше принятого обозначения больше нет причин ждать дифферинциальный сигнал? Может не тоит тогда исключать 00 и 11?
Сообщение от Godzilla82
|
Так вот. Длительность команд между ==› и ‹== должна всегда быть одной и той же. Независимо от того, сразу мы убедились, что сигнал верен, или для этого нам потребовалось ещё одно чтение-сравнение.
|
то есть вмоей прогограмме выше: если у нас совпали значения, то от начала цикла до вывода прошло ~100нс, а если не совпали в этом случае запуститься еще раз цикл проверки и сигнал выйдет только через ~183нс . Это и надо отслеживать, чтобы разницы во времени не было?
|
|
|
|
31.03.2012, 18:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: USB коннектор на AVR
PHP код:
|
char tmp1, tmp2;
begin:
tmp1 = PIND;
tmp2 = PIND;
if(tmp1 == tmp2)
{
asm("nop"); // столько раз, сколько нужно
goto output;
}
tmp1 = PIND;
if(tmp1 == tmp2)
{
asm("nop"); // столько раз, сколько нужно
}
else
{
\\ была какая-то помеха, ничего не делаем
asm("nop"); // столько раз, сколько нужно
goto begin;
}
output:
PORTB = tmp1;
asm("nop"); // столько раз, сколько нужно
goto begin;
|
количество nop-ов поставить таким образом, чтобы при любом раскладе цикл выполнялся 83 нс.
Лучше же в прерывании:
PHP код:
|
interrupt(timer1_compare) // выполняется каждые 83 нс
{
PORTB = out;
begin:
tmp1 = PIND;
if(PIND!=tmp1) goto begin;
out = tmp1;
}
|
Последний раз редактировалось Godzilla82; 31.03.2012 в 19:07.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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, время: 04:13.
|
|