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

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

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

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

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

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

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

 
Опции темы

Помогите начинающему по ATmega8515

Непрочитано 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.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
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.RUN
 
Регистрация: 04.04.2007
Сообщений: 937
Сказал спасибо: 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.RUN
 
Регистрация: 04.04.2007
Сообщений: 937
Сказал спасибо: 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.RUN
 
Регистрация: 04.04.2007
Сообщений: 937
Сказал спасибо: 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.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
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 Делимся опытом 100 11.09.2008 17:28
Помогите начинающему!!!! sma-etu Микроконтроллеры, АЦП, память и т.д 2 13.12.2006 18:31


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


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