Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс июл 27, 2025 21:33:56

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 83, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 07, 2011 21:15:52 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Gudd-Head писал(а):
Также, как и не на асемблере. Только не в прерывании.

поправлю чуток, задержек в прерываниях не делают.

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 07, 2011 21:16:41 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
GP1 писал(а):
поправлю чуток, задержек в прерываниях не делают.

Я это и имел в виду :)

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 07, 2011 21:26:19 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
хорошо. а тогда такой вопрос - как грамотные люди осуществляют эту задержку на ассемблере?

Грамотные люди паяют кондёр на 0,1мкФ параллельно кнопке, и забывают про них. А когда действительно понадобится обработать дребезг, у них уже будет накоплен опыт программирования, и проблем это не составит.

Я делаю так (на каждую кнопку)
1. флаг нажатия (устанавливается при нажатии)
2. флаг необходимости действия при нажатии
3. Флаг необходимости действия при отпускании
4. Счетчик антидребезга (регистр, память, не важно)

Далее при опросе кнопок такой алгоритм: проверяем флаг нажатия, если небыло и кнопка нажата - увеличиваем счетчик. Как досчитает - ставим флаг действия по нажатию. При отпускании - снимаем флаг нажатия и устанавливаем флаг действия по отпусканию.

Флаги действий снимаются (или нет для повторяющихся действий) уже в обработчике этих действий.

Такой простенький флаговый автомат. Звучит сложно, но на самом деле работает быстро, надёжно, и, самое главное, писать дальнейший код просто приятно - проверяй флаги действий и всё.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 07, 2011 22:11:38 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вс окт 10, 2010 17:43:48
Сообщений: 362
Откуда: Воронеж
Рейтинг сообщения: 0
ploop писал(а):
алгоритм: проверяем флаг нажатия, если небыло и кнопка нажата - увеличиваем счетчик. Как досчитает - ставим флаг действия по нажатию.

во! отличная мысль! спасибо! :beer:
кондер на той макетке уже некуда лепить, поэтому хотел программно :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 07, 2011 22:21:27 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Пример кода (без счетчика, я кондёры люблю :) Куда добавить догадаетесь)

Код:
; rx1 - флаги нажатия кнопок
; rx2 - флаги действий. Младшие 4 бита - действий по нажатию, старшие - по отпусканию.
; как раз один регистр на 4 кнопки.
sbic  btn1_pin,btn1_bit
rjmp bt01                       ; если кнопка нажата
  sbrc rx1,3                    ; проверяем, была ли она нажата ранее
  rjmp bt02                     ; если да - выходим
  ori rx2,(1<<3)                ; если нет - устанавливаем действие по нажатию
  ori rx1,(1<<3)                ; и факт нажатия
  rjmp bt02
bt01:                           ; если не нажата
  sbrs rx1,3                    ; и не была нажата ранее
  rjmp bt02                     ; выходим
  andi rx1,~(1<<3)              ; иначе сбрасываем факт нажатия
  ori rx2,(1<<7)                ; ставим действие по отпусканию
bt02:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 08, 2011 10:21:28 
Первый раз сказал Мяу!

Зарегистрирован: Пт фев 18, 2011 20:37:34
Сообщений: 31
Рейтинг сообщения: 0
Здравствуйте. В очередной раз прошу помощи с инициализацией датчика DS18B20 на асме. Где здесь может быть ошибка?
Код:
Init_1W:
   cbi   wireport, wirebit      ; 0->DDR = Z
   sbis   wirepin, wirebit   
   rjmp   presence_fault      
   sbi   wireport, wirebit      
   ldi   wiretemp, 49      
   rcall   delayus         
   cbi   wireport, wirebit      
   ldi   wiretemp, 6      
   rcall   delayus         
   ldi   wiretemp, 250         
presence_wait:
   sbis    wirepin, wirebit
   rjmp   presence_ok
   rcall   delay1us
   dec   wiretemp
   brne    presence_wait
presence_fault:
   clz   

   ldi wiretemp,0b10000000
   out PortC,wiretemp

   ret
presence_ok:
   sez                     
   ldi   wiretemp, 48      
   rcall   delayus
   ret


Процедура delayus осуществляет задержку на wiretemp десятков микросекунд. Где закралась ошибка? Процедуры задержки перепроверял, там все верно.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 08, 2011 11:10:31 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вс окт 10, 2010 17:43:48
Сообщений: 362
Откуда: Воронеж
Рейтинг сообщения: 0
GP1 писал(а):
существуют различные способы, как правило конкретный метод определяется задачей, скажем определить факт нажатия - это одно, а различить короткое/длинное нажатие это совсем другое.
чаще всего кнопки опрашивают по прерываню таймера, но попадаются и по внешним прерываниям, но реже.

кстати в таком случае с какой частотой стоит проверять кнопку? я все-таки решил переделать программу, чтобы INT0 вообще не использовался


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 08, 2011 12:52:55 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
Necroteeth писал(а):
кстати в таком случае с какой частотой стоит проверять кнопку?
.. в тело прерывания по таймеру вставляете программный счетчик. Например таймер срабатывает каждые 2 мсек (500 Гц), тогда если счетчик = 25, то прошла 1/20 секунды (факт нажатия), дальше "мертвое время" и автоповтор если нужно...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 08, 2011 13:41:02 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Necroteeth
надеюсь предыдуший оратор все понятно изложил?

Skyer
Почему вы думаете
что если вам лень писать коменты, то у остальных возникнет желание разбирать ваш кривой код?

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб апр 09, 2011 20:01:23 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Skyer писал(а):
Процедура delayus осуществляет задержку на wiretemp десятков микросекунд. Где закралась ошибка? Процедуры задержки перепроверял, там все верно.

Время на команды перехода и т.п. тоже учли?

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс апр 10, 2011 19:20:29 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вс окт 10, 2010 17:43:48
Сообщений: 362
Откуда: Воронеж
Рейтинг сообщения: 0
GP1 писал(а):
Necroteeth
надеюсь предыдуший оратор все понятно изложил?

если честно, то не очень...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пн апр 11, 2011 06:52:16 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
Necroteeth писал(а):
если честно, то не очень...
Код:
 .equ cnt = r16
......

timer_ovf:
push ....
push ....
ldi TCNT0,... ; перезагрузка таймера
............

sbis PINx,X ; кнопка нажата?
rjmp press_key
;нет нажатия - сброс счетчика
clr cnt
rjmp no_time
press_key:
inc cnt
cpi cnt,25 ; время удержания вышло?
brne no_time
; фиксируем факт нажатия
........

no_time:
pop ...
pop ...
reti


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 14, 2011 15:47:27 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Как с помощью МК определить направление вращения энкодера, покрасивее и покомпактнее?
Энкодер двухбитный в коде Грея, т.е. последовательность 00-10-11-01 в одну сторону и 00-01-11-10 в другую.
Пока в голову не приходит ничего лучше, чем сравнивать прошлые 2 бита и новые 2 бита с константами (CPI с последующим BREQ на каждую константу) "0010", "1011", "1101" и "0100" в случае инкремента (условно); "0001", "0111", "1110" и "1000" в случае декремента.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 14, 2011 21:57:24 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Пока в голову не приходит ничего лучше, чем сравнивать прошлые 2 бита и новые 2 бита с константами (CPI с последующим BREQ на каждую константу) "0010", "1011", "1101" и "0100" в случае инкремента (условно); "0001", "0111", "1110" и "1000" в случае декремента.

А если принимать значение в буферный регистр (как последовательный код) и сравнивать с его предыдущим значением, сдвинутым в право/влево с переносом (в закольцованном регистре)? В каком случае совпадёт, туда и движение.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 14, 2011 23:15:26 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
Gudd-Head писал(а):
Как с помощью МК определить направление вращения энкодера, покрасивее и покомпактнее?
Энкодер двухбитный в коде Грея, т.е. последовательность 00-10-11-01 в одну сторону и 00-01-11-10 в другую.
Пока в голову не приходит ничего лучше, чем сравнивать прошлые 2 бита и новые 2 бита с константами (CPI с последующим BREQ на каждую константу) "0010", "1011", "1101" и "0100" в случае инкремента (условно); "0001", "0111", "1110" и "1000" в случае декремента.


1. Предыдущую и текущую комбинацию объединяем в одно слово.
2. Для полученных кодов делаем табличку. То есть, полученный код - адрес в таблице. Данные в таблице по тем адресам, которые соответствуют приращению константы, которую крутим энкодером - 01, которые соответствуют уменьшению - $ff, по остальным адресам нули.
3. Все. По прерыванию(или еще как-то) считываем значение с порта на котором висит энкодер. Получаем элемент таблицы. константу которую крутим суммируем (add) с элементом таблицы.

Если непонятно - пиши, поясню на примере. Все получается не очень компактно(из-за таблицы), но очень быстро и просто и без условных переходв.

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 15, 2011 11:26:20 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ploop писал(а):
А если принимать значение в буферный регистр (как последовательный код) и сравнивать с его предыдущим значением, сдвинутым в право/влево с переносом (в закольцованном регистре)? В каком случае совпадёт, туда и движение.

Думал о закольцованом регистре, но т.к. он закольцован через бит С, регистр получается кагбэ девятибитным :shock: и просто так вращение со сравнением не реализовать. Если только задействовать 2 регистра и сдвигать из одного в другой.
eufs писал(а):
Если непонятно - пиши, поясню на примере. Все получается не очень компактно(из-за таблицы), но очень быстро и просто и без условных переходв.

Тогда таблицу придётся делать для всех возможных комбинаций, т.е. 2^4 = 16 байт для хранения, по сути, всего двух бит (0 или ±1). Как-то нерационально, а бешеная скорость мне не нужна: по даташиту максимальная скорость вращения энкодера 100 об/мин.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 15, 2011 16:12:17 
Родился

Зарегистрирован: Чт апр 14, 2011 12:41:50
Сообщений: 10
Рейтинг сообщения: 0
Привет всем... есть два вопроса :)
вопрос номер раз:
имеется времянка(в аттаче)... имеется стк500(атмега16)... задание таково..необходимо сделать такие временные диаграммы и показать их с помощью спец. девайса(логического анализатора), то есть атмега должна эмулировать сигналы видеокамеры(такое вот заданице)... в общем то не могу понять как мне это организовать... как быть с clk... если есть у кого время... помогите пожалуйста разобраться... это важно...

ну а второй вопрос...
Необходимо разработать микропроцессорное устройство, в котором микроконтроллер непрерывно генерирует периодический сигнал с периодом T и длительностью импульса t машинных циклов. Во время выполнения этой задачи МК реагирует на прерывания двух типов. Обработчик каждого из прерываний подсчитывает количество прерываний данного типа и, когда оно достигает шести, запрещает прерывание от данного источника. На время обработки прерывания генерация сигнала приостанавливается.

Период импульса Т 1100 машинных циклов (305 мкс*)
Длительность импульса t 340 машинных циклов (94 мкс*)
Источники прерывания
Запрос на прерывание от внешнего источника INT0
Запрос на прерывание от внутреннего источника INT1
исходник добавил... но не могу понять как он работает... и работает ли... проверить на анализаторе его временно не могу... поэтому если есть возможность ответьте плиз :)


Вложения:
ccc.txt [1.63 KiB]
Скачиваний: 159
vremyanka.JPG [25.02 KiB]
Скачиваний: 417
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 15, 2011 18:56:16 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
Gudd-Head писал(а):
...а бешеная скорость мне не нужна: по даташиту максимальная скорость вращения энкодера 100 об/мин.
... тогда к чему вся эта "экономия" - даже решение "в лоб" прокатит ИМХО....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 15, 2011 19:20:36 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
... тогда к чему вся эта "экономия" - даже решение "в лоб" прокатит ИМХО....

Красивое, маленькое и быстрое решение всегда приятнее, чем "в лоб"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 15, 2011 20:38:58 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
ploop писал(а):
Красивое, маленькое и быстрое решение всегда приятнее...
... это понятно, но вначале надо написать рабочее, а "рацуха" уже после ... если необходимо ...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 83, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: ILYAUL и гости: 13


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y