реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> AVRdragon против CKDIV8 & DWEN :), Кто кого?
ReAl
сообщение May 5 2008, 13:56
Сообщение #16


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(zhevak @ May 5 2008, 15:59) *
250 мс -- это очень редко. Мне нужно эдак разов в 250 чаще щелкать. smile.gif
Да я видел, что нужно 1мс. WDT меньше 16мс не умеет.
Это я о другом - если бы AVR просыпался из power down так, как об этом говорит galjoen, то при периоде 250мс и задержке просыпания с полноценной жрачкой 64мс потребление очень отличалось бы от того, которое выходит по рассчёту 100 циклов работа, 250мс сон. А оно не отличалось.

Цитата(galjoen @ May 5 2008, 16:02) *
При выходе из sleep происходит то-же, что и при запуске процессора. Т.е. если у вас SUT1..0=00, то действительно будет за 6 тактов просыпаться. А в других случаях добавляется 4 или 64 мс.
Это Вы где-то в документации прочли или личный опыт?

У меня стоит SUT=10, т.е. 64мс, так как BOD выключен из-за того, что жрёт, зараза, а питание нарастает не слишком быстро (по осциллографу - где-то за 30-40мс). И при этом процессор потребляет полный ток отнюдь не 64мс из 250мс.

В документации (мега48-168, tiny13, mega128) написано
Для RC-генератора и внешнего тактирования:
Start-up Time from Powerdown and Power-save - 6CK
Additional Delay from Reset (VCC = 5.0V) - 14CK / 14CK + 4.1 ms / 14CK + 65 ms в зависимости от SUT
Т.е. из power down стартует за 6 циклов. После сброса - дополнительная задержка.
Для кварца и кермаического резонатора там другие задержки, нужные для разгона. Дополнительная задержка по SUT та же, она не зависит от источника тактирования.


Цитата(galjoen @ May 5 2008, 16:02) *
Кстати 6 тактов это уже после делителя CLKPR. Если делитель = 128, то 768 тактов процессор будет просыпаться.
Меня до сих пор не интересовал предделитель, но считаю, что это не страшно. Он будет просыпаться шесть тех времён, на которые мы уже согласились как на длительность одного машинного цикла, длительность выполнения простой команды. Потом ещё четыре 128-тактовых таких цикла идёт на вход в прерывание, два - на rjmp с вектора на первую команду обработчика, ...
В любом случае это не те "SUT-овые" 64 мс, о которых Вы говорите.

Хотя странно.
У тини13 вообще на блок-схеме делитель не нарисован отдельно.
У меги48 - после мультиплексора тактирования сигнал идёт отдельно на логику сброса, отдельно на предделитель, с которого на clock control unit.
У тини25 - после мультиплексора сначала на предделитель, с него на логику сброса и clock control unit.

Интересно, из этих шести циклов четыре - те же самые, что и при выходе из IDLE (которые тоже отдельные, ещё четыре на вход в прерывание потом само собой), или "аж ещё" дополнительные?
Надо проверить.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 5 2008, 14:29
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(ReAl @ May 5 2008, 17:56) *
WDT меньше 16мс не умеет.

Проверял, WDT вообще вместо типовых 2.1 секунды при максимальном делителе - от 1.5 до 1.8 имел. Нельзя к нему привязываться если хоть какая-то точность нужна.
Цитата(ReAl @ May 5 2008, 17:56) *
Это я о другом - если бы AVR просыпался из power down так, как об этом говорит galjoen, то при периоде 250мс и задержке просыпания с полноценной жрачкой 64мс потребление очень отличалось бы от того, которое выходит по рассчёту 100 циклов работа, 250мс сон. А оно не отличалось.

Это Вы где-то в документации прочли или личный опыт?

Я эксперементировал с кварцем. У меня при SUT-овых 64mc потребление повышалось, но не так сильно, как в рабочем режиме. При работе от внутреннего генератора думаю, что потребление вообще не повысится.
Цитата(ReAl @ May 5 2008, 17:56) *
У меня стоит SUT=10, т.е. 64мс, так как BOD выключен из-за того, что жрёт, зараза, а питание нарастает не слишком быстро (по осциллографу - где-то за 30-40мс). И при этом процессор потребляет полный ток отнюдь не 64мс из 250мс.

Я об этом и не писал. Я имел ввиду, что при просыпании расходуется лишняя энергия (это уже из личного опыта). И если ЧАСТО просыпаться, то лучше вообще не засыпать, а использовать CLKPR. То, что время просыпания зависит от CLKPR это точно - проверял. И у меня получилось, что по потреблению энергии выгоднее использовать максимальный CLKPR, чем на 5 мс засыпать. Хотя это для кварца. Для внутреннего генератора времена видимо другие, но на 1 мс думаю засыпать и в этом случае не стоит.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 5 2008, 19:36
Сообщение #18


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(galjoen @ May 5 2008, 17:29) *
Я эксперементировал с кварцем. У меня при SUT-овых 64mc потребление повышалось, но не так сильно, как в рабочем режиме. При работе от внутреннего генератора думаю, что потребление вообще не повысится.
А нельзя ли точно сказать - какой был контроллер, какие CKSEL/SUT?
А то мало ли что... Вдруг не туда глянули... Вы говорили о SUT=00, а при каких остальных битах они были?
Вон у меги64/128, меги32, меги 48//168 для кварца/керамического резонатора
при CKSEL0=0
SUT=00 - 258 CK - 4.1ms - Ceramic resonator, fast rising power
при CKSEL0=1
SUT=00 - 1K CK - 65ms - Ceramic resonator, slowly rising power
SUT=11 - 16K CK - 65ms - Crystal Oscillator, slowly rising power
Т.е. разница между SUT=00 и SUT=11 при CKSEL0=1 совсем не во времени дополнительной задержки при сбросе. А разница времени просыпания в 15К периодов резонатора (около двух милисекунд на 7,37МГц), достаточна, чтобы заметить.

Ещё раз:
Цитата(galjoen @ May 5 2008, 00:13) *
Из PowerDown АВР выходит больно долго и энергию при этом потребляет. Не считая режима IDLE конечно.

Цитата(galjoen @ May 5 2008, 16:02) *
При выходе из sleep происходит то-же, что и при запуске процессора. Т.е. если у вас SUT1..0=00, то действительно будет за 6 тактов просыпаться. А в других случаях добавляется 4 или 64 мс.

Нет. При выходе из power down происходит только задержка на раскачку генератора. Для RC-генератора она установлена в 6 тактов, для керамических/кварцевых гораздо длиннее. Никаких 4 или 65 мс при выходе из power down не добавляется.
Проверьте сами.
Устанавливаем WDT на прерывания, минимальный период - около 2мс.
Перед командой sleep поднимаем ножку, в начале обработчика прерывания опускаем.

Код
MCU = attiny13
FUSES = wdton=1,bodlevel=2,sut=2,ckdiv=1,cksel=2
Для тини13 SUT=2 (0b10) - это 65мс от сброса, 6 циклов от побудки.

Код
#define PDOWN    B,0    // power down indicator
#define REQ    B,1    // interrupt request pin

#define TICK_PERIOD    WDTO_15MS
#define WD_MODE (1 << WDTIE) | (1 << WDTIF)
//#define WD_MODE (1 << WDE)

    .text
    .global main
main:
    outi    ACSR, (1 << ACD)
    outi    PORTB, MASK(REQ)
    outi    DDRB, ~MASK(REQ)
    out    MCUSR, __zero_reg__
    wdr
    outi    MCUCR, (1 << SE) | SLEEP_MODE_PWR_DOWN

    outi    WDTCR, (1 << WDCE) | (1 << WDE)
    outi    WDTCR, WD_MODE | TICK_PERIOD
    sei
1:    sbi    PORTBIT(PDOWN)
    sleep
    rjmp 1b

    .global WDT_vect
WDT_vect:
    cbi    PORTBIT(PDOWN)
    reti

Если бы по прерыванию от WDT выход из SLEEP_MODE_PWR_DOWN зависел от SUT, то у нас при данных FUSES никак на ножке PDOWN не получились бы импульсы с периодом около 2мс. Тогда должно было бы быть около 67мс.
А вот если сделать WD_MODE (1 << WDE), то на ножке PDOWN держится "1" окол 2мс, потом плавно падает в 0 (так как по сбросу нога переходит в hi-Z и к земле тянет входное сопротивления осциллографа), потом около 65мс низкий уровень и опять поднимается на 2мс. Заметьте - при этом фьюзы не менялись, только константа для записи в WDTCR.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
defunct
сообщение May 5 2008, 20:27
Сообщение #19


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ReAl @ May 5 2008, 15:25) *
Значит сброс CLKPR производится после снятия сброса в те 14 тактов дополнительной задержки, которые есть даже при 0-вом SUT.

Дык, добавьте кратковременный положительный пульс на Reset
0-1-0 ..

Цитата(zhevak @ May 5 2008, 08:53) *
Поскольку используется счетчик (для отсчета времени в 1 мс), то уйти в Down или PowerSafe нельзя. Из этих режимов нельзя проснуться по таймеру. Актуальны только сброс, внешнее событие или вотч-дог. Этим объясняется большое энергопотребление.

Ну надо смотреть может Вам и не надо 1ms smile.gif или может быть можно снаружи взять 1kHz.
А так самый распространенный способ просыпать от WDT.

Цитата(galjoen @ May 5 2008, 16:02) *
А лишний ток при старте конечно только при работе от кварца потребляется.

t13 не имеет даже возможности тактироваться от внешнего кварца. Только RC и внешний клок.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 5 2008, 21:10
Сообщение #20


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(defunct @ May 5 2008, 23:27) *
Дык, добавьте кратковременный положительный пульс на Reset
0-1-0 ..
А он есть, короткий, для повышения вероятности условия SCK=0 в момент подачи сброса (уменьшения потребности пересинхронизаций).
Т.е. сейчас 100мс сброс (этот для перевода портов в hi-Z, можно было и короткий сделать), несколько тактов (исходя из ключа -o) снятие сброса, 100мс сброс, вход в программирование.
Только тут какая штука - как я понял текст, те 14 тактов будут отрабатывать после снятия внутреннего сброса, т.е. после отработки SUT.
Если эта единичка на сбросе будет короче выставленной по SUT задержки, то, получается, CLKPR не сбросится (видимо, это у меня и было в эксперименте, у меня там в болванке SUT=2 забито). А если единичка будет длиннее более, чем на время от начала работы программы до записи делителя в CLKPR, то оно запишется опять smile.gif
Короче, а по дырочкам - ну никак попасть в те несколько тактов от конца работы SUT до записи в CLKPR всё равно не удастся.
Да и решается это всё с помощью -oочень_мало
Можно в тестовой программе сделать задержку милисекунд в 10 до записи в CLKPR и выставить SUT на 0мс, перекомпилировать avreal на милисекунду-другую единички между сбросами, ...
А оно надо?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 5 2008, 21:14
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(ReAl @ May 5 2008, 23:36) *
А нельзя ли точно сказать - какой был контроллер, какие CKSEL/SUT?
А то мало ли что... Вдруг не туда глянули... Вы говорили о SUT=00, а при каких остальных битах они были?

Проверял на ATmega64 с кварцем 14.7456.
Фузы были такие:
CKSEL0..3=1111
1й вариант SUT01=11 - 16K CK - 64ms
2й вариант SUT01=10 - 16K CK - 0ms
BOD включена, а остальные фузы значения думаю не имеют.
Пробуждалось от таймера, работающего в ассинхронном режиме от часового кварца, а так-же от WDR.
Пробовал разные варианты с делением тактовой частоты (у ATmega64 регистр XDIV).

При пробуждении от таймера пришёл к следующим выводам:
1. SUT01 =11 или 10 на время пробуждения в этом режиме не влияет
2. При делении тактовой время пробуждения пропорционально увеличивается. В смысле время на эти 16K. Т.е проснутся, с поделённой на 4 тактовой, быстрее чем за 5 мс невозможно.
3. Потребление во время пробуждения, с пониженной за счёт XDIV тактовой, растёт за счёт увеличения времени этого самого пробуждения.
4. Наиболее экономично по потреблению просыпаться без деления тактовой.
5. Но ещё экономичнее вообще не засыпать на 5 мс, а просто делить тактовую на 128 и отключать всё что возможно (компаратор, АЦП, порты и т.д.). Видимо это происходит из-за дополнительных затрат при раскачке кварца. А м.б. что-то другое влияет - не выяснил.
6. М.б. есть смысл в IDLE уходить, но разницы в потреблении я не заметил поэтому так делать не стал

При пробуждении от WDR (а у ATmega64 это эквивалентно сбросу) таймера пришёл к следующим выводам:
1. SUT01 =11 или 10 на время пробуждения в этом режиме влияет (т.е. происходит полноценный сброс)
2. XDIV при этом сбрасывается
3. По потреблению (и точности по времени) этот способ явно хуже, чем пробуждение от часов, поэтому с ним особо не эксперементировал

С процессорами у которых WDR свой адрес в таблице переходов имеет не эксперементировал. Поэтому м.б. мы о разных вещах говорим. Я-то говорил о тех, у которых WDR эквивалентен сбросу. А задержка в 1 мс на пониженной в 256 раз тактовой это не более 40 тактов. Поэтому я писал, что нет смысла в слип уходить особенно если из него по WDR выходить придётся.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 5 2008, 21:32
Сообщение #22


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(galjoen @ May 6 2008, 00:14) *
При пробуждении от таймера пришёл к следующим выводам:
1. SUT01 =11 или 10 на время пробуждения в этом режиме не влияет
....
При пробуждении от WDR (а у ATmega64 это эквивалентно сбросу)
С асинхронным таймером, как я понимаю, уход в power save был, который power down + работает асинхронный таймер?
И SUT ведь не влиял?
Так почему Вы говорите, что SUT влияет на время просыпания?

А про WDT у меги - сами же говорите, что это сброс а не побудка, там и должен SUT отработать.

Цитата(galjoen @ May 6 2008, 00:14) *
Поэтому м.б. мы о разных вещах говорим. Я-то говорил о тех, у которых WDR эквивалентен сбросу.
Я, конечно, зануда, но Вы говорили о том, что "при выходе из sleep происходит то же, что и при запуске процессора", а не "при сбросе по WDT происходит то же, что и при внешнем сбросе процессора". Со вторым я бы и не спорил.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 5 2008, 22:07
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(ReAl @ May 6 2008, 01:32) *
1. С асинхронным таймером, как я понимаю, уход в power save был, который power down + работает асинхронный таймер?

2. И SUT ведь не влиял?

3. Так почему Вы говорите, что SUT влияет на время просыпания?

4. А про WDT у меги - сами же говорите, что это сброс а не побудка, там и должен SUT отработать.

5. Я, конечно, зануда,
6. но Вы говорили о том, что "при выходе из sleep происходит то же, что и при запуске процессора", а не "при сбросе по WDT происходит то же, что и при внешнем сбросе процессора". Со вторым я бы и не спорил.

1. Совершенно верно.
2. Я пробовал SUT=00 ставить (1K тактов на раскачку). Просыпался быстро, но некорректно т.к. этот режим для керамического резонатора.
3. От SUT кол-во тактов раскачки зависит. Т.е. время просыпания. Когда я это писал, о работе от встроенного генератора, как и о t13, речи ещё не было. Обсуждались АВР вообще.
4. Совершенно верно, но WDR можно использовать для побудки, если в ОЗУ достаточно длинный ключ писать, а при пробуждении проверять, что от WDR проснулись и этот ключ.
5. Видимо мы с вами одной крови.
6. Был неправ. Надо было написать "при выходе из sleep происходит то же, что и при запуске процессора, за исключением задержки Tr, если таковая имеется".
Go to the top of the page
 
+Quote Post
defunct
сообщение May 6 2008, 00:09
Сообщение #24


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ReAl @ May 6 2008, 00:10) *
Если эта единичка на сбросе будет короче выставленной по SUT задержки, то, получается, CLKPR не сбросится (видимо, это у меня и было в эксперименте, у меня там в болванке SUT=2 забито). А если единичка будет длиннее более, чем на время от начала работы программы до записи делителя в CLKPR, то оно запишется опять smile.gif

