"Фсё ребят, берупомощьзнатоков". 1) ATtiny25, на ADC заведён внутренний термодатчик. 2) Раз в секунду поднимаю "Start Conversion" бит. (В прерывании от таймера). 3) Прерывания от ADC случаются. 4) Младшие биты из ADC сливаются в порт на светодиоды. (Проверка работоспособности).
При прогреве корпуса МК - данные не обновляются динамически. Но обновляются каждый раз при подаче питания (единожды). В чём подвох?
пока, вижу, вам нужна помощь не знатоков а медиумов ...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
А что код даст? Тут аппаратное что-то. Может из за-того, что порт VS Reset как-то "не того"... Спойлер.include "tn25def.inc" .def ter = r19 ;хранение значение ADC температуры .equ fleg = 244 ;флегмирование процессов 244 = неточная секунда .cseg
;ПРЕДКОНФИГ КОНТРОЛЛЕРА reset: ldi r16,RAMEND ;стек на весь RAM [16] out spl,r16 ldi r16,0b10000000 ;отключение аналогового компаратора [120] out ACSR,r16 ldi r16,0b00011111 ;нужные электроды на вывод [64] out ddrB,r16 ;настройка таймера 1 ldi r16,fleg ;коэффициент флегмирования процессов канал A [91] out ocr1A,r16 ldi r16,0b01000000 ;прерывание по совпадению в канале A [92] out TIMSK,r16 ldi r16,0b10001101 ;режим CTC, клок таймера /4096 [89,90] out tccr1,r16 ;таймер пошёл ;настройка ADC ldi r16,0b10001111 ;опорка 1V1, >R-результат, ADC4-термосенсор [134] out ADMUX,r16 ldi r16,0b10001111 ;ADC-вкл, Start-выкл, прерывание вкл, клок /128 [136] out ADCSRA,r16
;---- ОСНОВНАЯ ПРОГРАММА ---- sei ;разрешить прерывания глобально start: rjmp start ;вертеться здесь
;================= ПРЕРЫВАНИЕ ТАЙМЕР 1 СОВПАДЕНИЕ С КАНАЛОМ A int_timer1A: brtc clea ;T сброшен = к зажжению светодиода clt ;иначе сбросить T ;cbi portB,3 ;погасить светодиод (на заюзано) rjmp next ;и к выходу clea: set ;установить T ;sbi portB,3 ;зажечь светодиод (не заюзано) next: sbi ADCSRA,6 ;запускать ADC reti ;выход ;================= ПРЕРЫВАНИЕ ОТ ADC (РЕЗУЛЬТАТ ГОТОВ) int_adc: in ter,ADCL ;забрать значение ADC в ter cbr ter,0b11110000 ;обнулить старший полубайт out portB,ter ;выдать в порт B (1=зажжение) reti ;выход
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
точно - при чтении обязательно прочитать сначала младший байт, потом старший, т.е. сначала ADCL, потом ADCH, если он не нужен - читай его в какой нибудь темп регистр и забудь там...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Спс, код таки = что-то дал. Заработало. Прокол был в том, что спутал "процедуру забора" с чем-то, где надо обрабатывать вначале High, потом Low. Как результат пробовал так:
in ter,ADCH ;верх забрать впустую in ter,ADCL ;туда же налепить низ и... этот вариант нерабочий (тем не менее при включении оно почему-то прокатывало)
И того, ваш рабочий вариант:
in ter,ADCL ;забрать Low in r16,ADCH ;забрать High куда-либо (процедура забора обязательна)
сам шпаргалкой пользуюсь при записи в одном порядке, при чтении наоборот...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Заголовок сообщения: Re: ATtiny25 и встроенный термодатчик
Добавлено: Вт янв 16, 2018 17:23:30
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Если Вам нужен 8битный АЦП , то можно включить бит ADLAR (выравнивание по левому краю) и считывать данные только с ADCH. Если конечно ИОН подойдет для входного сигнала.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Тоже близко к "варианту". Показания меж светодиодами задуманы в 5°C. Но без 2-х младших битов это будет шаг = 4,64°C. (Правда, "планую" для промежуточных значений - "светодиод мигает"). В общем при любом сдвиге, "шаго-коэффициент" = 1,16°C, если приспичит поточнее - числа после запятой всё равно мутить.
P. s. тоже просчитался Шаг ADC составляет 0,85°C. Соответственно при L-результате 0,85 х 4 = шаг 3,4°C
Последний раз редактировалось Серый_ Ср янв 17, 2018 10:34:17, всего редактировалось 1 раз.
удобно, если откомпилить, а потом ничего не меняя наводить мышку, то высвечивается из чего какая операция состоит... например это копирование состоит из 2х, и тут сам АБ следит за очерёдностью.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
например это копирование состоит из 2х, и тут сам АБ следит за очерёдностью.
Компилятор Си предполагаю поступает аналогично… а вообще данный нюанс хорошо расписан у Евстифеева.
Цитата:
Обращение к регистрам ADCH и ADCL для получения результата преобразования должно выполняться в определенной последовательности: сначала необходимо прочитать регистр ADCL, а затем ADCH. Это требование связано с тем, что после обращения к регистру ADCL процессор блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не будет прочитан регистр ADCH. Благодаря этому можно быть уверенным, что при чтении регистров в них будут находиться составляющие одного и того же результата. Соответственно, если очередное преобразование завершится до обращения к регистру ADCH, результат преобразования будет потерян.
Ггг. А теперь откройте в дизассемблере ваш пример и посмотрите, как это будет выглядеть в командах. МК 8 битный. И есть только одна команда копирования сразу из двух регистров в два - movw. И то, только с рабочими регистрами.
Так тут всё норм - копирует поочереди, но он этого и не скрывает, а вот пару регистров в пару регистров - за раз. также за раз выполнятся операции вида "RR-const" => SBIW RWl,K "RR+const" => ADIW RWl,K. в справке это всё тоже описано
Добавлено after 28 minutes 8 seconds: Главная то мысль в том, что, правильное чтение регистров - в АБ не проблема программиста
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Мне за ассемблер можно не объяснять. И речь шла о командах пересылки данных. Я потому и сказал, пусть покажет пример копирования регистра ADC в рабочие регистры ЗА РАЗ. А это как раз и невозможно в случае регистров периферии и рабочих регистров.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения