Большой Воронежский Форум

Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел.
Вернуться   Большой Воронежский Форум » Компьютеры и все, что с ними связано » »Радиолюбитель
Программирование микроконтролеров,ремонт аудио/видео/бытовой техники,полезные устройства для дома,телефония, обсуждение статей журнала Радио

Ответ
 
Опции темы
Старый 24.04.2009, 11:37   #121   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
Конечно спасиб, но пора бы и самому поковырять, а Вы бы подсказали где это в программе...
Да без проблем. Менять надо в этом месте:
Код:
if (SetTemp>temp_whole){   // если уставка выше
PORTA=8;                 // то включение
Lcd_Chr(2,14,'1');       // и отображение "1"
}
else{                      // если нет
PORTA=0;                 // выключение
Lcd_Chr(2,14,'0');       // и отображение "0"
Алгоритм пока только в голове.

Последний раз редактировалось petrd; 25.04.2009 в 16:45.
  Ответить с цитированием
Старый 24.04.2009, 14:32   #122   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Термостат

В посте №80 выложил код термостата с алгоритмом прямого гистерезиса. Алгоритм управления нагрузкой реализован по принципу state-машины. При нарастании температуры отключение происходит при t>tуставки. При снижении температуры включение происходит при t<(tуставки-2 град.). Оказалось легче написать код, чем объяснить.
  Ответить с цитированием
Старый 25.04.2009, 14:30   #123   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Алгоритм пока только в голове.
А у меня в голове - опилки.
Да уж, без такого Гуру как petrd я пока бессилен в этих пиках.

Вот еще вопр. какой мах. ток может быть на выходе МК (управление нагрузкой).
Кстати термодатчик завышает на 1.8 градуса, при комнатной темпер. Измерял и сравнивал с мультиметром, даже двумя, MY-64. Но если учесть, что точность показании температуры у него +- 1 град., то где-то на 0.8 все таки есть завышение.
(Со льдом не сравнивал)

Последний раз редактировалось romchik77; 25.04.2009 в 15:15.
  Ответить с цитированием
Старый 25.04.2009, 17:11   #124   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
Вот еще вопр. какой мах. ток может быть на выходе МК
До 25 мА. Все параметры указываются в datasheet на МК.
Цитата:
Кстати термодатчик завышает на 1.8 градуса, при комнатной темпер. Измерял и сравнивал с мультиметром, даже двумя, MY-64. Но если учесть, что точность показании температуры у него +- 1 град., то где-то на 0.8 все таки есть завышение.
На это я даже не знаю, что сказать, можно подкорректировать в программе, но я не считаю это правильным, так как неизвестно как он себя ведет во всем диапазоне рабочих температур. Ну, если очень хочется, то подправить можно, например, так:
Код:
temp_whole = (temp2write >> RES_SHIFT)-2;// занизить показания на 2 град
  Ответить с цитированием
Старый 26.04.2009, 20:07   #125   
Форумец
 
Сообщений: 69
Регистрация: 10.12.2006
Возраст: 58

Liderpodg вне форума Не в сети
Уважаемый (незнаю вашего имени)petrd,подскажите такую штуку на контроллере PIC16F84A питание у неё +5В на 4и14 ноге, а -5В на 5 ноге так??
  Ответить с цитированием
Старый 26.04.2009, 21:38   #126   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Liderpodg Посмотреть сообщение
Уважаемый (незнаю вашего имени)petrd,подскажите такую штуку на контроллере PIC16F84A питание у неё +5В на 4и14 ноге, а -5В на 5 ноге так??
Питание у PIC16F84A однополярное (в принципе как у всех остальных PIC) .
Вывод 14 (может обозначаться как Vcc или Vdd) - питание +5 в.
Вывод 5 (может обозначаться как Vss или GND) - земля, общий, 0 в.
Вывод 4 (MCLR) - вывод сброса (в этом МК всегда вход), при лог. "0" на этом выводе МК находится в состоянии сброса, при лог "1" - в работе. В некоторых схемах его подключают напрямую к +5 в, но это, наверное, не совсем правильно. Обычно его подключают к + 5 в через резистор номиналом от 1 до 10 кОм.
P.S. Меня зовут Петр.
  Ответить с цитированием
Старый 26.04.2009, 23:09   #127   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
До 25 мА. Все параметры указываются в datasheet на МК.
ОК! просто сейчас не в состоянии, друг умер, не судите строрго! ( 34года, жить бы да жить)
Корректировать я ничего не буду (температуру) Нех файл - получил
Есть вопросик а когда настройки меняются, когда частота и может еще что-то меняется.....

Последний раз редактировалось romchik77; 27.04.2009 в 05:58.
  Ответить с цитированием
Старый 27.04.2009, 07:32   #128   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
Есть вопросик а когда настройки меняются, когда частота и может еще что-то меняется.....
Термин - настройки - по отношению к МК обычно не употребляется, а говорят - конфигурация. Вся конфигурация PIC в MikroC находится в окошке Project -> Edit Project. Устанавливаемая в нем частота - это информация для компилятора, он использует эту частоту для собственных расчетов задержек в разных встроенных библиотеках и функциях, например, Delay_ms(), Delay_us(), UART, ШИМ, освобождая программиста от некоторой рутины. После компиляции все частотозависимые расчеты будут проведены относительно данной частоты, и если она будет отличаться от частоты реального кварца, то задержки и т.п. не будут выдерживаться и как будет работать программа неизвестно. В случае тех кодов, что я приводил, используется внутренний RС генератор PIC16F628A, а он может работать только на двух частотах 4 МГц (наш случай) и 48 кГц(обычно используется в режиме пониженного энергопотребления, поэтому данный PIC относится к МК выполненным по nanoWatt-ной технологии). Поэтому замена частоты на другую в нашем случае собъет компилятор с толку. Если надо менять частоту на другую или требуется высокая стабильность частоты, то надо ставить внешний кварц, изменять биты в слове конфигурации, указывать в окошке новую рабочую частоту и заново компилировать программу. Или я не о том?
  Ответить с цитированием
Старый 27.04.2009, 20:51   #129   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Или я не о том?
О том.
Термостат. Прошил МК, все ок! но заметил незначительный минус в работе. При превышении температуры 100 гр. и последующем ее снижении ниже 100, в первом разряде индикации температуры остается единица в место нуля. Получается например 199 гр. вместо 099.
Интересно, а проект "термометр" так же работает?
  Ответить с цитированием
Старый 27.04.2009, 21:28   #130   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
О том.
Термостат. Прошил МК, все ок! но заметил незначительный минус в работе. При превышении температуры 100 гр. и последующем ее снижении ниже 100, в первом разряде индикации температуры остается единица в место нуля. Получается например 199 гр. вместо 099.
Интересно, а проект "термометр" так же работает?
Вау. Ничего себе незначительный минус. В термометре такая же фигня, исходные код я исправил. Можно так:
Код:
.......
if (temp_whole/100)
text[0] = temp_whole/100  + 48;
else
text[0]=48;
........
Завтра в железе проверю наверняка. Если еще что увидите, то говорите.

Последний раз редактировалось petrd; 27.04.2009 в 21:57.
  Ответить с цитированием
Старый 28.04.2009, 11:20   #131   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Подскажите какой прогой рисовать печатки
  Ответить с цитированием
Старый 28.04.2009, 11:27   #132   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
Подскажите какой прогой рисовать печатки
Я пользуюсь русифицированным Sprint Layout 5.0
  Ответить с цитированием
Старый 28.04.2009, 15:42   #133   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Завтра в железе проверю наверняка.
Проверил работу в железе - работает. Убрал еще несколько лишних строк в коде. Все изменения в посте №80.
  Ответить с цитированием
Старый 29.04.2009, 12:45   #134   
mono all
 
Аватар для mono
 
Сообщений: 55
Регистрация: 12.07.2006

mono вне форума Не в сети
расскажите про режим sleep и как из него возвращаться, интересует опять таки 12 серия, таймер 1, надо для создания больших задержек. (microC)
Спасибо!
Вложения
Тип файла: rar 44_683.rar (35.8 Кб, 82 просмотров)

Последний раз редактировалось mono; 29.04.2009 в 13:12. Причина: вложение
  Ответить с цитированием
Старый 29.04.2009, 14:41   #135   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от mono Посмотреть сообщение
расскажите про режим sleep и как из него возвращаться, интересует опять таки 12 серия, таймер 1, надо для создания больших задержек. (microC)
Спасибо!
Чтобы проснуться при помощи TMR1 необходимо использовать прерывания по переполнению TMR1 и при этом он должен работать как асинхронный счетчик по входу T1CKI. Пока что могу сказать - не увидел в коде обработчика прерывания от TMR1 и не увидел на схеме откуда могут поступать на вход T1CKI внешние такты, не увидел настроек регистра OSCCON для получения 1 Мгц. И увидел, что у Вас по коду TMR1 тактируется от внутреннего генератора, но в режиме sleep он остановлен, а значит, значение TMR1 не будет увеличиваться и переполнения не дождаться. По-моему так, или нет? Может лучше WDT использовать, от него можно задержку получить до 286 сек.? И желательно пояснить суть работы всего устройства.
  Ответить с цитированием
Старый 29.04.2009, 14:54   #136   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Кому интересен PICKit2, то есть шанс приобрести за 600 руб. + доставка, подробности здесь http://www.pickit2.ru/doku.php/offer
Кстати, началась регистрация на акцию PICKit2 по 595 руб. http://www.pickit2.ru/doku.php/form
  Ответить с цитированием
Старый 29.04.2009, 15:25   #137   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Кстати, началась регистрация на акцию PICKit2
Похоже в Воронеже негде получить. Остается только Москва.... Правильно я понял?
  Ответить с цитированием
Старый 29.04.2009, 15:35   #138   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
Похоже в Воронеже негде получить. Остается только Москва.... Правильно я понял?
Ага. Я при регистрации указал Тритон.
  Ответить с цитированием
Старый 29.04.2009, 17:34   #139   
mono all
 
Аватар для mono
 
Сообщений: 55
Регистрация: 12.07.2006

mono вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Чтобы проснуться при помощи TMR1 необходимо использовать прерывания по переполнению TMR1 и при этом он должен работать как асинхронный счетчик по входу T1CKI. Пока что могу сказать - не увидел в коде обработчика прерывания от TMR1 и не увидел на схеме откуда могут поступать на вход T1CKI внешние такты, не увидел настроек регистра OSCCON для получения 1 Мгц. И увидел, что у Вас по коду TMR1 тактируется от внутреннего генератора, но в режиме sleep он остановлен, а значит, значение TMR1 не будет увеличиваться и переполнения не дождаться. По-моему так, или нет? Может лучше WDT использовать, от него можно задержку получить до 286 сек.? И желательно пояснить суть работы всего устройства.

обычный даталогер с работой от батареек, считывает температуру окруж. среды, затем записывает во флеш, и засыпает на минуту или на час, затем всё по новой, когда вся флеш заполнена засыпает совсем.
  Ответить с цитированием
Старый 29.04.2009, 17:54   #140   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от mono Посмотреть сообщение
обычный даталогер с работой от батареек, считывает температуру окруж. среды, затем записывает во флеш, и засыпает на минуту или на час, затем всё по новой, когда вся флеш заполнена засыпает совсем.
Просто сохранять температуру - это, по-моему, бесполезно без привязки ко времени. Или нет? Тренируемся? Как вариант - прицепить микросхему RTC, вот она то и будет такты давать во время спячки для TMR1.
  Ответить с цитированием
Старый 30.04.2009, 12:35   #141   
mono all
 
Аватар для mono
 
Сообщений: 55
Регистрация: 12.07.2006

mono вне форума Не в сети
to petrd
спасибо разобрался.
  Ответить с цитированием
Старый 30.04.2009, 16:50   #142   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Заказ PICKit2

petrd,
Цитата:
заполнить форму http://www.trt.ru/order.htm и отправить им, в примечании указать регистрационный номер по акции на PICKit2 (заодно можно еще чего-нибудь заказать)
Как я понял сумму нужно догнать до 1000р. Посоветуйте, что еще, по Вашему опыту, заказать? (для начинающего). Например: в ближайшее время хочу собрать кодовый замок, сенсорный или однокнопочный. И увязать его с однокнопочным домофоном, если получится, конечно.
  Ответить с цитированием
Старый 01.05.2009, 23:18   #143   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
термостат

Цитата:
Сообщение от petrd Посмотреть сообщение
Суть такова - ловится момент, когда температура падает на OFFSET градусов (в данном примере OFFSET=2 градуса)
В посте №80, а где к примеру изменить в коде этот OFFSET равный двум?
  Ответить с цитированием
Старый 02.05.2009, 20:03   #144   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
petrd, Как я понял сумму нужно догнать до 1000р. Посоветуйте, что еще, по Вашему опыту, заказать? (для начинающего). Например: в ближайшее время хочу собрать кодовый замок, сенсорный или однокнопочный. И увязать его с однокнопочным домофоном, если получится, конечно.
Догонять до 1000 руб. я думаю не обязательно, а вот чего можно прикупить до кучи для опытов (это только если есть желание дальше разобраться с PIC-ами):
1. PIC12F683 - маленький - 8 ног, с АЦП - хороший контроллер в ряде PIC12, стоит попробовать.
2. PIC16F887 - 40 ног, на сегодняшний день лучший (опять же по-моему мнению) среди PIC16, на нем можно попробовать все, на что возможны PIC16 и в нем есть все что есть у PIC16 (кроме аппаратного модуля управления LCD, ну он не очень и нужен).
3. PIC18F4520 - 40 ног, типичный представитель PIC18, общего применения без наворотов, а если с наворотами, то PIC18F2550 - 28 ног, с USB (на нем PICKit2 сделан). Тут я не рассматриваю PIC с модулями CAN, моторныеи т.д.
4. Ну и можно ЖКИ приглядеть, может что подешевле выйдет.
Для сенсорного управления подойдет PIC16F628A (для первых опытов, так как он имеет компрараторы), а дальше можно конкретное что-нибудь подобрать.
Цитата:
В посте №80, а где к примеру изменить в коде этот OFFSET равный двум?
А в самой верхней строчке кода термостата
[PHP]сonst unsigned short TEMP_RESOLUTION = 12, OFFSET = 2;[/PHP]
двойку заменить на что надо, снова откомпилировать и прошить, в принципе можно в программе дописать, чтобы по мере необходимости изменять OFFSET.
  Ответить с цитированием
Старый 03.05.2009, 20:50   #145   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
[PHP]сonst unsigned short TEMP_RESOLUTION = 12, OFFSET = 2;[/PHP] я конечно так и подумал, но чтоб так просто...
Цитата:
(это только если есть желание дальше разобраться с PIC-ами)
Ну конечно же есть, еще бы столько возможностей, рассыпухи мало, да и вообще интересно. Но я пока способен только на повтор кода. А вот как написать сам алгоритм эт пока вопрос.
З.Ы. я на работе связан с прошивкой ATmega8, но немного по другому, там проще.
petrd, спасиб за совет, обязательно чего нибудь подвыберу.
  Ответить с цитированием
Старый 05.05.2009, 22:28   #146   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
DV164121a отладочная плата - это и есть PICkit2 c демоплатой?
а вообще зачем нужна демоплата.
И ненужно ли к этому еше чего нибудь типа там шнуров или еще чего...
Вот на ChipProg2 например, есть колодка. Положил МК и шей, а на PICkit2 как соединяется МК.
Извините за глуп вопр.
Выбрал из индикаторов ACM1602K-FL-GBH-02 знакосинтезирующии. Вот не знаю правда сойдет вместо WH1602.

Последний раз редактировалось romchik77; 05.05.2009 в 23:24. Причина: дополнение
  Ответить с цитированием
Старый 06.05.2009, 07:27   #147   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
DV164121a отладочная плата - это и есть PICkit2 c демоплатой? а вообще зачем нужна демоплата.
А вот он весь этот комплект http://www.pickit2.ru/lib/exe/detail...%D0%B5.pickit2. Ну а демо-плата чтобы попробовать что-нибудь, там PIC16F887 стоит в корпусе TQFP44. А на диске программки пробные для опытов (но не MikroC).
Цитата:
И ненужно ли к этому еше чего нибудь типа там шнуров или еще чего...
Нет, ничего не надо.
Цитата:
Вот на ChipProg2 например, есть колодка. Положил МК и шей, а на PICkit2 как соединяется МК.
В PICKit2 мама на 6 гнезд, а на демке папа на 6 штырьков. Папу в маму и все. PICKit2 по USB в компьютер. И не надо МК туда сюда втыкать. Прошили прямо в плате, посмотрели как работает, если не так, то поправили программу и снова прошили, снова посмотрели. В серийном производстве DIP корпуса уже практически не используются. Программа зашивается в уже готовое устройство с впаянным МК, поэтому используется внутрисхемное программирование через разъем ICSP (именно это в PICKit2).
Цитата:
Выбрал из индикаторов ACM1602K-FL-GBH-02 знакосинтезирующии. Вот не знаю правда сойдет вместо WH1602.
Один в один.
  Ответить с цитированием
Старый 07.05.2009, 16:07   #148   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
... в принципе можно в программе дописать, чтобы по мере необходимости изменять OFFSET.
Еще модернизировал термостат, теперь можно минимальное и максимальное значение температуры выставлять независимо друг от друга (естественнно минимальное не может быть больше максимального, а максимальное меньше минимального - это заложено в программе), но для этого нужна еще одна кнопка. Противопоказаний вроде не выявлено, в железе проверил.
Код:
#define Up          Button(&PORTA, 0,10,0)
#define Dn          Button(&PORTA, 1,10,0)
#define SetBut      Button(&PORTB, 7,10,0)
#define Relay_On()  PORTA=8
#define Relay_Off() PORTA=0
const unsigned short TEMP_RESOLUTION = 12;
unsigned short MaxTemp, old_MaxTemp, state, MinTemp, old_MinTemp;
char *text = "000.00", *maxT = "000", *minT="000";
unsigned temp;
void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
if (temp2write & 0x8000) {    // преобразование отрицательной температуры
text[0] = '-';
temp2write = ~temp2write + 1;
}
temp_whole = temp2write >> RES_SHIFT ;   // извлечение целой части
// преобразование целой части температуры в символы
text[0] = temp_whole/100  + 48;                // извлечение сотен
text[1] = (temp_whole/10)%10 + 48;             // извлечение десятков
text[2] = temp_whole%10     + 48;              // извлечение единиц
// извлечение и преобразование дробной части
temp_fraction  = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
// преобразование дробной части в символы
text[4] =  temp_fraction/1000    + 48;         // извлечение тысячных
text[5] = (temp_fraction/100)%10 + 48;         // извлечение сотых
//text[6] = (temp_fraction/10)%10  + 48;       // извлечение десятых
//text[7] =  temp_fraction%10      + 48;       // извлечение единиц
Lcd_Out(1,7,text);                             // вывод температуры на ЖКИ
// код стейт-машинки
switch(state){
case 0: {
if(temp_whole<MaxTemp){
Relay_On();
Lcd_Chr(1,16,'1');
}
else {
Relay_Off();
Lcd_Chr(1,16,'0');
state=1;
}
}; break;
case 1: {
if(temp_whole<MinTemp){
Relay_On();
Lcd_Chr(1,16,'1');
state=0;
}
else {
Relay_Off();
Lcd_Chr(1,16,'0');
}
}; break;
} // окончание стейт-машинки
}//~
void main() {
CMCON = 7;                               // Все выводы цифровые входы-выходы
TRISA=0b11110111;                        // все выводы PORTA на вход, RA3 - выход
state=0;
Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // назначение выводов ЖКИ - PIC
Lcd_Cmd(LCD_CURSOR_OFF);
Lcd_Out(1, 1, "Temp:");
Lcd_Chr(1,13,223);                       // вывод символа точки и "С" как единицы измерения
Lcd_Chr(1,14,'C');
Lcd_Out(2,1,"Min");
Lcd_Out(2,9,"Max");
MaxTemp=Eeprom_Read(0);                  // читаем уставку из EEPROM
MinTemp=Eeprom_Read(1);
if (MaxTemp>125){
MaxTemp=25;
MinTemp=23;
old_MaxTemp=MaxTemp;
old_MinTemp=MinTemp;
delay_ms(50);
Eeprom_Write(0,MaxTemp);
Eeprom_Write(1,MinTemp);
delay_ms(50);
}
minT[0]=MinTemp/100+48;
minT[1]=(MinTemp/10)%10+48;
minT[2]=MinTemp%10+48;
Lcd_Out(2,5,minT);
maxT[0]=MaxTemp/100+48;
maxT[1]=(MaxTemp/10)%10+48;
maxT[2]=MaxTemp%10+48;
Lcd_Out(2,13,maxT);
//--- главный цикл
do{
//--- чтение температуры из DS18B20
Ow_Reset(&PORTA,2);            // сигнал сброса
Ow_Write(&PORTA,2,0xCC);       // команда SKIP_ROM
Ow_Write(&PORTA,2,0x44);       // команда CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA,2);
Ow_Write(&PORTA,2,0xCC);       // команда SKIP_ROM
Ow_Write(&PORTA,2,0xBE);       // команда READ_SCRATCHPAD
temp =  Ow_Read(&PORTA,2);
temp = (Ow_Read(&PORTA,2) << 8) + temp;
//--- обработка нажатия кнопок
if(SetBut){                    //нажимаем кнопку на RB7 (вход в режим уставки)
while(SetBut){}
do{                           // изменение мин. температуры
Lcd_Out(2,5,"   ");
delay_ms(300);
Lcd_Out(2,5,minT);
delay_ms(300);
if (Up){                     // нажимаем кнопку на RA0 ("выше")
MinTemp++;
if (MinTemp>=MaxTemp)
MinTemp=MaxTemp;
}
if (Dn){                     // нажимаем кнопку на RA1 ("ниже")
MinTemp-- ;
if (MinTemp==255)
MinTemp=0;
}
minT[0]=MinTemp/100+48;
minT[1]=(MinTemp/10)%10+48;
minT[2]=MinTemp%10+48;
Lcd_Out(2,5,minT);
}
while(!SetBut);
while(SetBut){}
do{                         // изменение макс. температуры
Lcd_Out(2,13,"   ");
delay_ms(300);
Lcd_Out(2,13,maxT);
delay_ms(300);
if (Up){                   // нажимаем кнопку на RA0 ("выше")
MaxTemp++;
if (MaxTemp>125)
MaxTemp=125;
}
if (Dn){                   // нажимаем кнопку на RA1 ("ниже")
MaxTemp-- ;
if (MaxTemp<MinTemp)
MaxTemp=MinTemp;
}
maxT[0]=MaxTemp/100+48;
maxT[1]=(MaxTemp/10)%10+48;
maxT[2]=MaxTemp%10+48;
Lcd_Out(2,13,maxT);
}
while(!SetBut);
while(SetBut){}             // выход из режима уставки
}
if (old_MaxTemp!= MaxTemp) {          // если было изменение макс. температуры
Eeprom_Write(0,MaxTemp);             // то сохраняем в EEPROM новое значение уставки
delay_ms(50);
old_MaxTemp = MaxTemp;               // и сохраняем для текущей работы
}
if (old_MinTemp!=MinTemp) {           // если было изменение мин. температуры
Eeprom_Write(1,MinTemp);             // то сохраняем в EEPROM новое значение уставки
delay_ms(50);
old_MinTemp = MinTemp;               // и сохраняем для текущей работы
}
//--- форматирование, вывод на ЖКИ температуры и уставки, включение-выключение
Display_Temperature(temp);
Delay_ms(500);
}while (1);
}
Миниатюры
Нажмите на изображение для увеличения
Название: термостат_3_кнопки.JPG
Просмотров: 312
Размер:	115.6 Кб
ID:	447833  

Последний раз редактировалось petrd; 20.09.2010 в 10:02.
  Ответить с цитированием
Старый 08.05.2009, 12:53   #149   
Форумец
 
Аватар для Krivoy
 
Сообщений: 523
Регистрация: 08.02.2007
Возраст: 49

Krivoy вне форума Не в сети
Заказал себе кит2 через интернет магазин Теперь буду ждать, стремно...
  Ответить с цитированием
Старый 08.05.2009, 13:03   #150   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Krivoy Посмотреть сообщение
Заказал себе кит2 через интернет магазин Теперь буду ждать, стремно...
В каком?
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind