/*****************************************************
Project : temp
Version : 2.00
Date    : 7.04.2009
Author  : Bogdan Sachkovsky
Company : Home
Comments: 

Chip type           : ATmega16
Program type        : Application
Clock frequency     : 11,059200 MHz
Memory model        : Small
External RAM size   : 0
Data Stack size     : 256
*****************************************************/

#include <mega16.h>

// 1 Wire Bus functions
#asm
   .equ __w1_port=0x12 ;PORTD
   .equ __w1_bit=6
#endasm
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds18b20.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm

#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#include <math.h>

#define MAX_DEVICES 8

unsigned char lcd_buffer1[10],lcd_buffer2[10],lcd_buffer3[10];
unsigned char rom_code[MAX_DEVICES][9];
int t;

unsigned char i,devices;



void temp (void)
{
    for (i=0;i<devices;)
    {
    #asm("cli")
    ds18b20_init(&rom_code[0][0],0,85,DS18B20_9BIT_RES);                       
    temp1=ds18b20_temperature(&rom_code[0][0]);
    sprintf(lcd_buffer1,"t%u=%i\xdfC",i+1,temp1);
    lcd_gotoxy(0,0); 
    lcd_puts(lcd_buffer1);
        
    ds18b20_init(&rom_code[1][0],0,85,DS18B20_9BIT_RES);                     
    temp2=ds18b20_temperature(&rom_code[1][0]);
    sprintf(lcd_buffer3,"t%u=%i\xdfC",i,temp3);

    ds18b20_init(&rom_code[2][0],0,85,DS18B20_9BIT_RES);                       
    temp3=ds18b20_temperature(&rom_code[2][0]);
    sprintf(lcd_buffer3,"t%u=%i\xdfC",i+3,temp3);
    #asm("sei")
    }
}


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x28;
// Place your code here
t++;                          
}



void main(void)
{

// Input/Output Ports initialization
// Port A initialization
PORTA=0xF8;
DDRA=0x00;

// Port B initialization
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
PORTC=0x00;
DDRC=0x00;

// Port D initialization
PORTD=0xBD;
DDRD=0xB2;

/* Reset WDT*/
#asm ("wdr")
/* Write logical one to WDTOE and WDE */
WDTCR |= 0x18;     
/* Turn off WDT */
WDTCR = 0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11059,200 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
TCNT0=0x28;
OCR0=0x00;



// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

lcd_init(16);
lcd_gotoxy(4,0);
lcd_putsf("hello");            // вивід заставки


// 1 Wire Bus initialization
devices=w1_search(0xf0,rom_code);

// Global enable interrupts
#asm("sei")
////////////////////       
while (1)
      {
      // Place your code here
                       
        if (t==100)
        {
        temp ();
        t=0;
        }
              
             
      };
}







