Cześć!
Na wyświetlaczu zamiast poprawnej (lub prawie poprawnej) temperatury wyświetla mi się temperatura -0.1 stopnia. Program napisany w bascomie funkcjonuje poprawnie (temperatura nie dokońca się zgadza bo na rtęciowym termometrze mam 23 stopnie a DS pokazuje mi 25). Gdzie popełniłem błąd?
PS.
Dlaczego w cpeie wszystko jest takie trudne, a boscoma można pojąc w 1 weeckend...
Na wyświetlaczu zamiast poprawnej (lub prawie poprawnej) temperatury wyświetla mi się temperatura -0.1 stopnia. Program napisany w bascomie funkcjonuje poprawnie (temperatura nie dokońca się zgadza bo na rtęciowym termometrze mam 23 stopnie a DS pokazuje mi 25). Gdzie popełniłem błąd?
#define WE 2
#define PORT_1wire PINB
#define SET_1wire DDRB=~_BV(WE)
#define CLEAR_1wire DDRB|=_BV(WE)
char buf[8];
unsigned char RESET_PULSE(void)
{
unsigned char PRESENCE;
CLEAR_1wire;
_delay_us(500);
SET_1wire;
_delay_us(40);
if (bit_is_clear(PORT_1wire, WE))
{
PRESENCE=1;
}
else
{
PRESENCE=0;
}
return PRESENCE;
}
void send(char bit)
{
CLEAR_1wire;
_delay_us(10);
if(bit==1)
SET_1wire;
_delay_us(100);
SET_1wire;
}
unsigned char read(void)
{
unsigned char PRESENCE=0;
CLEAR_1wire;
_delay_us(4);
SET_1wire;
_delay_us(25);
if(bit_is_set(PORT_1wire, WE)) PRESENCE=1; else PRESENCE=0;
return(PRESENCE);
unsigned char sprawdz;
char temp1=0, temp2=0;
LCD_Start();
for(;;)
{
sprawdz=RESET_PULSE();
if (sprawdz)
{
send_byte(0xCC);
send_byte(0x44);
_delay_ms(850);
sprawdz=RESET_PULSE();
send_byte(0xCC);
send_byte(0xBE);
temp1=read_byte();
temp2=read_byte();
sprawdz=RESET_PULSE();
float temp=0;
temp=(float)(temp1+(temp2*256))/16;
dtostrf(temp,1,1,buf);
LCD_Clear();
LCD_WriteText(buf);
_delay_ms(500);
}
else
{
LCD_Clear();
LCD_WriteText("brak czujnika");
}
PS.
Dlaczego w cpeie wszystko jest takie trudne, a boscoma można pojąc w 1 weeckend...
