Бутон служит для нулирования min и max. Консумация нищожная можно използуват батерии. Там остаются 2 виьвода свободниье
- можна сделат и термостат. У етого ПИК-а есть ЕЕПРОМ так что можно записат значение min и max в памят.
Если нет связи с датчика тогда контролер виьдаиот сообщение - нет датчика или нет связи.
Code: Select all
#include <16f684.h>
#use delay(internal=1Mhz)
#FUSES INTRC_IO, NOMCLR, nowdt, noprotect, PUT,
#use SPI(MASTER, DI=PIN_A3, CLK=PIN_A4, MODE=0,BITS=16)
#define CS PIN_A5
#include <lcd2.C>
unsigned int16 buffer, t_min, t_max;
float temperatura=0;
//*******************************Prekyswaniq***********************************
#INT_EXT
void button() {
t_min = 0;
t_max = 0;
}
//******************************Subprogrami************************************
void initial(){
printf(lcd_putc,"\fTermometer F684");
lcd_gotoxy(1,2);
printf(lcd_putc," ***BGMAN66***");
delay_ms(2000);
lcd_putc("\f") ;
}
void termocuple(){
int16 temp=0;
delay_ms(230);
output_low(CS);
buffer = spi_xfer(16);
output_high(CS);
temp = (buffer & 0b0111111111111000);
temp = temp>>3;
temperatura = (temp * 0.25);
}
//******************************Main*********************************
void main(){
SETUP_ADC_PORTS(NO_ANALOGS);
PORT_A_PULLUPS(0b00100100);
set_tris_c(0b00000000);
ENABLE_INTERRUPTS(INT_EXT_H2L);
enable_interrupts(global);
lcd_init();
delay_ms(20);
initial();
do{
termocuple();
if(bit_test(buffer,2)){
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"No sensor or");
lcd_gotoxy(3,2);
printf(lcd_putc,"Disconnected");
}
else{
if ((temperatura <= t_min) | (t_min == 0)) t_min = temperatura;
if ((temperatura >= t_max) | (t_max == 0)) t_max = temperatura;
lcd_gotoxy(1,1);
printf(lcd_putc," temp. %4.0f",temperatura);
lcd_putc(223);
lcd_putc("C");
lcd_gotoxy(1,2);
printf(lcd_putc,"min%4Lu",t_min);
lcd_gotoxy(10,2);
printf(lcd_putc,"max%4Lu",t_max);
}
}
while(TRUE);
}
Может послужит для пайание SMD с помошти пистолета теплова воздуха.