Easyelectronics.ru

Электроника для всех
Текущее время: 23 янв 2021, 00:49

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Программное отключение BOD в ATtiny861A
СообщениеДобавлено: 11 июн 2020, 04:26 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 71
Откуда: Бурятия
Чёт не получается.

Делаю так:

Фузы - на BODLEVEL 1.8v

#b10110100->MCUCR
#b10110000->MCUCR
1->I
SLEEP

Т.е. сначала по единичке в BODS и BODSE (7й и 2й биты).
Следом 1 в BODS и 0 в BODSE.
Включаем прерывания.
Баиньки.

3,4,5 биты включают Power-down и Sleep Enable.
.
Не отключается BODLEVEL.
Только фузами отключается...

Мож кто поделится реально работающим кодом. Или носом меня ткнёт в мою ошибку. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программное отключение BOD в ATtiny861A
СообщениеДобавлено: 11 июн 2020, 14:19 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
А почему должен "отключаться" BODLEVEL? В главе 7.2 написано, что BOD программно можно вырубать только на время сна, для экономии энергии. После выхода из сна он автоматом включается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программное отключение BOD в ATtiny861A
СообщениеДобавлено: 11 июн 2020, 15:41 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 71
Откуда: Бурятия
Ну да.
Я и делаю SLEEP.
Не отключается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программное отключение BOD в ATtiny861A
СообщениеДобавлено: 11 июн 2020, 16:35 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 71
Откуда: Бурятия
Вот тут нашёл: https://forum.arduino.cc/index.php?topic=119025.0

Пишут, что так не работает:
sleep_enable();
MCUCR = (1<<BODS) | (1<<BODSE); // set both BODS and BODSE to 1
MCUCR = (1<<BODS) | (0<<BODSE); // set BODS to 1 and BODSE to 0
sleep_cpu (); // sleep within 3 clock cycles of above

А так работает:
sleep_enable();
MCUCR = MCUCR | bit(BODSE) | bit(BODS); // timed sequence
MCUCR = MCUCR & ~ bit(BODSE) | bit(BODS);
sleep_cpu();

Я в С слабоват (очень мягко выражаясь).
Растолкуйте заскорузлому ассемблерщику, чем отличаются два этих кода.
Разложите их, пожалуйста до ассм. команд.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программное отключение BOD в ATtiny861A
СообщениеДобавлено: 13 июн 2020, 16:26 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Разница в записи в регистр MCUCR. Во 2ом случае он сначала считывается, потом идет логическое ИЛИ, потом лог. И. Т.е. с регистром работают через READ-MODIFY-WRITE. Ну вообще это логично, потому что сначала выставили режим сна, а потом его пытались перезаписать в 1ом случае, конечно так бы не работало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программное отключение BOD в ATtiny861A
СообщениеДобавлено: 14 июн 2020, 02:13 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7239
Вообще-то, запись логически (по результату) эквивалентна. Разница во времени исполнения.
MCUCR = (1<<BODS) | (1<<BODSE); // set both BODS and BODSE to 1
MCUCR = (1<<BODS) | (0<<BODSE); // set BODS to 1 and BODSE to 0
эквивалентно двум последовательным WRITE_PORT.
А вот
MCUCR = MCUCR | bit(BODSE) | bit(BODS); // timed sequence
MCUCR = MCUCR & ~ bit(BODSE) | bit(BODS);
уже хуже:
WRITE_PORT
READ_PORT
WRITE_PORT
Между 1 WRITE_PORT и 2 WRITE_PORT появляется задержка, что означает в_несколько_раз бОльшее время установленного бита BODSE.
Хотите проверить? вклейте фиктивное чтение этого порта или просто банальную задержку.
MCUCR = (1<<BODS) | (1<<BODSE);
(какая-то команда)
MCUCR = (1<<BODS) | (0<<BODSE);

Вообще, установочные биты не "хрень на заборе", они что-то переключают, меняют режим работы устройства. То, что вы что-то "установили" совсем не означает, что оно установилось (применилось к действию). Этим и отличаются старперы, ранее работающие с логикой - понимание того, что "на всё нужно время". Это программисты свято верят в бит=действие.
К слову, в errata'х потом повляются описания обхождения подобных багов в виде костылей - не вкл.чать это перед этим, подождать, и т.д. и т.п.
P.S.
Совершенно не помню AVR. У нее вроде быстрая шина ... но в л.бом "обычном" процессоре есть дичайшие коллизии, когда пытаются записать и сразу прочитать порт. Особенность работы "шины". Неее, считается всё правильно, просто конвейеры обмена резко взбрыкнут и время выполнения wr-rd выразится в wr-deeelaaay-rd.
/бред ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программное отключение BOD в ATtiny861A
СообщениеДобавлено: 15 июн 2020, 04:33 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 71
Откуда: Бурятия
Любя инструкция к сложной технике на русском языке должна начинаться со слов "Чё, сцуко, сломал?". :)

В данном случае речь не о датшите. Он корявенько написан но верно.
Я сам глюкнул.
Тинька у меня стоит V. А в ней просто нету software disable BOD.
Просто тинька спрятана под второй платой (ну такая конструкция) и чтобы посмотреть маркировку надо включать паяльник.
Лениво.
Мучаем программатор, задаём вопросы на форумах, кнокаем моск себе и людям... :)
Перепаял на ATtiny861A.

Конструкция
//
1->I
#b10110100->r16
#b10110000->r17
r16->MCUCR
r17->MCUCR
SLEEP
//
работает.

Результат - 4,1 мкА вместо 22,8 мкА.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB