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

Обсуждаем контроллеры компании Atmel.
Ответить
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

щас ведутся испытания программы. вывод на LCD значение счетчика. на входе генератор (меандр). при частотах ниже 15 кГц, если быть точным ниже 14878 Гц, работает не корректно. что в протеусе, что в реале. значение на индикаторе плавает. МК тактируется временно от внутреннего RC на 8 мГц.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

все логично, поскольку у тебя значение счетчика сильно зависит от значения ICES, попробуй сделать как я описал.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

так я же обнуляю счетчик при переднем фронте, а по заднему беру значение.
логика примерно:

прерывания:
если передний фронт обнуляем счетчик TCNT1L TCNT1H
иначе берем значение из ICR1L ICR1H в r24 r25
выход из прерываний.

в основном цикле программы примерно два раза в секунду вывожу на LCD значение r24 r25 перекодированные в десятеричный формат.

PS. дополнение к предыдущему сообщению. значение плавает от 0 до 65000. плывет примерно по 2000-3000 (зависит от частоты) в порядке возрастания от 0 до 65000.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Не нашел в проге очистку флагов.
Реклама
Эиком - электронные компоненты и радиодетали
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

каких именно флагов? в проге меняется только флаг отвечающий за то по какому фронту вызывается прерывание
СпойлерTIM1_CAPT:         ;прерывания
***
   in tmp,tccr1b      ;берем для установки бита
   ori tmp,(1<<ices1)   ;устанавливаем бит ICES1
   out tccr1b,tmp      ;устанавливаем
   rjmp out_tim      ;на выход
onn:
***
   in tmp,tccr1b      ;очищаем бит ICES1
   andi tmp,$ff-(1<<ices1)
   out tccr1b,tmp
out_tim:
   reti            ;выход с прерываний
там же очистка счетчика
СпойлерTIM1_CAPT: ;прерывания
***
onn:
clr tmp ;очищаем счетчик
out tcnt1l,tmp ;младший
out tcnt1h,tmp ;старший
***
out_tim:
reti ;выход с прерываний
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Регистр флагов требования прерываний. Контроллер ведь не знает, что ему на вход шлепает и устанавливает флаги независимо от программы.
Спойлер
TIFR_MEGA32.GIF
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

akl писал(а):Не нашел в проге очистку флагов.
тоже не вкурил причем здесь это :dont_know:
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

а вот тут начинается интетресное...
в инициализации поставил
Спойлерcap_init: ;инициализация прерываний
ldi tmp,$41 ;ICES1=1 CS1=1
out tccr1b,tmp
ldi tmp,$20 ;TICIE=1
out timsk,tmp
ldi tmp,$10 ;OCF1A=1
out tifr,tmp

ret
странно но этой командой он обнуляет (!) этот бит (OCF1A). устанавливается же этот бит сам когда устанавливаем timsk.
но что более странно - вроде заработало.

ЗЫ. нет. все таки не работает. если в прерываниях стоит
СпойлерTIM1_CAPT: ;прерывания
in tmp,tccr1b ;берем для сравнения
sbrc tmp,ices1 ;смотрим бит ICES1
rjmp onn ;если 1 то на метку
in tmp,icr1l ;если 0 то запоминаем значения
sts timel,tmp ;из памяти потом выводим на индикацию
in tmp,icr1h
sts timeh,tmp ;из памяти потом выводим на индикацию
***
то значения плавают от 0 до 65000
если поменять младшие со старшими
СпойлерTIM1_CAPT: ;прерывания
in tmp,tccr1b ;берем для сравнения
sbrc tmp,ices1 ;смотрим бит ICES1
rjmp onn ;если 1 то на метку
in tmp,icr1h
sts timeh,tmp ;из памяти потом выводим на индикацию

in tmp,icr1l ;если 0 то запоминаем значения
sts timel,tmp ;из памяти потом выводим на индикацию
***
то выводит только значения до 255, потом начинает с 0.
Последний раз редактировалось xkp Чт окт 18, 2012 11:44:22, всего редактировалось 2 раза.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

вообще не понял :shock:
каким боком флаг совпадения влияет на работу захвата, кто-нибудь растолкуйте старому маразматику
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

При чем здесь чистка флага сравнения OCF1A? Нужно чистить ICF1.

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

in tmp,icr1h
sts timeh,tmp ;из памяти потом выводим на индикацию

in tmp,icr1l ;если 0 то запоминаем значения
Нормальное чтение 16-разрядных регистров периферии отменили?
Последний раз редактировалось akl Чт окт 18, 2012 11:49:55, всего редактировалось 1 раз.
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

для чего?
при выходе по reti он сам очистится
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

не знаю при чем тут чистка OCF1A, но работает программа иначе с очисткой, нежели без очистки. флаг ICF1 устанавливается сам при наступлении прерывания и очищается сам при прыжке на подпрограмму прерываний.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Совершенно верно, но при инициализации или после возврата из
xkp писал(а):в основном цикле программы примерно два раза в секунду вывожу на LCD значение r24 r25 перекодированные в десятеричный формат.
входная частота этот флаг установит, т.к. за полсекунды пройдет много периодов.
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

весь проект в АВР студии + протеус. на вход можно повесить генератор CLOCK называется в протеусе
test.rar
(64.08 КБ) 138 скачиваний
так же картинки тестовой платы
Спойлер
общая.JPG
(81.03 КБ) 156 скачиваний
эта нас не интересует.JPG
(62.44 КБ) 122 скачивания
значение счетчика.JPG
(57.3 КБ) 119 скачиваний
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Сделал бы, примерно, так
Спойлер

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

	CLR	R0
	LDI	R20,$40		; подготовка к CAPT
	OUT	TCCR1B,R20	;
	LDI	R20,$20		;
	OUT	TIMSK,R20	;
	OUT	TCCR1A,R0
	OUT	TCNT1H,R0
	OUT	TCNT1L,R0
;	LDI	R21,$41
	LDI	R22,$01
	SER	R20
	OUT	TIFR,R20

	CLT
	SEI
main:
	BRTC	MAIN
	CLI
	CLT
;	.......
;	.......
;	.......
;	.......
;	.......
;	.......
;	.......
;	.......
;	.......
	RJMP	RESET
TIM1_CAPT:
	TST	R22		; начало импульса
	BREQ	CAPT_END	; уже конец
	OUT	TCCR1B,R22	; да, начало. Старт таймера Т1 с разрешенным захватом по концу импульса
	CLR	R22		; сброс признака начала импульса
	RETI
CAPT_END:
	OUT	TCCR1B,R0	; 
	IN	R25,ICR1L
	IN	R24,ICR1H
	SET
	RETI
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

r22 в прерываниях сбрасывается и больше ни где не устанавливается
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

akl
у тебя после первого окончания импульса таймер остановится и все...
да и счетчик в таком случае сбрасывать надо.

почему отвергают мой метод - :dont_know:
счетчик крутится непрерывно, просто в определенные моменты считываем значения и все, куда уж проще?
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Как я понял xkp меряет длительность одного импульса, делает преобразования, выводит куда-то и ВОЗВРАЩАЕТСЯ обратно. Тоже самое делает мой кусок кода, правда, он возвращается на RESET (так, на всякий случай). По поводу запущенного таймера. Сам активно пользуюсь этим. Например, в CL_LED2313 все действия разворачиваются на фоне непрерывно работающего таймера Т1, который и измеряет и динамическую индикацию осуществляет.
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

akl писал(а):Как я понял ...
да трудно понять человека, который сам не знает чего хочет, а все экстрасенсы ушли на ТНТ
:)
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

GP1, ваш метод, как я понял, вычитать из старого значения счетчика - новое. завтра попробую. или вечером. сейчас уже голова болит от испытаний.
akl, выход после всего на ресет не есть хорошо. так как в программе после ресета будут стоять кучи инициализаций, чтение eeprom, все вместе по времени займет около 1-2 секунд. нужно замерять постоянно с N-переодичностью, думаю около 30 раз в секунду.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
Ответить

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