avatar_anlhlc

Pic16F628A ile DHT22 Sensör Kullanımı Hk.

Başlatan anlhlc, 11 Ocak 2017, 15:45:04

ete

Enteresan. Başlangıçta bende aynı yere koymuştum ama isis de çalıştırınca sensör hatası meydana geliyor bu şekilde. Gerçek devrede gelmiyorsa sorun yok.

Ete

has_artvin_li

Herkese selamun aleyküm hayırlı geceler diliyorum.

Sayın ETE hocam ve  anlhlc hocam özellikle bu yükü size yüklemek istiyorum :)

Şimdi bir projemde Pic ile kullanılmak üzere DHT11 ile çalışma yapmam gerekiyor lakin bu dht11 in çalışma mantığını anlayamadım.

Datasheetine bakıyorum 1-wire iletişim ile çalıştığını söylüyor.

Reset sinyali yolluyor ardından da dht11 i okumaya geçiyor mantığında bir yazı var datasheetinde, Ama bu reset sinyalini aslında birazcık farklı tasarlamış gibi yani haberleşme pinini bir müddet lojik 1 de saklıyor sonra lojik 0 e çekiyor 40mikro saniye bilmem ne yapıyor falan...

Hadi bunlar o kadar sorunlu şeyler değil de asıl mesele ve anlamadığım kısım şurası:

4 byte alanda olmak üzere 1 byte nem tam - 1 byte nem ondalık değeri 1 byte ısı tam - 1 byte ısı ondalık değerini desimal olarak okur getirir registere yazar diyor.

Ardından da bir tane byte ile de doğru haberleşip haberleşemediğini kontrol etmeye çalışıyor bu da mantıklı yani şöyle :
nem tam + nem ondalık + ısı tam + ısı ondalık = kontrol şeklinde bir mantığa dayatmış yani sensörün yolladığı en son byte nem ve ısı tam ve ondalık değerlerinin komplesinin toplamı gibi bişiy olmuş oluyor...

Lakin owreset ve read komutları ile okuma yapıyorum hiç bir değer almıyor ? dahası var madem bu sensör 4 byte ile ısı ve nem bilgilerini veriyor yani 1 byte nem tam 1 byte nem onda ve 1 byte ısı tam 1 byte ısı onda biz bunu neden olduğu gibi şu şekilde :

PRINT AT 1,1,"NEM : ",#NEM_TAM," . ",#NEM_ONDA
PRINT AT 2,1,"ISI : ",#ISI_TAM," . ",#ISI_ONDA      yazdıramıyoruz ?

Proton basic ile yahutta mikro C ile yazılım yapabilmeye çalışıyorum bununla uğraşan kimse var ise bir el atabilir mi ?

Şöyle tepeden tırnağa bir anlatım ile anlamak istiyorum olayın mantığını Yani programın içine birilerinin yazdığı kütüphaneleri katmadan işin mantığını anlayarak özüne inerek anlamak istiyorum mümkünatı var ise ?



ete

