Сб сен 22, 2012 15:08:28
#include "main.h"
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <stdio.h>
#include <util/delay.h>
#include "delay.h"
#include "onewire.h"
#include "ds18x20.h"
unsigned char nDevices; // количество сенсоров
unsigned char owDevicesIDs[MAXDEVICES][8]; // Их ID
unsigned char search_ow_devices(void) // поиск всех устройств на шине
{
unsigned char i;
unsigned char id[OW_ROMCODE_SIZE];
unsigned char diff, sensors_count;
sensors_count = 0;
for( diff = OW_SEARCH_FIRST; diff != OW_LAST_DEVICE && sensors_count < MAXDEVICES ; )
{
OW_FindROM( &diff, &id[0] );
if( diff == OW_PRESENCE_ERR ){break};
if( diff == OW_DATA_ERR ){break;}
for (i=0;i<OW_ROMCODE_SIZE;i++)
{
owDevicesIDs[sensors_count][i] = id[i];
}
sensors_count++;
}
return sensors_count;
}
int main_dalas_termo(void)
{
DDRB = 0b00000010; PORTB = 0b00000010;
nDevices = search_ow_devices(); // ищем все устройства
if (nDevices == 0)
{
LCD_print("No_Devise",2,5);
}
for (unsigned char i=0; i<nDevices; i++) // теперь сотируем устройства и запрашиваем данные
{
DS18x20_StartMeasureAddressed(owDevicesIDs[i]); // запускаем измерение
_delay_ms(800); // ждем минимум 750 мс, пока конвентируется температура
unsigned char data[2]; // переменная для хранения старшего и младшего байта данных
DS18x20_ReadData(owDevicesIDs[i], data); // считываем данные
unsigned char themperature[3]; // в этот массив будет записана температура
DS18x20_ConvertToThemperature(data, themperature); // преобразовываем температуру в человекопонятный вид
char buff[10];
itoa(themperature[1], buff, 10);
LCD_print(buff,i,3);
LCD_print(".",i,5);
itoa(themperature[2], buff, 10);
LCD_print(buff,i,6);
}
}