Доступ к температурному сенсору atmega328

Тема в разделе "Arduino & Shields", создана пользователем Ariadna-on-Line, 30 мар 2021.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Коль уж оболочка Ардуино ИДЕ поддерживает А6, А7 которых на Ардуино Уно нет - может она поддерживает и доступ к встроенному в кристалл проца температурному датчику ? Ведь он сидит на том же мультиплексоре что и А0-А7. В форуме не встречал такой темы.
     
    Последнее редактирование: 31 мар 2021
  2. akl

    akl Гуру

    ардуино поддерживает всё что поддерживает avr gcc.
    судя по гуглу надо прописать в регистр
    ADMUX = 0xC8
    то есть биты REFS на встроенный ИОН, а битами MUX накрутить вход ADC8.
    а потом обычным способом запустить АЦП

    о кто-то даже библиотечку запилил https://github.com/MicroControllerTeamProject/Libraries/tree/master/ChipTemp

    но analogRead(8) вроде не должно работать, т.к. там формула отсекает 8ой бит
    ADMUX = (analog_reference << 6) | (pin & 0x07);

    то есть надо по нормальному регистрами, короче как по ссылке выше

    еще пишут что датчик довольно кривой и на каждой микросхеме надо индивидуально делать поправку.
     
    Последнее редактирование: 31 мар 2021
    Ariadna-on-Line и arkadyf нравится это.
  3. parovoZZ

    parovoZZ Гуру

    А оно надо? Там точность 2 градуса. Не исправляется ни чем.
     
  4. parovoZZ

    parovoZZ Гуру

    А, не. Это в новых тиньках 2 градуса с применением калибровочных коэффициентов. А в вашем доисторическом МК аж 20 градусов!
     
  5. akl

    akl Гуру

    вроде пишут что 20 градусов это систематическая ошибка. то есть если откалибровать то должно быть точнее.
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Датчик не кривой, а СУПЕР-кривой. Но, - дело в принципе. Работаю с Ардуино Уно R3.
    analogRead(А8) - не работает, тк в УНЕ такого входа нет.
    analogRead(8) работает, НО КАК analogRead(A0).
    То бишь компилятор УНЫ берет только три младших бита адреса пина входа. Именно команда analogRead(n), - в регистр ADMUX пишет нужное значение.
    Вопрос - Где в Ардуино ИДЕ находится таблица по которой компилятор адрес пина входа из команды analogRead(Х) превращает в значение регистра ADMUX ? Я в Си и в структуре Ардуино ИДЕ совсем лох, поэтому задаю такой вопрос.
    ПС. За библу спасибо. Еще не смотрел, но это хоть что-то.
     
    Последнее редактирование: 31 мар 2021
  7. akl

    akl Гуру

    C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\wiring_analog.c

    там можно найти строчку
    ADMUX = (analog_reference << 6) | (pin & 0x07);
    и заменить на ADMUX = (analog_reference << 6) | pin;

    ну и перед аналогридом прописать
    analogReference(INTERNAL)

    но лучше собственную функцию для ацп запилить, там ничего сложного.
     
    Ariadna-on-Line нравится это.
  8. parovoZZ

    parovoZZ Гуру

    А есть методика калибровки?
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    По логике вещей, проц жрет энергию в зависимости от сиюминутной задачи. Естественно и греется так же "сиюминутно". Смысла в его точной калибровке - нет А вот систему самосохранения, при КЗ на ноге например, от перегрева кристалла - можно замутить запросто. Причем c алгоритмом самодиагностики и поиском КЗ.
     
    Последнее редактирование: 31 мар 2021
    parovoZZ нравится это.
  10. akl

    akl Гуру

    а нафига там методика? Мы ж не в ЦСМ, а на форуме детского конструктора. берешь стаканы с теплой, холодной и горячей водой и градусник, атмегу засовываешь в герметичный целофановый кулек и в стаканы вместе с градусником по очереди и записываешь че показывает.
     
    Ariadna-on-Line нравится это.
  11. parovoZZ

    parovoZZ Гуру

    а на воздухе всё разъедется.
     
  12. parovoZZ

    parovoZZ Гуру

    от козы на выходе достаточно поставить сто омное сопротивление. Да и скорее драйвер выгорит, чем крситалл разогреется.
     
  13. Рокки1945

    Рокки1945 Гуру

    вот те раз
    Датчик измеряет температуру себя прежде всего - а когда будет тепловое равновесие тогда и будет ясно
     
    Ariadna-on-Line нравится это.
  14. akl

    akl Гуру

    от чего? от собственного нагрева чипа? может и да, но это уже будет не +-20 градусов. к тому же если задача измерять соственно эту температуру чипа, то уже пофиг.
     
  15. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Согласен. Но вот, к примеру, лето на носу. Девайс работает на солнцепеке, и чтоб не загнуться - использует встроенный датчик температуры. Коль он там есть уже.
    Всем спасибо.
     
    Последнее редактирование: 31 мар 2021
  16. parovoZZ

    parovoZZ Гуру

    а тепловое сопротивление корпуса уже пофигу? К тому же датчик расположен непосредственно на кристалле, а это значит что не только тепловые флуктуации, но и электрические шумы будут влиять на результат.
     
  17. parovoZZ

    parovoZZ Гуру

    +85 градусов, а серия automation ещё выше. Поэтому что-что, а уж солнцепёк не способен МК убить НИКАК.
     
  18. Рокки1945

    Рокки1945 Гуру

    Прошу провести эксперимент и доложить о результатах:).
    Пойми, что если ты хочешь измерить темпу чипа - это одно - а темпа окружающего мира вокруг чипа - это другое - уловил разницу?
    При Глубочайшем уважении к динозавру форума Паровоззу - извиняюсь тироназавру
     
  19. parovoZZ

    parovoZZ Гуру

    Поэтому я и прошу привести методику калибровки. Ну скинешь ты 5 градусов точности - сильно легче станет?
     
  20. parovoZZ

    parovoZZ Гуру

    Мне, в отличие от ТС, добраться до регистров МК как два пальца обасф.... И я это сделаю, но, увы, на другом МК.