терморегулятор на МК

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

Активно присоединяюсь к теме. Тоже нужно, для теплицы. В моем распоряжении есть: DS1820, ATTINY2313, рассыпуха. Словом, нужна программа для контроллера. Что требуется:

- Контроллер должен управлять 2мя реле: одно на вентилятор, другое на нагреватель. Соот-но, для нагрева нужно включить вентилятор и нагревателль, для охлаждения - только вентилятор.
- Индикация t не требуется, должна быть возможность смены границ температур методом перепрожига контроллера.

ЗЫ С 1-Wire мало знаком, на прошивке буду учиться. Если есть конкретная ссылка на такой регулятор - буду благодарен.
aka Diamond
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

Дмитрий Оленников писал(а):Активно присоединяюсь к теме. Тоже нужно, для теплицы. В моем распоряжении есть: DS1820, ATTINY2313, рассыпуха. Словом, нужна программа для контроллера. Что требуется:

- Контроллер должен управлять 2мя реле: одно на вентилятор, другое на нагреватель. Соот-но, для нагрева нужно включить вентилятор и нагревателль, для охлаждения - только вентилятор.
- Индикация t не требуется, должна быть возможность смены границ температур методом перепрожига контроллера.

ЗЫ С 1-Wire мало знаком, на прошивке буду учиться. Если есть конкретная ссылка на такой регулятор - буду благодарен.
т.е. вентилятор крутится постоянно?
грубо говоря, задача сводится к предыдущей.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

xelos писал(а):т.е. вентилятор крутится постоянно?
Нет. Как только температура становится в допустимых границах, вся аппаратура отключается.
aka Diamond
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

а допустимые границы это как выражается в количественном эквиваленте? +/- 1°C?
в любом случае, по сравнению с предыдущей задачей - добавляется еще одно реле на цифровой выход мк (для вентилятора), и одна строчка в программе. так что задача как предыдущая.
текст программы есть - лучше задавайте вопросы по программе - сами разберетесь, потом модифицировать будете, если надо.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

Границы температур выражаются так (пример с VB6):

Код: Выделить всё

Const Tlow As Integer = 20
Const Thigh as Integer = 25

'дальше уже анализ
If T < Tlow then
TurnVint
TurnNagr
ElseIf T > Thigh then
TurnVint
Else
TurnOff
End If
Воть.
aka Diamond
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

Дмитрий Оленников писал(а):Границы температур выражаются так (пример с VB6):

Код: Выделить всё

Const Tlow As Integer = 20
Const Thigh as Integer = 25

'дальше уже анализ
If T < Tlow then
TurnVint
TurnNagr
ElseIf T > Thigh then
TurnVint
Else
TurnOff
End If
Воть.
ну на С то же самое:

Код: Выделить всё

#define Vent    PINB1
#define Nagr    PINB2

const int TLow = 20;
const int THigh = 25;
int T;
void main(void)
{
while (true)
{
      T = read_temperature();
       if (T >THigh)
       {
              Vent = 1;
              Nagr = 0;               
        }
        if (T < TLow)
        {
               Vent = 1;
               Nagr = 1;
        }
        if ((T >= TLow) && (T <= THigh))
        {
                Vent = 0;
                Nagr = 0;
         }
}
}
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

Ну а собсно, программа-то где? :)
aka Diamond
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

так ить, блин, сам-то написать не хочешь?
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

xelos писал(а):так ить, блин, сам-то написать не хочешь?
Рассказывай, как протокол 1-Wire работает, напишу. Только по-русски рассказывай! Сам его пробовал осваивать, но не получилось из-за акцента статей :)
ЗЫ Ты ж говорил, что прога есть?
aka Diamond
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 415
Зарегистрирован: Сб апр 22, 2006 15:22:31
Откуда: Киренск[38] / Воронеж[36]

Сообщение Krazy_killer »

дак всетаки что лучше(датчик) использовать
DS18S20(21)-MicroLan 60руб *
DS1621S -I2C BUS 90руб
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

to Дмитрий Оленников: прога на сайте, на который ссылку дали. а поскоку я с 1 Wire тоже никогда не работал - буду объяснять с даташита. смотрим даташит аттини - встренного контроллера 1 wire нет, значит придется писать самим этот протокол:
1. 1-Wire это Master/Slave bus, мк есть мастер, датчик - слэйв. Это означает, что мк должен посылать команды и датчик будет на них реагировать. по идее, должен быть механизм адресации слэйвов, чтобы мастер мог выборочно отсылать команды конкретным слэйвам.

2. при включении датчик находится в режиме низкого потребления. Чтобы пробудить его, мк должен отослать команду пробуждения 44h.

3. По получении этой команды датчик просыпается, конвертирует температуру и сохраняет ее в 2-х байтовом регистре. Пока происходит преобразование, датчик отвечает "0", когда преобразование закончено - "1".

Дальше всякая интересная фигня, но она нам вряд ли нужна, запомним тока что конвертнутая температура - это 0 и 1 байты памяти, потом регистр сигнализации, потом пара регистров для чтения температуры и код для проверки. Также смотрим схему подключения датчика, в схеме подключения для теоретического мк использованы 2 выхода Rx и Tx - радуемся, т.к. скорее всего можно будет пользовать обычный USART.

поскоку 1 wire мы не знаем, топаем в раздел описания шины.

Самая важная часть любого "сложного" девайса - это инициализация. Если чип правильно проинициализирован - мы избежим более 50% геммора при отладке. Поэтому внимательно читаем:
мк должен сделать ресет импульс на шину, ему ответят импульсом присутствия, тайминги для импульсов потом будут. Запоминаем.

дальше идут команды для чтения памяти датчика. радуемся, что у нас тока 1 1-Wire девайс, т.к. похоже это упрощает дело. Нам потребуется знать адрес чипа - при одном датчике для этого можно напрямую использовать команду READ_ROM, ее код 33h. Запоминаем.

Также есть соманда Match ROM - пока непонятно потребуется ли нам она, но вроде как именно она нам позволит обратиться к датчику. Запоминаем на всякий случай.

Дальше идут команды функционирования.
44h мы уже знаем.
дальше нам потребуется Read Scratch (BEh) команда для чтения температуры, остальные комнды из этой секции нам похоже нафик не сдались.

дальше тайминги.
смотрим на время инициализирующей последовательности.

дальше тайминги для записи и для чтения.
поскоку проводок у нас один - слоты для записи 0 и 1 различаются.
каждый слот должен длиться минимум 60 мкс. паузы между слотами минимум 1 мкс.
чтобы записать 1, мк должен опустить шину в 0, потом отсоединиться от нее втечение 15 мкс.
чтобы записать 0, мк опускает шину в 0 и удерживает ее в этом состоянии в течение времени всего слота (минимум 60 мкс).

проанализровав это, понимаем, что стандартный USART попользовать не придется :(

смотрим тайминги для чтения.
там попроще. каждый слот также по 60 мкс, с паузами по 1 мкс. каждый слот инициируется мк, опусканием шины в 0. после 1 мкс, от шины отсоединяемся. если датчик хочет передать 0, шина так в 0 и останется (втечение 15 мкс), если 1 - то датчик от нее отсоединен.

вот и все. дальше даны примеры.

теперь писать это все нада. проанализировав эту шину, имхо, стоит написать 4 функции - драйвер шины (ресет на шине, получение подтверждения на ресет, отсылка байта, получение байта). Вобщем, управление физикой шины. а потом логический уровень (последовательности команд) написать.

to Krazy_killer: по мне так все равно какой.
если у тебя в мк есть контроллер I2C, то бери DS16 - не надо будет драйвер шины писать.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

Во! Вот это на русском! Спасибо за перевод!
Вопросы:
1. USART это выводы Rx & Tx?
2. 33h, 44h - это все передается в последовательном коде?
3. Вопрос по работе с таймерами МК - я вообще в этом ламер. поду обучалку почитаю.
aka Diamond
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

Дмитрий Оленников писал(а):Во! Вот это на русском! Спасибо за перевод!
Вопросы:
1. USART это выводы Rx & Tx?
2. 33h, 44h - это все передается в последовательном коде?
3. Вопрос по работе с таймерами МК - я вообще в этом ламер. поду обучалку почитаю.
USART - Universal Serial Asynchronous Reciever Transiever. Вобщем это контроллер последжовательной коммуникации. Rx - линия для приема, Tx - линия для отправления. Его можно настроить на разные типы передач. Тебе он вряд ли потребуется.

33h, 44h - это 8-и битовое число, код команды. h - в конце обозначает, что число записано в HEX шестнадцатиричном формате. То же самое, что и 0х33 и 0х44.

насчет таймеров - я бы может их вообще не использовал. Поскольку сам пишешь протокол, для твоего приложения есть смысл обрабатывать только шину. В смысле - убирай все прерывания и формируй задержки вручную (пустыми циклами, например). Хотя можно и таймер пользовать. Если на С пишешь - то у тебя есть готовые функции для формирования задержек нужной длительности delay_us(X) или _delay_us(X). В зависимости от компилятора.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

Такой вопрос: если писать на си, то чем hex-файл делать?
aka Diamond
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

Дмитрий Оленников писал(а):Такой вопрос: если писать на си, то чем hex-файл делать?
компилятором.

я пользую WinAVR - бесплатный gcc для AVR. в инете находится легко. Есть еще коммерческие компиляторы.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

Попробовал писать - сложно :( Я ведь еще ни одной прошивки для МК не писал. Поищу по инету, мож и найду чего.
aka Diamond
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

на русском языке был сайтик:
http://avr123.nm.ru/05.htm
по С для АВР: http://avr123.nm.ru/05.htm
WinAVR:
http://avrbegin.front.ru/for_read/WINAVR.htm

не стесняйся задавать вопросы - даже если тебе они кажутся идиотскими.

где-то были примеры конкретно по WinAVR на русском - найду напишу или вечером, если время будет, напишу краткий ликбез по WinAVR.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 635
Зарегистрирован: Пн авг 29, 2005 16:27:04
Откуда: Дмитров

Сообщение Дмитрий О »

По мне лучше на асме писать :) Ну не знаю почему. Тянет. А с си у меня всегда были проблемы. Кому как, буду мучаться :)
aka Diamond
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

вобщем, пиши на чем нравится :)
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08

Сообщение xelos »

http://avr.h15.ru/
вот еще сайтик по АВР и прогам для работы с ними, на русском.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»