ATmega8 + DS18B20: плохо считываются данные.
-
GhostAnton
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Пн ноя 21, 2011 19:07:28
ATmega8 + DS18B20: плохо считываются данные.
Доброго всем времени суток. Прошу Вашей помощи, уже неделю мучаю прошивку и никак не могу добиться нормальных результатов в работе датчика с мегой8. Прошу только сильно не ругать меня, я только начинаю работать с микроконтроллерами и многие нюансы еще не знаю.
Контроллер тактируется от внутреннего генератора на 8 мегагерц, к нему подключены 2 дисплея (1: 7-ми сегментный 3-х разрядный индикатор, 2: ЖКИ WH1602D).
Все работает и отображает на обоих дисплеях нормально, есть только проблема с которой я не могу разобраться, а именно температура с датчика считывается в 5% случаев в собранной макетной плате, в протеусе процент считывания данных с датчика составляет 90%, остальные попытки считать температуру возвращают ошибку. В моем проекте задействован Timer0, обрабатывает вывод изображения на 7 сегментный индикатор и замеряет напряжение питания. Для чтения данных с датчика использую библиотеку работы с датчиками доработанную Даниил Перваков aka Danko, огромное спасибо ему за нее.
Пробовал играться с частотой прерываний, но мне это ничего не дало к сожалению, просто за все это время уже попробовал использовать разные библиотеки чтения датчиков и писал свою используя примеры работы с 1wire, но лучшего результата смог добиться только с этой библиотекой. Пробовал в протеусе тестировать на 4 мегагерцах, но при такой частоте у меня вообще перестает определять температуру. Уже голову поломал над этой проблемой....
Очень Вас прошу помочь мне разобраться с этим. Исходники прилагаю, схему в протеусе тоже.
Контроллер тактируется от внутреннего генератора на 8 мегагерц, к нему подключены 2 дисплея (1: 7-ми сегментный 3-х разрядный индикатор, 2: ЖКИ WH1602D).
Все работает и отображает на обоих дисплеях нормально, есть только проблема с которой я не могу разобраться, а именно температура с датчика считывается в 5% случаев в собранной макетной плате, в протеусе процент считывания данных с датчика составляет 90%, остальные попытки считать температуру возвращают ошибку. В моем проекте задействован Timer0, обрабатывает вывод изображения на 7 сегментный индикатор и замеряет напряжение питания. Для чтения данных с датчика использую библиотеку работы с датчиками доработанную Даниил Перваков aka Danko, огромное спасибо ему за нее.
Пробовал играться с частотой прерываний, но мне это ничего не дало к сожалению, просто за все это время уже попробовал использовать разные библиотеки чтения датчиков и писал свою используя примеры работы с 1wire, но лучшего результата смог добиться только с этой библиотекой. Пробовал в протеусе тестировать на 4 мегагерцах, но при такой частоте у меня вообще перестает определять температуру. Уже голову поломал над этой проблемой....
Очень Вас прошу помочь мне разобраться с этим. Исходники прилагаю, схему в протеусе тоже.
Последний раз редактировалось GhostAnton Чт ноя 24, 2011 21:48:45, всего редактировалось 1 раз.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: ATmega8 + DS18B20: плохо считываются данные.
нет вложения
-
GhostAnton
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Пн ноя 21, 2011 19:07:28
Re: ATmega8 + DS18B20: плохо считываются данные.
Прошу прощения, вставил, почему-то с первого раза не получилось
.
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: ATmega8 + DS18B20: плохо считываются данные.
Несколько рекомендаций по проекту в Протеусе и по исходнику:
1. т.к. в Протеусе семисегментники не потребляют эл.ток то и перегружать проект токоограничивающими резисторами не стоит.
2. еще бывает много глюков в Протеусе из-за установки питания, а точнее шин типа VCC и +5V. Достаточно выбрать одну VCC. Это из личного печального опыта.
3. у Вас вывод AREF микроконтроллера в воздухе, а Вы ведь в проекте используете АЦП.
Теперь по коду:
поясните как будут работать эти строки ok=ok++; и i++; похоже, что Вы ранее писали на Басике.
и по строке № 328 i++ отдельно:
в строке for(i=0;i<ds18x20_devices;i++) в цикле переменная i инкреметируется сама так зачем Вы ее увеличиваете сами еще раз ?
1. т.к. в Протеусе семисегментники не потребляют эл.ток то и перегружать проект токоограничивающими резисторами не стоит.
2. еще бывает много глюков в Протеусе из-за установки питания, а точнее шин типа VCC и +5V. Достаточно выбрать одну VCC. Это из личного печального опыта.
3. у Вас вывод AREF микроконтроллера в воздухе, а Вы ведь в проекте используете АЦП.
Теперь по коду:
поясните как будут работать эти строки ok=ok++; и i++; похоже, что Вы ранее писали на Басике.
и по строке № 328 i++ отдельно:
в строке for(i=0;i<ds18x20_devices;i++) в цикле переменная i инкреметируется сама так зачем Вы ее увеличиваете сами еще раз ?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
-
GhostAnton
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Пн ноя 21, 2011 19:07:28
Re: ATmega8 + DS18B20: плохо считываются данные.
Да, действительно с i++ я погорячился, столько раз переделывал и упустил момент. с ок=ок++ согласен, давно ничего не делал на си, заменил просто на ок++, мне нужно было прибавить 1 и записал покороче, только ошибся, спасибо, эти ошибки подкорректировал, в протеусе тоже исправил, только проблема с чтением датчиков сохранилась
не понимаю почему, мне кажется что из-за прерываний... Опорное напряжение я беру с внутреннего которое 2,5 вольта поэтому посчитал что ненужно вешать aref на питание. В железе напряжение меряется идеально без ошибок, проблема только при чтении датчиков температуры 1 раз в минуту только считывает корректно...
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: ATmega8 + DS18B20: плохо считываются данные.
проверить работу проекта я не могу т.к. Протеус при запуске Вашего проекта зависает, при этом диспетчер задач Виндовс показывает, что Протеус работает.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: ATmega8 + DS18B20: плохо считываются данные.
у меня та же история.
Кстати, запретить прерывания по таймеру в момент считывания температуры не пробовали ?
Кстати, запретить прерывания по таймеру в момент считывания температуры не пробовали ?
-
GhostAnton
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Пн ноя 21, 2011 19:07:28
Re: ATmega8 + DS18B20: плохо считываются данные.
Сейчас смотрел настройки своего таймера т0, слишком часто обновляю дисплей, выставил сейчас частоту 31,250 килогерца прерывания по переполнению 0xff, сейчас прошью и посмотрю, частота обновления 7сег индикатора получается примерно 122 герца, поидее мерцать не должно, посмотрю что будет с термометром. (TCCR0=0x04; TCNT0=0xFF; TIMSK=0x01), посмотрю что получится и потом попробую отключать прерывания как вы советуете на момент получения данных с датчиков. Но просто это очень странно во всех рассмотренных примерах не отключают прерывания и все нормально считывается, притом у меня есть собранный термометр на тиньке 2313 проблем при замерах температуры нет вообще.
Я пробовал в протеусе сп2 и сп4 работает, только в сп2 работает нормально вольтметр а в сп4 он не работает при эмуляции
Я пробовал в протеусе сп2 и сп4 работает, только в сп2 работает нормально вольтметр а в сп4 он не работает при эмуляции
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: ATmega8 + DS18B20: плохо считываются данные.
СП - это сервис пак, а версия какая?
сейчас есть демо 7.9 и рабочие 7.7 и 7.8.
сейчас есть демо 7.9 и рабочие 7.7 и 7.8.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
-
GhostAnton
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Пн ноя 21, 2011 19:07:28
Re: ATmega8 + DS18B20: плохо считываются данные.
Протеус 7.6 сервис пак 4
Снизил частоту вывода ни сегментник, ничего не изменилось, проуент ошибок 90%.
Сделал на момент опроса датчика запрет всех прерываний а после опроса датчиков снова включил. Ошибок получения с датчиков 80% из 100 считываний успешных всего 20.
Может я что-то неправильно по схеме сделал, но я все сделал как в проекте протеуса, может есть еще какие-нибудь идеи? Всетаки где-то в программе что-то недокрутил, клпаю дальше.
120 герц маловато для 7сег индикаторов оказалось, мерцают. Поднял немного частоту. Ошибки в показаниях есть при измерениях все равно, единственное заметил одно но, пропадают ошибки если на датчике меняется температура, если температура остается неизменной то выдает -9999, странно как-то, притом это в реальном железе. Датчик проверял на другом приборе он с ним нормально отрабатывает. Вот теперь совсем непонимаю почему так....
Снизил частоту вывода ни сегментник, ничего не изменилось, проуент ошибок 90%.
Сделал на момент опроса датчика запрет всех прерываний а после опроса датчиков снова включил. Ошибок получения с датчиков 80% из 100 считываний успешных всего 20.
120 герц маловато для 7сег индикаторов оказалось, мерцают. Поднял немного частоту. Ошибки в показаниях есть при измерениях все равно, единственное заметил одно но, пропадают ошибки если на датчике меняется температура, если температура остается неизменной то выдает -9999, странно как-то, притом это в реальном железе. Датчик проверял на другом приборе он с ним нормально отрабатывает. Вот теперь совсем непонимаю почему так....
-
GhostAnton
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Пн ноя 21, 2011 19:07:28
Re: ATmega8 + DS18B20: плохо считываются данные.
Частично разобрался, теперь процент ошибок стал намного меньше, добавил пару элементов в схеме на сдвиговый регистр, странно почему из-за этого столько ошибок было. Но все равно 1/4, но это лучше чем было, буду думать дальше почему они появляются.