ONE-WİRE ( tek hatlı iletişim) hakkında

Başlatan Mucit23, 12 Ağustos 2010, 14:16:38

Mucit23

merhaba arkadaşlar şu ONE-WİRE sistemi hakkında pic basicle yapılmış örnek kod veya uygulama arıyorum Sistemin çalışma mantığını anlamam için bu kodlara ihtiyacım var Elinizde varsa paylaşırsanız çok sevinirim.
İyi günler

eozkantar

18b20 ısı sensörü ile yapılmış projelere bakabilirsin

hkalaycioglu

'''''''''''''[ Variables ]''''''''''''''''''''
'

romData   VAR   BYTE(6)   ' ROM data from DS1820
         ' device check return ocde
k   var   byte   'the read part of the key code
l   var   byte   'the index byte it's checking against the eeprom with
m   var   byte   'used to scroll through the EEPROM
v   var   byte   'used to denote validity


'''''''''''''[ Initialization ]'''''''''''''''
'
Initialize:
  High PORTB.2                  'show we're alive!
  Pause 2000                  ' wait for rest of circuit to power up
  Low PORTB.2                  'we're ready!
  EEPROM 00,[$00,$00,$0A,$05,$D8,$ED]         ' s/n 00000A05D8ED
  EEPROM 06,[$FF,$FF,$FF,$FF,$FF,$FF]         'empty s/n
  EEPROM 12,[$FF,$FF,$FF,$FF,$FF,$FF]
  EEPROM 18,[$FF,$FF,$FF,$FF,$FF,$FF]
  EEPROM 24,[$00,$00,$00,$02,$CB,$80]         ' s/n 00000002CB80
  EEPROM 30,[$FF,$FF,$FF,$FF,$FF,$FF]
  EEPROM 36,[$00,$00,$00,$02,$C9,$30]
  EEPROM 42,[$00,$00,$0A,$05,$90,$5D]
  EEPROM 48,[$FF,$FF,$FF,$FF,$FF,$FF]
  EEPROM 54,[$FF,$FF,$FF,$FF,$FF,$FF]

'''''''''''''[ Main Code ]''''''''''''''''''''

Main:

  GoSub DeviceCheck   
  IF (l <> %11) Then DisplayROM         'if we see a key or something on the probe, check it
goto main               'loop forever

DisplayROM:
  l=0                  'reset dummy variable
  High PORTB.2               'show we're reading the iButton
  pause 200               'wait for the key to stop moving on the contact
  OWOUT PORTB.7,%0001,[$33]         ' send Read ROM command
  OWIN  PORTB.7,%0010,[l,romData(5),romData(4),romData(3),romData(2),romData(1),romData(0),l]


gosub checkID               'hummm i wonder if it's a valid key?

Low PORTB.2               'show we've stopped reading it
if v=1 then
   toggle PORTB.4            'if we've a valid button, toggle switch RB4 (pin 10)
   High PORTB.1            'also pulse RB1 (pin 9) for valid read
   Pause 1000            'wait for button to be removed
   low PORTB.1            'now make RB1 low again (pin 9)
   ENDIF
GoTo Main               'start process again


DeviceCheck:
  l = 0
  OWOUT PORTB.7,%0001,[$F0]      ' reset and start search
  OWIN  PORTB.7,%0100,[l.Bit1,l.Bit0]   ' recieve notification somethin is there by reading twice
               'that the input see's something
  Return


checkID:
l=0               'use dummy variable l
v=0               'set validation to zero (NO)
IF (romData(0)=$FF) THEN l=60      'if the first bit of ID recieved is FF then the rest of the
               'key will not be a real key so don't bother testing
checky:
   IF (l==60) THEN return      'if we're at the 60th position in EEPROM, there wont be any
               'other place to look for keys, so quit checking
   v=1            'pretend for now the key works... and see if it stays that way
   FOR m = (0+l) TO (5+l)      'm is the EEPROM address compared to the index we are using
               'so we start checking from 0 to 5 bytes every 'l' index
      read m,k      'read the EEPROM at the address m into k
      IF (k <> romData(m-l)) THEN v=0
               'if the byte does not match what was read, validity = zero
      NEXT         'scroll through all the numbers in that ID index as the
               'first byte may match but the others may not.
      l=l+6         'set l to start checking at the next index
   IF v=0 THEN checky      'but only if the validity is zero do we check again
return               'otherwise, we have a valid key









bu devreyı yaptım çalısıyor akbıllerın serı numarasını alıyor eepromda yazılı numara ile karsılastırıp portb.1 ını aktıf edıyor bu kodları ınceleyebılırsın



Mucit23

Arkadaşlar one wire iletişim hakkında bazı sıkıntılar yaşıyorum. Herhangi rom kodunu bildiğimiz ısı sensöründen ısı bilgisini almak için sırasıyla hangi işlemleri yapmamız gerekiyor. burada çok sıkıntım var
Mesela ds18b20 den sıcaklık bilgisini almak istiyorum. Elimde sensöre ait rom kodu var

OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$44]
OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$BE]

Başka bi yerde gördüm sensörden ısı bilgisin almak için ilk önce yukarıdaki kodu gönderiyorlar
Yukarıdaki kod ile ilgili anlamadığım bazı noktalar var
$55 in match adresi olduğunu biliyorum.  O koddan sonra yazılanlardan hangileri cihazın 64 bitlik rom kodu oluyor yukarıda 10 bitlik bir kod var.
İki adet cihazdan herhangi birinin diyelim ısı bilgisini almak için önce ir reset sinyali gönderiliyor sonra cihazın seri numarası gönderiliyor. ondan sonra ısı bilgisi alınıyor. Reset sinyali verildikten sonra diğer cihazın rom kodu vs işlemler sürüp gidiyor.
Benim bildiğim temel olarak işlem sırası böyle olması gerekiyor fakat bunları bir türlü koda dökemedim.
İsisteki sensörlerin hepsinin rom kodu aynı sonradan farkettimki rom kodlarını sensöre çift tıklayarak değiştirebiliyoruz.
Mesela reset sinyali olarak ne göndermemiz gerekiyor. Yukarıda verdiğim kodda rom kodu nereye yazılıyor. Bunun gibi temel bilgilere ihtiyacım var
Bu işin mantığını kavramış arkadaşlardan yardım istiyorum.

M_B

Alıntı yapılan: mucit23 - 20 Aralık 2010, 19:55:09
OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$44]
OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$BE]

Hocam Ds18B20 de birden fazla sensorden ısı almak ıcın yapılmasi gereken işlemler.


Eger cihazın seri nosunu ( rom kodu )  biliyorsaniz programa onceden eklemeniz gerekir. (pic  Eepromunada da olabilir ) ( Ben pic in epromunaa kaydetmiştim )

1-) Diyelim biliyorsunuz.
Once $55 verisini gonderin.
Ardından
cihazın seri nosu
sonra
$44 verisini gonderin.
Tekrardan $55 verisini gonderin.
Ardından
tekrar cihazın seri nosu  gonderin.
Son olarakta
$BE verisini gonderin ve sonra okuma işlemine gecin.
Eger dikkat etmişseniz yukarda vermiş oldugunuz iki satır da bu soyledıklerım gecerli.

2-) Seri noyu bilmiyorsak yapılacak işlem. ( Not: bu işlemi sensor kayıt etme olarak ta kullanabilirsiniz )
$33 verisini gonderip
sonra 8 kere sensoru okuyoruz.
Bu her okumada gelen verileri eproma kaydederseniz sonra da sıcaklık okumada ıse eepromdan seri noyu tek tek alıp sıcaklık okuması yapabilirsiniz.

Not: 2. secenegi ben su sekilde yapmıstım.
Once Pic ilk defa ( Programattıkdan sonra ilk besleme anı )  calıstırıldıgında ekrana sensor kaydı yapın diye bir mesaj geliyor.
ve Sensorleri tek tek tanıtıp eeproma kaydediyorum. Tum kayıt sonunda  tum sensorlerı yerıne taktıgımda sıcaklıkları okuyabıldım.
Artık ıstediginiz kadar acın kapatın bır daha sensor kayıt ekranı gelmıyor cunku programı yazarken eepromun bellı bır adresıne bır deger verıp sonra kayıtlar bıttıkten sonra degerı degıstırdıgım ıcın artık sensor kayıt fonk. dallanmıyor.

Umarım anlatabilmisimdir.  :Kolay gelsin
Mehmet

Not: Ben bu uygulamayı C de yaptım ve calıstırdım.







Oncelıkle

Hocam yukarda vermiş oldugunuz kod
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Hocam çok teşekkürler kafaya koymuşum kendim Wire sistemini tamamiyle öğrenicem sizin başınızı ağrıttım
Bu yukarıdaki verdiğim kod sadece bir sensör için geçerli değilmi İkinci sensör için ilk sensörün okuma ve hesaplama işlemleri bittikten sonra yukarıdaki kodlarla yeniden okuma yapmamız gerekiyor. Sadece ikinci sensörün rom kodu yazıcak.
Aslında bi sensörleri okutup çalışır basit bi uygulama yapsam daha gerisi çok kolay olur kendimi geliştiririm bu konuda
Anlamadığım bi nokta var Sensörden rom kodunu alırken neden 8 defa okuma yapıyoruz. Bir kere yapsak olmuyormu 8 defa okumadaki amaç nedir.

M_B

Evet hocam yukardaki kod bir sensor icin gecerlidir.
Hocam Rom kodu 64 bit  yani 8 tane 8 byte.
Hocam Basicte one wire ile ilgili  bir komutla 64 biti birden okuyabiliyorsa  sorun olmaz. Basic hakkında fazla bilgi sahibi değilim.
Proteusta uygulama yapıp deneyebilirsiniz Yalnız rom kodlarını degıstırerek.

kolay gelsin


İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

anladım demek istediğinizi
Aslında gerek yok hocam
Veri adında bir 8 dizilik bir değişkenimizin olduğunu düşünürsek
OWIN DQ, 0, [STR VERI\8]
yukarıdaki komutla tek bir okumada 64 bitlik değeri sırasıyla dizi değişkenlere yerleştiriyor.

sigmoid

1- wire hakkında ayrıntılı bilgi için maximin uygulama notlarını karıştırmanı tavsiye ederim. Tüm mantığı orada. Yüzlerde uygulama notu var.
Onlardan biri de bu http://www.maxim-ic.com/app-notes/index.mvp/id/2420

Mucit23

@M_B
Hocam teşekkür ederim. Sayende ilk uygulamamı yaptım. İsiste çalıştırdım. Sorun yok gibi Bazı gözlemlerim oldu sizlere danışmak istiyorum.
İlk önce yazdığım kodları vereyim
'****************************************************************
'*  Name    : WİRE.BAS                                          *
'*  Author  : [FERHAT YOL]                                      *
'*  Notice  : TEK KABLO İLE İKİ ADET SENSÖR OKUMA İŞLEMİ        *
'*          :                                                   *
'*  Date    : 19.12.2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

PORTA=0:PORTB=0
TRISA=0     
TRISB=%00000001 
'-----------------------------------------------------------------
@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılmıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
'-----------------------------------------------------------------
DEFINE LCD_DREG	PORTB	'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT	4              'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG	PORTB	'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT	3	'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTB    'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    2             'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG	PORTB	'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT	1	'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS	4	'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES	2              'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------------
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'----------------------------------------------------------------------------
DQ              VAR PORTB.0
ID               VAR BYTE[8]
START         VAR BYTE
TEMP1        VAR WORD
TEMP2        VAR WORD
ISI1            VAR WORD        
FLOAT1       VAR WORD 
ISI2            VAR WORD
FLOAT2       VAR WORD       
DERECE       CON 223        

'-----------------------------------------------------------------------------
CLEAR 
PAUSE 500
LCDOUT $FE,1

BASLA:
OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$44] 
OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$BE] 
OKU_1:
    OWIN DQ, 4, [START]
    IF START=0  THEN OKU_1
    OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$BE]
    OWIN DQ, 2, [Temp1.LOWBYTE,Temp1.HIGHBYTE]
    GOSUB HESAP1
IKINCI:
OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$44] 
OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$BE] 
OKU_2:
    OWIN DQ, 4, [START]
    IF START=0  THEN OKU_2
    OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$BE]
    OWIN DQ, 2, [Temp2.LOWBYTE,Temp2.HIGHBYTE]
    GOSUB HESAP2
    GOSUB EKRAN
GOTO BASLA
HESAP1:               
    FLOAT1 = (TEMP1*10)/16        
    ISI1=FLOAT1/10  
    RETURN  
