Смекни!
smekni.com

Реализация цифрового термометра на основе микроконтроллера ATmega 128 (с использовнием термодатчика DS18B20) (стр. 4 из 4)

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Compare C Match Interrupt: Off

TCCR3A=0x00;

TCCR3B=0x00;

TCNT3H=0x00;

TCNT3L=0x00;

ICR3H=0x00;

ICR3L=0x00;

OCR3AH=0x00;

OCR3AL=0x00;

OCR3BH=0x00;

OCR3BL=0x00;

OCR3CH=0x00;

OCR3CL=0x00;

// External Interrupt (s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

// INT3: Off

// INT4: Off

// INT5: Off

// INT6: Off

// INT7: Off

EICRA=0x00;

EICRB=0x00;

EIMSK=0x00;

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

TIMSK=0x00;

ETIMSK=0x00;

// USART0 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART0 Receiver: On

// USART0 Transmitter: Off

// USART0 Mode: Asynchronous

// USART0 Baud Rate: 57600

UCSR0A=0x00;

UCSR0B=0x18;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x07;

// Analog Comparator initialization

// Analog Comparator: Off

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

ACSR=0x80;

SFIOR=0x00;

PORTB=0x00;

DDRB=0x01;

// LCD module initialization

lcd_init (16);

w1_init ();

/*>>>>>>>>>>>>>*/

delay_ms (250);

lcd_clear ();

/* detecting device */

devices=w1_search (0xF0,rom_code);

delay_ms (250);

sprintf (lcd_buffer,"%u DS18B20\nDevice detected", devices);

lcd_puts (lcd_buffer);

delay_ms (250);

lcd_clear ();

while (1)

{

temp=ds18b20_temperature (0); // чтение температуры с датчика

if (temp>1000) { // преобразование отрицательной температуры

temp=4096-temp;

temp=-temp;

}

sprintf (lcd_buffer,"t=%i.%u\xdfC",temp,temp%1); // запись температуры в массив для вывода на экран

lcd_clear (); // очистка экрана

lcd_puts (lcd_buffer); // вывод температуры

delay_ms (500); // ожидание 500 мс перед следующим измерением

a = ADCW;

d = (double) a / 1024 * 5;

printf ("%f\r", a);

};

}