Tamamen yüzeysel bir data sheet incelemesi yaptığını ve ne anlatıldığına çok dikkat etmediğini anlıyorum yazdıklarından.
Sensör üreten her firma farklı bir haberleşme formatı uyarlamak zorunda aksi halde diğerleri ile karışıklık yaratır. Bu firmada kendi sensörü için farklı bir yapı oluşturmuş. Her şey start sinyali ile başlıyor. Bu sanki bir hareketi referans noktasına almak gibi bir şey. Bu start sinyalini verdiğin zaman sensör okunacak duruma geiyor. Bu konuda en iyi ref bilgisi aşağıdaki linkte verilen data sheet ;
https://akizukidenshi.com/download/ds/aosong/DHT11.pdf
Start sinyali için HOST yani işlemci kartı data hattını 18 ms süre ile LOW da tutacak ve ardından Data hattını giriş yapıp bırakacak. Bu SLAVE olan sensöre okuma yapacağım bilgisini veriyor ve bu sefer hattı sensör alıyor.
BU sefer sensör aynı Data hattını 80us LOW ve 80us HIGH da tutuyor. Buda HOST'a emri aldım data ları veriyorum bilgisi oluyor.
İşte bu noktadan sonra HOST bilgileri almak zorunda. Şimdi de asıl önemli konu olan bu bilgiler nasıl alınacak ona bakalım.
LOW bilgisi , 50us LOW + 26-28us HIGH sinyalinden oluşuyor.
HIGH bilgisi, 50us LOW + 70us HIGH sinyalinden oluşuyor.
Dikkat edilirse başlangıç sinyali ikisinde de 50us lik bir LOW o halde bu bize bir sinyali belirlemede yardımcı olamayacağına göre biz bundan sonraki HIGH kısmına bakmamız gerekecek. Bir HIGH sinyali bekleyeceğiz ve süresine bakacağız Süre 70 den küçük ise bu bir LOW dur değilse HIGH dır. Bu işi kolay yapmanın bir yolu da 50us lik LOW sinyalinden sonra 40us bekleyip Data hattına bakmak olurdu. Data hattı hala 1 ise sinyal HIGH dır. Daha hattı LOW olmuş ise sinyal LOW dur demek gerekir.
İşin püf noktası burası işte.
Yapılabilecek en büyük hata bu sinyalleri OWin OWout ile okumaya çalışmak. Bu her gördüğün adamı baban sanmakla eş değer bir şey. Zira söz konusu komutlar özellikle Maxim firmasının DS serisi sensörlerini okumak için yaratılmış komutlar ve her türlü one-wire haberleşmeye uyacak diye bir kanunu yok. Onun formatı başka bunun formatı daha başka. O halde yapılması gereken şey data sheet ne diyor sa ona uymak.
Devam edelim. DHT-11 data sheet diyorki bu şekilde 40 bitlik bir data okuyacaksın.
Bunu 5 adet 8 bitlik data şeklinde okumak gerekiyor. Bu şekilde okunmuş bir data paketinde;
ilk 8 bitlik kısım sana Rutubet High.Byte kısmını veriyor. Yada tamsayı kısmını veriyor desek daha doğru olur.
İkinci 8 bitlik değer ise Rutubet in ondalık kısmı oluyor.
Üçüncü 8 bitlik değer Sıcaklık tam sayı kısmı ve dördüncü 8 bitlik değerde sıcaklık ondalık kısmını vermiş oluyor.
Son okunan bilgi ise parity byte yada doğrulama byte'ı oluyor. İlk 4 bilgiyi toplarsan toplanan bilgi sürekli olarak 8 biti aşıp aşılan kısım otomatik atılacak ve sonunda elinde 8 bitlik bir sayı kalacaktır. Bu sayı da en sondaki parity byte ile aynı olmalıdır. Değilse okuma yanlıştır deyip yeniden okuma yapılmalıdır.
Yukarıda açıklanan data formatı ile okuma örneği gerekiyor ise işe yine start sinyalinden başlayalım;

OUTPUT DTA  'data hattı çıkış yapıldı
LOW DTA       'data=low yapıldı
Pause 18       '18 ms bekle
HIGH DTA      'Data pinini High yap
Pauseus 40   '40 us bekle
INPUT DTA    'Data hattını giriş yap
WHILE DTA=0:WEND  'data=0 olduğunca bekle
PAUSEUS 85  'Data hattı High oldu 85 us daha bekle bu 80us lik LOW ve 80us HIGH sinyalini aşmak için kullanılmış oldu

Bu şekilde start sinyalini vermiş ve ardından sensörün cevabı olan 80uslik LOW ve 80us lik HIGH peryodunuda aşmış olduk.
Bu aşamadan sonra data bitleri başlayacak. Bunlarıda sırası ile almak için;
TAMRUT=0
FOR I=7 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
  WHILE DTA=0:WEND 
   Pauseus 40
  IF DTA=1 then TAMRUT.0[I]=1
  while dta=1:wend
Next

şeklinde bir kod kullandık. Burada temel fikir şu lojik bitlerin ilk 50uslik kısmı LOW dan oluşuyor. Bu süreyi HILE DTA=0:WEND ile aşıyoruz. Ardından Data hattı Lojik1 oluyor ve biz 40us bekliyoruz. Şayet lojik bit1 ise peşinden 70us lik HIGH gelecek idi ve biz 40us sonra hala 1 görmemiz lazım o data hattında . Şayet 0 görüyor isek sinyal lojik 0 demektir. İşte bunuda ,
IF DTA=1 THEN TAMRUT.0[I]=1 ile ayarlayıp 1 sinyalinin devamını bitirmesi için altına WHILE wend komutunu ekliyoruz.
Başlangıçta TAMRUT=0 verdiğimz için 1 değilse sıfır yap diye bir şart kullanmıyoruz. Sadece 1 leri ayarlıyoruz. Böylece ksıa komut ile çokca iş yapılmış oluyor.
Diğer data bitlerinin alınması da tamamen aynı mantığa dayanıyor ve sadece değişkenleri değişiyor o kadar.
Bu kadar açıklamadan sonra kendin yapabilmelisin bunu.
Ete


anlhlc

Hocam merhaba,
DHT22 sensöründen - (eksi) sıcaklık bilgisini nasıl alabiliriz.
Teşekkürler.

ete

DHT 22 sensörü *40 ile +80 derece arasında çalışıyor. Sıcaklık sıfırın üzerinde ise 15. biti daima sıfır olıuyor.
Sıcaklık eksiye düşünce 15.bit 1 oluyor . Bu senin ip ucun oluyor.
Sıcaklığı okuyacak ve Bit.15 e bakacaksın şayet 1 ise demekki sıcaklık eksi tarafta diye karar verip ona göre ekrana vereceksin.
Örnek vereyim, +17,5 derecede sensörden okunan bilgi 175 olacaktır.
Okunan bilgi binary olarak  %00000000 10101111 şeklinde olur.
-17,5 derece için sensörden okuyacağın bilgi ise %10000000 10101111  şeklinde olacaktır. Buna göre kendini ayarlarsın.

Ete

anlhlc

Cevabınız için teşekkürler hocam datasheet inden buldum 15. bit olduğunu fakat picbasic te 15. biti hangi komut ile okuyacağımı bilmiyorum. Daha önce hiç böyle bir deneme yapmamıştım. kod konusunda yardımcı olursanız sevinirim.

ete

Sıcaklık okumasında kullandığın değişken ISI diyelim. IF ISI.15 (veya daha iyisi ISI.Bit15)=1 then EKSI_SICAKLIK
şeklinde yapılabilir. Yada 15 bit 1 ise işaret eksi yapılabilir.
IF ISI.Bit15=1 then 
  Isaret="-"
else
  ISaret="+"
Endif
şeklinde de yapılır.


Ete

anlhlc

#22
Hocam kodlar şöyle
@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_OFF              '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ılMIYOR.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'***********Seri İletişim Dosyası***********
Include "MODEDEFS.BAS"

CMCON=7
DEFINE OSC 4

'***********LCD Tanımlamaları***********

  TRISA=%00000000
  TRISB=%00000000
    OPTION_REG.7=0
'****************************************************************
    PORTA=0
    PORTB=0





symbol DHT22=PORTA.1
I        VAR BYTE
TAMRUT   VAR WORD
ONDARUT VAR BYTE
TAMISI     VAR WORD
ONDAISI   VAR BYTE
CONTROL var byte
ISARET VAR BYTE
SAY VAR BYTE
SYMBOL VERI_BILGI=PORTB.6
SAY=0
VERI_BILGI=0

Basla:
IF SAY=20 THEN
  GOSUB DHT22OKU
  SAY=0
  HIGH VERI_BILGI
  PAUSE 500
ELSE
SAY=SAY+1
  GOSUB GONDER
  PAUSE 250
  LOW VERI_BILGI
ENDIF
   
     
   

Goto Basla

DHT22OKU:
           output DHT22
           DHT22=1:PAUSEUS 5
           DHT22=0
           pause 5      '1-10 ms bekle
           DHT22=1         'Data pinini High yap
           Pauseus 40      '40 us bekle
           INPUT DHT22
           PAUSEUS 5
           WHILE DHT22=0:WEND
           PAUSEUS 80

        '  IF DHT22=1 then GOTO DHT22_HATA
           
           
          TAMRUT=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND 
             PAUSEUS 30
             IF DHT22=1 THEN TAMRUT.0[I]=1
             WHILE DHT22=1:WEND
           NEXT

          TAMISI=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND
             PAUSEUS 30
             IF DHT22=1 THEN TAMISI.0[I]=1
             WHILE DHT22=1:WEND
           NEXT
         
          CONTROL=0
          FOR I=7 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND
             PAUSEUS 30
             IF DHT22=1 THEN CONTROL.0[I]=1
             WHILE DHT22=1:WEND
           NEXT
          OUTPUT DHT22
          DHT22=0
         
          ONDARUT=TAMRUT//10:TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10:TAMISI=TAMISI/10
         
          IF TAMISI.BIT15=1 THEN
           ISARET=0
           ELSE
           ISARET=1
           ENDIF
         
          RETURN
GONDER:

serout2 PORTA.0,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTA.0,396,["G","M","F",tamisi,Ondaisi,tamrut,ONDARUT,SAY,ISARET]
SEROUT2 PORTA.0,396,["G","M","F",tamisi,Ondaisi,tamrut,ONDARUT,SAY,ISARET]
SEROUT2 PORTA.0,396,["G","M","F",tamisi,Ondaisi,tamrut,ONDARUT,SAY,ISARET]
RETURN



END


Hocam bu haliyle tamisi.bit15 ten sürekli 1 bilgisi geliyor. Ayrıca simulasyonda dht22 nin sıcaklığını - ye çektiğimde örneğin -1 yaptığımda ekranda 5.8 gösteriyo sıcaklığı düşürdükçe mesela -2 yaptığımda 6.8 gösteriyor. Sorun nerden kaynaklanıyor olabilir ?

anlhlc

özür dilerim ham değerden sorgulama yaptırmadığım için sürekli 1 gösterio onu halettim fakat sıcaklık - ye düştüğünde neden 4.8 fazlasını gösterdiğini çözemedim hocam

ete

Onu bende çözemem. Neden olduğunu anlamak zor. Gerçek devredemi oluyor bu ? yoksa simulasyondamı.
Simulasyon model dosyası hatası olabilir. Bu nedenle gerçeğinde denemek gerekir
Ete

anlhlc

sıcaklık - ise ham ısı değerinden 48 çıkarttırdım şuan tüm değerlerde doğru gösteriyor. yani simulasyonda doğru gözüküyor.Programın son hali şu şekilde oldu.
@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_OFF              '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ılMIYOR.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'***********Seri İletişim Dosyası***********
Include "MODEDEFS.BAS"

CMCON=7
DEFINE OSC 4

'***********LCD Tanımlamaları***********

  TRISA=%00000000
  TRISB=%00000000
    OPTION_REG.7=0
'****************************************************************
    PORTA=0
    PORTB=0





symbol DHT22=PORTA.1
I        VAR BYTE
TAMRUT   VAR WORD
ONDARUT VAR BYTE
TAMISI     VAR WORD
ONDAISI   VAR BYTE
CONTROL var byte
ISARET VAR BYTE
SAY VAR BYTE
SYMBOL VERI_BILGI=PORTB.6
SAY=0
VERI_BILGI=0

Basla:
IF SAY=20 THEN
  GOSUB DHT22OKU
  SAY=0
  HIGH VERI_BILGI
  PAUSE 500
ELSE
SAY=SAY+1
  GOSUB GONDER
  PAUSE 250
  LOW VERI_BILGI
ENDIF
   
     
   

Goto Basla

DHT22OKU:
           output DHT22
           DHT22=1:PAUSEUS 5
           DHT22=0
           pause 5      '1-10 ms bekle
           DHT22=1         'Data pinini High yap
           Pauseus 40      '40 us bekle
           INPUT DHT22
           PAUSEUS 5
           WHILE DHT22=0:WEND
           PAUSEUS 80

        '  IF DHT22=1 then GOTO DHT22_HATA
           
           
          TAMRUT=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND 
             PAUSEUS 30
             IF DHT22=1 THEN TAMRUT.0[I]=1
             WHILE DHT22=1:WEND
           NEXT

          TAMISI=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND
             PAUSEUS 30
             IF DHT22=1 THEN TAMISI.0[I]=1
             WHILE DHT22=1:WEND
           NEXT
         
          CONTROL=0
          FOR I=7 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND
             PAUSEUS 30
             IF DHT22=1 THEN CONTROL.0[I]=1
             WHILE DHT22=1:WEND
           NEXT
          OUTPUT DHT22
          DHT22=0
          IF TAMISI.BIT15=1 THEN
          TAMISI=TAMISI-48
          ISARET="-"
          ONDARUT=TAMRUT//10
          TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10
          TAMISI=TAMISI/10
           ELSE
           ISARET="+"
          ONDARUT=TAMRUT//10:TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10:TAMISI=TAMISI/10
          ENDIF
         
         
          RETURN
GONDER:

serout2 PORTA.0,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTA.0,396,["G","M","F",tamisi,Ondaisi,tamrut,ONDARUT,SAY,ISARET]
SEROUT2 PORTA.0,396,["G","M","F",tamisi,Ondaisi,tamrut,ONDARUT,SAY,ISARET]
SEROUT2 PORTA.0,396,["G","M","F",tamisi,Ondaisi,tamrut,ONDARUT,SAY,ISARET]
RETURN



END

anlhlc

Yardımınız için teşekkürler.
İyi çalışmalar.

zeus48

