Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: подскажите малопотребляющий AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
Electronic)
Здавствуйте! кто может конкретно подсказать как автоматически подстараивать внутрений RC генератор с максимальной точностью на основе кварца 32768гц на таймере Т2. Я так понимаю точности часового кварца с головой если учитывать что в худшем случае уход составляет 1сек в день (а в дне 3600х24 секунд). Подскажите как это сделать самым практическим способом.

Всем заранее a14.gif а я весь вот такой wassat.gif даже соображаю туго... работы много ночи не сплю, так что не сильно не бить smile3009.gif и хорошо пояснять biggrin.gif
domowoj
С помощью OSCCAL и допустим Т1, используя прерывания от Т2, методом последовательного приближения.
А какой МК?
Qwertty
Application Note AVR055: Using a 32kHz XTAL for run-time
calibration of the internal RC от Atmel.
Electronic)
Цитата(Qwertty @ Oct 7 2008, 05:45) *
Application Note AVR055: Using a 32kHz XTAL for run-time
calibration of the internal RC от Atmel.

а где нибуть на русском имеется?

Цитата(domowoj @ Oct 7 2008, 05:15) *
С помощью OSCCAL и допустим Т1, используя прерывания от Т2, методом последовательного приближения.
А какой МК?

мк M8. "С помощью OSCCAL и допустим Т1, используя прерывания от Т2, " это почти продумал... просто у меня Т1 работает по 3 -20 тактов + пропуски на программу ... долго ломал голову как собрать все эти отрывки ) но додумался.
вопрос тогда: методом последовательного приближения. - это как? там ведь ещё надо погрешности посмотреть у меня не точно совпадут например 10000 тактов Т1 с 1 тактом Т2 а будет колебатся 10000 + - 50 например. а мк нагружать сильно не надо он на регистрации собий важных!) посдкажите имено практически может формулами а лучше блолками програм на ICC AVR )))
SysRq
Цитата(Electronic) @ Oct 7 2008, 07:13) *
а где нибуть на русском имеется?

Есть на понятном каждому программеру языке smile.gif AVR055.zip
Electronic)
Цитата(SysRq @ Oct 7 2008, 06:46) *
Есть на понятном каждому программеру языке smile.gif AVR055.zip

ОХО! я тогда сейчас уже лягу высплюсь и за это плотненько возьмусь!
Tolyaha
Цитата(Electronic) @ Oct 7 2008, 04:59) *
Здавствуйте! кто может конкретно подсказать как автоматически подстараивать внутрений RC генератор с максимальной точностью на основе кварца 32768гц на таймере Т2. Я так понимаю точности часового кварца с головой если учитывать что в худшем случае уход составляет 1сек в день (а в дне 3600х24 секунд). Подскажите как это сделать самым практическим способом.

Всем заранее a14.gif а я весь вот такой wassat.gif даже соображаю туго... работы много ночи не сплю, так что не сильно не бить smile3009.gif и хорошо пояснять biggrin.gif

Я когдато на меге 8 делал подстройку RC на 7,3728 мГц нада было UART на 115200 шоб работал, вот код:


;*************************************************************************
; Юстировка внутреннего RC генератора
;*************************************************************************

JUSTOSC:
in r20,TCNT2 ;сохранили показания счетчика T2 в r20
J1:
in r19,TCNT2 ;сохранили показания счетчика T2 в r19
cp r19,r20
breq J1 ;ожидаем переключение счетчика Т2
in r17,TCNT1L ;сохранили показания счетчика T1 в r18
in r18,TCNT1H
J2:
in r20,TCNT2 ;сохранили показания счетчика T2 в r20
cp r19,r20
breq J2 ;ожидаем переключение счетчика Т2
in r16,TCNT1L ;сохранили показания счетчика T1 в r18
in r19,TCNT1H
mov r4,r16
mov r5,r19
clr r21
sub r4,r17 ;получили колво импульсов Т1 за 7812,5 мкс
sbc r5,r18
ldi r17,0xE1 ;константа для 7,3728 мГц
ldi r18,0x00
sub r17,r4
sbc r18,r5
brcc J3
dec r21
rjmp J4
J3:
inc r21
J4:
in r17,OSCCAL
add r17,r21
out OSCCAL,r17
J5:
mov r22,r21
mov r17,r16
mov r18,r19
mov r19,r20
J6:
in r20,TCNT2 ;сохранили показания счетчика T2 в r20
cp r19,r20
breq J6 ;ожидаем переключение счетчика Т2
in r16,TCNT1L ;сохранили показания счетчика T1 в r18
in r19,TCNT1H
mov r4,r16
mov r5,r19
clr r21
sub r4,r17 ;получили колво импульсов Т1 за 7812,5 мкс
sbc r5,r18
ldi r17,0xE1 ;константа для 7,3728 мГц
ldi r18,0x00
sub r17,r4
sbc r18,r5
brcc J7
dec r21
rjmp J8
J7:
inc r21
J8:
in r17,OSCCAL
add r17,r21
out OSCCAL,r17
cp r22,r21
breq J5
ret


Еще инициализация таймеров:
ldi r16,0x04
out TCCR1B,r16 ;Старт таймера Т1 1ед.L = 34,72 мкс, 1ед.H = 8,89 мс
ldi r16,(1<<AS2)
out ASSR,r16 ;ассинхронный режим Т2 от внешнего резонатора 32768 Гц
ldi r16,(1<<CS21)|(1<<CS22)
out TCCR2,r16 ;Старт таймера Т2 1ед.= 7812,5 мкс, Цикл = 2 с
Electronic)
Всем ОГРОМНОЕ спасибо! выбрал код как подсказал otrog! так как у меня все таймеры зяняты. лишние коды вставлять не стал и писал как бы сам. выбрал код такого плана.

unsigned int i=TCNT1;
TCNT1=0;
if (i<7813)
OSCCAL++; //Увеличиваем тактовую частоту
else
OSCCAL--; //Уменьшаем тактовую частоту
SECOND_PULSE=1;
при его использовании кждую секунду значение меняется 7811 (точность офигенная)/7837 (точность 0.3%) меня это всё устраивает с головой. только не будет ли проблем со стабильностью от такого частого изменения значения OSCCAL? как бы ... генератор... 8Мгц... все время там переключается что то... может какие то такты будут раз в секунду пропадать ? или я просто параноик? biggrin.gif
domowoj
Почему бы частоту не настраивать при входе в программу.
Electronic)
Цитата(domowoj @ Oct 7 2008, 17:05) *
Почему бы частоту не настраивать при входе в программу.

ну так RC генератор) паяльником прикоснулся и он поплыл))))

зацените ИДЕЮ!

if (T1<=7790){OSCCAL++;}
if (T1>=7830){OSCCAL--;}

мне a14.gif держит частоту 7810 стабильно а уйдёт за диапазоны снова подстоится в диапазон +/-0,3%, и OSCCAL изменяется в крайнем случае yeah.gif
domowoj
А если на часовой кварц даже чихнуть - частота поплыла.
Не проще ли поставить кварц, допустим на 7 с копейками мегагерц(или другой),
где процент ошибки =0 при 115кбит/сек.
rx3apf
Цитата(domowoj @ Oct 7 2008, 19:16) *
А если на часовой кварц даже чихнуть - частота поплыла.
Не проще ли поставить кварц, допустим на 7 с копейками мегагерц(или другой),
где процент ошибки =0 при 115кбит/сек.

В микропотребляющих системах - не проще. Причем иногда бывает, что генератор под кварцевый резонатор только один, а нужно иметь и встроенные RTC.
Electronic)
Подскажите пожалуйста, микроконтролер AVR уровня M8-M16 (что бы ножек не 100было). с потреблением в рабочем режиме <1мА. и не экзотический!

а то на мою любимую М8 конкретный акумулятор надо получается 05.gif
Арташес
Цитата(Electronic) @ Oct 8 2008, 03:52) *
Подскажите пожалуйста, микроконтролер AVR уровня M8-M16 (что бы ножек не 100было). с потреблением в рабочем режиме <1мА. и не экзотический!

а то на мою любимую М8 конкретный акумулятор надо получается 05.gif

Попробуйте серию picoPower. Там есть ATmega88P и ATmega168P. Спокойно покупается в Digikey.
domowoj
Практически все Tiny на средних частотах(см даташит).
Rst7
Цитата
с потреблением в рабочем режиме <1мА.


При каком питании и тактовой частоте?
mrKirill
Не так уж и много ATMega8L потребляет:
Active 4MHz, Vcc=3V - 6мА (max)

Вы периферию и пулл-апы внимательнее выбирайте, для снижения потребления схемой...
GDI
Не обязательно же постоянно подстраивать, можно это делать с какой то периодичностью, вернее сперва при запуске программы подстроить РЦ в диапазон, а потом проверять, допустим, раз в секунду.
GDI
...А еще разнообразные sleep режимы придуманы для экономии энергии как раз...
MrYuran
А ещё есть MSP430.
Можно питать от двух яблок...
По цене - практически как мега, по функционалу - намного круче, особенно в части счётчиков
otrog
Цитата(GDI @ Oct 8 2008, 11:08) *
Не обязательно же постоянно подстраивать, можно это делать с какой то периодичностью, вернее сперва при запуске программы подстроить РЦ в диапазон, а потом проверять, допустим, раз в секунду.

Так ведь в коде от Rst7, ссылку на который я привел выше, подстройка RC генератора как раз и призводится "раз в секунду". wink.gif
Rst7
Цитата
зацените ИДЕЮ!


Не заценил. Идея - фигня. Лишний код, который нафиг не нужен.
Stanislav_S
Все зависит от задачи, в таких применениях у меня и обычные 48 и 88 хорошо идут. MSP430 конечно хорош, но с ценами и доставабельностью у него не так все хорошо.
Electronic)
Вот что бы было понятно к чему я это всё затеял!

http://www.compeljournal.ru/images/articles/2005_1_7.pdf

эти AVR почти ничего не кушаю (300мкА! - 1мгЦ) но слишком крутые для меня.
корпуса что то в стиле tqfp100 и цена 40-60 грн.
мне надо дешевле и 32-50 ножки.... ОЧЕНЬ НАДА! 1111493779.gif
что послабее у AVR есть?


Кто то писал про Tiny так это даже не уровень M8!)) а вобще biggrin.gif
Rst7
Так а в чем проблемы запустить M8 от внутреннего RC-генератора 1МГц? При 3х-вольтовом питании будет как раз микроампер 300-400.

Хотя нет. Соврал. Почти 2ма будет. Но все равно, далеко не 15!

А вот Mega48/88/168 - примерно 0.5мА. Да еще и периферию можно поотключать.
Electronic)
Цитата(Rst7 @ Oct 8 2008, 12:28) *
Так а в чем проблемы запустить M8 от внутреннего RC-генератора 1МГц? При 3х-вольтовом питании будет как раз микроампер 300-400.

Хотя нет. Соврал. Почти 2ма будет. Но все равно, далеко не 15!

А вот Mega48/88/168 - примерно 0.5мА. Да еще и периферию можно поотключать.


mega329, mega649, mega3290 и mega6490 эти 0.3ма при всём включенном. у меня ведь сама цель что бы устройство работало от акумуляторов. сейчас 2 М8 потребляют 30-40мА (8Мг). а вот mega329 обе будут максимум 2 мА. При том что они бомбовые! может есть что то послебее у AVR и посовременее?
zhevak
Цитата(Electronic) @ Oct 8 2008, 04:52) *
Подскажите пожалуйста, микроконтролер AVR уровня M8-M16 (что бы ножек не 100было).

Бокорезы рулят! Берите "кузов" MLF -- у него ног вообще нет.

Или вы хотели бы иметь шаг ног не менее 0.5 мм и заниимаемую на плате площадь поменьше?
Используйте режим сна по максимуму, но с умом. Чем глубже сон, тем меньше вариантов пробуждения.
Rst7
Цитата
mega329, mega649, mega3290 и mega6490 эти 0.3ма при всём включенном


Для тех кто в танке. Не читайте всякие обзоры неизвестно кем писаные. Открывайте даташит и смотрите на графики.

М329P при 3хвольтовом питании и внутреннем RC 1МГц - примерно 800 мкА. А при 8МГц - 5ма от 3х вольт и 9-10ма от 5ти вольт.

M48/88/168 в аналогичных режимах жрут меньше.
GDI
А еще на сайт производителя полезно заглянуть и посмотреть , наконец, даташиты на picopower-контроллеры
Electronic)
Как раз там и лажу! или я бестолочь или они но про потребление не слова biggrin.gif
http://www.atmel.com/dyn/products/product_...sp?part_id=4196

ОЙЁ!!!!
Low Power Consumption at 1 MHz, 1.8V, 25°C for ATmega48P/88P/168P:
– Active Mode: 0.3 mA

неужели это то о чём я подумал? yeah.gif

но вот если 5В... и 8Мгц....

я щас сума сойду описание для ATmega48V/88V/168V

Low Power Consumption
– Active Mode:
250 μA at 1 MHz, 1.8V
15 μA at 32 kHz, 1.8V (including Oscillator)
– Power-down Mode:
0.1μA at 1.8V

описание для ATmega48P/88P/168P:
• Low Power Consumption at 1 MHz, 1.8V, 25°C for ATmega48P/88P/168P:
– Active Mode: 0.3 mA
– Power-down Mode: 0.1 μA
– Power-save Mode: 0.8 μA (Including 32 kHz RTC)

ВЕРСИЯ V МЕНЬШЕ ПОТРЕБЯЛЕТ ЧЕМ Р ???
существенная разница только на режимах с 32кгц. 0.8 μA против 15 μA. это вся сила picopower??? я думал там революция микрпотреления...
Кто будет меньше кушать на 5В 8Мгц?
Electronic)
Цитата(Rst7 @ Oct 8 2008, 10:26) *
Не заценил. Идея - фигня. Лишний код, который нафиг не нужен.

Кому это он не нужен? поконкретнее ... у меня RTC на Т2 и UART с ответствеными данными, и желательно что бы обращение к OSCAL пореже было. может просто вам кроме как зажигать лампочки ничего не надо? biggrin.gif тогда не юзайте мой супер код smile3009.gif
или просто у вас есть идеи потолковее? 05.gif так мы ВАС выслушаем!!! biggrin.gif
xemul
Цитата(Electronic) @ Oct 8 2008, 14:58) *
... у меня RTC на Т2 и UART с ответствеными данными, и желательно что бы обращение к OSCAL пореже было.

Точность RTC на T2 будет определяться только точностью настройки и стабильностью часового кварца (если, конечно, программер не решит это дело усугубитьsmile.gif).
А для нормальной жизнедеятельности УАРТа с ответственными данными будет достаточно точности кварца и без настройки.
Если же хочется пореже дергать OSCCAL, заведите переменную, которая будет накапливать ошибку по T1, и подстраивайте OSCCAL, когда эта ошибка будет выходить за допуски.
Rst7
Цитата
Кому это он не нужен? поконкретнее ...


Более того кода, который я написал - не нужно. Вторая проверка - лишняя.

И вообще, Ваш игриво-пионерский тон не к месту на этом форуме. Потрудитесь изъясняться как джентльмен, с уважением к собеседникам, особенно, с учетом того, что люди, которые отвечают Вам, профессионалы более высокого класса, чем Вы.
Electronic)
если где то в заначке есть супер код то Вы не показывали его, а ведь Я!!! ПРОСИЛ!!! biggrin.gif в первом топике не умичать а помогать( собствено для чего форум и есть )
hainiken
Оказывается в ATmega8 есть несколько встроеных RC-генераторов
http://radiokot.ru/forum/viewtopic.php?t=6955&start=80
Rst7
Цитата
если где то в заначке есть супер код то Вы не показывали его


Вы шутите? Вам же дали ссылку на него и Вы его процитировали.

ЗЫ Реинкарнация? Хотя стиль отличается...
Electronic)
Цитата(Rst7 @ Oct 8 2008, 16:32) *
Вы шутите? Вам же дали ссылку на него и Вы его процитировали.

ЗЫ Реинкарнация? Хотя стиль отличается...

понятия не имею о чём Вы... Вы мне ссылок не давали... не ренкарнация, просто мой код офигенно работает вторая проверка нужна не меньше первой да и делается она раз в секунду. я когда на контролер дую то включается в работу вторая строчка biggrin.gif
Rst7
Цитата(Electronic) @ Oct 8 2008, 17:06) *
понятия не имею о чём Вы... Вы мне ссылок не давали...

Я не давал. Ссылку на пост с моим кодом Вам давал otrog.
Цитата
Всем ОГРОМНОЕ спасибо! выбрал код как подсказал otrog! так как у меня все таймеры зяняты. лишние коды вставлять не стал и писал как бы сам. выбрал код такого плана.
unsigned int i=TCNT1;
TCNT1=0;
if (i<7813)
OSCCAL++; //Увеличивае...

Ваши слова? Ваши. А код мой по ссылке, которую дал otrog.

Цитата
не ренкарнация, просто мой код офигенно работает вторая проверка нужна не меньше первой да и делается она раз в секунду. я когда на контролер дую то включается в работу вторая строчка

Если бы Вы немого подумали, то поняли, что если делать область отключения регулировки, то для правильной работы пороги надо задавать не жестко, а динамически, в зависимости от шага регулирования при изменении OSCCAL.
rezident
Цитата(Electronic) @ Oct 8 2008, 18:29) *
Кто будет меньше кушать на 5В 8Мгц?
Меньше будет кушать MSP430 smile.gif Примерно 350мкА@1МГц потребление ядра. Реально в одном из моих проектов, где из периферии лишь 1 UART и GPIO для опроса клавиатуры 4*4 используются, а энергосбережение вообще не задействовано, при питании 3,3В с кварцем 7,3728МГц, MSP430F1232IDW потребляет в районе 2,6-2,8мА.
Electronic)
вобщем замяли.. у меня код выводит в нормальный режим внутрений RC не медленее вашего, и OSCCAL не меняется каждую секунду... а лишь по необходимости.
P.S. в моём проэкте скорость вхождения в точность +-3% не важна.
singlskv
OFF:
Цитата(Electronic) @ Oct 8 2008, 14:58) *
Кому это он не нужен? поконкретнее ... у меня RTC на Т2 и UART с ответствеными данными, и желательно что бы обращение к OSCAL пореже было. может просто вам кроме как зажигать лампочки ничего не надо? biggrin.gif тогда не юзайте мой супер код smile3009.gif
или просто у вас есть идеи потолковее? 05.gif так мы ВАС выслушаем!!! biggrin.gif


Цитата(Electronic) @ Oct 8 2008, 17:01) *
если где то в заначке есть супер код то Вы не показывали его, а ведь Я!!! ПРОСИЛ!!! biggrin.gif в первом топике не умичать а помогать( собствено для чего форум и есть )


Цитата(Electronic) @ Oct 8 2008, 18:06) *
понятия не имею о чём Вы... Вы мне ссылок не давали... не ренкарнация, просто мой код офигенно работает вторая проверка нужна не меньше первой да и делается она раз в секунду. я когда на контролер дую то включается в работу вторая строчка biggrin.gif


Цитата(Electronic) @ Oct 8 2008, 19:43) *
вобщем замяли.. у меня код выводит в нормальный режим внутрений RC не медленее вашего, и OSCCAL не меняется каждую секунду... а лишь по необходимости.
P.S. в моём проэкте скорость вхождения в точность +-3% не важна.