Эх, весело однако. wink.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 6 2008, 17:21
Сообщение #25


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(galjoen @ May 6 2008, 01:07) *
3. От SUT кол-во тактов раскачки зависит. Т.е. время просыпания. Когда я это писал, о работе от встроенного генератора, как и о t13, речи ещё не было. Обсуждались АВР вообще.
...
5. Видимо мы с вами одной крови.
3. Ну так и я обсуждал выход из power down вообще, хоть по прерыванию от WDT, хоть по внешнему wink.gif Просто на макете проще проверить WDT-шное, ничего тянуть не надо smile.gif
5. Запросто!


Цитата(zhevak @ May 4 2008, 22:03) *
Вчера я тоже наступил на эти же грабли, только с STK500 и Tiny13. Причем дважды.
...
При тактовой 4.8 МГц и предделителе на 8 все работало нормально. Стоило только увеличить коэфиициент предделителя, программатор потерял чип. Вылечил кристалл аналогично.
Я сегодня погонял на 3.3В тини13 с 9.6МГц, для 4.8 для случая побудки из power down мало что изменится - частота ниже, но время выполнения будет дольше, микроджоули на команду от частоты 9,6 или 4,8 не зависят smile.gif

Вышло следующее:
9,6МГц полное потребление - 3,5мА
Висение в ILDE - забыл померять

9,6 / 8
Полное - 670мкА
IDLE - 235мкА
Просыпание из IDLE по таймеру раз в 820мкс (почему именно такое время - ниже) и работа в течении 160 тактов - 300мкА

9,6 / 64
полное 173мкА, но в это время успевает сделать только 125 тактов
не-совсем-IDLE - 138мкА (просыпание по таймеру раз в 820мкс только затем, чтобы сразу же заснуть).

Теперь с уходом в power down с побудкой по PCINT от генератора. Точнее, от половинки генератора, так как снаружи у тини13 был один транзистор BC557, один конденсатор 1нФ, два резистора - 1МОм и 300 Ом, вторая половина мультивибратора реализована программно.
Период у генератора вышел 820мкс.
WDT выключен.

Побудка из power down раз в 820мкС на время 102мкс (это длительность импульса на ножке, полнимается первой командой обработчика прерывания, опускается перед командой sleep).
Это по числу выполняемых команд эквивалентно непрерывной работе с 9,6 / 8.
Вышло 405мкА (меньше, чем 670мкА).

Побудка из power down раз в 820мкС на время 17мкс (меньше нехорошо по работе генератора).
Это по числу выполняемых команд за период - около 160 - больше, чем при непрерывной работе с 9,6 / 64.
Вышло 110мкА (меньше, чем 173мкА для непрерывной работы с CLK/64).

Если увеличить период, потребление упадёт.
Но я не включал аналоговый компаратор. Надо добавить его среднее потребление с учётом времени включенного состояния.

Вопрос стабильности и повторяемости генератора, конечо, стоит.
Повторяемость больше зависит от точности резистора и конденсатора, термостабильность определяется в основном дрейфом напряжения база-эмиттер в отношении к удвоенному напряжению питания. Думаю, это всё равно лучше, чем дрейф логических уровней AVR, да и нехорошо слишком плавно менять напряжение на входе, поэтому "генератор" из одного внешнего резистора и одного конденсатора я даже не паял.

У меня при нагреве дорожным (в не в смысле "строительным", а в смысле в дорогу брать, маленький такой) феном где-то градусов до 50 период падал до 805мкс, при охлаждении фризером из баллончика до "на корпусе транзистора иней выпал" - рос до 850мкс. Итого около 6% в диапазоне, +-3% от середины.

p.s. При побудке по PCINT либо INT0 импульсами от внешнего генератора от спада сигнала генератора на входе тини13 до перепада выхода, изменяемого первой командой обработчика прерывания - около 5,6мкс при тактовой 9,6МГц.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 6 2008, 18:26
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(ReAl @ May 5 2008, 16:25) *
ШИМ, правда, 16кГц получается. Но и так, и без ШИМ - с внесением TOGGLE(MOSI) в цикл, и все ножки по одной, и в разных комбинациях - всё нормально перешивается на нормальной тактовой SPIЮ без занижения.
"Ну не знаю я".

