Вы написали, что копируете ADC сразу в регистры X Y Z, а речь шла о
Да так и есть, ты просто не понял о чём идёт речь. Я пишу одну строку в программе (что и подтверждает скрин), а действия компилятора могут быть какими угодно… это так же как производить запись двухбайтной переменной SRAM в двухбайтный регистр Y. Запись в программе имеет одну строку, а реальное выполнение 4 слова.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Ммм... Статья. В конце архив. Рекомендую изучить. Основные принципы в программировании я применяю как раз из статей Татарчевского. Сам когда-то хотел похожую статью написать. Но опередили.
_Proc_FSM: lpm XH, Z+ ; Считывание старшего байта адреса параметров автомата. lpm XL, Z+ ; Считывание младшего байта адреса параметров автомата. ld r16, X ; Считывание состояния автомата. Индекс таблицы. lpm r17, Z+ ; Считывание количества состояний автомата. cp r16, r17 brsh Process_Errors_FSM lpm XH, Z+ ; Начало таблицы адресов. lpm XL, Z ; Начало таблицы адресов. movw ZH:ZL, XH:XL add ZL, r16 ; Смещение по индексу-состоянию автомата. adc ZH, RCLR shiftlwz lpm r17, Z+ ; Считывание адреса по индексу. lpm r16, Z movw ZH:ZL, r17:r16 ijmp Process_Errors_FSM: cli adiw ZL, 2 lpm r16, Z rjmp Proc_Errors //==================
//================== Set_FSM_State: st Y, FSM_STATE ret //==================
//================== //Proc_FSM_Exit: // st Y, FSM_FLAGS // std Y+1, FSM_STATE // ret //==================
//================== Proc_Heater_Save_Val: std Y+DISP_PROC_HEAT, FSM_STATE std Y+DISP_PROC_HEAT_FLAGS, FSM_FLAGS ret //==================
//================== Proc_Heater: pushiwl Proc_Heater_Save_Val ; Смещение стека на Proc_Heater_Save_Val, после выхода из подпрограммы будет выход из конечного автомата.
Если камень AVR способен это сделать, то в среде Algorithm Builder можно написать любой алгоритм для этого камня.
Плиз, пример конечного автомата. Есть два способа: таблица адресов подпрограмм - обработчиков состояний. Пример я показал выше. Или так называемый switch-case.
Код:
.macro Read_State lds r16,@0 .endmacro
.macro Case cpi r16,@0 brlo Case_Exit // Макрос именно такой, потому что диапазон breq +- 64 байта. rjmp @1 Case_Exit: .endmacro
Хочешь, чтобы я воспроизвёл это в АВ? Если так, то мне нужно будет время для разобраться в данном коде… так как я не программист и классический ассемблер плохо знаю.
Вам в коде и не нужно разбираться. Есть переменная состояние. В зависимости от значения делаются телодвижения. Не важно какие. Главное, что если ноль, то делается одно, если 1, то другое. И так далее.
Главное, что если ноль, то делается одно, если 1, то другое. И так далее.
Ну если не разбираться то вот... Темр - это переменная в SRAM: если туда записать "0" - выполнится подпрограмма Func_1, если записать "1" - выполнится подпрограмма Func_2.
Или такой вариант: константа задаётся в скобках к макрасу… где в скобках указан (0) – выполнится условие Func_1, где в скобках указан (1) – выполнится условие Func_2.
А по теме, можно ещё 1 вопрос? Спасибо. Как я понимаю, в tiny25 удешевлённый ADC хоть и может фактическое "1024", но шагает через 1. Т. е. имеем "зернистость 512". Но как бы не совсем суть. Предусмотрено ли там забратие °Целься как-нибудь ровненько, по 1 или по 2°C. Без перемножения ADC на дробное? (А то в тексте, стр. 133 даташита "Temperature Measurement" - написано, что вроде как 1 LSB на °C, а по таблице ниже, в положительную сторону 0,85°C, а ADC перескакивет через 1. Вот и пойми в чём правда).
Последний раз редактировалось Серый_ Пт янв 19, 2018 09:11:13, всего редактировалось 2 раз(а).
The measured voltage has a linear relationship to the temperature as described in Table 17-2 The sensitivity is approximately 1 LSB / °C and the accuracy depends on the method of user calibration. Typically, the measurement accuracy after a single temperature calibration is ±10°C, assuming calibration at room temperature. Better accuracies are achieved by using two temperature points for calibration.
Написано, что чувствительность составляет приблизительно 1 LSB / °C... данные датчики не для точности измерений температуры.
К тому же пишут, что таблица 17-2 не есть панацея… от камня к камню значения разнятся… и чтобы иметь более точные значения необходимо калибровать показания по нескольким точкам применяя формулу для корректировки.
"Кароч, я всё зделал около того, что - правильно!" 0,85x2x3=5,1 где тройка взята за 5°C, и в общем-то работает (для вкл/выкл вентилятора достаточно). Но ради спортивного - надо поананировать..., что в их формуле предлагается делать с ADCH: [(ADCH << 8) | ADCL] Что это, сдвиг-умножение или левость результата?
P. s. посовав схему вместе с градусником на паяльник, выплыло, что значение 1-ца на °C более правдивое. Но... из-за шага ADC х2 = шкалу лучше делать через 6, а не через 5. (34-40-46-52 °C).
Последний раз редактировалось Серый_ Пт янв 19, 2018 15:04:17, всего редактировалось 1 раз.
это для С, указывает (при раздельном чтении) что байт ADCH надо на 8 бит сдвинуть влево (умножить на 256) чтобы он попал в Н байт двухбайтной переменной.
Добавлено after 2 minutes 32 seconds: в ассемблере ADCL и ADCH просто читай в соседние регистры, их пара и будет равна 16 битному ADC
легко разворачивается и хранение массива констант во флеш (например для знакогенератора), а если константы заменить на переходы по меткам - будет свитч кейс. (только отдельно нужно проверить диапазон, иначе можно куданибудь вылететь)
Добавлено after 34 minutes 14 seconds: Т.е. я вижу вариант реализации свитч кейс 2мя способами 1-перебором условий, 2-через массив адресов переходов, оба способа реализуемы в АБ, первый стабильнее (безопаснее), второй быстрее.
Добавлено after 6 hours 23 minutes 32 seconds: Тут ваял в АБ свич разветвитель и понадобилось константу (адрес начала массива переходов) в Z записать, так вот, чтобы это заработало нужно или в опциях проекта (вкладка компилятор) пункт: Интерпретация #->Z выбрать нижний вариант, или выделить строку как макрооператор (кнопка F2) (выделится жирным шрифтом).
Добавлено after 4 minutes 30 seconds: если понадобится во флеш запилить массивы данных их надо пометить квадратиком (Shift+F3) или спереди приписать db:
Добавлено after 6 hours 30 minutes 41 second: 1й вариант можно макросами облагородить, как сделаю - выложу оба варианта.
Добавлено after 2 minutes 20 seconds: правда для этого с макросами АБ разобраться надо
Добавлено after 1 hour 51 minute 48 seconds: ну вот и разобрался: слева 1 метод, справа 2й, посредине - общее - запуск и подпрограммы (пустые)
Добавлено after 8 hours 54 minutes 23 seconds: второй метод тоже макросом сделал. метки переходов не обязательно вершины, могут быть и просто метки внутри кода
Добавлено after 47 minutes 13 seconds: провел замеры по времени: кол-во тактов от номера вызванного кейса (0,1,2,3,4,5,DEF) метод1(5,7,9,11,13,15,16), метод2(14,14,14,14,14,14,14) по флешу: метод1 - 1 слово для свитча и по 2 на каждый кейс; метод2 - 10 слов свитч, 1 кейс. вывод: метод1 компактнее до 9 кейсов и быстрее до 6, "плюс" второму - за стабильность времени исполнения.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения