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

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

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

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

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

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

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

 
Опции темы
Непрочитано 06.01.2012, 13:20  
Pajatel
Прописка
 
Аватар для Pajatel
 
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
Pajatel на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от omercury Посмотреть сообщение
З.Ы. Алгоритм обработки кнопок подробно описАл здесь. Дальше есть код, на С правда...
..если кого интересует, могу выложить свой код и алгоритм обработки кнопок на асме, но так как задачи не было отслеживать разницу это длинное или короткое нажатие то я такой фишки в него и не встраивал, также он не отреагирует на нажатие двух или более кнопок одновременно(будет обработана кнопка, которая нажалась первой). Обработка кнопки происходит по нажатию, а держать нажатой можно как угодно долго.
Реклама:
Pajatel вне форума  
Непрочитано 06.01.2012, 13:57  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от Pajatel Посмотреть сообщение
..если кого интересует, могу выложить свой код и алгоритм обработки кнопок на асме
В принципе, логика та же. "Чувствует" только одиночные нажатия кнопок. Все отсчёты через таймер. Там же проект в Proteus 7.7.
PWM_Key_Led.zip
omercury вне форума  
Непрочитано 06.01.2012, 15:28  
Pajatel
Прописка
 
Аватар для Pajatel
 
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
Pajatel на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от omercury Посмотреть сообщение
В принципе, логика та же. "Чувствует" только одиночные нажатия кнопок.
...простенько и со вкусом. Для простеньких проектиков вполне приемлимый вариант, ну эт на мой конечно взгляд. А так, много нюансов имеется, и таймер в принципе забирает на свои нужды полностью, ну если только частота такая ещё где пригодится, как в данном проектике для PWM, и масок нужно будет много если вдруг кнопки на разных портах или немного нужно поменять код опроса, и целый регистр для флагов можно было не задействовать... я допустим те же флаги всунул в регистр кнопок. По шагово не разбирался, но есть подозрение, что если хорошо помучать кнопки то будут ложные срабатывания.
Pajatel вне форума  
Непрочитано 06.01.2012, 15:30  
pinco
Гражданин KAZUS.RU
 
Регистрация: 04.04.2007
Сообщений: 941
Сказал спасибо: 571
Сказали Спасибо 113 раз(а) в 85 сообщении(ях)
pinco на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

А я и без таймера для просчета задержек кнопок в некоторых видах прог вполне обхожусь ,когда таймеры нужнее для других функций , еще как-то делал прогу и с кнопками без прерываний вообще - по флагам только , да по системным тактам от основной проги по ее циклам ,опрос пинов входных естественно , потом просто подобрал нужные длительности , и все нормально работало - в общем разных вариантов много , только успевай реализовывать .
__________________
Короче асма кода нет !

Последний раз редактировалось pinco; 06.01.2012 в 15:39.
pinco вне форума  
Непрочитано 06.01.2012, 15:41  
Pajatel
Прописка
 
Аватар для Pajatel
 
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
Pajatel на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

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

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

Последний раз редактировалось pinco; 06.01.2012 в 15:56.
pinco вне форума  
Непрочитано 06.01.2012, 15:59  
Pajatel
Прописка
 
Аватар для Pajatel
 
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
Pajatel на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от pinco Посмотреть сообщение
Я в свою очередь не соглашусь с Вами потому что реализовать у Вас получилось лишь некоторые из
мммм ..зачем спорить, покажите хоть один на асме... может тогда я выкину свой и буду его лучше пользовать.. ведь вродь ничего особенного и не нужно то.. кнопка нажата - делаем дело... Вот допустим к выложенному выше варианту практически притензий нету, но универсальностью он не блещет... Для другого проекта его скорей всего придётся перепахать и получится совсем другой код... Ваш вариант без таймера вообще только для конкретного вашего проекта.. я точно не буду считать шаги процессора чтоб получить задержки... а если кварц допустим поменяю или подпрограммку вклиню где-нить? ..опять всё пересчитывать?
Pajatel вне форума  
Непрочитано 06.01.2012, 16:25  
pinco
Гражданин KAZUS.RU
 