Код
__task void    main( void )
{
  uint8_t    i;
  int8_t    j;

// Инициализация портов и переменных

//==== Таймер 2 =====
#ifdef __PORT88__
  TCCR2A=0x42;                                            // Таймер 2 инициализация FCLK/8 Режим СТС
  TCCR2B=0x2;                                            // с выводом на порт
  OCR2A=50;                                                // частота около 10 кГц
#else
  TCCR2=0x1a;                                            // Таймер 2 инициализация FCLK/8 Режим СТС
  OCR2=50;                                                // частота около 10 кГц
#endif


Давайте может прошивку вышлю готовую?
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 6 2008, 18:46
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(ReAl @ May 6 2008, 21:21) *
...
Вышло 405мкА (меньше, чем 670мкА).
...
Вышло 110мкА (меньше, чем 173мкА для непрерывной работы с CLK/64).
...

Т.е. получается, что в случае использования внутреннего генератора эффективнее уходить в слип, чем использовать деление тактовой частоты.
У меня, при использовании кварца, получилось наоборот. Видимо это объясняется тем, что пока кварц долго-долго раскачивается энергия-то потребляется, и, в период раскачки, потребление (генератором) даже БОЛЬШЕ, чем при нормальной работе кварца. К тому-же на время меньше 1 мс с кварцем в слип уходить невозможно, т.к. генератор раскачивается более 1 мс.

Аналоговый компаратор по умолчанию включен. М.б. вы хотели сказать, что не выключали его?
Go to the top of the page
 
+Quote Post
zhevak
сообщение May 6 2008, 18:57
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата
Я сегодня погонял на 3.3В тини13...


Спасибо, ReAl!
Я очень внимательно прочитал Ваш отчет. И скажу, Вы даже мне немного помогли. Т.е Вы проделали какую-то часть моей работы, за что я Вам очень и очень благодарен. Вы подтвердили, что моя задача "прямо в лоб" все-таки не решается. Ну что ж, непроблема! Будем искать обходные пути. smile.gif

Кстати, всех с наступающим Праздником -- С днем Радио!


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 7 2008, 07:55
Сообщение #29


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(SasaVitebsk @ May 6 2008, 21:26) *
Давайте может прошивку вышлю готовую?
Я не вижу причин, по которым именно 10кГц должны мешать (в силу того, что avreal можно запускать с всякими разными частотами), поэтому и поленился что-то выписывать - написал OCR2A = 0x7F;, включил "точный" ШИМ и всё.
У меня есть макетка с кучей панелек, где на каждую разведен только разъём программирования и возле каждой персональные гнёзда для кварца. Т.е. не важно, что прошивка может молотить ещё какими-то ногами, конфликтов не будет.
Есть мега 48 и 168 (и мега8, и 90s4433 smile.gif ). Давайте Ваш hex и перечень fuses, скажите, в какой кристалл шить (если скомпилируете и под 48, и под 168 - будет тольео интереснее). Впереди выходные, чай есть, осциллограф есть - попробую.
Но что-то странное, не должно это влиять...



Цитата(galjoen @ May 6 2008, 21:46) *
Т.е. получается, что в случае использования внутреннего генератора эффективнее уходить в слип, чем использовать деление тактовой частоты. У меня, при использовании кварца, получилось наоборот. Видимо это объясняется тем, что пока кварц долго-долго раскачивается энергия-то потребляется, и, в период раскачки, потребление (генератором) даже БОЛЬШЕ, чем при нормальной работе кварца.
Ну да, я же об этом сразу и сказал
Цитата(ReAl @ May 5 2008, 15:25) *
Если работа от кварца - то кто угодно будет выходить долго и печально, так как надо раскачаться кварцу в генераторе и дождаться стабилизации его амплитуды. А от внутреннего RC - по документации старт за 6 тактов и я не замечал отклонений. Мерять время старта я не мерял,
...
Больше потребление во время раскачки или нет - это надо смотреть, но что при CLK/XXX все 100% времени работы используются, а при просыпании на полезное время, равное времени раскачки кварца - выходит что 50% времени генератор лупит зря, да и ядро при этом потребляет, хоть и на месте топчется.
Ну а время я таки замерял, в предыдущем сообщении грубо указал, а точнее так:
При 9,6МГц (замер дал время одного цикла около 105нс, т.е. 9,52МГц) время старта из IDLE - 1,36мкс от спада на входной ножке до перепада на выходной, т.е. 13 тактов. Из них (обратным ходом от выходной ножки к входному воздействию)
а) 2 - сама команда SBI, которая состояние ножки поменяла
б) 2 - rjmp из вектора на обработчик
в) 4 - обычный вход в прерывание
г) 4 - указанная в документации доп. задержка при просыпании.
Итого 12, а ещё один где-то на подсинхронизациях набрался.

А вот из POWER DOWN - 5,68мкс (54 такта). Если считать, что к 13 при IDLE должно добавиться 6 раскачки генератора, то это 19, выходит, 35 тактов генератор стартовал до того уровня, когда его сигнала стало достаточно для работы счётчика start-up?
Что-то много для RC-генератора. Пары тактов достаточно, да и то - период первых может быть не тот, но амплитуда-то сразу нормальная должна быть. Ну, как сделано, так сделано. В любом случае 35 тактов не многие тысячи, как для кварца.
О, интересно (продолжаю расшифровывать вчерашние заметки).
При CLK/8 выход из IDLE, как положено, удлиннился в 8 раз до ~10.8мкс, а выход из POWER DOWN - до 19,8мкс, около 3,5раз.
Так, если добавить к задержке IDLE "те 6 тактов", то разница между полученным и задержкой POWER DOWN в микросекундах меняется очень мало при изменении делителя от /1 до /64.
А если добавить ещё такт, то она равна приблизительно 3.5мкс независимо от делителя.
Т.е. при выходе из POWER DOWN сначала идёт фиксированная задержка около 3,5мкс (включение источников тока генератора?), потом отрабатывается 7 CK (с учётом CLKPR) и дальше идёт то, что идёт при просыпании из IDLE. Куда делся ещё такт - лень выяснять, вечно на какие-то подсинхронизации/конвейеризации они уходит, в уставновившемся режиме всё на месте, а при переходных режимах куда-то пропадают. Был бы это мой проект в ПЛИС - обязательно искал бы biggrin.gif

Цитата(galjoen @ May 6 2008, 21:46) *
Аналоговый компаратор по умолчанию включен. М.б. вы хотели сказать, что не выключали его?
Нет, именно не включал. Я его выключил на старте программы, а при просыпаниях не включал, так как всё равно не знаю, на какое время его включение нужно zhevak. На время POWER DOWN, насколько я помню, компаратор выключается автоматически, но я во всех тестовых программках (и с непрерывной работой с делителем, и с уходом в IDLE с побудкой по таймеру, ...) компаратор выключал сразу для равенства условий.

Кстати, из тех 110мкА где-то 8-10 ушло на "генератор побудки". Может даже немного больше.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 7 2008, 21:15
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(ReAl @ May 7 2008, 11:55) *
Я не вижу причин, по которым именно 10кГц должны мешать (в силу того, что avreal можно запускать с всякими разными частотами), поэтому и поленился что-то выписывать - написал OCR2A = 0x7F;, включил "точный" ШИМ и всё.
У меня есть макетка с кучей панелек, где на каждую разведен только разъём программирования и возле каждой персональные гнёзда для кварца. Т.е. не важно, что прошивка может молотить ещё какими-то ногами, конфликтов не будет.
Есть мега 48 и 168 (и мега8, и 90s4433 smile.gif ). Давайте Ваш hex и перечень fuses, скажите, в какой кристалл шить (если скомпилируете и под 48, и под 168 - будет тольео интереснее). Впереди выходные, чай есть, осциллограф есть - попробую.
Но что-то странное, не должно это влиять...


К счастью у меня нет претензий к AVREALу. Одни благодарности. beer.gif beer.gif beer.gif
Я его и не мучил сильно. Я сразу в студию полез ч/з ICE2. И там - те же хомуты. HEX в личку.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01658 секунд с 7
ELECTRONIX ©2004-2016