Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
23.03.2012, 15:11
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от Hives
|
но теперь добавьте антидребезг
|
Читаем описание схемки: RC между кнопкой и входом INT0.
|
|
|
|
23.03.2012, 16:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от Someone
|
Так же можно сказать тини15, 10, 11 (к ним-то кварц подключить не проблема,
|
Улыбнула 11-я и насмешила 15-я.
К последней его подключить вообще невозможно.
А по быстродействию годится разве только 10-я не пределе.
Схему выше уже описАл. С небольшим отличием - XOR нужен с инверсией. А вот МК можно приспособить для генерации времени пропадания сигнала и антидребезга. Это если сигналы D+ D- однонаправленные.
|
|
|
|
23.03.2012, 18:00
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: USB коннектор на AVR
Someone убого, но зачет
PS полная программная эмуляция MAX6816 (антидребезг), на будущее
ничего сложного даже для начинающих
Код:
|
if (KeyPressed())
{
if (KeyTimer ‹ KEY_TIMEOUT) { if (++KeyTimer ›= KEY_TIMEOUT) KeyFlag = 1; }
}
else
{
if (KeyTimer › 0) { if (--KeyTimer == 0) KeyFlag = 0; }
} |
|
|
|
|
23.03.2012, 18:53
|
|
Прописка
Регистрация: 11.06.2005
Сообщений: 266
Сказал спасибо: 9
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от Someone
|
Hives,
Prime,
Этого на быстрой логике так просто не сделаешь. Конечно можно посчитать и нагородить RC цепей, с корпусом-другим дополнительной логики нарисовать схему управления, а потом обнаружить, что таких номиналов в рядах нет, собрать на тех что есть, и получить несоответствие временного интервала заданному. Точность-то в техзадании указана до такта - 1/12МГц .
|
На логике и счётчиках делается легко...
__________________
Канал в Telegram об МК AVR @EasyAVR
|
|
|
|
23.03.2012, 19:42
|
|
Частый гость
Регистрация: 20.02.2012
Сообщений: 30
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от ut1wpr
|
Разве так нельзя?
Ан нет, МК подавай. Хорошо еще, что тип не навязывают. Ну зачем он?
|
Компания с AVRками работеат потому что и это специально "легкое" тестовое задание, чтобы посмотреть на каком уровне я знаю МК. поэтому ничего не могу поделать
Цитата:
|
Основная программа (инициализацию не пишу, и тривиально, и надо же учащемуся что-то самому сделать ) проста до безобразия:
Код:
main:
in R15, PIND
out PORTB, R15
rjmp main
1такт ин, 1 такт оут, 3 такта переход. 5 тактов по 125нс даст 625 нс, что меньше требуемых 1 мкс. Изменение обоих каналов одновременное. В прерывании просто делаем паузу в 66 мкс
|
Идея хорошая, но я пошел маленько другим путем :изменение на входах D+ и D- сделал по прерыванию INT0 и INT1. На нажатие реагирует таймер, после чего он через 20мс проверяет "действительно ли это было нажатие" (то есть устранил дребезг) и далее делаю задержку по этому же таймеру 6мкс, запрещяя внешние прерывания. То есть главный цикл у меня свободен, и там можно что нибудь делать паралельно.
Только вот проблемка еще одна есть: я как и вы в прерывании копирую прот D в порт В, а мне надо только два вывода! то есть желательно наложить маску,чтобы не повредить сигнал на других в порту В...! пока еще не сообразил как это лучше сделать:
in r16,pinD
ori r16,maska1
in r17,pinB
ori r17,maska2
ori r17,r16
out PortB,r17
Что то вроде этого, только вместо "ori" могут быть " andi " , " eor "...
что имею на данный момент прилагаю
|
|
|
|
23.03.2012, 22:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: USB коннектор на AVR
Антидребезг делается немного по-другому. Случай для однократного срабатывания.
1. Ждём когда нажмут кнопку.
2. Делаем нужные действия.
3. Ждём 100 мс.
4. Ждём, когда кнопку отпустят.
5. Переход к 1 пункту.
Вход в прерывание - 4 такта, выход - 4 такта. Дальше продолжать?
Изменение только нужных битов:
PHP код:
|
MASK = 0b00000011;
PORTD = (PORTD & ~MASK) | (PINB & MASK);
|
P.S. Выходной порт D, входной порт B.
|
|
|
Сказали "Спасибо" Godzilla82
|
|
|
23.03.2012, 22:29
|
|
Прописка
Регистрация: 11.06.2005
Сообщений: 266
Сказал спасибо: 9
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
|
Re: USB коннектор на AVR
Оба случая антидребезга, описанного Godzilla82 и slavik.ksu - есть псевдоантидребезг. В случае Godzilla82 - даже не понял, где сам антидребезг.
Предлагаю такой алгоритм
1. Основной цикл крутится сам по себе
2. Срабатывание кнопки - либо на прерывание, либо в прерывании по таймеру опрашивать состояние и запоминать (например, если у вас крутится системный таймер 1 мс), либо также в основном цикле опрашивать состояние и запоминать.
3. При изменении состояния (путём сравнения текущего и предыдущего сохранённого) - запускать какой нибудь таймер, скажем, на 50 мс (можете на 100 мс, в зависимости от того, какое время спокойствия считать реальным нажатием).
4. По истечению таймаута - выставлять флаг или сразу на месте обрабатывать кнопку.
Таким образом, эта модель подразумевает обработку кнопки по истечению заданного времени ПОСЛЕ ТОГО, КАК ДРЕБЕЗГ ЗАКОНЧИЛСЯ. Если дребезг будет продолжительным - таймер будет перезапускаться каждый раз, когда состояние будет меняться, не давая дойти до обработчика.
Вариант, описанный вами, slavik.ksu - делает с постоянным упорством один наш "младший научный сотрудник", за что и получает постоянно выговор с моей стороны.
__________________
Канал в Telegram об МК AVR @EasyAVR
Последний раз редактировалось Prime; 23.03.2012 в 22:34.
|
|
|
|
23.03.2012, 22:36
|
|
Прописка
Регистрация: 11.06.2005
Сообщений: 266
Сказал спасибо: 9
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от Godzilla82
|
PHP код:
|
MASK = 0b00000011;
PORTD = (PORTD & ~MASK) | (PINB & MASK);
|
P.S. Выходной порт D, входной порт B.
|
Вместо вашей конструкции правильней
PORTD = (PIND & ~MASK) | (PINB & MASK);
__________________
Канал в Telegram об МК AVR @EasyAVR
|
|
|
|
23.03.2012, 22:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от Prime
|
Таким образом, эта модель подразумевает обработку кнопки по истечению заданного времени ПОСЛЕ ТОГО, КАК ДРЕБЕЗГ ЗАКОНЧИЛСЯ. Если дребезг будет продолжительным - таймер будет перезапускаться каждый раз, когда состояние будет меняться, не давая дойти до обработчика.
|
Зачем ждать, когда закончится дребезг? Состояние кнопки просто так не меняется.
Состояние меняется только тогда, когда её нажали. А раз нажали - сразу нужно выполнить действия.
Здесь предполагается, что "действия" - значительно меньше 100 мс.
После выполнения действий нельзя сразу же делать проверку состояния кнопки. Так как там ещё может не закончился дребезг. Поэтому ждём 100 мс. Через 100 мс дребезг гарантированно закончится.
А далее можно снова проверять кнопку. Но если нам надо на одно нажатие кнопки однократно выполнить действия, нам нужно подождать, когда кнопку отпустят.
После отпускания можно ещё сделать задержку на дребезг.
|
|
|
|
23.03.2012, 22:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: USB коннектор на AVR
Сообщение от Prime
|
Вместо вашей конструкции правильней
PORTD = (PIND & ~MASK) | (PINB & MASK);
|
Нет. Правильно именно PORT.
Не забывайте, вывод может быть сконфигурирован как вход с подтяжкой.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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:42.
|
|