xkp писал(а):.. Но точности мне все равно не хватило ...
если я ничего не путаю, то при 20МГц разрешающая способность счетчика будет 0,05 мкс, что при частоте в 1Гц погрешность измерения будет ОДНАДВАДЦАТИМИЛИОННАЯ, или 8 знаков после нуля
хочу напомнить, что запуская "Восток" с Ю.А.Гагариным пользовались расчетами с точностью 4(!!!) знака после запятой
bondyara
по существу вопроса не подскажу нет под рукой ни одного справочника
но, пока ты "изучаешь" прерывания очень рекомендую при входе в прерывание сохранять SREG, а перед выходом восстанавливать
очень поможет такая привычка избежать кучи граблей
В шестой студии есть косяк с прерываниями. Лечится в настройках самой студии. Где-то галку нужно поставить, а где - уже не помню. Как купил дракона - отлаживаю всё в железе.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
xkp писал(а):.. Но точности мне все равно не хватило ...
если я ничего не путаю, то при 20МГц разрешающая способность счетчика будет 0,05 мкс, что при частоте в 1Гц погрешность измерения будет ОДНАДВАДЦАТИМИЛИОННАЯ, или 8 знаков после нуля
Товарищ отождествляет разрешающую способность с точностью. Да хоть Гигагерцами тактируй, а кварцевый ген. без термостабтлизации даст в лучшем случае 10^-5 /
Jack_A писал(а):
Товарищ отождествляет разрешающую способность с точностью. Да хоть Гигагерцами тактируй, а кварцевый ген. без термостабтлизации даст в лучшем случае 10^-5 /
допустим, хотя можно поспорить...
но, покажи мне ту область "бытовухи", где нужна точность 10е-5?
Доброго времени суток!
Нашел статью в которой автор дает имена битам в регистре. Я так понял
Цитирую: "Кроме всего описанного выше, отведём один из пользовательских регистров под флаги, позволяющие определить, какое действие мы в данный момент выполняем. Назовём этот регистр Flags. Флаги в нём будут такие: SEND_BIT - означает, что мы передаём бит, READ_BIT - означает, что мы принимаем бит, SEND_RESET - означает, что мы посылаем сигнал "Reset" и ждём сигнал "Presence", FREE_BUS - означает, что никаких действий на шине не производится и, наконец, SLAVE_IS - означает, что был получен сигнал "Presence"."
Ссылка на статью http://radiohlam.ru/program/1-wire_proc_avr.htm
Подскажите ! ЭТО КАК?
Главное-то akl не указал Как и ними потом работать.
Видимо, потому что это очевидно - sbrc FLAGS,SLAVE_IS / sbrs FLAGS,SEND_RESET / cbr FLAGS,(1<<READ_BIT) / sbr FLAGS,(1<<FLAGS_RESET). Важно не перепутать, где передается номер бита, а где битовая маска.
GP1 писал(а):чтобы не перепутать, лично я, обзываю биты примерно так:
COKPOWEHEU имел ввиду куда подставлять номер бита:READ_BIT, и куда битовую маску: (1<<READ_BIT)
В командах sbrc и sbrs используются номера битов, а в командах sbr и cbr битовые маски.
Кстати в мелких AVR есть регистры GPIORx, которые как раз очень удобны для хранения флагов, и для их сброса/установки нет такой путаницы, т.к. CBI/SBI тоже работает с битами как SBIC/SBIS, а не с масками.
СпойлерА еще можно (только осторожно) задействовать в качестве флагов другие незанятые регистры периферии.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
а он там инициализирован)) только уехал куда то в середину) но ситуация от его перемещения не меняется =\
я же правильно считаю - 8мгц частота контроллера. CK/64 = 125кгц частота таймера, если в регистр OCR мы пишем 19531 (в данном случае) то считает он 19531/125000=0.156 секунды. Если берём искомую частоту, скажем, 400hz - он должен насчитать 62 импульса, потом поделить их на 5 без остатка и выйдет 12 =>00001100
ЗЫ: Отловил глюк таймер переполняется и выставляется бит в регистре сравнения по OCR1A сразу после 1го же тика О_о
ну это не совсем счёт, я кусок кода вырезал, это сразу с подгонкой 64гц -1 96гц-2 128гц-3 и т.д.
там частота преобразуется в десятичное число от 1 до 40ка (40 скоростей - так просто удобнее), а дальше по соответствию включается шим.
это вообще не важно, важно то что таймер сбрасывается после 1го тика
На счёт прерывания увидел, спасибо, но даже если сначала загрузить константы в OCR1AL\OCR1AH а потом запустить таймер и включить прерывание, ничего не меняется, после 1го такта сбрасывается
PS: я правлю код в том сообщении сразу, что бы не было непоняток COKPOWEHEU, спасибо! заработало
Последний раз редактировалось SatinS Ср дек 03, 2014 22:45:56, всего редактировалось 1 раз.
Ветка с прыжком на stop не изменилась и попрежнему угорожает стеку.
А флаг можно сбросить и программно.
Ну и настройки все-таки лучше оставить в начале программы, для удобства чтения. А в нужных местах разрешать-запрещать нужные модули, работать с флагами и тому подобное. Сейчас детально анализировать эту лапшу желания нет.
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 ;