СХЕМА.RU - Радиолюбительский портал » Другие новости радиолюбителя » Терморегулятор На Мк С Аналоговым Органом Управления

Терморегулятор На Мк С Аналоговым Органом Управления

6-11-2012, 00:39 От: admin Посмотрели: 1177
Доброе время суток, форумчане!



Задан курсовой проект с созданием устройства на микроконтроллера для регулирования температурой в помещении для теплых полов с аналоговым органом управления (переменный резистор).

Копался в интернете, все предлагают с кнопками и с заданием этими кнопками минимальной и максимальной температуры на жк-дисплее.

Мне же нужно чтоб по-тупому (будь оно не ладно), с помощью реостата/потенциометра, а на дисплее отображалась текущая температура.



Вопрос такой

Можно ли прикрутить к данной схеме собственно этот самый реостат


Spoiler
Терморегулятор На Мк С Аналоговым Органом Управления




На том же сайте есть схема термометра+термостата, управление осуществляется кнопками




Spoiler
Терморегулятор На Мк С Аналоговым Органом Управления


Если можно к термометру прикрутить тот  самый реостат, что нужно дописать в тексте исходного кода?



Цитата

/*****************************************************

This program was produced by the

CodeWizardAVR V1.24.8d Professional

Automatic Program Generator

© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com



Project :

Version :

Date : 13.11.2006

Author  : F4CG

Company : F4CG

Comments:





Chip type    : ATtiny2313

Clock frequency : 8,000000 MHz

Memory model : Tiny

External SRAM size  : 0

Data Stack size : 32

*****************************************************/



#include <tiny2313.h>



// 1 Wire Bus functions

#asm

   .equ __w1_port=0x12 ;PORTD

   .equ __w1_bit=6

#endasm

#include <1wire.h>

#include <delay.h>







#define TRUE (!FALSE)

#define FALSE   0

#define BYTE unsigned char

#define WORD unsigned short int

#define BOOLEAN char



#define LED_delay 150



//#define Cathode

#define Anode



BYTE byDisplay[4]; // буфер данных, для вывода на экран



BYTE T;

BYTE Fr;

BYTE Ff;

BOOLEAN Updating;





BYTE byCharacter[12] = {0xFA, //0

0x82,   //1

0xB9,   //2

0xAB,   //3

0xC3,   //4

0x6B,   //5

0x7B,   //6

0xA2,   //7

0xFB,   //8

0xEB,   //9

0x00,   //blank  

0x01 //-

};







/************************************************************************\

  Преобразование скорости мотора и количества лопастей

  в данные экранного буфера

  Вход:  wRpm - обороты ротора, byBladeCnt - количество лопастей

  Выход: -

\************************************************************************/

void PrepareRpmData()

{

BYTE i;

BYTE R;

BYTE T1;

BOOLEAN Minus;  

R = T;

T1 = T;

Fr = Ff;



Minus = FALSE;   

if (R & 0b10000000)

{

  Fr = ~Fr;  

  Minus = TRUE;

  R = ~R;

  R = R & 0b01111111;

  T1 = R;

  if (!Fr)

  {

R++;

T1++;

  }  



}  



Fr = Fr & 0b00001111;

byDisplay[3] = (Fr * 10 / 16) % 10;



for(i=0; i<3; i++)

  {

byDisplay[2-i] = T1 % 10;

T1 /= 10;

  }



if (R < 10)

{

  byDisplay[0] = 10;

  byDisplay[1] = 10;



  goto exit;

}  

if ((R >= 10) & (R <100))

{

  byDisplay[0] = 10;

  goto exit;

}



exit:  

  if (Minus)

   {

byDisplay[0] = 11;  

   }



}



/************************************************************************\

  Вывод экранного буфера на дисплей.

  Вход:  -

  Выход: -

\************************************************************************/

void ShowDisplayData(void)

{   



#ifdef Cathode

  PORTB = byCharacter[byDisplay[0]];

  PORTD.5 = 0;

  delay_us(LED_delay);

  PORTD.5 = 1;



  PORTB = byCharacter[byDisplay[1]];

  PORTD.1 = 0;

  delay_us(LED_delay);

  PORTD.1 = 1;



  PORTB = byCharacter[byDisplay[2]] | 0b00000100;

  PORTD.0 = 0;

  delay_us(LED_delay);

  PORTD.0 = 1;



  PORTB = byCharacter[byDisplay[3]];

  PORTD.4 = 0;

  delay_us(LED_delay);

  PORTD.4 = 1;

#endif



#ifdef Anode

  PORTB = ~byCharacter[byDisplay[0]];

  PORTD.5 = 1;

  delay_us(LED_delay);

  PORTD.5 = 0;



  PORTB = ~byCharacter[byDisplay[1]];

  PORTD.1 = 1;

  delay_us(LED_delay);

  PORTD.1 = 0;



  PORTB = ~byCharacter[byDisplay[2]] & 0b11111011;

  PORTD.0 = 1;

  delay_us(LED_delay);

  PORTD.0 = 0;



  PORTB = ~byCharacter[byDisplay[3]];

  PORTD.4 = 1;

  delay_us(LED_delay);

  PORTD.4 = 0;

#endif





  }





/************************************************************************\

  Обновление дисплея.

  Вход:  -

  Выход: -

\************************************************************************/

void RefreshDisplay(void)

{

//Updating = TRUE;  

PrepareRpmData();   

ShowDisplayData();

//Updating = FALSE;

}



// Timer 0 overflow interrupt service routine

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

// Reinitialize Timer 0 value

TCNT0=0x0F;

// Place your code here

}



// Timer 1 overflow interrupt service routine

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

  BYTE t1;

  BYTE t2;

  BYTE i;

// Reinitialize Timer 1 value

TCNT1H=0x8F;

TCNT1L=0xD1;

// Place your code here

w1_init();  

for (i=0; i<11; i++)

  {

RefreshDisplay();

  }

w1_write(0xCC);   

for (i=0; i<11; i++)

  {

RefreshDisplay();

  }

Updating = !Updating;

if (Updating)

{

  w1_write(0xBE);  

  for (i=0; i<11; i++)

  {

RefreshDisplay();

  }

  t1=w1_read();   //LSB

  for (i=0; i<11; i++)

  {

RefreshDisplay();

  }

  t2=w1_read();   //MSB

  Ff = (t1 & 0x0F);

  t2 = t2 << 4;

  t1 = t1 >> 4;

  T = (t2 & 0xF0) | (t1 & 0x0F);

}

else

{

  w1_write(0x44);  

}  

}



// Declare your global variables here



void main(void)

{

// Declare your local variables here



// Crystal Oscillator division factor: 1

#pragma optsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif



//Разряд DDRx - определяет направление передачи данных (0 - вход, 1 - выход).

//Разряд PORTx - если вывод определен выходом (DDRx = 1), то:

// если установлена 1 - то на выводе устанавливается лог. 1

// если установлена 0 - то на выводе устанавливается лог. 0

// если вывод определен входом (DDRx = 0), то PORTx - определяет состояние подтягивающего резистора (при PORTx = 1 резистор подключен)

//Разряд PINx - доступен только для чтения и содержит физическое значение вывода порта



PORTA=0b00000011;

DDRA= 0b00000011;



PORTB=0b00000000;

DDRB= 0b11111111;



#ifdef CathodeOld  

  PORTD=0b01111111;

  DDRD= 0b00101011;

#endif  



#ifdef Cathode  

  PORTD=0b01111111;

  DDRD= 0b00110011;

#endif



#ifdef Anode  

  PORTD=0b01001100;

  DDRD= 0b00110011;

#endif







// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 8000,000 kHz

// Mode: Normal top=FFh

// OC0A output: Disconnected

// OC0B output: Disconnected

TCCR0A=0x00;

TCCR0B=0x02;

TCNT0=0x0F;

OCR0A=0x00;

OCR0B=0x00;



// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: 7,813 kHz

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: On

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x04;

TCNT1H=0x03;

TCNT1L=0xD1;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;



// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// Interrupt on any change on pins PCINT0-7: Off

GIMSK=0x00;

MCUCR=0x00;



// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x82;



// Universal Serial Interface initialization

// Mode: Disabled

// Clock source: Register & Counter=no clk.

// USI Counter Overflow Interrupt: Off

USICR=0x00;



// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;



// 1 Wire Bus initialization

w1_init();

w1_write(0xCC);

w1_write(0x44);



// Global enable interrupts

#asm("sei")



while (1)

  {

  // Place your code here

  #asm("cli");

  // Place your code here

  RefreshDisplay();

  #asm("sei");

  };

}

Раздел: Школьникам и студентам

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Терморегулятор На Мк С Аналоговым Органом Управления все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба

Добавление комментария

Ваше имя:*
E-Mail:*
Текст:
Вопрос:
Решите уравнения x+2x=789
Ответ:*
Введите два слова, показанных на изображении:



Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Календарь новостей
«    Апрель 2024    »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930