Микроконтроллерный терморегулятор с дистанционным управление

В этом форуме обсуждаются статьи напечатанные в журнале "Радио"

Микроконтроллерный терморегулятор с дистанционным управление

Сообщение nuklid » 10 янв 2016, 10:56

Добрый день всем читателям форума. Мы с товарищем решили повторить схему из журнала "Радио" №12 за 2013 год "Микроконтроллерный терморегулятор с дистанционным управлением" схема очень интересная да и описание довольно подробное для аквариума то что надо. Только никак не получается её запустить. Запрограммировали микроконтроллер с помощью ISP программатора из HEX файла указали конфигурацию согласно таблицы но при включении загорается слово "ОБУЧ" светится несколько секунд не реагируя на пульт, а затем на экране с периодичностью в 2-5 секунд высвечивается непонятная информация в виде 0,0 10,0 -0,0 4,2 и т.д по кругу. При нагреве датчика DS18B20 от руки цифра 4,2 может увеличиваться примерно до 5,5 а остальные продолжают моргать. При этом схема не реагирует ни на один из 9 пультов ДУ от различной бытовой техники, пакеты импульсов при этом на выводе 6 ATtiny13 присутствуют. Датчик DS18B20 проверен в другой конструкции работает корректно, ATtiny13 было пошито 2 результат тотже. Кто повторял конструкцию и добился результата помогите советом ПОЖАЛУЙСТА в чём проблема, уж больно мне эта конструкция симпатична хочется другу для аквариума подарить.
nuklid
 
Сообщения: 6
Зарегистрирован: 10 янв 2016, 10:15

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение Нафис » 10 янв 2016, 13:33

В микроконтроллере ATtiny13A-SU возможен сбой при записи в EEPROM. "Повезло" при разработке одной конструкции. Замена микроконтроллера дала тот же результат, ошибку при записи. Возможно другие микроконтроллеры этой серии избавлены от этой ошибки.
Нафис
 
Сообщения: 281
Зарегистрирован: 12 апр 2015, 12:28

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение nuklid » 13 мар 2016, 10:50

Добрый день уважаемые участники форума. Тема с терморегулятором никак с места не сдвигается. Попробовал запрограммировать 4 микроконтроллера разных производителей и даже в разных корпусах результат "0". Пробовал компилировать программу в рекомендуемой автором программе Algoritm Builder for AVR 5.44 после компиляции программа выдаёт для прошивки микроконтроллера 2 файла ,HEX и EEPROM. Программирую контроллер результат тотже. Пробовал поменять fuse биты не помогло, 2 микросхемы залочил, спас AVR fuse doktor. Конструкция зашла в тупик. Откликнитесь пожалуйста кто повторил данную конструкцию и какой результат? А то у меня начало создаваться впечатление что статья в журнале ознакомительного характера, а конструкция изначально не рабочая. :lol: :roll: :lol:
nuklid
 
Сообщения: 6
Зарегистрирован: 10 янв 2016, 10:15

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение dak » 09 ноя 2016, 10:10

Отвечает автор.

Я изготовил несколько экземпляров такого регулятора с разными дисплеями и на разных микроконтроллерах.
Среди tiny13А были в корпусах DIP и SO8.
Была конструкция и на 2313А.
Для работы с пультом ДУ везде использовался один и тот же программный модуль с одними и теми же временными константами.
Поэтому я решил, что встроенный RC генератор у всех тинек выдаёт паспортную частоту (в пределах заявленной производителем погрешности) и со спокойной совестью опубликовал статью.
Оказалось, что это не так.
Через редакцию журнала Радио со мной связывался читатель - выяснилось, что тактовая частота на всех экземплярах его микропроцессоров в 1.3 раза меньше паспортной.
Мы с ним поправили временный константы и у него всё заработало.
В программном модуле ДУ у меня заложен некоторый люфт в пределах примерно 10% на нестабильность тактовой частоты.
Если у тех, кто повторил конструкцию без монтажных ошибок, во время появления надписи ОБУЧ отсутствует реакция на пульт, то возможно тактовая частота встроенного RC генератора сильно отличается от паспортной.
Возможно я что-то не понимаю и причина не в тактовой частоте.

nuklid писал про проблему с датчиком DS18b20. Возможно причина также в тактовой частоте. Для работы с датчиком я не изобретал ничего нового, а воспользовался чужими проверенными алгоритмами.

Вот кусок из переписки с читателем:
Необходимо:
1. Убедиться в наличии питания на соответствующем выводе ИК приёмника.
2. Проверить осциллографом наличие пачек импульсов на выходе ИК приёмника
при нажатии на кнопку пульта ДУ.
В отсутствии ИК посылок на выходе ИК приёмника должно присутствовать
постоянное напряжение 5В. 1 раз в секунду должна наблюдаться короткая пачка
инверсных импульсов - загрузка данных в LCD (выход ИК приёмника запараллелен
со входом DI индикатора).

При нажатии на кнопку пульта на выходе ИК приёмника должна наблюдатся пачка
инверсных прямоугольных импульсов общей длительностью около 50 мс и
амплитудой 5В. При удержании кнопки должны наблюдатся импульсы "повтора" с
периодом 110 мс и длительностью около 10мс.

Если импульсы с ИК приёмника поступают на вход МК, а устройство не реагирует
на пульт, то существует очень маленькая вероятность того, что тактовая
частота внутреннего RC генератора конкретного экземпляра МК сильно
отличается от 4.8 МГц. Я проверял прошивку на нескольких экземплярах МК в
корпусах SOT8 и DIP с разными пультами и добился надёжного декодирования при
значительном разбросе длительностей кодовых импульсов.

Во вложении (RC_Samp-TIC5231_3W_v2.zip) находится тестовая прошивка, с
помощью которой я настраивал подпрограмму декодирования ИК посылок.
При включении устройства на короткое время появляется заставка "tSt.rc",
затем экран очищается и тестер переходи в режим ожидания ИК посылок.
Программа измеряет длительности пар Импульс/Пауза и отображает их на
дисплее. Измерение и отображение реализовано в режиме «стробирования». При
первом нажатии на кнопку пульта отображаются длительности первой пары, при
втором – второй пары и т.д. После определения паузы большей 13.5 ms
(переполнение регистра таймера) измерение начинается снова с первого
импульса.

На рисунке (RC_Samp-Display.gif) представлены типичные значения для
стартового импульса пульта, работающего по протоколу NEC. Все цифры
отображаются в шестнадцатеричном виде. Расшифруем: номер импульса – 1,
длительность импульса – $A9 (169) тактов таймера, длительность паузы – $52
(82) тактов таймера. Период измерительного таймера равен 53.3 мкс , поэтому
длительность импульса равна 169*53.3 мкс = 9,008 мс, а паузы – 82*53,3 мкс =
4,37 мс. Надо иметь в виду, что самое старшее знакоместо индикатора TIC5231
может отображать только единицу, поэтому корректно отображаются номера
импульсов до 31 ($1F). После этого отображение номера импульса начинается с
нуля (32-ой импульс) по «второму кругу».
Для того чтобы начать измерение с первого импульса, не «прокручивая» всю
последовательность, надо удерживать кнопку пульта до тех пор пока не
отобразиться пауза длительностью FF, после чего сразу отпустить кнопку.
Счётчик импульсов обнулится и после следующего нажатия на кнопку пульта на
дисплее отобразятся длительности первой пары И/П.

Если длительность первого (стартового) импульса и первой паузы получились
больше чем $A0 и $40 тактов таймера, то посылка декодируется нормально. Если
меньше, то значит частота внутреннего RC генератора конкретного экземпляра
МК сильно отличается от 4.8 МГц в меньшую сторону. МК лучше заменить. Можно
скорректировать константы сравнения в исходном тексте прошивки. Но для этого
мне нужны результаты измерений, полученные с помощью вышеописанного тестера.


RC_Samp-TIC5231_3W_v2.zip и RC_Samp-Display.gif лежат на yadi.sk/d/0crt5bhhyHkY3
dak
 
Сообщения: 8
Зарегистрирован: 09 ноя 2016, 08:51

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение Нафис » 11 ноя 2016, 11:16

Измерил частоту внутреннего тактового генератора на двух экземплярах ATtiny13A-SU. Заданная частота 9,6 МГц, фактические частоты меньше на 2 и 8 процентов. Микроконтроллер с меньшей частотой работает в устройстве, где программа осуществляет запись и чтение данных из EEPROM. Согласно имеющимся данным из специальной литературы процесс работы с EEPROM критичен к тактовой частоте. На практике это проявляется в виде сбоев при записи.
Нафис
 
Сообщения: 281
Зарегистрирован: 12 апр 2015, 12:28

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение dak » 12 ноя 2016, 19:18

В конструкции установлена тактовая частота 4.8МГц, так как на этой частоте при настройке таймера /256 получается более точное измерение длительности ИК импульсов.
При подачи питания на микроконтроллер калибровочный байт загружается только для 9.6МГц, а для 4.8 нет.
Возможно в этом всё дело.
В программе есть ещё 2 свободных слова, их как раз хватит для загрузки калибровочного байта.
Если это кому-то ещё надо, то могу попробовать сделать тестовую прошивку определения значения калибровочного байта для корректной работы с ДУ.
Ещё могу переделать прошивку для работы на 9.6МГц, раз она более точная.
При этом таймер придётся настроить на /1024 и измерение длительности импульсов станет в 2 раза менее точным - возможны сбои.
На 9.6 МГц также возрастёт ток потребления.

Нафис, я с ошибками EEPROM ни разу не сталкивался. Всегда всё работало корректно.
Возможно Вы при записи в EEPROM не запретили глобально прерывания.
По документации желательно делать так:
-запретить гл.прерывания;
-установить разрешение на запись EEPROM (1 -> EEMWE);
-установить строб записи в EEPROM (1 -> EEWE);
-разрешить гл.прерывания;
-ждать окончания записи, проверяя EEWE.
dak
 
Сообщения: 8
Зарегистрирован: 09 ноя 2016, 08:51

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение Нафис » 13 ноя 2016, 10:44

Благодарю за ответ. Я тоже не сталкивался с подобным явлением до случая описанного выше. Подпрограмма работы с EEPROM соответствует алгоритму описанному Вами. С необходимыми изменениями я использую ее практически во всех программах написанных для разных микроконтроллеров AVR. Что касается глобальных прерываний то разумеется они запрещены в случаях если могут вызвать некорректную работу подпрограммы обращения к EEPROM. В заключение хочу сказать, что конструкции с "изюминкой" всегда вызывают у меня интерес и подталкивают к новым поискам.
Нафис
 
Сообщения: 281
Зарегистрирован: 12 апр 2015, 12:28

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение dak » 12 дек 2016, 09:24

От пользователя nuklid поступила просьба рассказать, что делать в случае "заниженной" тактовой частоты RC генератора МК.

Предварительный ответ.
Термин "заниженная" тактовая частота в данном случае не совсем корректный.
Объясняю "грабли", на которые я наступил, а следом за мной и те, кто начал повторять мою конструкцию.
При более внимательном изучении даташита ATtiny13A обнаружились следующие нюансы:
- "There are separate calibration bytes for 4.8 and 9.6 MHz operation but only one is automatically loaded during reset"
- "The hardware always loads the 9.6 MHz calibration data during reset. To use separate calibration data for the oscillator in 4.8 MHz mode the OSCCAL register must be updated by firmware."
По русски - Для частот 4.8 и 9.6 MHz существуют отдельные калибровочные байты. При аппаратном сбросе загружается калибровочный байт для 9.6. Для 4.8 загрузку нужно делать "вручную".
Причём доступ к байту калибровки возможен только с помощью программатора. Из прошивки это сделать нельзя.