Mrb arkadaşlar  Bende dht 22  eksi sıcsklık sorunu ile çok uğraştım. Dht2 ile birçok uygulama yaptım sıcsklık ve nem çok kararlı çalışıyor fakat sıcaklık '00' dan sonra '-01' olması gerekirken '-76'  derceden başlıyor ve sıcaklık düşdükce '-76 , -77,-78,-79.... bu şekilde yükselip gidiyor. Elimde 3 ad dht22 vardı kullanılmamış sıfır
hepside aynı şekilde çalıştı.  Sensörü soğutma işini buzdolabı ile yaptım. İşyerimde küçük büro tipi dolap vardı boşalttım. 1 gün kapağı açık çalışmadan beklettim sonrada sıcaklığı -5 dereceye ayarladım sensörü içine koyup gözlemledim yaklaşık 18 saatte '00' derece oldu ve sonrası eksi sıcaklığa geçti. dht22  okuma kodları birebir ete hocanın verdiği  kodlar.dht22 datasheet 'ni okusamda çok birşey anladığımı söyleyemem. Bende 3 yıldır kendimce bulduğum çözümle idare ediyorum :Çözümüm DHT22 okuduktan sonra ekrana göndermeden diyorumki eğer işaret '-' eksi ise 'tamısı=tamısı-75' kışında doğal ortamda gözlemledim doğru. Yorumu olan yada sebebini bilen arkadaşlarla paylaşırım. İyi çalışmalar.

ete

Buraya okuduğun 16 bitlik ham değerleri yazarsan daha kolay anlarız.
Biliyorsun bu sensörden 16 bitlik Rutubet değeri, 16 bitlik sıcaklık değeri ve 8 bitlik CheckSum değeri okunması gerekiyor.
Acaba sen sıcaklıkta sadece 8 bitimi değerlendiriyorsun?.
Örnek veriyorum,
0000 0010 1000 1100   0000 0001 0101 1111   1110 1110  şeklinde bir bilgi okuduğunu far edelim.
İlk 16 bit Rutubet bilgisi olacaktır. %0000 0010 1000 1100 = 652 değerini 65,2 şeklinde değerlendiriyoruz.
İkinci 16 bitlik bilgi ise Sıcaklık bilgisi olacaktır. %0000 0001 0101 1111=351 olan okunan değeri 35,1 derece olarak değerlendireceğiz. Burada yalnızca 8 biti okursan 95 desimal değeri okursun.
Yeniden değerlendir ve okuduğun ham bilgileri buraya yaz ona göre düşünelim.
Söylediğin hata hiç mantıklı değil. Bana kalırsa sonda yer alan CheckSum bilgisinide değerlendirip gelen bilginin doğru olup olmadığınıda kontrol etmelisin. KOntrolü de şöyle yap,
Temp (word değişkeni)=Rut.byte1+Rut.byte0+ISI.byte1+ISI.Byte0-1
Bu toplamayıyaptıktan sonra CheckSum=Temp.byte0  olmalıdır. Eşit değil ise okuman yanlış demektir.

Ete



zeus48

#29
Mrb arkadaşlar. ETE HOCAM  dht22 okuma değerlerini yaz demişsin yazdım.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
'----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DHT22OKU: 
          output DHT22
          DHT22=1:PAUSEUS 5
          DHT22=0
          pause 5      '1-10 ms bekle
          DHT22=1        'Data pinini High yap
          Pauseus 40      '40 us bekle
          INPUT DHT22
          PAUSEUS 5
          WHILE DHT22=0:WEND
          PAUSEUS 80

          ;IF DHT22=1 then GOTO DHT22_HATA
            
          
          TAMRUT=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
            WHILE DHT22=0:WEND  
            PAUSEUS 30
            IF DHT22=1 THEN TAMRUT.0[I]=1
            WHILE DHT22=1:WEND
          NEXT

          TAMISI=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
            WHILE DHT22=0:WEND
            PAUSEUS 30
            IF DHT22=1 THEN TAMISI.0[I]=1
            WHILE DHT22=1:WEND
          NEXT
          
          CONTROL=0
          FOR I=7 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
            WHILE DHT22=0:WEND 
            PAUSEUS 30
            IF DHT22=1 THEN CONTROL.0[I]=1
            WHILE DHT22=1:WEND
          NEXT
          OUTPUT DHT22
          DHT22=0
          IF TAMISI.BIT15=1 THEN
          ISARET="-"
          ONDARUT=TAMRUT//10
          TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10
          TAMISI=TAMISI/10
          ELSE
          ISARET="+"
          ONDARUT=TAMRUT//10:TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10:TAMISI=TAMISI/10
          ENDIF 
        
        
          RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Powered by EzPortal