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

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

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

Сообщение GP1 »

xkp писал(а):.. Но точности мне все равно не хватило ...
если я ничего не путаю, то при 20МГц разрешающая способность счетчика будет 0,05 мкс, что при частоте в 1Гц погрешность измерения будет ОДНАДВАДЦАТИМИЛИОННАЯ, или 8 знаков после нуля
хочу напомнить, что запуская "Восток" с Ю.А.Гагариным пользовались расчетами с точностью 4(!!!) знака после запятой

bondyara
по существу вопроса не подскажу нет под рукой ни одного справочника
но, пока ты "изучаешь" прерывания очень рекомендую при входе в прерывание сохранять SREG, а перед выходом восстанавливать
очень поможет такая привычка избежать кучи граблей
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4964
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

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

Сообщение Seriyvolk »

bondyara писал(а):Где ошибка?
В шестой студии есть косяк с прерываниями. Лечится в настройках самой студии. Где-то галку нужно поставить, а где - уже не помню. Как купил дракона - отлаживаю всё в железе.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

GP1 писал(а):
xkp писал(а):.. Но точности мне все равно не хватило ...
если я ничего не путаю, то при 20МГц разрешающая способность счетчика будет 0,05 мкс, что при частоте в 1Гц погрешность измерения будет ОДНАДВАДЦАТИМИЛИОННАЯ, или 8 знаков после нуля
Товарищ отождествляет разрешающую способность с точностью. Да хоть Гигагерцами тактируй, а кварцевый ген. без термостабтлизации даст в лучшем случае 10^-5 /
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

Jack_A писал(а): Товарищ отождествляет разрешающую способность с точностью. Да хоть Гигагерцами тактируй, а кварцевый ген. без термостабтлизации даст в лучшем случае 10^-5 /
допустим, хотя можно поспорить...
но, покажи мне ту область "бытовухи", где нужна точность 10е-5?
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
bondyara
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб май 07, 2011 17:00:42
Откуда: Оттуда

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

Сообщение bondyara »

Seriyvolk писал(а): В шестой студии есть косяк с прерываниями. Лечится в настройках самой студии. Где-то галку нужно поставить, а где - уже не помню.
Нашел. Tool -> Options -> Tools -> Tool settings Параметр Nask interrupts while stepping = false
Реклама
Аватара пользователя
Coldheart
Прорезались зубы
Сообщения: 244
Зарегистрирован: Пт сен 10, 2010 20:39:32
Откуда: Украина Луганская обл.

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

Сообщение Coldheart »

Доброго времени суток!
Нашел статью в которой автор дает имена битам в регистре. Я так понял
Цитирую: "Кроме всего описанного выше, отведём один из пользовательских регистров под флаги, позволяющие определить, какое действие мы в данный момент выполняем. Назовём этот регистр Flags. Флаги в нём будут такие: SEND_BIT - означает, что мы передаём бит, READ_BIT - означает, что мы принимаем бит, SEND_RESET - означает, что мы посылаем сигнал "Reset" и ждём сигнал "Presence", FREE_BUS - означает, что никаких действий на шине не производится и, наконец, SLAVE_IS - означает, что был получен сигнал "Presence"."
Ссылка на статью http://radiohlam.ru/program/1-wire_proc_avr.htm
Подскажите ! ЭТО КАК? :shock:
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Примерно так

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

	.def	FLAGS=r24

	.equ	SEND_RESET	=7
	.equ	SLAVE_IS	=6
	.equ	READ_BIT	=5
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Главное-то akl не указал :-) Как и ними потом работать.
Видимо, потому что это очевидно - sbrc FLAGS,SLAVE_IS / sbrs FLAGS,SEND_RESET / cbr FLAGS,(1<<READ_BIT) / sbr FLAGS,(1<<FLAGS_RESET). Важно не перепутать, где передается номер бита, а где битовая маска.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

чтобы не перепутать, лично я, обзываю биты примерно так:

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

.def flags = r17
.equ f_res = 7
.equ f_ready=6
;и т.д.
на мой субъективный взгляд очень понятно
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

GP1 писал(а):чтобы не перепутать, лично я, обзываю биты примерно так:
COKPOWEHEU имел ввиду куда подставлять номер бита:READ_BIT, и куда битовую маску: (1<<READ_BIT)
В командах sbrc и sbrs используются номера битов, а в командах sbr и cbr битовые маски.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Кстати в мелких AVR есть регистры GPIORx, которые как раз очень удобны для хранения флагов, и для их сброса/установки нет такой путаницы, т.к. CBI/SBI тоже работает с битами как SBIC/SBIS, а не с масками.
СпойлерА еще можно (только осторожно) задействовать в качестве флагов другие незанятые регистры периферии.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
SatinS
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

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

Сообщение SatinS »

SatinS писал(а):вопрос немного не в тему - как лучше считать длительность импульсов?
к продолжению вчерашнего вопроса - переписал на скорую руку прошивку и не пашед, не могу понять то ли я идиот, то ли лыжи не едут
Спойлер

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

.include <tn24def.inc>

.DEF speed = R17
.DEF  temp = R18
.DEF temp1 = R19
.DEF tempH = R20
.DEF tempL = R21
.DEF Count = R22

.macro OUTI
ldi	r16,@1
out	@0,r16
.endmacro

.dseg
.cseg
.org 0

rjmp RESET	; Reset Handler
nop	;rjmp EXT_INT0	; IRQ0 Handler
nop	;rjmp EXT_PCINT0	; PCINT0 Handler
nop ;rjmp PCINT1_Handler	; PCINT1 Handler
nop ;rjmp WDT	; Watchdog Interrupt Handler
nop ;rjmp TIM1_CAPT	; Timer1 Capture Handler
rjmp TIM1_COMPA	; Timer1 Compare A Handler
nop ;rjmp TIM1_COMPB	; Timer1 Compare B Handler
nop ;rjmp TIM1_OVF	; Timer1 Overflow Handler
nop ;rjmp TIM0_COMPA	; Timer0 Compare A Handler
nop ;rjmp TIM0_COMPB	; Timer0 Compare B Handler
nop ;rjmp TIM0_OVF	; Timer0 Overflow Handler
nop ;rjmp ANA_COMP	; Analog Comparator Handler
nop ;rjmp ADC	; ADC Conversion Handler
nop ;rjmp EE_RDY	; EEPROM Ready Handler
nop ;rjmp USI_STR	; USI STart Handler
nop ;rjmp USI_OVF	; USI Overflow Handler
    

;=======================
;Èíèöèàëèçàöèÿ
;=======================
RESET:
      ldi r16,low(RAMEND)       ;óñòàíîâêà óêàçàòåëÿ ñòåêà
      out SPL,r16
	  ;ldi Temp,0b00000111
      OUTI	DDRA,0b11111111
      OUTI	DDRB,0b00000100
      ldi speed,0
      out PortA,speed
	  clr tempL
      OUTI	TIMSK1,(1<<OCIE1A)
	  OUTI	TCCR1B,(0<<CS12)|(1<<CS11)|(1<<CS10);òàêòîâûé ñèãíàë = CK/64
      OUTI  OCR1AH,0b01001100
      OUTI  OCR1AL,0b01001011   ;ñ÷èòàåì 19531 òàêò - 1/6.4 ñåêóíäû
	  ldi Temp,0            ;îáíóëåíèå òàéìåðà
      out TCNT1H,Temp
      out TCNT1L,Temp
	  sei

main:in temp, PinB
cpi temp,0b00000000
breq MAIN
main2:in temp, PinB
cpi Temp,0b00000001
breq main2
IN temp,TCCR1B
CPI temp,0
breq TStart
inc tempL
cpi tempL,5
brne main
inc speed
clr tempL
rjmp main

TIM1_COMPA: 
ldi Temp1,0            ;îáíóëåíèå òàéìåðà
out TCNT1H,Temp1
out TCNT1L,Temp1
cpi speed,0
breq reset
dec speed ;âû÷ëè ïåðâûå 5êì, ìû ñ÷èòàåì îò 10òè.
out PortA,speed
clr speed
reti
диодики не горят на 400hz
Последний раз редактировалось SatinS Чт дек 04, 2014 13:27:04, всего редактировалось 4 раза.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

я что-то отстал от жизни, а что стек уже не надо инициализировать?
Чем дальше, тем больше становлюсь занудой...
Изображение
SatinS
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

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

Сообщение SatinS »

а он там инициализирован)) только уехал куда то в середину) но ситуация от его перемещения не меняется =\
я же правильно считаю - 8мгц частота контроллера. CK/64 = 125кгц частота таймера, если в регистр OCR мы пишем 19531 (в данном случае) то считает он 19531/125000=0.156 секунды. Если берём искомую частоту, скажем, 400hz - он должен насчитать 62 импульса, потом поделить их на 5 без остатка и выйдет 12 =>00001100
ЗЫ: Отловил глюк таймер переполняется и выставляется бит в регистре сравнения по OCR1A сразу после 1го же тика О_о
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

что-то вообще не понял метода счета...

SatinS назвать ЭТО программой - язык не поворачивается
Чем дальше, тем больше становлюсь занудой...
Изображение
SatinS
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

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

Сообщение SatinS »

ну это не совсем счёт, я кусок кода вырезал, это сразу с подгонкой 64гц -1 96гц-2 128гц-3 и т.д.
там частота преобразуется в десятичное число от 1 до 40ка (40 скоростей - так просто удобнее), а дальше по соответствию включается шим.
это вообще не важно, важно то что таймер сбрасывается после 1го тика :cry:
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

TIM1_COMPA:
...
rjmp main
Возврат из прерывания rjmp'ом?
out TIMSK1,temp
out TCCR1B,Temp
out OCR1AL,Temp
out OCR1AH,Temp
Сначала настраиваете таймер на прерывание по сравнению, он честно сравнивает и выставляет флаг, а потом уже говорите, с каким числом надо сравнивать.
SatinS
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

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

Сообщение SatinS »

На счёт прерывания увидел, спасибо, но даже если сначала загрузить константы в OCR1AL\OCR1AH а потом запустить таймер и включить прерывание, ничего не меняется, после 1го такта сбрасывается :(
PS: я правлю код в том сообщении сразу, что бы не было непоняток
COKPOWEHEU, спасибо! заработало :)
Последний раз редактировалось SatinS Ср дек 03, 2014 22:45:56, всего редактировалось 1 раз.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Ветка с прыжком на stop не изменилась и попрежнему угорожает стеку.
А флаг можно сбросить и программно.
Ну и настройки все-таки лучше оставить в начале программы, для удобства чтения. А в нужных местах разрешать-запрещать нужные модули, работать с флагами и тому подобное. Сейчас детально анализировать эту лапшу желания нет.
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

SatinS писал(а):... 8мгц частота контроллера. CK/64 = 125кгц частота таймера, если в регистр OCR мы пишем 19531 (в данном случае) то считает он 19531/125000=0.156 секунды. Если берём искомую частоту, скажем, 400hz - он должен насчитать 62 импульса, потом поделить их на 5 без остатка и выйдет 12 =>00001100
Тоже не понял сложной арифметики. По мне,

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

.equ Fo=8000000

	LDI	R22,HIGH(Fo/400-1)	; копировать код из студии лучше на русской раскладке
	LDI	R23,LOW(Fo/400-1)
	OUT	OCR1AH,R22		; именно так запись старший-младший, при чтении наоборот
	OUT	OCR1AL,R23		; 
Замечу, запись типа

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

DATA:
      ldi Temp,0b01001011   ;некий интервал
      out OCR1AL,Temp
      ldi Temp,0b01001100
      out OCR1AH,Temp
некорректна
Ответить

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