Если мы хотим использовать заводскую калибровку для частоты 4.8 то нужно проделать следующее:
- с помощью программатора считать калибровочный байт для этой частоты;
- вставить значение этого байта или в исходный текст прошивки или прямо в нужное место в HEX файл.

Попробую переделать прошивку на частоту 9.6.
Если будет работать устойчиво, то опубликую её.
dak
 
Сообщения: 8
Зарегистрирован: 09 ноя 2016, 08:51

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение dak » 13 дек 2016, 18:54

Отвечаю как заставить работать устройство на калиброванной частоте 4.8 МГц.

1. С помощью программатора прочитать калибровочные байты с кристалла. Первый байт для частоты 9.6, второй байт для частоты 4.8. Нам нужен второй байт.
2. Открыть проект в Algorithm Builder for AVR 5.44.
3. Активировать первую вкладку "DS18B20-TSOP-TIC5231_3W-v2".
4. Отредактировать исходный код:
    После первой строки: "|Reset"
    вставить строку: "$xx -> OSCCAL", где хх - значение считанного калибровочного байта в шестнадцатеричной форме.
5. Откомпилировать программу.
6. Для прошивки использовать два hex файла:
    DS18B20-TSOP-TIC5231_3W-v2.hex - сама прошивка
    EE_DS18B20-TSOP-TIC5231_3W-v2.hex - инициализация EEPROM

Вообще, многие программаторы умеют записывать калибровочные байты в EEPROM, откуда прошивка их может прочитать и использовать для калибровки генератора.
Но чтение из EEPROM и запись в OSCCAL занимает 5 слов, а у меня осталось свободным только два.

Про пульты ДУ.
По протоколу NEC работают практически все пульты от китайской бюджетной техники.
От фирменной аппаратуры типа Sony, Panasonic и т.д. пульты не подходят.
Гарантированно подходят пульты от спутниковых ресиверов Триколор.
dak
 
Сообщения: 8
Зарегистрирован: 09 ноя 2016, 08:51

Re: Микроконтроллерный терморегулятор с дистанционным управл

Сообщение nuklid » 23 дек 2016, 22:13

Доброго времени суток всем участникам и гостям форума. Спасибо уважаемому автору, что откликнулся на мою просьбу. По рекомендации автора я считал калибровочные байты с контроллера (было 72 и 76) и попытался вставить строку "Sxx->OSCCAL" т.е. "S76->OSCCAL" при компиляции программа выдала ошибку "НЕОБЪЯВЛЕННОЕ ИМЯ S76" попробовал ввести "76->OSCCAL" программа отработала,выдала отчёт и 2 файла как у автора. Запрограммировал контроллер, при включении на экранчике "ОБУЧ" затем на короткое время "-10,6" и остаются значения "2,3" которые при нагреве и охлаждении датчика от руки, плавно меняются по 0,1 на 1-1,5 градуса. При отключеном датчике температуры высвечивается "-0,0". На пульт система реагирует только в одном случае- из режима "ОБУЧ" сразу переходит к "-10,6" и "2,3", если пультом не пользоваться то "ОБУЧ" светится 2,5-3 секунды. При изученнии пультов ДУ из нескольких отобрал 2 по самым близким параметрам к авторским: первая пачка импульсов 69мс вместо 50мс, а импульсы повтора длительность 10мс, период повтора 110мс. Допускаю что пульты ДУ не совсем корректно работают, но температуру измерять схема должна и без ДУ? Подскажите что делаю не так? Где "подводные камни" или "грабли" на которые я наступаю?
nuklid
 
Сообщения: 6
Зарегистрирован: 10 янв 2016, 10:15

След.

Вернуться в Журнал "РАДИО"

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26