Witam,
Mam problem z czujnikiem temperatury DS18B20.
Tak przeszukałem forum, przeczytałem kilkanaście tematów, nic nie pomogło.
Sprawdzałem parę bibliotek, efekty podobne.
Wspomnę tylko, że czujnik jest sprawny na 100%, w Bascomie odczytuję temperaturę bez problemu.
Do rzeczy. W chwili obecnej mogę odczytać ROM code a nawet sam Scratch.
Przy konwersji temperatury (fragment kodu):
dostaję wartości standardowe 50h(LSB) 05h(MSB) czyli temp = 85 st. C.
Metodą prób i błędów w pewnych momentach dostaję wartości FFh (LSB) i 07h (MSB) czyli de facto nic nie dostaję. Wygląda to tak jakby konwersja w ogóle nie występowała?
Proszę o jakieś wskazówki. Pół nocy zmarnowane
Mam problem z czujnikiem temperatury DS18B20.
Tak przeszukałem forum, przeczytałem kilkanaście tematów, nic nie pomogło.
Sprawdzałem parę bibliotek, efekty podobne.
Wspomnę tylko, że czujnik jest sprawny na 100%, w Bascomie odczytuję temperaturę bez problemu.
Do rzeczy. W chwili obecnej mogę odczytać ROM code a nawet sam Scratch.
Przy konwersji temperatury (fragment kodu):
while(1){ //16MHz
owire_reset(); // sekwencja inicjalizująca
owire_write_byte(0xCC); // rozkaz pomiń ROM
owire_write_byte(0x44); // rozkaz konwertuj temperaturę
for(i=0; i<28;i++) // Cala petla daje 470ms dla 16MHZ zewn. kwarc
{
owire_delay(65535);
}
owire_delay(45020); //jest to wartsc 470 ms(28*65535+45020) !? 1us = 4;
//_delay_ms(250);
//_delay_ms(250);
//_delay_ms(250);
owire_reset();
owire_write_byte(0xCC); // rozkaz pomiń ROM
owire_write_byte(0xBE); // rozkaz umożliwiający odczytanie temperatury
//_delay_ms(250);
lsb = owire_read_byte(); // odczytanie młodszych bitów temperatury
msb = owire_read_byte(); // odczytanie starszych bitów temperatury
//_delay_ms(250);
//_delay_ms(250);
//_delay_ms(250);
dostaję wartości standardowe 50h(LSB) 05h(MSB) czyli temp = 85 st. C.
Metodą prób i błędów w pewnych momentach dostaję wartości FFh (LSB) i 07h (MSB) czyli de facto nic nie dostaję. Wygląda to tak jakby konwersja w ogóle nie występowała?
Proszę o jakieś wskazówki. Pół nocy zmarnowane