HESAP2:
    FLOAT2 = (TEMP2*10)/16        
    ISI2=FLOAT2/10  
    RETURN   
EKRAN:
    LCDOUT $FE,$80,"1.SENSOR=",DEC2 ISI1,",",DEC1 FLOAT1,DERECE,"C"
    LCDOUT $FE,$C0,"2.SENSOR=",DEC2 ISI2,",",DEC1 FLOAT2,DERECE,"C"
    RETURN
END

Hocam programı böyle yazdım. Çalışıyor bu haliyle
Yalnız şöyle bişey var örnekleme zamanı çok düşük. Yani ekranı çok geç güncelliyor. Program biyerde takılıp kalıyordu. Buldum nerede takıldığını
OKU_1 ve OKU_2 etiketleri altında sensörlerin start biti kontrol ediyor. Sensörler meşgul olduğu zaman start biti 0 oluyor ve start biti 1 olana kadar bekliyor. Bu yüzden program ağır çalışıyor .
Ben bu kodları kaldırdığım zaman sorunda ortadan kalkıyor.
Sensörün meşgul olup olmadığının kontrol edilmesi çok önemlimidir. Ne gibi faydaları vardır. Bunları bilmek isterim doğrusu.
Program son haliyle aşağıdaki gibi yaptım böyle daha iyi çalışıyor
'*********************************************************************
'*  Name    : WİRE.BAS                                                                                                     *
'*  Author  : [FERHAT YOL]                                                                                                *
'*  Notice  : TEK KABLO İLE İKİ ADET SENSÖR OKUMA İŞLEMİ                                           *
'*          :                                                                                                                           *
'*  Date    : 19.12.2010                                                                                                    *
'*  Version : 1.0                                                                                                                *
'*  Notes   :                                                                                                                       *
'*          :                                                                                                                           *
'*********************************************************************
TRISA=0     
TRISB=%00000001 
PORTA=0:PORTB=0
'-----------------------------------------------------------------
@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılmıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
'-----------------------------------------------------------------
DEFINE LCD_DREG	PORTB	'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT	4              'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG	PORTB	'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT	3	'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTB    'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    2             'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG	PORTB	'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT	1	'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS	4	'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES	2              'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------------
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'----------------------------------------------------------------------------
DQ              VAR PORTB.0
ID               VAR BYTE[8]
START         VAR BYTE
TEMP1        VAR WORD
TEMP2        VAR WORD
ISI1            VAR WORD        
FLOAT1       VAR WORD 
ISI2            VAR WORD
FLOAT2       VAR WORD       
DERECE       CON 223        

'-----------------------------------------------------------------------------
CLEAR 
PAUSE 500
LCDOUT $FE,1

BASLA:
OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$44] 
OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$BE] 
OKU_1:
    OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$BE]
    OWIN DQ, 2, [Temp1.LOWBYTE,Temp1.HIGHBYTE]
    GOSUB HESAP1
IKINCI:
OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$44] 
OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$BE] 
OKU_2:
    OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$BE]
    OWIN DQ, 2, [Temp2.LOWBYTE,Temp2.HIGHBYTE]
    GOSUB HESAP2
    GOSUB EKRAN
GOTO BASLA
HESAP1:               
    FLOAT1 = (TEMP1*10)/16        
    ISI1=FLOAT1/10  
    RETURN  
HESAP2:
    FLOAT2 = (TEMP2*10)/16        
    ISI2=FLOAT2/10  
    RETURN   
EKRAN:
    LCDOUT $FE,$80,"1.SENSOR=",DEC2 ISI1,",",DEC1 FLOAT1,DERECE,"C"
    LCDOUT $FE,$C0,"2.SENSOR=",DEC2 ISI2,",",DEC1 FLOAT2,DERECE,"C"
    RETURN
END


Evet arakadaşlar programsal olarak sizlerinde tecrübelerinizi almak isterim. Şöyle olsaydı daha iyi olurdu diyebileceğiniz biyer varmı.
http://hotfile.com/dl/90989484/0f98692/Wire.rar.html

M_B

@mucit23 hocam yardım cı olabildiysem ne mutlu bana.
Projenizi sonuclandırdıgınız ıcın sevındim.
Hocam Datasheette o sekilde gosteriyor. ( Datasheet 18 sayfadaki tabloda ) Dediğiniz gibi ben deneme yapmadım. Gercekte her iki turlu de deneyip denemek lazım. 
Kolay gelsin.

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Bilmiyorum hocam. Bununla ilgili birkaç tecrübem daha var mesela ds1302 ile ds18b20 çalıştığı zaman ds1302 yavaşlıyor. İki sensör olduğu zaman daha yavaşlıyacaktır. Mesela tarama mantığıyla çalışan displayli saat ve termometrelerde ısı okuma yapıldığı zaman ekranda titreme oluşuyor. Ben bi multiplex saat yaptım sırf bu olmasın diye LM35 kullanmıştım ısı sensörü olarak. Ama Bahsettiğim kodları silince hiçbiri olmuyor bu dediklerimin hepsi gayet iyi çalışıyor.
Birde hocam şöyle bişey var. Devreyi ilk çalıştırdığımda ekranda sıcaklıklar 85 gözüküyor. Sonradan düzeliyor. Birde bunu çözemedim. Ds18B20 neden ilk okumada yanlış sıcaklık verir.

Hocam bu kadarını yaptıktan sonra herhalde sensör kayıt etme menüsü oluşturmada eproma kaydetmede sorun yaşamam. Zor olanı hallettim sayılır.

M_B

Hocam  Ben 3 sensorlu olarak yaptım ve ekranda herhangı bır sorun olmadı yalnız ısı değişimleri anında ekrana yansımıyordu bunu da normal olarak karsıladım cunku bır sensoru okuması 750ms gıbı bır bekleme suresı var. 3 tane olunca tabı ekrana gelen sure degısıyor.
Birde hocam ilk actıgınızda ekranda 85 gormeniz normaldir. Sensorun kendi katalogunda da yazıyor. Bu nu su sekilde aşabilirsiniz ilk okuma esnasında hemen ekrana dereceyi yansıtmazsınız.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Anladım dediğinizi eğer ds1302 ile birkaç adet sensörü tek hattan okumaya kalkışırsak yani kataloğdaki yazılan bilgilere uyarsak saat stabil çalımaz diye düşünüyorum. En iyisi deneyip görmek.

M_B

Evet hocam orası oyle ama programda bır takım taklalar atarak saatın ekranda duzgun calısmasını gorebılırsınız. ( Saniye hareket kısmı )

Benim yaptıgım projenin ana bolumu
while(1)
			{
	ana:
	Tarihgoster();
	Saatgoster();
		

	if(OK==1)  // menuye girme kismi
				{
				Menu();
				goto menu_don;
				}
		
	Saatgoster();
						
				SicaklikOku(0x00);
	Saatgoster();
		 		nokia_gotoxy(2,3);
				nokia_printchar("Ic Isi");
				nokia_gotoxy(43,3);
				nokia_printchar(address);
				nokia_gotoxy(62,3);
				Derece();
		if(OK==1)  // menuye girme kismi
				{ 
				Menu();
				goto menu_don;
				}
	Saatgoster();
				SicaklikOku(0x08);
										Saatgoster();
				nokia_gotoxy(2,4);
				nokia_printchar("DisIsi");
				nokia_gotoxy(43,4);
				nokia_printchar(address);
				nokia_gotoxy(62,4);
				Derece();
		if(OK==1)  // menuye girme kismi
				{
				Menu();
				goto menu_don;
				}
	Saatgoster();
				SicaklikOku(0x10);
										Saatgoster();
				nokia_gotoxy(2,5);
				nokia_printchar("Motor");
				nokia_gotoxy(43,5);
				nokia_printchar(address);
				nokia_gotoxy(62,5);
				Derece();
		if(OK==1)  // menuye girme kismi
				{
				Menu();
				goto menu_don;
				}
				Motor_isi_Kontrol();			
			}

Hocam gordugunuz gibi ana dongu ıcınde sıcaklıkları okuduktan sonra hemen arkasında saat fonksıyonunu cagırıp ekrana yansıtıyorum
yoksa 3 sensorun okunmasını bekledıkten sonra saatı okuyup ekrana verirsem saatın saniyesinde hatalar meydana geliyor.( gecikmeler oluyor)

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet