Ds18b20 на разных камнях
- Войдите на сайт для отправки комментариев
Сб, 04/04/2015 - 09:39
День добрый! Прошу помощи у опытных, поскольку сам недавно занялся этим.
Собрал на макетке термометр на arduino nano. Взял пример Simple из библиотеки. Поменял только pin. Взял A3. Все работает как часы. Сделал плату с atmega8L-8p, прошил,фузы не менял,загрузчик не заливал, только скетч. Итог - не работает.
Первая мысль - разница тактовой частоты. Дорожки, напряжение проверил, резистор на датчик 5,6k ( датчик тот же с макетки, работает от 13к до 3,3к. ) Разница еще в том, что в примере вывод на СОМ , здесь на LCD. Показывает все время -127.00. Во втором случае используется внутренний генератор по дефаулту.
Какие мысли будут?
У nano микроконтроллер не atmega8L-8p и не известно как будет работать на 16 МГц. Обкатайте скетч на nano с LCD, а уж потом перекомпилируйте на свой микроконтроллер.
У меня почти таже проблемма, но чуть в другом. Когда UNO питается от USB все норм, DS18b20 показывает корректные показание, но как только я подключаю через разьем питания 9v DS падает до -127.00 ( DS на R-5к), хз в чем дело :((( Но загружая другой скетч, UNO работает корректно...
У nano микроконтроллер не atmega8L-8p и не известно как будет работать на 16 МГц. Обкатайте скетч на nano с LCD, а уж потом перекомпилируйте на свой микроконтроллер.
что то не очень понятно.
1. LCD прекрасно работает на обоих камнях, иначе бы он ничего не выводил. А так все пишет, но значение -127
2. Atmega8l-8p работает по паспорту не выше 8 МГц а не 16 . У меня вообще включен внутренний (как я понимаю 1 МГц)
3. Остается библиотека DS. Вопрос касался ее привязки к частоте. Питание на обе конструкции подается с USB.
Пробовал писать скетч мигания диодами- все работает , т.е. Камень сам работает. Сбросы на ногу А3 проходят. Обратно не читает. Думаю или датчик не отвечает из за неправильного опроса то временам импульса или библиотека DS привязана к частоте. Как проверить?
Я так понимаю, что когда происходит компиляция скуетча, то библиотека DS адаптируется под конкретно выбранную плату Ардуины (т.е. под определённую частоту МК). Изменение частоты работы микроконтроллера нарушает временные параметры протокола 1--Wire. Естественно, что термодатчик правильно работать не будет (да никак не будет).
Можно попробовать откомпилировать под плату с МК на частоту 8 МГц, и поэкспериментировать на плате, где по умолчанию настроени частота внутреннего генератора тоже 8 МГц. А уже потом думать над уменьшением этой частоты.
Я так понимаю, что когда происходит компиляция скуетча, то библиотека DS адаптируется под конкретно выбранную плату Ардуины (т.е. под определённую частоту МК). Изменение частоты работы микроконтроллера нарушает временные параметры протокола 1--Wire. Естественно, что термодатчик правильно работать не будет (да никак не будет).
Можно попробовать откомпилировать под плату с МК на частоту 8 МГц, и поэкспериментировать на плате, где по умолчанию настроени частота внутреннего генератора тоже 8 МГц. А уже потом думать над уменьшением этой частоты.
Вы наверное меня не так поняли. Я компилирую именно код для 8L и он не работает. Вы совершенно правильно заметили в первом предложении об адаптации под конкретный контроллер. Может дело в том, что arduino ide думает будто atmega8 работает на 16 МГц? Но мне не хотелось бы перешивать фьюзы частоты. Я думал что по дефаулту частота известна компилятору? Или что то надо дописать?
Какую плату Вы указываете компилятору в настройках?
Какую плату Вы указываете компилятору в настройках?
Arduino NG or older и процессор ATmega8 соответственно.
Какую плату Вы указываете компилятору в настройках?
Arduino NG or older и процессор ATmega8 соответственно.
Скорее всего надо менять значение частоты в board.txt, сам не пробовал, предполагаю))).
На какое?
На которой ваш чип работает 8 или 1. Это смотрите по фьюзам, которые у него выставлены.
Какую плату Вы указываете компилятору в настройках?
Arduino NG or older и процессор ATmega8 соответственно.
В таком случае компиляция идёт в расчёте для 16 МГц. На 8 МГц (дефолтные настройки фьюзов Вашего МК) естественно работать не должно.
Естественно! С этим никто и не спорит. Так уже скажите как? Где что прописать? Как зашить фьюзы через arduino ide без загрузчика?
Сделал секцию
atmega8l_noxtal.name=ATmega8L @ 8MHz Internal
atmega8l_noxtal.upload.tool=avrdude
atmega8l_noxtal.upload.protocol=arduino
atmega8l_noxtal.upload.maximum_size=7168
atmega8l_noxtal.upload.speed=19200
atmega8l_noxtal.bootloader.tool=avrdude
atmega8l_noxtal.bootloader.low_fuses=0xE4
atmega8l_noxtal.bootloader.high_fuses=0xD9
atmega8l_noxtal.bootloader.path=atmega8
atmega8l_noxtal.bootloader.file=ATmega8L.hex
atmega8l_noxtal.bootloader.unlock_bits=0x3F
atmega8l_noxtal.bootloader.lock_bits=0x0F
atmega8l_noxtal.build.mcu=atmega8
atmega8l_noxtal.build.f_cpu=8000000L
atmega8l_noxtal.build.core=arduino
atmega8l_noxtal.build.variant=standard
Пробовал прошить bootloader - пишет "efuse" memory type not defined for part "ATmega8" Error while burning bootloader."
Я, к сожалению, не знаю как в среде Ардуины можно настроить библиотеку DS на нужный МК с нужной тактовой частотой. Крутится в голове совет попробовать написать программу в AVR Studio. Там можно задавать тактовую частоту МК, а вот как туда "прикрутить" библиотеку DS - не знаю. Наверняка есть уже готовые библиотеки для студии, нужно искать примеры, советы. Сам с интересом буду ждать совета от "более продвинутых".
Спасибо! С "efuse" разобрался, это глюк,подправил файл конфигурации. Сейчас бутлоадер шьется. Посмотрим что выйдет. Может как-то с пустым файлом можно шить фьюзы. Буду ковырять дальше.
Спасибо! С "efuse" разобрался, это глюк,подправил файл конфигурации. Сейчас бутлоадер шьется. Посмотрим что выйдет. Может как-то с пустым файлом можно шить фьюзы. Буду ковырять дальше.
фьюзы зашьются вместе с бутом, их можно подправить в avrdude.conf
пардон, обманул, в board.txt
Это понятно, иначе зачем я это делаю. Мне то бут как раз и не нужен, а заливается он очень долго. Нужны только фьюзы.
Ну тогда, AVR-Burn-O-Mat.
Мне то бут как раз и не нужен, а заливается он очень долго. Нужны только фьюзы.
Беретё одну из многчисленных оболочек для avrdude (а можно и через консоль) и читаете/пишете отдельно фьюзы. Лично я пользуюсь оболочкой SinaProg.
Ну вот. Прошил фьюзы на int 8 МГЦ и все стало как надо. Всем спасибо за оперативность и участие! К тому же и сам разобрался.
Так заработал скетч измерения температуры так как надо?
Ну да.
Так вкраткце опишите, для форумчан, как откомпилировать скетч для МК работающего на частоте отличной от типовых частот.
Все наоборот. Я же написал "...Прошил фьюзы на int 8 МГЦ и все стало как надо" - просто запрограммировал МК на типовую частоту 8 МГц от внутреннего генератора и все заработало. Вообще , как я понял, это засада, когда хочешь получить маленькую тактовую частоту, а скетч работает с real-time. Нужно просто сделать библиотеку с независимыми временными интервалами. Ведь ISP работает на любых частотах. У меня несколько датчиков с nRF24L01+ прекрасно работают с МК на 1МГц и с Arduino NANO 16МГц по ISP.
Меня интересует такоя же проблема с "efuse как вы его решили? Потскажите пожалуйста, я новичок в этих делах и многово не знаю, Заранее спасибо).