AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

Ткните мордой как правильно смотреть состояние определенного пина и как определенному выводу установить значение в студии. До этого писал в кодевижне, и пользовался конструкциями PINB.1 и PORTB.0, и я так понял тут таких макросов нет :))
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

Код: Выделить всё

#define bit_set(reg,bit)   ((reg) |=  (1<<(bit)))
#define bit_clr(reg,bit)   ((reg) &= ~(1<<(bit)))
#define bit_test(reg,bit)  ((reg) & (1<<(bit)))
Ставим плюсы: )
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

Спасибо=)
А никто не подскажет как правильнее всего опрашивать кнопки с антидребезгом?
Просто чувствую что то что я пишу это даже не велосипед сделанный из костылей а что-то гораздо хуже...
Спойлер

Код: Выделить всё

#define AMP PINB.0

if(AMP)
{     
   delay_ms(50);
   if(AMP)
   {

   } 
}

Ооочень хочется избавиться от криворукости :))
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение ibiza11 »

использовать так:

Код: Выделить всё

#include "buttons.h" // в этом файле меняем BUTTON_OK,BUTTON_UP,BUTTON_DOWN,BUTTON_LEFT,BUTTON_RIGHT на свои названия
/* в файле buttons.h меняем порт и номер бита вместо тех, что там написаны:
#define BUTTON_0_PORT     C,4
#define BUTTON_1_PORT     C,5
#define BUTTON_2_PORT     C,6
#define BUTTON_3_PORT     C,7
*/

      buttons_init();
           
      if(button_lock(BUTTON_OK)){
         button_lock_clr(BUTTON_OK);
         // действие по короткому нажатию
      }


      if(button_hold(BUTTON_OK)){
         button_hold_clr(BUTTON_OK);
         // действие по долгому нажатию
      }

...
buttons_service(); - вызываем раз в 10мс
Вложения
buttons.h
(1.27 КБ) 301 скачивание
buttons.c
(5.16 КБ) 318 скачиваний
Последний раз редактировалось ibiza11 Чт июн 19, 2014 17:45:07, всего редактировалось 1 раз.
Ставим плюсы: )
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: AVR studio 4 в вопросах и ответах

Сообщение Pavel_1978 »

Самый распространненый алгоритм:
создаете три флага
KeyState, KeyStateOld и KeyResult
в прерывании по таймеру опрашиваете кнопку полученый результат в флаг KeyState
выходите из прерывания в следующем прерывании переносите из KeyState в KeyStateOld снова опрашиваете кнопку
Если в течении нескольких опросов состояния равны то выставляете флаг KeyResult и его уже используете в процедурах работы с кнопкой

Ну как то так.
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

О, огромное спасибо :))
In me the WishMaster...
Изображение
Изображение
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Alexeyslav »

Много лишнего. Просто считывайте кнопку по таймеру с периодом около 10мс и никакой дребезг не страшен максимум чем это чревато - обнаружите нажатие на 0...10мс позже фактического. Можно конечно еще хранить предыдущее значение кнопки, тогда можно отлавливать моменты нажатия и отпускания.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение pyzhman »

Alexeyslav писал(а):Много лишнего.

Код: Выделить всё

KeyStateOld= KeyState;
KeyState= PINX.Y;
if(KeyStateOld== KeyState) KeyResult= 1;
// + к тому
if(KeyStateOld && !KeyState) ButtonPress();// момент нажатия кнопки
if(!KeyStateOld && KeyState) ButtonDerpess();// момент отпускания кнопки

Это много?
PS. Извините, на сях.
Docendo discimus
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Alexeyslav »

Здесь нет проверки на "в течении нескольких опросов состояния равны" вот именно она и лишняя.
Да, и этот код тоже работать не будет, т.к. он выдает нажатие даже когда кнопка не нажата.
Проверки (KeyStateOld== KeyState) недостаточно, надо еще AND (KeyState==1{или 0, какое значение соответствует нажатию кнопки})
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение pyzhman »

Alexeyslav писал(а):тоже работать не будет

Мдя, сранно, а у меня везде и рядом работает. Пойду херить свои проекты.
Docendo discimus
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: AVR studio 4 в вопросах и ответах

Сообщение shads »

WishMasterMax писал(а):А никто не подскажет как правильнее всего опрашивать кнопки с антидребезгом?
Поиск рулит...
viewtopic.php?f=61&t=39341&start=240
viewtopic.php?f=61&t=79801&start=160
viewtopic.php?f=57&t=101520
viewtopic.php?f=62&t=99360
mmor
Родился
Сообщения: 6
Зарегистрирован: Пт дек 30, 2011 20:34:33

Re: AVR studio 4 в вопросах и ответах

Сообщение mmor »

подскажите по такой проблемке:
AVR Studio 4.16, контроллер Attiny13, код на асме.
При компиляции пишет:

Код: Выделить всё

ATtiny13 memory use summary [bytes]:
Segment   Begin    End      Code   Data   Used    Size   Use%
----------
[.cseg] 0x000000 0x00020a    512      0    512    1024  50.0%
[.dseg] 0x000060 0x000060      0      0      0      64   0.0%
[.eseg] 0x000000 0x000000      0      0      0      64   0.0%



Но стоит в код добавить один nop, сразу компилировать отказывается. лезут ошибки.
Т.е. похоже как будто при загрузке более 50% код не умещается что ли?
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Pink-Pank »

А код можно? и место прокомментируйте, куда добавляете.
Fucking static initialization order fiasco
mmor
Родился
Сообщения: 6
Зарегистрирован: Пт дек 30, 2011 20:34:33

Re: AVR studio 4 в вопросах и ответах

Сообщение mmor »

код большой, как сделать что бы прокрутка была в поле code?
На всякий случай приаттачил.
Есть такое соображение, что память у Attiny13 512х16 бит.
Может поэтому и 50% максимум?
Вложения
CTCSS_asm.asm
(7.32 КБ) 190 скачиваний
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

Так он же вам английским по белому пишет:
(144): error: Relative branch out of reach
И даже ссылку даёт какая строка ему не нравится:
brsh M12;
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
mmor
Родился
Сообщения: 6
Зарегистрирован: Пт дек 30, 2011 20:34:33

Re: AVR studio 4 в вопросах и ответах

Сообщение mmor »

добавить еще пару nop, или закомментировать часть строк, он будет ошибку на другую метку показывать.

Вот нашел на этом же сайте:
Не могу понять почему появляется ошибка: "Relative branch out of reach". Компилятор начал ругаться когда я добавил в программе несколько подпрограмм
(даже если они пустые) на brne, breq?
Ответ:
Команды условных переходов brne и breq имеют "дальность работы" от -64 до +63. У Вас расстояние до метки больше, поэтому ассемблер и выдает ошибку.
Используйте RCALL и RJMP, у которых дальность действия составляет от -2047 до +2047. И не строк, а команд (слов по 2 байта).

Буду теперь размышлять.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

Почитайте подробнее описание команд типа BRSH и заодно правила форума.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
mmor
Родился
Сообщения: 6
Зарегистрирован: Пт дек 30, 2011 20:34:33

Re: AVR studio 4 в вопросах и ответах

Сообщение mmor »

Слушаюсь, КЭП
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: AVR studio 4 в вопросах и ответах

Сообщение akl »

Добавлю. Стек нужно правильно установить или воспользоваться тем, что он устанавливается аппаратно 0x9F.
mmor
Родился
Сообщения: 6
Зарегистрирован: Пт дек 30, 2011 20:34:33

Re: AVR studio 4 в вопросах и ответах

Сообщение mmor »

да, это уже поправил.
спасибо.
Ответить

Вернуться в «AVR»