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

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

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

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

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

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

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

 
Опции темы
Непрочитано 23.12.2011, 08:43  
roma9112
Гражданин KAZUS.RU
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от E_C_C Посмотреть сообщение
Доброго времени, ТС не будет против если задам вопрос тут ?, не создавая новую тему .
Насколько точен внутренний генератор 8 меги ?. Включил внутренний тактовый на 8Мгц, предделитель на 256 , получаю на входе таймера 31,25 Кгц. В интервал 100гц должен попасть 312-й тик таймера (прерывание по совпадению), вместо этого уже на 250 - 260 тике выхожу за предел 100гц интервала. Неужто настолько высокая погрешность ?
Так в даташите вроде все расписано про генератор...
Реклама:
roma9112 вне форума  
Непрочитано 23.12.2011, 13:53  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Про дребезг.
Почему надо обрабатывать дребезг - потому что нужно различать событие "нажатие" от события "отпускание". И в первом и во втором случае вы имеете ряд импульсов разной длительности с паузами разной длительности. (Процесс хорошо наблюдается в осциллографе).

Те, кто хочет побыстрее и попроще, ставят задержку. Измеряется уровень сигнала через 50 мс после прихода первого фронта. Надеются, что к этому времени переходной процесс закончился, "а если что не так, заменим кнопку". Если фронт создаётся помехой, задержка отрабатывает и с большой вероятностью второй опрос следующую помеху не ловит. От микрика с щелкающей латунной пружиной дребезг длится 5-15мс. Видел переходные процессы от резиновых (новых) кнопок длительностью больше 200 мс. Кто не верит - пусть посмотрит в пульте от телевизора. Сколько нажатий отработает такая кнопка через задержки - неведомо. Особенно весело, когда такие ухари запрограммировали кнопки установки таймеров, у меня такое на микроволновке, попробуй добавить 1 минуту - ага, щас! при нажатии проскочит цифер 5 и при отпускании ещё что-нибудь. Кстати, делать задержку длиннее 100 мс уже чревато тем, что кнопка не среагирует на быстрое нажатие, клавиатура становится "тупой", хотя где-то это и не вредно.

Те, кто не прочь вникнуть и не хотят менять кнопки ( особенно, если девайс за 300-500 км), делают интегратор. Принцип: если кнопка нажата, прибавим 1. Если отжата - вычтем 1. Если досчитали до N, считаем, что кнопку нажали. Досчитали до 0 - кнопку отпустили. В этом случае, сколько бы не длился дребезг, задержка срабатывания не превысит N * период опроса + дребезг. На одну кнопку здесь тратится 1 байт памяти, в нём помещается счётчик интегратора и флаги состояний кнопки. Опрос раз в 10-20 мс.
Вот функция опроса кнопки. Перед вызовом адрес счётчика загружается в Yh:Yl, состояние пинов порта с кнопками - в регистр tmp2, маска пина - в регистр tmp3. Задаётся количество шагов интегратора (THRESHOLD).
Функция имитирует работу кнопки со щелчком. Нормальное состояние счётчика - ==THRESHOLD, например, 16. При нажатии кнопки счётчик уменьшается до 8, возникает событие DOWN и переход в состояние ON и счётчик обнуляется - аналогия прыжку пружины. Когда кнопку отпустили, интегратор опять должен отсчитать 8 шагов от 0 до 8, возникает событие UP и переход в состояние OFF. Никакие одиночные, двойные и прочие импульсы числом до THRESHOLD/2 ложных событий не вызывают. Флаги UP, DOWN, ON хранятся в младших битах интегратора и доступны другим функциям. Флаги UP и DOWN сбрасываются следующим опросом кнопки и суть флаги событий "нажатие" и "отпускание".
Код:
insen:	 //- input sensor Y -› counter, 				;       _______   -------     
	 //- tmp2 - pin status, tmp3 - bit mask			;     0 1 2 3 4 5 6 7 8 9 a b c d e f 	
	 //- ‹2›, ‹3› not change					; 	         thr/2     thresh         
	 //- ret ctr[76432],[210]‹1› BON (status) BDOWN BUP (events)  ; ‹-    9,8,7,6,5:DOWN     1,1,1:ON      	
	 //- Counter: lo nibble status (BON,..‹‹4)		; -›    1,2,3,4,5:UP		 a,a,a:!ON				
	 //-          hi nibble counter						.
	 //- use reg: no!

#ifndef BUTTON_STATUSBITS 	
.equ 	BDOWN = 0		; button events flags	see insen 
.equ 	BUP = 1	
.equ	BON = 2		; button status flag 1 down / 0 up
#endif


#ifndef BUTTON_THRESHOLDS 	
.equ 	THRSTEP =  $08			; btn.cntr ++/-- (limited) THRSTEP each call
.equ	BUTTON_THRESHOLD =  16*THRSTEP	; Button threshold: step*2   even! ‹31!
#endif
	push	tmp2
inqqq:	ld	tmp1,Y					cbr	tmp1,(1‹‹BUP)|(1‹‹BON)|(1‹‹BDOWN)
	and	tmp2,tmp3				breq inb1		; pin & mask = 0 нажато ---›

	cpi	tmp1,BUTTON_THRESHOLD		brsh PC+2	  /// boff (port=hi)  -› 
	addi	tmp1,THRSTEP		

	cpi	tmp1,BUTTON_THRESHOLD/2		brne innec
	addi	tmp1,BUTTON_THRESHOLD/2-THRSTEP
	sbr	tmp1,(1‹‹BUP)				rjmp inexr		; 5: ctr=9, UP	

inb1:	cpi	tmp1,THRSTEP				breq PC+2	 /// bon: ‹-     
	subi	tmp1,THRSTEP			  
	cpi	tmp1,BUTTON_THRESHOLD/2		brne innec
	cbr	tmp1,$f8				sbr	tmp1,THRSTEP|(1‹‹BDOWN)	; cbr,sbr not masks the cpi.brsh
innec:							brsh inexr
inbdo:	sbr	tmp1,(1‹‹BON)

inexr:	st	Y,tmp1			cbr	tmp1,$f8	; filter flags
inexx:	adiw	Y,1			pop	tmp2
	ret
Практически, при размещении счётчиков кнопок в памяти последовательно, обработка кнопок такая:
1. адрес первого счётчика в Y
2. Порт кнопок.pin в tmp2
3. Маска кнопки в tmp3
4. вызов функции опроса
5. анализ результата (tmp1)
шаги 3,4,5 повторяются для следующих кнопок.

Последний раз редактировалось makakus; 23.12.2011 в 14:04.
makakus вне форума  
Непрочитано 23.12.2011, 18:31  
pinco
Гражданин KAZUS.RU
 
Регистрация: 04.04.2007
Сообщений: 941
Сказал спасибо: 571
Сказали Спасибо 113 раз(а) в 85 сообщении(ях)
pinco на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от DAVE_ELEKTRIK Посмотреть сообщение
У меня реагирование идет не нажатие, а на отпускание!
Так вот оно это самое и есть хреново - визуально - поясняю - нажал кнопку , держу , а ничего блин не произошло - смотрится как ничего не сработало ,вдавливаю посильнее (вдруг кнопка не срабатывает-типа истерта) - опять ничего , потом ,матюкнувшись ,отпускаю наконец кнопку - а там вуаля - ну наконец-то сработало .После такого срабатывания от кнопки сразу хочется запулить устройство сразу в мусорное ведро .Вот на какую корявость Вам указывали .

P.S. А представьте себе что например и на клаве компа так по идиотски сделано - реагирование на отпускание - на такой клаве набор любого текста со смачным матом при этом вслух точняк гарантирован

Так что учитесь сразу нормально все делать ,пусть даже и понемногу - но нормально , по человечески , а не просто наскоро прогу косячить .
__________________
Короче асма кода нет !

Последний раз редактировалось pinco; 23.12.2011 в 18:51.
pinco вне форума  
Непрочитано 23.12.2011, 19:15  
pinco
Гражданин KAZUS.RU
 
Регистрация: 04.04.2007
Сообщений: 941
Сказал спасибо: 571
Сказали Спасибо 113 раз(а) в 85 сообщении(ях)
pinco на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от ut1wpr Посмотреть сообщение
....В свое время были разработаны как минимум два алгоритма. Срабатывание по нажатию и срабатывание по отпусканию.Первый намного сложнее в реализации. Второй имеет недостаток с отсутствием визуальной обратной связи с оператором. Посему многие драйвера кнопок (клавиатур) обслуживаются либо отдельными прерываниями по таймеру, либо встраиваются в обработчики, наиболее подходящие по временным характеристикам и непрерывности....
Что-то это подпадает под понятие "немного чуши" , как мне кажется . Пусть автор этого поста не обижается , но на самом деле все эти методы уже давно появились, и были , - с момента появления еще первых калькуляторов , а это уже аж с прошлого века считай известно было ,да с годков так 70-ых ,а возможно и еще раньше, а не "...в свое время было разработано...".Про обработку - да в общем все равно как и где будет у Вас находиться обработка кнопок по отношению к всей основной программе - хоть в прерываниях , хоть без прерываний через флаги с уходом на макрокуски проги или например на отдельные подпрограммы - ,лишь бы была сама обработка правильна и надежна, вариантов масса , а само время не подыскивается где-бы расположить кусок в программе ,чтобы обработка подошла по длительности - оно точно задается на месте, или может быть задана в любом другом месте например в отдельной подпрограмме выдержки 20-50 мс времени .Про сложность обработки метода на замыкание - миф - всего-то максимум с десяток другой ассемблерных строк ... и все .На С возможно выглядит даже и еще короче ,сами надеюсь там подправите у себя , для практики , хотя на С не так наглядно видно что там с кнопками и как именно в битах происходит их обработка как на асме .
__________________
Короче асма кода нет !

Последний раз редактировалось pinco; 23.12.2011 в 19:36.
pinco вне форума  
Непрочитано 27.12.2011, 20:45  
roma9112
Гражданин KAZUS.RU
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Подскажите пожалуйста! Я в подключаемой к main одной из функций типа void изменяю какую-ту переменную, задаваемую в той же функции, а можно ли сделать так, чтобы я мог значение этой переменной просмотреть(проверить) и в главной main функции, объявить ее глобальной? А если можно то как? Я где не пробовал назначать переменную АВРСтудия ругается, объявляю в main - в подключаемой функции пишет, что первый раз ее видит, если объявляю в подключаемой, пишет, что в main первое появление. Или надо делать возврат значения этой переменной из функции где она изменяется?

Последний раз редактировалось roma9112; 27.12.2011 в 20:48.
roma9112 вне форума  
Непрочитано 27.12.2011, 21:52  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от pinco Посмотреть сообщение
Что-то это подпадает под понятие "немного чуши" , как мне кажется . Пусть автор этого поста не обижается , но на самом деле все эти методы уже давно появились, и были , - с момента появления еще первых калькуляторов , а это уже аж с прошлого века считай известно было ,да с годков так 70-ых ,а возможно и еще раньше, а не "...в свое время было разработано...".Про обработку - да в общем все равно как и где будет у Вас находиться обработка кнопок по отношению к всей основной программе - хоть в прерываниях , хоть без прерываний через флаги с уходом на макрокуски проги или например на отдельные подпрограммы - ,лишь бы была сама обработка правильна и надежна, вариантов масса , а само время не подыскивается где-бы расположить кусок в программе ,чтобы обработка подошла по длительности - оно точно задается на месте, или может быть задана в любом другом месте например в отдельной подпрограмме выдержки 20-50 мс времени .Про сложность обработки метода на замыкание - миф - всего-то максимум с десяток другой ассемблерных строк ... и все .На С возможно выглядит даже и еще короче ,сами надеюсь там подправите у себя , для практики , хотя на С не так наглядно видно что там с кнопками и как именно в битах происходит их обработка как на асме .
Честное слово, не въехал в суть комментария. Тугодум. Как говорят "многабукофф", а суть за ними спряталась. Претензии к исторической хронологии? Чем отличается "давно" и "в свое время"? Именно в те годы, которые вы упоминаете, мне приходилось работать с упомянутыми алгоритмами. И какая разница, указал я поточнее годы или не указал? Для меня в них (алгоритмах) нет ничего непонятного.
Опять-таки насчет мифа о сложности. "Гораздо сложнее" и "сложность обработки" всего лишь вопрос терминологии. Вам не понравилась превосходная степень? Но это же не меняет соотношения "проще - сложнее". Ведь отрицать, что сложнее вы не станете. А уж степень сложности я специально не затрагивал, это зависит от уровня и квалификации прогера.
На практике мне подправлять ровным счетом ничего не надо. Повторяю, у меня проблем с кнопками нет.
Тем не менее, благодарю за комментарий. Я вас уважаю, как давнего (чуть не написал "вечного") апологета АСМ-а, хотя на мой взгляд и слегка воинствующего. Но это право вы вполне заслужили.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 28.12.2011, 05:10  
DAVE_ELEKTRIK
Прописка
 
Аватар для DAVE_ELEKTRIK
 
Регистрация: 18.10.2010
Адрес: Planet Earth )
Сообщений: 120
Сказал спасибо: 14
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
DAVE_ELEKTRIK на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от pinco Посмотреть сообщение
P.S. А представьте себе что например и на клаве компа так по идиотски сделано - реагирование на отпускание - на такой клаве набор любого текста со смачным матом при этом вслух точняк гарантирован
Я не спорю, я с вами вполне согласен.
Но иногда требуется на отжатие, а иногда и то и другое.
Цитата:
Так что учитесь сразу нормально все делать ,пусть даже и понемногу - но нормально , по человечески
Так вот по человечески не выходит!
Разбирался с аппаратными прерываниями (INT0 прицепил кнопку) разбирался - разбирался, ничего не вкурил.
В книжке высмотрел прогу, та же программа счетчик только с прерываниями по входу INT0 и таймеру (рассматриваю пока только на ассемблере, до С позже доберусь). Алгоритм вроде такой же, как без прерываний(прогу выкладывал ранее). Залил в AVRStudio, в пошаговом режиме показало, что с второго нажатия (при отжатии) результат счета выводится на порт
Алгоритм программы не понятен, народ может подскажете? Мне сейчас трудно быстро понять, так что сильно не ругайте!
Вложения:
Тип файла: zip program_counter.zip (1.3 Кб, 45 просмотров)
__________________
Мозги кипят, ядрить твою валентность!!! Пойду закладывать остальные ингредиенты...
DAVE_ELEKTRIK вне форума  
Непрочитано 28.12.2011, 08:53  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от roma9112 Посмотреть сообщение
Подскажите пожалуйста! Я в подключаемой к main одной из функций типа void изменяю какую-ту переменную, задаваемую в той же функции, а можно ли сделать так, чтобы я мог значение этой переменной просмотреть(проверить) и в главной main функции, объявить ее глобальной? А если можно то как? Я где не пробовал
Понимаете, в чём дело. Кроме форумов ещё существуют такие книжки - учебники. Керниган и Ричи выпустили книгу «Язык программирования Си» в 1978 году, где всё прекрасно описано. Книга настолько популярна, что заслужила народное название "K&R", прочитана миллионами человек и актуальна до сих пор. Гугль на запрос "учебник по си скачать" даёт более полумиллиона ссылок. Странно, что вам не пришло в голову пойти таким путём; поверьте, он единственно правильный.
makakus вне форума  
Непрочитано 28.12.2011, 10:05  
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от pinco Посмотреть сообщение

P.S. А представьте себе что например и на клаве компа так по идиотски сделано - реагирование на отпускание - на такой клаве набор любого текста со смачным матом при этом вслух точняк гарантирован

Так что учитесь сразу нормально все делать ,пусть даже и понемногу - но нормально , по человечески , а не просто наскоро прогу косячить .
А кнопки мыши то работают по отпусканию.
Так что DAVE_ELEKTRIK прав
Цитата:
Но иногда требуется на отжатие, а иногда и то и другое.
alvadep вне форума  
Непрочитано 28.12.2011, 11:07  
roma9112
Гражданин KAZUS.RU
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от makakus Посмотреть сообщение
Понимаете, в чём дело. Кроме форумов ещё существуют такие книжки - учебники. Керниган и Ричи выпустили книгу «Язык программирования Си» в 1978 году, где всё прекрасно описано. Книга настолько популярна, что заслужила народное название "K&R", прочитана миллионами человек и актуальна до сих пор. Гугль на запрос "учебник по си скачать" даёт более полумиллиона ссылок. Странно, что вам не пришло в голову пойти таким путём; поверьте, он единственно правильный.
Ну почему же, пришло, только я сейчас на Подбельском с Фоминым сижу.
Просто мне иногда проще на конкретном примере глянуть, и провести аналогию со своим вариантом.
roma9112 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите начинающему (PIC16F84A). Slava-martyn Микроконтроллеры, АЦП, память и т.д 11 09.09.2010 21:55
помогите начинающему по WinAVR umkamaks Микроконтроллеры, АЦП, память и т.д 4 05.05.2010 21:01
Помогите начинающему! kolira Микроконтроллеры, АЦП, память и т.д 6 30.01.2010 15:22
Помогите советом начинающему eler Делимся опытом 64 11.09.2008 17:28
Помогите начинающему!!!! sma-etu Микроконтроллеры, АЦП, память и т.д 2 13.12.2006 18:31


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


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