У меня возникла проблема при объединение DS18B20 + DS1307 + Atmega32. Так как я скажем не самый крутой программист то стараюсь использовать стандартные библиотеки CVAVR и не копаюсь в них а уж тем более не знаю как их переписывать или дописывать. При компиляции сей кода выдает ошибку ... Как я понял из за не совпадения типа данных ... Для правильной работы sprintf в настройках проекта надо установить тип данных float после применения данной настройки начинает ругаться библиотека math.h как я понял она у меня вступает в игру когда я хочу сделать преобразования с временем перед выводом на экран ...
Не знаю как объяснить лучше )))
Быть может кто нибудь сталкивался с такой проблемой и знает еще решении очень надеюсь на братья мои разработчики )))
Code
#include <mega32a.h>
#include <i2c.h>
#include <ds1307.h>
#include <1wire.h>
#include <ds18b20.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>
char lcd_buffer[20];
char LcdBuffDevices[20];
unsigned char devices;
unsigned char rom_code[9];
char *str;
unsigned char hour,min,sek; //часы, минуты, секунды
unsigned char week_day,day,month,year; //день, месяц, год
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
i2c_init();
w1_init();
lcd_init(20);
rtc_init(0,0,0);
rtc_set_date(1,18,10,12); //установить дату: день,месяц,год
rtc_set_time(00,00,00); //установить время: часы, минуты, секунды
devices=w1_search(0xF0,rom_code); // Узнаём количество подключенных датчиков и их индентификационный номер
sprintf(LcdBuffDevices,"Devices found %u", devices);
lcd_clear(); // Чистим LCD
lcd_gotoxy(0,2); // Установка курсора в положение 0,0
lcd_puts(LcdBuffDevices);
ds18b20_init(&rom_code[0], 10, 120, DS18B20_12BIT_RES);
while (1)
{
if(devices>0)
{
sprintf(lcd_buffer,"t1=%.1f C", ds18b20_temperature(&rom_code[0]));
str = ds18b20_temperature(&rom_code[0]);
lcd_gotoxy(0,3); // Установка курсора в положение 0,0
lcd_putsf(str); // Выводим на LCD температуру 1-го датчика
}
else
{
lcd_gotoxy(0,3); // Установка курсора в положение 0,3
lcd_putsf("No temperature sensor"); // Выводим на LCD информацию об отсуствии датчиков
};
rtc_get_time(&hour,&min,&sek); //считать время
rtc_get_date(&week_day,&day,&month,&year); //считать дату
lcd_gotoxy(0,0);
lcd_putchar(hour/10+0x30);
lcd_putchar(hour%10+0x30);
lcd_putchar(':');
lcd_putchar(min/10+0x30);
lcd_putchar(min%10+0x30);
lcd_putchar(':');
lcd_putchar(sek/10+0x30);
lcd_putchar(sek%10+0x30);
lcd_gotoxy(0,1);
lcd_putchar(day/10+0x30);
lcd_putchar(day%10+0x30);
lcd_putchar('-');
lcd_putchar(month/10+0x30);
lcd_putchar(month%10+0x30);
lcd_putchar('-');
lcd_putchar(year/10+0x30);
lcd_putchar(year%10+0x30);
delay_ms(100);
}
}