Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Но это требует дополнительных определений.
Похоже на то были причины. Ведь ни что не мешало определить SM не как 5, а как 0х20 (или 32). Тогда бы ваш способ работал.
Реклама
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

ranger93 писал(а):Помогите разобраться со power-down.
В avr-studio все работает нормально: контроллер засыпает и при нажатии кнопке на 4-й ноге уходит в прерывание, а вот в реальной жизни как-то не работает... В чем может быть причина?
По мне, при входе в режим power-down нужно ещё устранить предысторию нажатия кнопки и учесть, что только низкий уровень, а не спад может вывести из него; при выходе из режима нужно дождаться начала генерации и стабилизации частоты тактирования
Спойлер

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

.include 	"m8def.inc"	; используем mega8

	RJMP	START
	RJMP	ISR_INT0
START:
	LDI	R16,HIGH(RAMEND)
	LDI	R17,LOW(RAMEND)
	OUT	SPH,R16
	OUT	SPL,R17

	LDI R16, 0b10100000
	out MCUCR, r16 ; хотим работать по низкому уровню с прерыванием int0 и выключаться по команде sleep sleepmode:
;	ldi r16, 0b10100010
;	out MCUCR, r16 ; хотим работать со спадающим фронтом????? с прерыванием int0 и выключаться по команде sleep sleepmode:
	ldi r16,0b00000000
	out timsk,r16; запрещаем прерывания по таймеру
;	ldi r16, 0
	out tcnt2, r16; сбросим таймер нахрен!
	ldi r16, 0b01000000
	out GICR, r16 ; разрешаем прерывание int0
   OUT GIFR,R16 ; сбрасываем флаг

	sei
	sleep
	nop
	rjmp	START
ISR_INT0:
	CLR	YH
	CLR	YL
	SBIW	YL,1
	BRNE	PC-1     ;программная задержка для начала генерации и стабилизации тактирования
	OUT	GICR,YH
	
	RET		; выход с запретом всех прерываний
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 560
Зарегистрирован: Пт июл 02, 2010 19:30:22
Откуда: Новосибирск / Магнитогорск

Сообщение ranger93 »

ploop, игрался только с mega8, поэтому не знал, что в других контроллерах есть такие же регистры но с другими битами. Учту, так действительно понятнее.
akl,
akl писал(а):что только низкий уровень, а не спад может вывести из него
Кстати очень может быть, надо попробовать.
Главное, чтоб был источник ЭДС, а с остальным разберемся :).
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

ranger93 писал(а):Кстати очень может быть, надо попробовать.
Не очень может быть, а в ДШ это явно прописано:
Изображение
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

pyzhman писал(а):2FreshMan: MCUCSR
можно ли тогда сделать так, если в атмеге 8 я хочу повесить кнопку на вывод ресет то для этого мне уже не обязательно с помощью фьюзов данную ногу конфигурировать на ввод, а потом с помощью паралельного прогера все это исправлять......, теперь мне просто надо следить за 1 битом регистра MCUCSR и при его установке выполнять некие события в проге.
Tell Me The Truth
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Ё! Я в ауте! Не, на самом деле. Я бы в жисть не догадался так сделать. Как красиво-то придумано! Нафига программировать вход сброса как порт фьюзом? Если можно отследить битом источника сброса. FreshMan, зачет! Только учитываем, что при сбросе вся память херится к чертовой матери. :))
Docendo discimus
Контактная информация:
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Вот только необходимо применять это крайне аккуратно! Ведь при нажатии кнопки у тебя прервется исполнение любой подпрограммы, и если где-то что-то недосохранилось или не до делалось может возникнуть целый спектр всевозможных неожиданных и редко происходящих проблем.
Ладно там если это что-то вроде светодиодной мигалки, и кнопкой сброса выбираешь режим работы... А если это что-то сложнее со сложными внутренними и внешними состояниями, то проблемы практически гарантированны.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

pyzhman, ну вот зачем вы так меня поддергиваете........ я уже догадывался что сморозил ерунду. :oops:
Tell Me The Truth
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Только учитываем, что при сбросе вся память херится к чертовой матери. :))
Откуда такая информация? Только при отключении питания.
если в атмеге 8 я хочу повесить кнопку на вывод ресет то для этого мне уже не обязательно с помощью фьюзов данную ногу конфигурировать на ввод, а потом с помощью паралельного прогера все это исправлять......, теперь мне просто надо следить за 1 битом регистра MCUCSR и при его установке выполнять некие события в проге.
Нет. Просто делаете переменную в памяти, которая изменяет своё значение после сброса, её и анализируете.
Способ подходит для простых применений: мигалок всяких, гирлянд и т.д, т.к. при включении питания её состояние будет не определено (то есть может быть любым).
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Во наговорили :)) . Насколько я знаю в некоторых Мк есть специальные биты в определенном регистре по которым можно узнать по какой причине произошел сброс. Далее нужно просто отделить мух от котлет и определить нужно ли инициализировать переменные(в случае первого включения), либо просто обработать нажатие на кнопку или собаку.

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

Сообщение pyzhman »

2FreshMan: никаких поддергиваний, всё взаправду.
ploop писал(а):Только при отключении питания.
Согласен.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

ploop писал(а):Только при отключении питания.
а откуда такая информация ?
Tell Me The Truth
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Мля, пару страниц назад разговаривали на эту тему. Ты или впитывай, или сам разбирайся.
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

да тот разговор я помню....., просто хотелось узнать нет ли у атмела какого либо обще-официального документа, кроме даташита конечно, где описывается общий принцип работы их МК.
Tell Me The Truth
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Есть. На сайте. Всё по архитектуре расписано.
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

если вас не затруднит, ткните носом на данный документ, пожалуйста
Tell Me The Truth
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

дорогие братья по разуму, а не скрыта ли сдесь ошибка ?
может там надо reti вместо ret ?
http://radiokot.ru/start/mcu_fpga/avr/15/
Изображение
Tell Me The Truth
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Ошибкой как таковой не является. Просто заткнуться все прерывания. Если ВДРУГ программа скакнет туда.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

но ведь для выхода из прерывания юзается RETI
али я неправ ?
Tell Me The Truth
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Если не хочется открывать прерывания, то надо пользоваться ret. reti делается всё то же самое, что и ret, только еще разрешает глобальные прерывания, т.е. взводит флаг I.
Docendo discimus
Контактная информация:
Ответить

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