Терморегулятор на микроконтроллере PIC16F84 датчикe DS18B20
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Итак, по порядку:
1 извините, Soir, что ввёл вас в заблуждение индикатор оказался с общим анодом, цоколёвка совпадает с той, что указана на схеме, тока 10ма на сегмент будет вполне достаточно
2 согласен полностью
3 РЕгулировка дискретная на тиристоре
диапазон времени регулирования 60 сек
есть у меня МОС3031, но все таки склоняюсь к использованию оптотиристоров ТО125-12,5-7
Если можно, лучше програмно реализовать переход через нуль
4 для резервного питания можно применить ионистор?
думаю как то так: при пропадании питания индикатор и исполнительные устройства отключаются, МК переходит в энергосберегающий режим и питается от ионистора
5 Думаю, один раз в минуту и по результатам измерения принимать решение о корректировке мощности
точность измерения температуры плюс минус 10 град вполне достаточна
Да, упустил ещё один нюанс: допустим, в памяти хранится 15 программ,а для нового цикла надо 6 вот тут как то туманно:
или очищать всю память и заново программировать или корректировать первые шесть, а остальные удалять
Как лучше?
P.S. Всё таки я его победил! Симуляция заработала!
Вчера весь вечер гонял готовые проекты
1 извините, Soir, что ввёл вас в заблуждение индикатор оказался с общим анодом, цоколёвка совпадает с той, что указана на схеме, тока 10ма на сегмент будет вполне достаточно
2 согласен полностью
3 РЕгулировка дискретная на тиристоре
диапазон времени регулирования 60 сек
есть у меня МОС3031, но все таки склоняюсь к использованию оптотиристоров ТО125-12,5-7
Если можно, лучше програмно реализовать переход через нуль
4 для резервного питания можно применить ионистор?
думаю как то так: при пропадании питания индикатор и исполнительные устройства отключаются, МК переходит в энергосберегающий режим и питается от ионистора
5 Думаю, один раз в минуту и по результатам измерения принимать решение о корректировке мощности
точность измерения температуры плюс минус 10 град вполне достаточна
Да, упустил ещё один нюанс: допустим, в памяти хранится 15 программ,а для нового цикла надо 6 вот тут как то туманно:
или очищать всю память и заново программировать или корректировать первые шесть, а остальные удалять
Как лучше?
P.S. Всё таки я его победил! Симуляция заработала!
Вчера весь вечер гонял готовые проекты
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
pai писал(а):1 извините, Soir, что ввёл вас в заблуждение индикатор оказался с общим анодом
Это не беда. Схему поправлю.
pai писал(а):Если можно, лучше програмно реализовать переход через нуль
Чисто программно не получится, нужно заводить в МК синхроимпульсы. Во вложении пример реализации формирователя (файл Synh.DSN). Эти же импульсы можно использовать как сигнал о наличии сетевого напряжения.
pai писал(а):4 для резервного питания можно применить ионистор?
Не знаю, не работал с ними.
pai писал(а):Да, упустил ещё один нюанс: допустим, в памяти хранится 15 программ,а для нового цикла надо 6 вот тут как то туманно:
или очищать всю память и заново программировать или корректировать первые шесть, а остальные удалять
Как лучше?
Потом подумаю, что предложить.
pai писал(а):P.S. Всё таки я его победил! Симуляция заработала!
Вчера весь вечер гонял готовые проекты
Поздравляю. Чтобы было интересней разбираться с программой, вот уже начало прошивки Вашего устройства. Почти ничего еще нет, кнопки, индикация, наброски управления мощностью (шаг 0,5 сек, полный цикл 50 сек, дальше сравнение с заданной температурой и коррекция мощности на один шаг)… В общем, только начал, но в Proteus симуляция уже работает, осваивайте и по ходу высказывайте свое мнение. А я по мере продвижения работы над прошивкой буду выкладывать обновленные версии.
Архив распакуйте в какую-нибудь папку, не очень глубоко на диске и без русских букв и разных символов в пути. Файл *.hex поместите в папку с проектом.
- Вложения
-
- Termo_ATMEGA8.zip
- (24.61 КБ) 286 скачиваний
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Soir писал(а):Поздравляю. Чтобы было интересней разбираться с программой, вот уже начало прошивки Вашего устройства. Почти ничего еще нет, кнопки, индикация, наброски управления мощностью (шаг 0,5 сек, полный цикл 50 сек, дальше сравнение с заданной температурой и коррекция мощности на один шаг)… В общем, только начал, но в Proteus симуляция уже работает, осваивайте и по ходу высказывайте свое мнение. А я по мере продвижения работы над прошивкой буду выкладывать обновленные версии.
Архив распакуйте в какую-нибудь папку, не очень глубоко на диске и без русских букв и разных символов в пути. Файл *.hex поместите в папку с проектом.
Здорово!
Температура и время устанавливается, цыферки бегают, только вот светодиод как то вяло реагирует
можно на крайнюю точку вывести информацию о состоянии нагревателя: при включенном горит при невключенном нет?
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
pai писал(а):...только вот светодиод как то вяло реагирует...
Это субъективное ощущение. Proteus не все "красиво" анимирует.
Немного продвинул проект. Сделал синхронизацию от сети, запись установок в память и выполнение одной программы. Все еще сыро и недоделано, но проверяйте. Прицепил осциллограф, чтоб живее было, на светодиод особого внимания не обращайте. Он, конечно, будет мигать, но не совсем корректно. Во вложении есть кое-какое описание принципа работы. Схему несколько изменил (точнее, назначение выводов МК), связано с особенностями ввода синхроимпульсов в МК.
Мне нужны данные по программам. В каких пределах будут устанавливаться температура и время выполнения программы.
Попробуйте оценить алгоритм и скорость регулировки температуры применительно к печи. Я не представляю, насколько она мощная, инерционная и т.д.
- Вложения
-
- Termo_ATMEGA8.zip
- (29.06 КБ) 244 скачивания
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Soir писал(а):Это субъективное ощущение. Proteus не все "красиво" анимирует.
Немного продвинул проект. Сделал синхронизацию от сети, запись установок в память и выполнение одной программы. Все еще сыро и недоделано, но проверяйте. Прицепил осциллограф, чтоб живее было, на светодиод особого внимания не обращайте. Он, конечно, будет мигать, но не совсем корректно. Во вложении есть кое-какое описание принципа работы. Схему несколько изменил (точнее, назначение выводов МК), связано с особенностями ввода синхроимпульсов в МК.
Мне нужны данные по программам. В каких пределах будут устанавливаться температура и время выполнения программы.
Попробуйте оценить алгоритм и скорость регулировки температуры применительно к печи. Я не представляю, насколько она мощная, инерционная и т.д.
Круто! Особенно осциллограф понравился!
А если серьёзно, покрутил ручки, понажимал кнопки, почитал ваше описание всё правильно
думаю, при таком цикле проблем с инерционностью быть не должно
установка температуры до 1200град-при большей нужна платино-иридиевая термопара, что в домашних условиях создаёт определённые проблемы
время до 48 часов больше не надо
печка небольшая 2,5Квт
При установке температуры 1000град, входной темп 60град и времени 30 мин SP получилось 265, а мощность 4% маловато
должно быть ближе к 100%
да, ещё одно: при максимальной разности начальной и конечной температур время выдержки устанавливается от 1 часа, а при минимальной-от 10 мин
Вот где-то как-то так
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
pai писал(а):...При установке температуры 1000град, входной темп 60град и времени 30 мин SP получилось 265, а мощность 4% маловато должно быть ближе к 100%...
Что-то не то у Вас получилось. При таких исходных, при включении питания должно установиться SP равное 91 град (см. формулу). Через минуту SP должно увеличиться на 31 град, то есть стать 123 град (с учетом округлений), еще через минуту - 154 и и.д. Через 30 мин SP будет 1000 град.
Тут возникает вопрос в другом. Приращение мощности ведется со скоростью 1% в минуту. За 30 мин максимальная мощность может быть только 30%. При недостаточной мощности нагревателя температура не достигнет заданной. Почему я и спрашивал про параметры программ. Конечно, МК будет вытягивать температуру и дальше, если она не успела за SP, но скорость разогрева нарушится. Варианты решения вижу такие:
1. Увеличить ступени корректировки мощности. Сделать скажем, 10% в минуту.
2. Уменьшить время между корректировкой мощности. Например, каждые 10 сек. Можно с изменением SP, а можно оставить изменение SP раз в минуту.
3. Изменить алгоритм. На какой?
По первым двум пунктам можно сделать доступной настройку в сервисном режиме, можно эти пункты объединить.
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Soir писал(а):...По первым двум пунктам можно сделать доступной настройку в сервисном режиме, можно эти пункты объединить.
В общем так и сделал. Описание во вложении. После смены прошивки (замены файла *.hex в проекте) в Proteus нужно сделать сброс EEPROM. Делается это следующим образом: открыть проект, в меню Debug выбрать Reset Persistent Model Data. Или просто удалите все файлы и используйте новые из вложения.
- Вложения
-
- Termo_ATMEGA8.zip
- (29.79 КБ) 204 скачивания
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Soir писал(а):Что-то не то у Вас получилось. При таких исходных, при включении питания должно установиться SP равное 91 град (см. формулу). Через минуту SP должно увеличиться на 31 град, то есть стать 123 град (с учетом округлений), еще через минуту - 154 и и.д. Через 30 мин SP будет 1000 град.
Тут возникает вопрос в другом. Приращение мощности ведется со скоростью 1% в минуту. За 30 мин максимальная мощность может быть только 30%. При недостаточной мощности нагревателя температура не достигнет заданной. Почему я и спрашивал про параметры программ. Конечно, МК будет вытягивать температуру и дальше, если она не успела за SP, но скорость разогрева нарушится. Варианты решения вижу такие:
1. Увеличить ступени корректировки мощности. Сделать скажем, 10% в минуту.
2. Уменьшить время между корректировкой мощности. Например, каждые 10 сек. Можно с изменением SP, а можно оставить изменение SP раз в минуту.
3. Изменить алгоритм. На какой?
По первым двум пунктам можно сделать доступной настройку в сервисном режиме, можно эти пункты объединить.
думаю, изменть алгоритм:
В начале, когда разность температур максимальна, нагреватель работает на полную мощность
По мере приближения к верхней температуре мощность плавно уменьшается вплоть до 0
При охлаждении наоборот: сначала выключен, а если охлаждение слишком быстрое, периодичски включается нагреватель
PS ненадолго уезжаю, но скоро вернусь
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
pai писал(а):думаю, изменть алгоритм:
В начале, когда разность температур максимальна, нагреватель работает на полную мощность
По мере приближения к верхней температуре мощность плавно уменьшается вплоть до 0
При охлаждении наоборот: сначала выключен, а если охлаждение слишком быстрое, периодичски включается нагреватель
Понятно, думал важна именно скорость разогрева. Теперь даже непонятно, зачем время в программе, переход через 0, да и вообще МК... Все превращается в банальный термостабилизатор, которые здесь уже представлены. Единственное отличие - термопара, да еще функция охлаждения.
Ладно, вернетесь - обсудим.
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Soir писал(а):Понятно, думал важна именно скорость разогрева. Теперь даже непонятно, зачем время в программе, переход через 0, да и вообще МК... Все превращается в банальный термостабилизатор, которые здесь уже представлены. Единственное отличие - термопара, да еще функция охлаждения.
Ладно, вернетесь - обсудим.
Э... Нет, уважаемый Soir, если был бы нужен простой термостабилизатор, я собрал бы на КР572пв5 и не парился!
Тут весь смак именно в регулируемой зависимости температуры от времени, которую без МК не реализовать
Вы уже писали в посте выше как это сделать, я несколько затупил
всё очень просто:
Допустим, надо повысить темп до 300 град за 30мин
первая мин-10град 2-20гр 3-30град и т д
В первую минуту стабилизируем темп 10 град с периодичностью 1 сек,
Во вторую 20 град, и т д до 300град
Вот и всё!
_____
Усложнять-просто
Упрощать-сложно
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
pai писал(а):Допустим, надо повысить темп до 300 град за 30мин
первая мин-10град 2-20гр 3-30град и т д
В первую минуту стабилизируем темп 10 град с периодичностью 1 сек,
Во вторую 20 град, и т д до 300град
Вот и всё!
Никак не уясню для себя целостную картину.
Есть печь, разогреть надо, например, с 30 град до 300 за 30 минут. Тут все понятно. Хотя не все.
pai писал(а):В начале, когда разность температур максимальна, нагреватель работает на полную мощность
По мере приближения к верхней температуре мощность плавно уменьшается вплоть до 0
Можно кочегарить на полную, скажем, до 250 град за 5 минут, а затем за остальные 25 минут плавно выйти на 300? Или все-таки нужна плавность разогрева на всех этапах?
А что дальше? Охлаждение, выход на следующую температуру за другое время, выдержка, выключение или что?
Опишите для примера полный цикл работы устройства. Пока не понимаю, что писать в управляющей программе.
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Soir писал(а):pai писал(а):Допустим, надо повысить темп до 300 град за 30мин
первая мин-10град 2-20гр 3-30град и т д
В первую минуту стабилизируем темп 10 град с периодичностью 1 сек,
Во вторую 20 град, и т д до 300град
Вот и всё!
Никак не уясню для себя целостную картину.
Есть печь, разогреть надо, например, с 30 град до 300 за 30 минут. Тут все понятно. Хотя не все.pai писал(а):В начале, когда разность температур максимальна, нагреватель работает на полную мощность
По мере приближения к верхней температуре мощность плавно уменьшается вплоть до 0
Можно кочегарить на полную, скажем, до 250 град за 5 минут, а затем за остальные 25 минут плавно выйти на 300? Или все-таки нужна плавность разогрева на всех этапах?
А что дальше? Охлаждение, выход на следующую температуру за другое время, выдержка, выключение или что?
Опишите для примера полный цикл работы устройства. Пока не понимаю, что писать в управляющей программе.
примерно так:
1 программа:
нагреть до 300град за 30 мин
устанавливаем Т конечную и время
МК делит 300 град на 30 мин
получается 10 град в минуту, в первую минуту МК сравнивает
измеренную темп с температурой первой минуты с периодичностью 1 сек,
по окончании первой минуты добавляется ещё 10 град и во вторую минуту измеренная темп сравнивается с 20 градусами
и так пока не продут все 30 мин по окончании 30 мин МК переходит ко второй программе, либо отключается при её отсутствии
2 прг
выдержать установленную темп в течение 10 мин
Устанавливаем Ткон равной Тнач
При этом МК стабилизирует температуру на заданном уровне в течение 10 мин
3 прг
Уменьшить темп до 100 град в течение 20 мин
Устанавливаем Тнач больше Ткон
МК делит 100 град на 20 мин
получается 5 град в минуту, в первую минуту МК сравнивает
измеренную темп с температурой первой минуты с периодичностью 1 сек,
по окончании первой минуты вычитается ещё 5 град и во вторую минуту измеренная темп сравнивается с 290 градусами
и так пока не продут все 20 мин по окончании 20 мин МК переходит к след программе либо отключается
И так далее, количество программ 10-15
_____
Усложнять-просто
Упрощать-сложно
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
pai писал(а):примерно так...
Примерно так и получилось. Во вложении прошивка, которую уже можно назвать версией (будет v0), пока еще бета.
Количество программ ограничил 20-ю, выбирается в настройках. В EEPROM записываются настройки для каждой программы: температура и время. В принципе можно для каждой программы сделать индивидуальными и другие настройки, гистерезис, шаг... Только как бы не получилось путаницы.
Осталось доделать поведение устройства при отключении питания, это как-нибудь потом, если устройство начнет материализоваться.
Более подробное описание во вложении.
Что еще, мне кажется, не хватает, это кнопки START или как-то включать/выключать (сбрасывать) терморегулятор другими кнопками. Подумайте, надо/не надо...
В прошивке возможны какие-то недоработки. Выявите - пишите, поправлю. Прогонять самому все режимы и программы у меня нет времени, желания и интереса.
В железе, естественно, не проверял. Это за Вами.
Еще надо до кучи собрать принципиальную схему. Но это после того, как протестируете все в Proteus.
P.S.
28.06.2011 Перезалил прошивку. Исправлен баг при записи в EEPROM.
- Вложения
-
- Termo_ATMEGA8_v0.zip
- (31.68 КБ) 245 скачиваний
Последний раз редактировалось Soir Вт июн 28, 2011 10:18:05, всего редактировалось 1 раз.
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
уважаемые коты. помогите с такой проблемой, разработал программу и схему для термостата на 7-Segment дисплее
ну тут проблема светодиод D1 в проекте Proteus 7 правильно срабатывает, а в собранной плате он мигает....кто может помогите плыз
ну тут проблема светодиод D1 в проекте Proteus 7 правильно срабатывает, а в собранной плате он мигает....кто может помогите плыз
- Вложения
-
- shema.JPG
- (205.54 КБ) 628 скачиваний
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Roma4ka писал(а):...ну тут проблема светодиод D1 в проекте Proteus 7 правильно срабатывает, а в собранной плате он мигает...
На скриншоте плохо видно номера выводов, лучше бы Вы проект выложили. А уж мигание по фото точно не отследить.
Могу только сказать, что последовательно с светодиодом D1 нужен ограничительный резистор, Ом на 300 или больше.
Есть вопросы и по другим элементам схемы, только давайте проект, тогда и обсудим.
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
ограничительный резистор на плате 200 Ом
вот проект(mikroC PRO for PIC)...заранее спасибо за помощь
вот проект(mikroC PRO for PIC)...заранее спасибо за помощь
Код: Выделить всё
#define Off Button(&PORTB,0,5,0)
#define Menu Button(&PORTB,1,5,0)
#define Plus Button(&PORTB,2,5,0)
#define SH_CP RB6_bit
#define DS RB7_bit
#define ST_CP RB5_bit
// 0 1 2 3 4 5 6 7 8 9 C F - P
unsigned char lcd_buffer[]= {0xAF,0x09,0xE5,0x6D,0x4B,0x6E,0xEE,0x0D,0xEF,0x6F,0xA6,0xC6,0x40,0xC7,0x00};
unsigned char lcd_2_buffer[15]={0xBF,0x19,0xF5,0x7D,0x5B,0x7E,0xFE,0x1D,0xFF,0x7F,0xA6,0xC6,0x40,0xC7,0x00};
const unsigned short TEMP_RESOLUTION = 12;
static char Column[4] = {0x00,0x0B,0x0B,0x0E};
static char Segment[4] = {0x08,0x02,0x01,0x04};
unsigned temp,p;
int m;
unsigned short counter;
bit s;
bit state;
void OutPORT_2(int dat)
{ unsigned char bits;
//
for( bits = 0x80; bits; bits >>= 1 )
{
if ((bits & lcd_2_buffer[dat]) == bits)
{ DS = 0; } else {DS = 1;}
ST_CP = 1;
//Delay_us(1);
ST_CP = 0;
Delay_us (250);
}
SH_CP = 1;
SH_CP = 0;
} //end OutPORT
void OutPORT(int dat)
{ unsigned char bits;
//INTCON.GIE=0;
//
for( bits = 0x80; bits; bits >>= 1 )
{
if ((bits & lcd_buffer[dat]) == bits)
{ DS = 0; } else {DS = 1;}
ST_CP = 1;
//Delay_us(1);
ST_CP = 0;
Delay_us (250);
}
SH_CP = 1;
SH_CP = 0;
} //end OutPORT
void interrupt ()
{
if (INTCON.T0IF)
{
if (counter ==3)
{
OutPORT(14);
PORTA = Segment[counter];
OutPORT(Column[counter]);
counter = 0;
} else
{
OutPORT(14);
PORTA = Segment[counter];
if (counter ==1){OutPORT_2(Column[counter]);}else {OutPORT(Column[counter]);}
counter ++;
}
TMR0 = 156;
INTCON = 0x20; //clear T0IF, Bit T0IF=0, T0IE=1;
}
}//interrupt
void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
temp_whole = temp2write >> RES_SHIFT ;
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
if (temp_whole!=85){
// if (temp_whole>Eeprom_Read(1)){RB4_bit=0;}else{RB4_bit=1;}
switch(state){
case 0:{if(temp_whole<Eeprom_Read(1)){RB4_bit=1;;}else {RB4_bit=0;state=1;}};break;
case 1:{if(temp_whole<Eeprom_Read(1)-Eeprom_Read(2)){RB4_bit=1;state=0;} else RB4_bit=0;};break;
default:{state=1;};break;
}
Column[0] =(temp_whole/10)%10;
Column[1] =temp_whole%10;
Column[2] =temp_fraction/1000;
Column[3]=0x0A;
}
}
void DS18B20() {
INTCON.GIE=0;
Ow_Reset(&PORTA,4);
Ow_Write(&PORTA,4, 0xCC);
Ow_Write(&PORTA,4, 0x44);
INTCON.GIE=1;
Delay_us(250);
INTCON.GIE=0;
Ow_Reset(&PORTA,4);
Ow_Write(&PORTA,4, 0xCC);
Ow_Write(&PORTA,4, 0xBE);
temp = Ow_Read(&PORTA, 4);
temp = (Ow_Read(&PORTA, 4) << 8) + temp;
Display_Temperature(temp);
INTCON.GIE=1;
}
/*************подпрограмма обработки нажатия кнопок**************************/
void Control_Button(){
if (Off){s=~s;}
if (Menu&&!s){if (m==2){m=0;}else{m++;}}
if (s){
DS18B20();
}else{
// RB4_bit=0;
switch (m) {
case 0: {Column[0]=0x00;
Column[1]=0x0B; //OFF
Column[2]=0x0B;
Column[3]=0x0E;}break;
case 1: {Column[0]=0x0A;
Column[1]=0x0C; //C
Column[2]=(Eeprom_Read(1)/10)%10;
Column[3]=Eeprom_Read(1)%10;}break;
case 2: {Column[0]=0x0D;
Column[1]=0x0C; //P
Column[2]=(Eeprom_Read(2)/10)%10;
Column[3]=Eeprom_Read(2)%10;}break;
} }
if ((Plus)&&(m==1)) //кол.магазинов
{p=Eeprom_Read(1);
Delay_us(50);
if (p==75){p=0;}else {p=p+5;}
Column[2]=(p/10)%10;
Column[3]=p%10;
Eeprom_Write(1,p);
Delay_us(50);
}
if ((Plus)&&(m==2)) // кол. шариков
{p=Eeprom_Read(2);
Delay_us(50);
if (p>=20){p=1;}else {p++;}
Column[2]=(p/10)%10;
Column[3]=p%10;
Eeprom_Write(2,p);
Delay_us(50);
}
}//Control_Button
void InitMain() {
CMCON ^= 7;
PORTA = 0x00;
TRISA = 0x10;
PORTB = 0x1F;
TRISB = 0x0F;
counter = 0;
s =0;
m=0;
if (Eeprom_Read(1)>=0x4C){ Eeprom_Write(1,0x1E);}
if (Eeprom_Read(2)>=0x15){ Eeprom_Write(2,0x03);}
Delay_us(50);
OPTION_REG = 0x80;//43; // настройка TMR0, прерывания будут каждые
INTCON.T0IF=0; // разрешили прерывания по переполнению TMR0
INTCON.T0IE=1;
INTCON.GIE=1; // включили механизм прерываний
}// end InitMain
void main()
{
InitMain();
while(1)
{
Control_Button(); //обработка клавиш
Delay_ms(50);
}
}
- Вложения
-
- PIC16F628.rar
- (23.08 КБ) 222 скачивания
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Roma4ka писал(а):ограничительный резистор на плате 200 Ом
Так нечестно, на плате одно, а выкладываете для выяснения ошибки другое. Дайте окончательную схему, ту, которая у Вас в железе.
Roma4ka писал(а):вот проект(mikroC PRO for PIC)...
mikroC не пользуюсь, если выложили исходник, уже выложили бы и весь проект, или хотя бы *.cof файл, чтобы его можно было подсунуть Proteus'у и пройти пошагово программу. Но все-таки.
Попробуйте увеличить время между командой на конвертацию температуры и чтением температуры. Для разрешения 12 бит время конвертации около 750 мсек.
Что касается остальных элементов схемы, то теперь я не уверен, не знаю что у Вас в реальности. А вопросы следующие: Если включить подтягивающие резисторы на соответствующих выводах PORTB, то резисторы R10-12 можно исключить из схемы. В базе транзистора Q1 есть резистор, а в остальных нет, какая-то дискриминация. При такой схеме включения транзисторов можно, конечно, резисторы и не ставить, но их присутствие желательно.
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
мне кажется в прерываниях проблема , когда не включено прерывания то светодиод горит только включается проклевывания отображения инфы то он мигает (
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Roma4ka писал(а):мне кажется в прерываниях проблема , когда не включено прерывания то светодиод горит только включается проклевывания отображения инфы то он мигает (
Может конечно mikroC что-то впихивает в прерывания (хотя сильно сомневаюсь), Proteus должен отследить такое. Если подсоединить к светодиоду осциллограф, то все чисто. Не хотите давать *.cof файл (или что там mikroC генерирует), посмотрите сами в пошаговом прохождении программы, как обрабатывается прерывание. Устанавливать у себя mikroC и создавать проект нет ни малейшего желания. Для проверки, жестко включите светодиод независимо от температуры, и посмотрите, будет ли он мигать в железе.
А вот несоблюдение временных интервалов при работе с датчиком Proteus может и "не заметить". Вы пробовали увеличить время между командами на начало конвертации и считывания?
Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
Привет общающимся и изобретающим! Soir, перенес я свой проект с макета на печатную плату. Все работает нормально за исключением одного момента. При включении в сеть на индикаторах должно высвечиваться Ваше имя и затем измеренная температура. А у меня высвечивается "значение" 0,8 и все. Причем регулировка мощности происходит (если до выключения из сети был включен автоматический режим. В качестве нагрузки для удобства отладки использую лампочку.) Т.е. программа отрабатывается, только вместо показаний температуры - "0,8". Стоит нажать на кнопку MODE и 0,8 пропадает, появляется измеренная температура. Дальше все ok. Происходит это (высвечивание 0,8) как-то через раз. То нормально, то 0,8. Я уже писал об этом выше, но списал все на особенности сборки на макете, а не тут-то было. Уж и не знаю чего делать
Пробовал поиграться с конденсаторами по питанию, не помогло. Больше и поиграться не с чем. Просто немного не удобно после каждого включения в сеть нажимать на кнопку.
И еще вопрос. Можно ли добавить таймер на отключение нагрузки? Часов на 12 с шагом установки 5мин. и естественно чтобы OFF таймера присутствовало.
Крайняя прошивка на стр.49 предпоследний пост.
И еще вопрос. Можно ли добавить таймер на отключение нагрузки? Часов на 12 с шагом установки 5мин. и естественно чтобы OFF таймера присутствовало.
Крайняя прошивка на стр.49 предпоследний пост.