Čau lidi, potřebuju udělat teploměr na ATmega32. Používá teplotní čidlo DS18B20, společně se sběznicí 1-wire. Knihovny a kód bych měl mít správně, ale při zapojení to ukazuje teplotu 0°C, nebo že není teploměr.
Nevíte v čem by mohla být chyba?
Díky za pomoc.
main.c
[code]#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include “dallas_one_wire.h”
#include “HD44780.h”
#include “crc8.h”
int main(void)
{
LCD_Initalize();
LCD_GoTo(0,0);
LCD_WriteText(" Temostat ");
//LCD_WriteData(0b11011111); //Značka stupnu
uint8_t buffer[9];
uint8_t ok;
uint16_t measure;
uint8_t subzero;
uint8_t temp_int;
uint16_t temp_fract;
while(1)
{
ok=dallas_reset();//Reset zběrníce 1-Wire
if(!ok){//Varování pro nepřístupný teploměr
LCD_GoTo(0,1);
LCD_WriteText("Neni teplomer");
continue;
}
dallas_write_byte(SKIP_ROM_COMMAND);//Vynechání ověřovacího čísla
dallas_write_byte(CONVERT_T_COMMAND);//Objednání konverze teploty
_delay_ms(750);//Čekání na dokončení konverze
//Všechny šasové závislosti spojené s měřením teploty by měly být založeny na časovačích a přerušeních
dallas_reset();//Reset sběrnice 1-wire
dallas_write_byte(SKIP_ROM_COMMAND);//Vynehcání ověření čísla
dallas_write_byte(READ_SCRATCHPAD_COMMAND);//Objednání čtení dat
dallas_read_buffer(buffer,9);//Čtení udají z teploměru
if(buffer[8]!=crc8(buffer,8)){//Kontrola čtení součtu
LCD_GoTo(0,1);
LCD_WriteText(" Kontrolni EROR ");
continue;
}
measure=(uint16_t)buffer[0]+(((uint16_t)buffer[1])<<8);//Kombinace dvou bajtů teplotních dat
if(measure&0x8000){//Pokud je výsledek záporný
subzero=1;
measure ^= 0xFFFF;
measure += 1;
}else{
subzero=0;
}
//Rozdělení na celou a desetinou část
temp_int=measure>>4;
temp_fract=(measure&0x000F)*625;
//zobrazujeme značku, teplotu
LCD_GoTo(0,1);
LCD_WriteText("T=");
if(subzero){
LCD_WriteData('-');
}else{
LCD_WriteData(' ');
}
sprintf((char*)buffer,"%03d.%04d",temp_int,temp_fract);
LCD_WriteText((char*)buffer);
LCD_WriteData(0b11011111);//zobrazujeme trasu
LCD_WriteText("C ");
}
}[/code]
Kdyby byl ochotný někdo pomoct, rád poskytnu kompletní celý soubor.