Регистрация: 04.04.2007
Сообщений: 941
Сказал спасибо: 571
Сказали Спасибо 113 раз(а) в 85 сообщении(ях)
pinco на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от Pajatel Посмотреть сообщение
.. Вот допустим к выложенному выше варианту практически притензий нету, но универсальностью он не блещет... Для другого проекта его скорей всего придётся перепахать и получится совсем другой код... Ваш вариант без таймера вообще только для конкретного вашего проекта.. я точно не буду считать шаги процессора чтоб получить задержки... а если кварц допустим поменяю или подпрограммку вклиню где-нить? ..опять всё пересчитывать?
Если Вы кнопки от проекта к проекту кнопки сажаете на разные порты то по любому и придется перепахивать , а куда ж от этого денешься , а задержки - на много ли процентов Вы меняете частоту в своих изделиях и как часто ? Если допустим в обработке было 50 мс при кварце в 12 Мгц и захотелось поменять на кварц в 16 или в 20 Мгц то сильно ли изменится надежность срабатывания если не менять ничего в проге обработки кнопок ? Да ничего существенно не изменится - там где без таймера - изменение в 1,5 раза всего общих задержек , можно смело менять кварц и не трогать прогу совсем .А в варианте с таймером - тоже почти ничего можно не трогать .Про добавки прог - ну добавили немного еще прог - а сильно ли времена выдержек изменятся ? Да в общем то не очень , так что слишком уж опасаться нечего .Потом не пойму а зачем Вам всеобщая универсальность такая ? У меня например от проекта к проекту и схема кнопок может меняться , и следовательно сам алгоритм опроса их ,написать какой надо под придуманную схему не проблема , а одно и то же схематическое решение, и под него некий универсальный алгоритм , - совать во все дырки постоянно не получится .

К примеру ,раз просили привести - привожу : реализовал передачу данных на светодиоды одновременно с приемом данных от кнопок , сами кнопки и светодиоды организованы в виде выносного пульта на кабеле , для обмена используется 4 жилы сигнальных и 2 питания , на стороне пульта - регистры HC589 - приемные с кнопок ,и HC595 - выходные для светодиодов пульта ,то есть 6 выводов на все , отдал порт "B" - обычно этот 6 битный , а как преимущество - на эти 4 сигнальных пока сидит 8 кнопок и 4 двухцветных светодиода , ну и еще семисегментный индикатор , но при расширении блока пульта хоть до 20 кнопок а светодиодов до 40 - обмен по все тем же 4 сигнальным проводам идет , и прога - одна и та же - только добавится число шагов считки . Сам процесс обмена оформлен в виде отдельной подпрограммы , вызывается когда надо из основной , и может быть легко перенесен из одного проекта в другой , если уж совсем ничего не менять в тексте то подключаем все это хозяйство к тому же порту что и было в прежних проектах .

IN_OUT: ;ПОДПРОГРАММА ВЫВОДА ИНФЫ НА СВЕТОДИОДЫ И СЕМИСЕГМЕНТНЫЕ ИНДИКАТОРЫ ПУЛЬТА
;УПРАВЛЕНИЯ И ОДНОВРЕМЕННОГО ПРИЕМА ИНФЫ СО ВСЕХ КНОПОК НАЖАТЫХ ИЛИ НЕТ С ЭТОГО ПУЛЬТА
;,ПОСЛЕДОВАТЕЛЬНО ПО ШЛЕЙФУ в 10 жил .А сама дешифрация - отдельно .Все выдержки времени
;для 8 Мгц тактовой AVR-а приведены.

cbi PORTB,3 ;делаем WR в 0 на 280 мкс примерно - забивка текущих положений всех кнопок

ldi RAB18,120
ldi RAB19,1
ldi RAB20,0

rcall TIME

sbi PORTB,3 ;устанавливаем WR в 1 - перегрузили данные кнопок в вых передающий регистр
; и далее забивка битов (светодиодов или любых других выходов)
ldi RAB18,120
ldi RAB19,1
ldi RAB20,0

rcall TIME ;выжидаем время чтобы первый же бит передаваемый из пульта успел успокоиться
; в линии

mov RAB16,F3 ;сдвигаемый и операции с ним можно производить на время вывода битов в выход
clr RAB17 ;счетный циклов

clr F1 ;сначала общий сброс всех битов приемных для кнопок

JJ1: sbic PINB,1 ;пропуск след команды если B1 сброшен
inc F1

; lsl F1 ;бит от 1 кнопки принят от пульта в F1 и он сдвинут для приема следующего бита
;также пока не сдвинули - устанавливаем уровень первого вых бита в B2 PINB ,из F3 с
;младшихших бит начинаем
sbi PORTB,2 ;устанавливаем вых уровень бита из AVR-а (в линии инверсный при этом)
sbrs RAB16,0 ;пропуск след команды если бит 0 в F3 тоже был установлен
cbi PORTB,2
;теперь все есть и готово к сигналу CLK для дальнейшей забивки

;далее даем строб CLK

cbi PORTB,0 ;даем CLK=0

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

sbi PORTB,0 ;даем CLK=1 обратно в 1 исходное

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME


inc RAB17
; lsr RAB16 ;подставляем очередной следующий бит на 0 место

cpi RAB17,8
brsh HT1 ;если = 8 или больше то уже не уходим снова вверх а идем далее на формирование
;вых битов так как прием от 8 кнопок всего то уже принятых 8 бит заполнили F1 и можно уже
;работать без приема бит - а только на передачу оставштхся .
;-----далее следующий цикл обмена для следующего приемного бита и передаваемого бита------

lsr RAB16 ;подставляем очередной следующий бит на 0 место
lsl F1
rjmp JJ1

;забивка следующего байта - из F4 (младшими вперед)
HT1:

mov RAB16,F4
clr RAB17

JJ2: ;так как байт положений входов (кнопок) уже принят то нет куска проги по приему от B1

sbi PORTB,2 ;устанавливаем вых уровень бита из AVR-а (в линии инверсный при этом)
sbrs RAB16,0 ;пропуск след команды если бит 0 в F4 тоже был установлен
cbi PORTB,2
;теперь все есть и готово к сигналу CLK для дальнейшей забивки

;далее даем строб CLK

cbi PORTB,0 ;даем CLK=0

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

sbi PORTB,0 ;даем CLK=1 обратно в 1 исходное
ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

inc RAB17
; lsr RAB16 ;подставляем очередной следующий бит на 0 место

cpi RAB17,8
brsh HT2 ;если = 8 то уже не уходим снова вверх а идем далее на формирование вых битов
;так как прием от8 кнопок всего то уже принятых 8 бит заполнили F1 и можно уже работать
;без приема бит - а только на передачу оставштхся .
;-----далее следующий цикл обмена для следующего приемного бита и передаваемого бита------

lsr RAB16 ;подставляем очередной следующий бит на 0 место
rjmp JJ2

;забивка следующего байта - из F5 (младшими вперед)
HT2:
mov RAB16,F5
clr RAB17

JJ3: ;так как байт положений входов (кнопок) уже принят то нет куска проги по приему от B1

sbi PORTB,2 ;устанавливаем вых уровень бита из AVR-а (в линии инверсный при этом)
sbrs RAB16,0 ;пропуск след команды если бит 0 в F3 был установлен
cbi PORTB,2
;теперь все есть и готово к сигналу CLK для дальнейшей забивки

;далее даем строб CLK

cbi PORTB,0 ;даем CLK=0

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

sbi PORTB,0 ;даем CLK=1 обратно в 1 исходное

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

inc RAB17

cpi RAB17,8
brsh HT3 ;если = 8 то уже не уходим снова вверх а идем далее на формирование вых битов
;так как прием от8 кнопок всего то уже принятых 8 бит заполнили F1 и можно уже работать
;без приема бит - а только на передачу оставштхся .
;-----далее следующий цикл обмена для следующего приемного бита и передаваемого бита------

lsr RAB16 ;подставляем очередной следующий бит на 0 место
rjmp JJ3

HT3:
;забивка следующего байта - из F6 (младшими вперед)

mov RAB16,F6
clr RAB17

JJ4: ;так как байт положений входов (кнопок) уже принят то нет куска проги по приему от B1

sbi PORTB,2 ;устанавливаем вых уровень бита из AVR-а (в линии инверсный при этом)
sbrs RAB16,0 ;пропуск след команды если бит 0 в F3 был установлен
cbi PORTB,2
;теперь все есть и готово к сигналу CLK для дальнейшей забивки

;далее даем строб CLK

cbi PORTB,0 ;даем CLK=0

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

sbi PORTB,0 ;даем CLK=1 обратно в 1 исходное

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

inc RAB17

cpi RAB17,8
brsh HT4 ;если = 8 то уже не уходим снова вверх а идем далее на формирование вых битов
;так как прием от8 кнопок всего то уже принятых 8 бит заполнили F1 и можно уже работать
;без приема бит - а только на передачу оставштхся .
;-----далее следующий цикл обмена для следующего приемного бита и передаваемого бита------

lsr RAB16 ;подставляем очередной следующий бит на 0 место
rjmp JJ4

HT4:
;забивка следующего байта - из F7 (младшими вперед)

mov RAB16,F7
clr RAB17

JJ5: ;так как байт положений входов (кнопок) уже принят то нет куска проги по приему от B1

sbi PORTB,2 ;устанавливаем вых уровень бита из AVR-а (в линии инверсный при этом)
sbrs RAB16,0 ;пропуск след команды если бит 0 в F3 был установлен
cbi PORTB,2
;теперь все есть и готово к сигналу CLK для дальнейшей забивки

;далее даем строб CLK

cbi PORTB,0 ;даем CLK=0

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

sbi PORTB,0 ;даем CLK=1 обратно в 1 исходное

ldi RAB18,120 ;выдерживаем примерно 200 мкс
ldi RAB19,1
ldi RAB20,0

rcall TIME

inc RAB17

cpi RAB17,8
brsh HT5 ;если = 8 то уже не уходим снова вверх а идем далее на формирование вых битов
;так как прием от8 кнопок всего то уже принятых 8 бит заполнили F1 и можно уже работать
;без приема бит - а только на передачу оставштхся .
;-----далее следующий цикл обмена для следующего приемного бита и передаваемого бита------

lsr RAB16 ;подставляем очередной следующий бит на 0 место
rjmp JJ5

HT5:
;забивка закончена , все биты переданы в линию в пульт в его приемный регистр

cbi PORTB,3 ;теперь делаем WR в 0 на 280 мкс примерно - забивка текущих положений
;всех только что принятых битов из регистра на выходы , в светодиоды
;и индикатор .
ldi RAB18,120
ldi RAB19,1
ldi RAB20,0

rcall TIME

sbi PORTB,3 ;устанавливаем WR в 1 - перегрузили данные кнопок в вых передающий регистр
; и далее забивка битов (светодиодов или любых других выходов)
ldi RAB18,120
ldi RAB19,1
ldi RAB20,0

rcall TIME ;выжидаем время чтобы первый же бит передаваемый из пульта успел успокоиться
; в линии

;----------------НУ ВОТ ТЕПЕРЬ ВРОДЕ КАК ВСЕ БИТЫ ВЫХОДОВ И ПЕРЕДАЛИ -------------------

ret
;-------------------------------------------------------------------------------------

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

P.S. Это как пример только (хоть и выдрал Вам из своего реального проекта) , что разных схем кнопок и их алгоритмов обслуги все же приличное множество , нормально работающих, а какие из них будут реализованы конкретно - зависит от фантазии и возможностей разработчика , лишь бы у него это надежно работало .
__________________
Короче асма кода нет !

Последний раз редактировалось pinco; 06.01.2012 в 17:26.
pinco вне форума  
Непрочитано 06.01.2012, 16:38  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от Pajatel Посмотреть сообщение
если хорошо помучать кнопки то будут ложные срабатывания.
Цитата:
Если что-то очень долго ломать - оно в конце концов сломается.
На универсальность никто и не претендовал. В данном конкретном проекте таймер уже используется. Со строго определённым периодом. Так почему бы не использовать его для других задач параллельно?
Ресурсов для данного проекта - с головой, посему с регистрами не заморачивался, а так, по желанию, можно и объединять, ежели ресурсов не хватает. Причём в единственном месте - в файле "PWM_Key_Led_Var.asm"
Сообщение от Pajatel Посмотреть сообщение
а если кварц допустим поменяю
Для этой цели есть константа "osc". Через неё легко сделать перерасчёт тактов от частоты.
omercury вне форума  
Непрочитано 06.01.2012, 17:19  
Pajatel
Прописка
 
Аватар для Pajatel
 
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
Pajatel на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от pinco Посмотреть сообщение
Забыл сказать - TIME просто счетчик этих самых тактов задержки
...извиняюсь за неграматность, а это как? ..просто впустую крутим проц и больше ничего он в это время не делает?!
Сообщение от omercury Посмотреть сообщение
На универсальность никто и не претендовал.
..так ваш код мне в принципе понравился, сама идея хороша, проста и неприхотлива, может быть, увидев её раньше, я бы её взял бы за основу.. Мой кстать чем то похож, только чуток универсальней и соответственно немного побольше получился..
Сообщение от pinco Посмотреть сообщение
Если Вы кнопки от проекта к проекту сажаете на разные порты то по любому и придется перепахивать
...мой не придётся ..не бум спорить, это бесконечно.. Чуток позже подготовлю свой код для всеобщего обозрения, могит кому понравится и пригодится. Думаю, он притендует на универсальность и лёгкое встраивание в любой проект. Сейчас чуток напряг со временем, а чуть позже выложу.

Последний раз редактировалось Pajatel; 06.01.2012 в 17:32.
Pajatel вне форума  
 

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

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

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


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