ds18b20 ısı olçme sorunu LÜTFEN YARDIM.

Başlatan yasocan100, 19 Aralık 2014, 00:34:43

yasocan100

Öncelikle herkese merhabalar.

  neredeyse 3 senedir electronic işi ile kendi çapımda ugrasıyorum. her sorunumda bir cozum bulabildim. taki bu ds18b20 sensorunu alana kadar.
ISIS te simulasyonunu kurdum internettende arastırdıgım ve yukarıdada olan ds18b20.c codunu yazdım fakat bir turlu sıcaklıgı lcd ye okutamıyorum. sensorun dq bacagından gelen yolda hep 4.99v degeri alıyorum.pull up dırencınıde yaptım.

LUTFEN bilen arkadaşlar varsa su sorunu cozmemde yardımcı olursanız cok sevinirim.

DS18B20 CODE;

#define ONE_WIRE_PIN PIN_E2
void onewire_reset()

{
output_low(ONE_WIRE_PIN);
delay_us( 500 ); //1-wire resetleme için sıfıra çekilir
output_float(ONE_WIRE_PIN); //1-wire bir yapılır
delay_us( 500 ); // sensörün hazırlanması için beklenir.
output_float(ONE_WIRE_PIN);
}

void onewire_write(int data)
{
int count;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // Sensöre yazma işlemine başlamak için  1-wire sıfıra çekilir.
output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // yazılacak bilgi 1-wire'da
delay_us( 60 ); // Yazma işlemi zamanı doldurulur.
output_float(ONE_WIRE_PIN); // 1-wire bir yapılır,
delay_us( 2 ); // 1us'den fazla beklenir.
}
}

int onewire_read()
{
int count, data;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); //Sensördem okuma işlemi içinl 1-wire sıfıra çekilir.
output_float(ONE_WIRE_PIN); //1-wire bir yapılır,
delay_us( 8 ); // Sensörün kendine gelmesi beklenir,
shift_right(&data,1,input(ONE_WIRE_PIN)); // sonuc bilgisi alınır.
delay_us( 120 ); //Okuma işlemi zamanı doldurulur.
}
return( data );
}

float ds1820_read()
{
int8 busy=0, temp1, temp2;
signed int16 temp3;
float result;
onewire_reset();
onewire_write(0xCC);
onewire_write(0x44);
while (busy == 0)
busy = onewire_read();
onewire_reset();
onewire_write(0xCC);
onewire_write(0xBE);
temp1 = onewire_read();
temp2 = onewire_read();
temp3 = make16(temp2, temp1);
result = (float) temp3 / 2.0;//18b20 icin
//result = (float) temp3 / 2.0;//18s20 icin
delay_ms(200);
return(result);
}


HEX'İ OLAN CODE;


#DEVICE pic16F877A
#DEVICE pic16F877A, WDT_OFF
#DEVICE pic16f877A, PWRT_ON
#DEVICE pic16F877A, PROTECT_OFF
#DEVICE pic16F877A, XT_OSC
#DEVICE pic16F877A, BOD_ON

#include <main.h>
#include <ds18b20.c>
#include <LCD.C>

float temp;

void main()
{
   lcd_init();
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);

   while(TRUE)
   {
      temp = ds1820_read();
      printf(lcd_putc,"\fSicaklik:\n %3.1f derece",temp);
      delay_ms(300);
   }

}
İletiyi düzenle



Powered by EzPortal