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

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

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

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

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

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

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

 
Опции темы

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

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

http://robotsspace.ucoz.ru/publ/podk...nopki/9-1-0-62
про антидребезг кнопки, вобщем я теперь вот что понял: дребезг может происходить как при нажатии так и при отпускании! В итоге алгоритм антидребезга наверно должен быть такой (случай однократного нажатия):
0. опрос кнопки
1. как только кнопку нажали
2. задержка 50мс и проверяем была ли на самом деле нажата кнопка
3. производим действия
4. ждем отжатия кнопки
5. задержка 50мс
возвращаемся на 0. пункт

Someone,спасибо за подробные ответы.
Я Вашу идею попробую написать на Си, мне она очень нравится. Или данную задачу правильней реализовывать только на Асемблере?
а пока хочу задать вопрос про свою
А что мне счас мешает кварц увеличить, если уж у меня не хватает герц? В даташите ATmega8515 можно разогнать до 16МГц.
на данном этапе вместе с масками получаем такой обработчик
Код:
1. Vnesh0:
2. in   signal,PinD  ; достаем сигнал из вывода D+ и D-
3.	andi signal,0b00001100 ; накладываем маску что не трогать другие выводы
4.	in   temp , PortB
5.	andi temp , 0b11110011
6.	or   temp , signal
7. out  PortB, temp  ; посылаем в каналы В+ и В-
8. reti
как раз 4такта входа + 4 выхода + 6действия= 14 тактов на обработчик.
при 16Мгц получаем один обаботчик справляется за 0,875мкс. Пока входим в рамки дозволенного. Теперь считаем наихудший вариант: мы зашли в прерывание, из D скопировали сигнал и! на 3. строчке "пришел сигнал" на 2вход. !Осюда считаем такты до момента когда "пришедший сигнал" появится на выходе: 5тактов на завершение этого прерыв. + 4такта на выход + 3такта(наихудший вариант) в основной программе + 4 на вход в прерывание + 6тактов на вывод "пришедшего сигнала" = 22 такта что равно 1,375мкс при кварце в 16МГц.
(дальше суждения были ошибочны, поэтому поправил )
Реклама:

Последний раз редактировалось slavik.ksu; 26.03.2012 в 16:23.
slavik.ksu вне форума  
Непрочитано 26.03.2012, 13:40  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от Godzilla82 Посмотреть сообщение
Какие 25 тактов
Такие, как упорно делает автор (смотреть приложенный автором архив), на двух прерываниях по изменению сигнала и третьему прерыванию от кнопки, а я ему пытаюсь объяснить, что так не получится, и вообще незачем так делать: https://kazus.run/forums/showpost.ph...8&postcount=54

Сообщение от Godzilla82 Посмотреть сообщение
Это значит надо программно отследить смену фронтов за 333 нс и успеть выставить их на выходных ножках. Это есть всего 4 такта при 12 МГц.
5 тактов на самом деле для конструкции in-out-rjmp: допустим значение изменится после первого in, тогда: 1 такт out, + 2 такта переход, 1 такт in 1 такт оут.

Сообщение от Godzilla82 Посмотреть сообщение
А вы ещё хотите программно нажатие кнопки отрабатывать и дребезг убирать.
Вот же... Неужели так трудно прочитать внимательно, что я предлагаю... И отличать это от случая, когда я говорю автору "у тебя фигня получается потому что:"...

Ну, попробую ещё раз, кратко: в майне, после инициализации, крутится конструкция in-out-rjmp. К прерыванию INT0 через RC фильтр (антидребезг) подключается кнопка (вообще-то тут и прерывание не нужно, но не можется автору без прерываний, так что пусть будет). При нажатии кнопки возникает прерывание, из майна переходим в процедуру обработки прерывания, в которой остаёмся необходимое время, на которое требуется заморозить состояние выхода. При этом учитываем, что вход в прерывание длится 6 тактов, а выход - 4.
Someone вне форума  
Непрочитано 26.03.2012, 13:57  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от slavik.ksu Посмотреть сообщение
Или данную задачу правильней реализовывать только на Асемблере?
Да нет. Время инициализации роли не играет, а на С такая простая конструкция в майн не должен отличаться от ассемблера. собственно:

int main(void)
{
unsigned char a;

do
{
a=PIND;
PORTB = a;
}while(1);
}

в гцц, который со студией идёт, получаем конструкцию in-out-rjmp. Единственное, что компиляторы С при входе в процедуру прерывания сохраняют регистр флагов и используемые регистры, а перед выходом восстанавливают, что даёт добавочные такты и это надо учесть. Впрочем можно и запретить им так делать, в гцц указав в заголовке прерывания атрибут ISR_NAKED. Но используя такие приёмы надо быть уверенным, что вероятная порча регистров и флагов не повредит программе. Вот почему разработчик обязан помимо С знать асм. Чтобы при необходимости изучить асмовый листинг, генерируемый компилятором, и найти, где он допустил ошибку.
Someone вне форума  
Непрочитано 26.03.2012, 14:02  
a-fisher
Прописка
 
Аватар для a-fisher
 
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
a-fisher на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от slavik.ksu Посмотреть сообщение
На каналы D+ и D- подаётся сигнал с частотой 1,5 Мгц, что соответствует 93,75мс = 93750мкс
А Вы мегагерцы с килогерцами не путаете? 1кГц - это период 1 мс, 1МГц - это 1 мкс.
Прислушайтесь к Sameone - при такой тактовой процессора это, пожалуй, единственный вариант.
a-fisher вне форума  
Непрочитано 26.03.2012, 14:04  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от slavik.ksu Посмотреть сообщение
как раз 4такта входа
6 тактов минимум. 2 такта контролер помещает на стек адрес возврата, 2 такта длится переход на адрес в таблице прерываний. А в таблице стоит переход на процедуру обработки, что требует ещё 2х тактов. А ещё от одного до трёх тактов на довыполнение команды, на которой пришло прерывание.
Someone вне форума  
Непрочитано 26.03.2012, 14:19  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от slavik.ksu Посмотреть сообщение
сигнал с частотой 1,5 Мгц, что соответствует 93,75мс = 93750мкс
1/1500000 = 0,666мкс = 666 нс. Такт при 16000000 Гц = 1/16000000 = 62.5 нс. У тебя есть 666/62,5=10 тактов. Иными словами, при любом изменении на входе изменённое значение должно появиться не позже чем через 10-11 тактов. Ну вот как ты не поймёшь, что нет у тебя времени отслеживать изменение такого сигнала в прерывании...

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

Теперь вроде все, сдаюсь! больше нет идей, чтоб дальше бороться значит через внешнее прерывание такое не реализуемо!
что ж переходим на Ваш, Someone , вариант
только еще один вопрос по той програмке которую я написал:
таймер я настраиваю на режим "тактирование по спадающему фронту", то есть он тикает от вывода на который я посадил кнопку. Одно нажатие = один такт в таймере. Включаю разрешение "прерывания по сравнению" и в регистр сравнения записываю 1. В обработчике прерывания просто зажигаю светодиод.
Ожидаю: при однократном нажатии кнопки загорается СИД.
Наблюдаю: СИД загорается то от одного, то от двух нажатий! почему то не стабильно,как Вы думаете в чем может быть ошибка?

Пользуюсь отладочной платой STK500, ATmega8515, кварц на 8Мгц.

Чтобы в той програмке не искать что нам нужно, я выделил только описанные выше действия и прилагаю данную програмку.
Вложения:
Тип файла: rar nazhatie.rar (7.2 Кб, 41 просмотров)

Последний раз редактировалось slavik.ksu; 26.03.2012 в 18:13.
slavik.ksu вне форума  
Непрочитано 26.03.2012, 18:46  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: USB коннектор на AVR

Тут ещё один нюанс.

Допустим на входе 0, на выходе 0.
На входе появляется короткий (на 333 нс) положительный импульс.

Мы его должны или пропустить (не меняя длительности), пусть и с задержкой. Или не пропустить совсем (если вовремя нажата кнопка).

Итак. На выводах нули. Приходит импульс. Мы считали этот импульс и вывели его на ногу. И тут возникло прерывание. Мы 666 нс держим на выходе 1, и потом только ещё через 5 тактов (312 нс при 16 МГц) меняем его.

Получается, что мы удлинили фронт не на 666 +/- 83 нс, как по ТЗ, а на 978 нс.

Если такое устраивает...

К тому же RC цепь не достаточно хорошо фильтрует дребезг.

Последний раз редактировалось Godzilla82; 26.03.2012 в 18:48.
Godzilla82 вне форума  
Непрочитано 27.03.2012, 09:23  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: USB коннектор на AVR

Сообщение от slavik.ksu Посмотреть сообщение
аймер я настраиваю на режим "тактирование по спадающему фронту", то есть он тикает от вывода на который я посадил кнопку
Месье знает толк в извращениях. . Зачем так делать? Тем более с 16-битным таймером... А почему то один то два раза... Гипотеза - дребезг. Сомневаюсь что на плате есть какие-то меры, хоть та же RC. Впрочем на гипотезе я не настаиваю.

ЗЫ: Если же всё равно охота поизвращаться, то надо читать даташит:

When a capture is triggered, the 16-bit value of the counter (TCNT1) is written to the Input Capture Register (ICR1). The Input Capture Flag (ICF1) is set at the same system clock as the TCNT1 value is copied into ICR1 Register. If enabled (TICIE1 = 1), the Input Capture Flag generates an Input Capture interrupt.

Ты же в программе пытаешься использовать прерывание по совпадению, добавляя ненужной работы. Используя другое прерывание ты можешь не обнулять таймер, ибо тебе плевать на его значение, тебя интересует только событие захвата. Ну а включённый noise canceler даст некоторую защиту от дребезга.

Последний раз редактировалось Someone; 27.03.2012 в 09:33.
Someone вне форума  
Непрочитано 27.03.2012, 12:18  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
Подмигивание Re: USB коннектор на AVR

Ребят!
О какой кнопке разговор?
Её же жмёт оператор в произвольный момент времени. Попробуйте нажать по сигналу светодиода и посчитайте лаг от вспышки до фактического нажатия - получите до полсекунды (али более? ) времени... Лишние 50-100 миллисекунд погоды не сделают, да и в ТЗ это явно прописано. Лучше подумайте о блокировке повторного срабатывания при удержании кнопки.
Нафига (простите за мой французский ) нужен таймер? В данной ситуации лучше вообще избавиться от многотактовых команд МК - быстродействие-то не резиновое .

Вот, набросал для Тани2313 - среди них чаще попадаются особи с тактовой до 20МГц. Критикуйте, млин...
1.5_MHz+key.rar
omercury вне форума  
 
Опции темы

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

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, время: 01:52.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.