А Вы правда считаете что после этого Вам кто-то захочет помочь ?
А помощь Вам судя по всему очень бы понадобилась... smile.gif
Electronic)
Здравствуйте. есть вопрос... в спящем режиме Т2 c кварцем 32768 спешит на 2-3 сек за час... в рабочем режиме такого не замечал... (кварц без конденсаторов. вешал внешние по 18п уход в слипе был 1 сек за минуту )
приведу коды
инициализация
void timer2_init(void)
{
TCCR2 = 0x00; //stop
ASSR = 0x08; //set async mode
TCNT2 = 0x00; //setup
OCR2 = 0x00;
TCCR2 = 0x05; //start
}

прерывание

#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
{
if(sleep_en==2){TCCR1B=0;T1=TCNT1;TCCR1B=0x05;g=g^1;if(g==1){LED_ON;}else{LED_OF
F;}}//в слип sleep_en=1;
g=g^1;if(g==1){LED_ON;}else{LED_OFF;}
sec_pl=1;
}
и обработка времени в main

if(sec_pl==1){
sec++;if(sec>=60){sec=0;}
if(sec==0){min++;if(min>=60){min=0;}
if(min==0 && sec==0){hor++;if(hor>=24){hor=0;}}}


if(V==0x01 && sleep_en==1){sleep_en=2;sleep_off();}// это пробуждение если на ножке +5
if(sleep_en==1){asm("sleep");}// это повторение ухода в слип для Т2

if(sleep_en==2){ // это отбражение времени и юстировка RC генератора в рабочем режиме
clock(0,0);
if(fl_cl==2){T2=T1;fl_cl=3;}
if(T1<40000 && fl_cl==0){T3=T1;fl_cl=2;}
if(fl_cl==3){T4=T2-T3;fl_cl=0;
if (T4<=(7760)){OSCCAL++;}
if (T4>=(7840)){OSCCAL--;}
lcd_t(T4);}}
sec_pl=0;
}//end if(sec_pl==1)
singlskv
Вы уже открыли несколько тем по сходной тематике...
Может пора остановится ? пока Вас модераторы не остановили...
xemul
Программер таки решил усугубить...
Зачем горбатому даташиты, если есть могила?
Electronic)
У меня широкая исходня тематика...
неумею я даташиты читать... если Вы уже прочитали и знаете что там есть может поделитесь?
мне ж быстрее сделать совет чем пол часа качать со скоростью 4кб) даташит в котором всё на англ. и непонятно ещё где читать... а Вы вроде как руский и уже читали... 05.gif
singlskv
Цитата(Electronic) @ Oct 8 2008, 22:22) *
У меня широкая исходня тематика...
неумею я даташиты читать... если Вы уже прочитали и знаете что там есть может поделитесь?
мне ж быстрее сделать совет чем пол часа качать со скоростью 4кб) даташит в котором всё на англ. и непонятно ещё где читать... а Вы вроде как руский и уже читали... 05.gif
Флаг Вам в руки и танк на встречу...
Нет желания помогать человеку который мыслит так...
Maik-vs
Цитата(singlskv @ Oct 8 2008, 22:28) *
Флаг Вам в руки и танк на встречу...
Нет желания помогать человеку который мыслит так...

+1

2electronic. Есть gaw.ru, есть google и т.д.
А тематика у Вас не широкая... и английский учить придётся. Ну, если хотите стать electronic-ом. smile3046.gif
Electronic)
ну вы и гоните.... я же не просил помогать тех кто не хочет 07.gif

я никого рытся ради себя не заставляю, пишите только если сами знаете

Я ЖЕ ТОЛЬКО СПРОСИЛ ПОЧЕМУ ЧАСТОТА УХОДИТ В СПЯЩЕМ РЕЖИМЕ!))) ТЯЖЕЛО НАПИСАТЬ НЕ ПИШИТЕ! ВСЕМ КТО ПОСЛУШАЕТСЯ СПАСИБО smile.gif ВСЕМ КТО ОТВЕТИТ a14.gif
Electronic)
как тут всем нравится писать не по теме) 50% флуда) ещё и меня втягиваете .. я хотел с юмором, думал живые лююди ... но могу как с ботами , это не принципиально biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.