Страница 241 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 21:30:54
GP1
xkp писал(а):.. Но точности мне все равно не хватило ...
если я ничего не путаю, то при 20МГц разрешающая способность счетчика будет 0,05 мкс, что при частоте в 1Гц погрешность измерения будет ОДНАДВАДЦАТИМИЛИОННАЯ, или 8 знаков после нуля
хочу напомнить, что запуская "Восток" с Ю.А.Гагариным пользовались расчетами с точностью 4(!!!) знака после запятой
bondyara
по существу вопроса не подскажу нет под рукой ни одного справочника
но, пока ты "изучаешь" прерывания очень рекомендую при входе в прерывание сохранять SREG, а перед выходом восстанавливать
очень поможет такая привычка избежать кучи граблей
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 21:51:10
Seriyvolk
bondyara писал(а):Где ошибка?
В шестой студии есть косяк с прерываниями. Лечится в настройках самой студии. Где-то галку нужно поставить, а где - уже не помню. Как купил дракона - отлаживаю всё в железе.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 22:03:49
Jack_A
GP1 писал(а):xkp писал(а):.. Но точности мне все равно не хватило ...
если я ничего не путаю, то при 20МГц разрешающая способность счетчика будет 0,05 мкс, что при частоте в 1Гц погрешность измерения будет ОДНАДВАДЦАТИМИЛИОННАЯ, или 8 знаков после нуля
Товарищ отождествляет разрешающую способность с точностью. Да хоть Гигагерцами тактируй, а кварцевый ген. без термостабтлизации даст в лучшем случае 10^-5 /
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 22:10:18
GP1
Jack_A писал(а):
Товарищ отождествляет разрешающую способность с точностью. Да хоть Гигагерцами тактируй, а кварцевый ген. без термостабтлизации даст в лучшем случае 10^-5 /
допустим, хотя можно поспорить...
но, покажи мне ту область "бытовухи", где нужна точность 10е-5?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 23:22:10
bondyara
Seriyvolk писал(а):
В шестой студии есть косяк с прерываниями. Лечится в настройках самой студии. Где-то галку нужно поставить, а где - уже не помню.
Нашел. Tool -> Options -> Tools -> Tool settings Параметр Nask interrupts while stepping = false
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт дек 02, 2014 23:59:27
Coldheart
Доброго времени суток!
Нашел статью в которой автор дает имена битам в регистре. Я так понял
Цитирую: "Кроме всего описанного выше, отведём один из пользовательских регистров под флаги, позволяющие определить, какое действие мы в данный момент выполняем. Назовём этот регистр Flags. Флаги в нём будут такие: SEND_BIT - означает, что мы передаём бит, READ_BIT - означает, что мы принимаем бит, SEND_RESET - означает, что мы посылаем сигнал "Reset" и ждём сигнал "Presence", FREE_BUS - означает, что никаких действий на шине не производится и, наконец, SLAVE_IS - означает, что был получен сигнал "Presence"."
Ссылка на статью
http://radiohlam.ru/program/1-wire_proc_avr.htm
Подскажите ! ЭТО КАК?

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 02:07:53
akl
Примерно так
Код: Выделить всё
.def FLAGS=r24
.equ SEND_RESET =7
.equ SLAVE_IS =6
.equ READ_BIT =5
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 07:16:40
COKPOWEHEU
Главное-то akl не указал

Как и ними потом работать.
Видимо, потому что это очевидно - sbrc FLAGS,SLAVE_IS / sbrs FLAGS,SEND_RESET / cbr FLAGS,(1<<READ_BIT) / sbr FLAGS,(1<<FLAGS_RESET). Важно не перепутать, где передается номер бита, а где битовая маска.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 13:02:15
GP1
чтобы не перепутать, лично я, обзываю биты примерно так:
Код: Выделить всё
.def flags = r17
.equ f_res = 7
.equ f_ready=6
;и т.д.
на мой субъективный взгляд очень понятно
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 13:23:07
zero648
GP1 писал(а):чтобы не перепутать, лично я, обзываю биты примерно так:
COKPOWEHEU имел ввиду куда подставлять номер бита:READ_BIT, и куда битовую маску: (1<<READ_BIT)
В командах sbrc и sbrs используются номера битов, а в командах sbr и cbr битовые маски.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 13:27:24
Engineer_Keen
Кстати в мелких AVR есть регистры GPIORx, которые как раз очень удобны для хранения флагов, и для их сброса/установки нет такой путаницы, т.к. CBI/SBI тоже работает с битами как SBIC/SBIS, а не с масками.
Спойлер
А еще можно (только осторожно) задействовать в качестве флагов другие незанятые регистры периферии.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 19:40:53
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
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 20:42:28
GP1
я что-то отстал от жизни, а что стек уже не надо инициализировать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 20:46:53
SatinS
а он там инициализирован)) только уехал куда то в середину) но ситуация от его перемещения не меняется =\
я же правильно считаю - 8мгц частота контроллера. CK/64 = 125кгц частота таймера, если в регистр OCR мы пишем 19531 (в данном случае) то считает он 19531/125000=0.156 секунды. Если берём искомую частоту, скажем, 400hz - он должен насчитать 62 импульса, потом поделить их на 5 без остатка и выйдет 12 =>00001100
ЗЫ: Отловил глюк таймер переполняется и выставляется бит в регистре сравнения по OCR1A сразу после 1го же тика О_о
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 21:42:56
GP1
что-то вообще не понял метода счета...
SatinS назвать ЭТО программой - язык не поворачивается
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 21:49:31
SatinS
ну это не совсем счёт, я кусок кода вырезал, это сразу с подгонкой 64гц -1 96гц-2 128гц-3 и т.д.
там частота преобразуется в десятичное число от 1 до 40ка (40 скоростей - так просто удобнее), а дальше по соответствию включается шим.
это вообще не важно, важно то что таймер сбрасывается после 1го тика

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 21:55:53
COKPOWEHEU
TIM1_COMPA:
...
rjmp main
Возврат из прерывания rjmp'ом?
out TIMSK1,temp
out TCCR1B,Temp
out OCR1AL,Temp
out OCR1AH,Temp
Сначала настраиваете таймер на прерывание по сравнению, он честно сравнивает и выставляет флаг, а потом уже говорите, с каким числом надо сравнивать.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 22:17:41
SatinS
На счёт прерывания увидел, спасибо, но даже если сначала загрузить константы в OCR1AL\OCR1AH а потом запустить таймер и включить прерывание, ничего не меняется, после 1го такта сбрасывается

PS: я правлю код в том сообщении сразу, что бы не было непоняток
COKPOWEHEU, спасибо! заработало

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср дек 03, 2014 22:34:40
COKPOWEHEU
Ветка с прыжком на stop не изменилась и попрежнему угорожает стеку.
А флаг можно сбросить и программно.
Ну и настройки все-таки лучше оставить в начале программы, для удобства чтения. А в нужных местах разрешать-запрещать нужные модули, работать с флагами и тому подобное. Сейчас детально анализировать эту лапшу желания нет.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт дек 04, 2014 05:16:03
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
некорректна