avatar_Mucit23

DS1820 İle 18B20 arasındaki okuma farkı nedir

Başlatan Mucit23, 05 Kasım 2011, 11:09:02

Mucit23

Merhabalar Ete hocam
Eski malzemelerimi karıştırırken birden elimde 3-4 tane Ds1820 birikti. Bu sensörlerin sağlamlığına bakmak istiyorum.
   18B20 ile 1820 arasında okuma arasında farklılıklar var. Bu farklılıklar nelerdir.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

DS18B20 nin nasıl okunduğu ve ham değerden sıcaklığın nasıl hesaplandığını biliyorsun ona hiç değinmeyeceğim.
DS1820 biraz farklı bir sensör. Fark okuma kısmında çok az ama hesap kısmı tamamen farklı. Aşağıda bir örnek veriyorum.

Ete


SENSOROKU:      
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIn    Comm_Pin, 0, [HAM.LOWBYTE, HAM.HIGHBYTE, Skip 4, Kalan, Sayac]  'fark bu satırda iki parametre ilave ediliyor.
           GOSUB   Hesapla
           RETURN
   
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       HAM=~HAM+1
    endif
   
    ISI = (((HAM) * 50) - 25) + (((Sayac - Kalan) * 100) / Sayac)
    ISI2 = (ISI //100)/10
    ISI1=ISI/100
    RETURN

Mucit23

Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Mucit23

Hocam Sizin displayli saat ve termometre devrenize bu sensörü eklemeye çalışıyorum.
Verdiğiniz örnek kodu programa ekledim.

PORTA=0:portb=0 'bu versiyonda saat sürekli okunuyor. Orta ledlerde hiç sorun yok.    
TRISB=0         'buda güzel çalışıyor bence  hemde en güzeli 
TRISA=%11100000 
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'-----------------------------------------------------------------
DEFINE OSC 4
'-------------------------------------------------------------------------
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%10000101   'Pull up dirençleri İPTAL- Bölme oranı 1/64.
INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif
TMR0=0
CMCON=7 
'----------------------------------------------------------------------------
Comm_Pin    VAR PortA.4     ' One-wire Data-Pin "DQ" PortB.0 da
Busy        VAR BIT         ' Busy Status-Bit
POZ         VAR BIT
Z           VAR BIT
W           VAR BIT
U           VAR BIT
T           VAR BIT
GOR         VAR BYTE
SYC         VAR BYTE
KALAN       VAR BYTE
HAM         VAR WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
ISI2        VAR WORD        ' ISI2 Değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD 
Y           VAR BYTE 
SAYI        VAR BYTE   
SIGN_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1           ' Negatif_Cold = 1
Deg         CON 223         ' ° işareti
SIGN        VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR BYTE         ' Div32 bit hesap için geçici değişken
SAYAC       VAR BYTE 80
SN          VAR BYTE
DAK         VAR BYTE
SAAT        VAR BYTE
GUN         VAR BYTE
AY          VAR BYTE
YIL         VAR BYTE
MEM         var byte '
EKRAN_ZAM   var byte '
SUM         VAR BYTE
EKRAN_ISI   VAR BYTE
ONLAR       VAR BYTE
BIRLER      VAR BYTE
ESN         VAR BYTE
'---------------------------------------------
SYMBOL  DTA=PortB.0
SYMBOL  CLK=PORTB.1
symbol  ST=PORTB.2
SYMBOL  RTC_DTA=PORTA.0
SYMBOL  RTC_CLK=PORTA.1
SYMBOL  RTC_RST=PORTA.2
symbol  SEC   =PORTA.5 
SYMBOL  ASAGI =PORTA.6
SYMBOL  YUKARI=PORTA.7
'-----------------------------------------------------------------------------
CLEAR  'tüm değişkenler sıfırlandı
EKRAN_ZAM=10  'saat EKRANDA KALMA SÜRESİ
EKRAN_ISI=5   'sıcaklık EKRANDA KALMA SÜRESİ BUNLARI DEĞİŞTİREBİLİRSİNİZ.
SUM=EKRAN_ZAM+EKRAN_ISI
IF sec=0 then ZAM_AYAR
ILK:
gosub ekran0
gosub sensoroku
low RTC_RST
low RTC_CLK
GOSUB GECIKME
'-----------------------------------------------------------------------------
HIGH PORTA.3
gosub ZAMAN_OKU:esn=SN
BASLA:
        GOSUB ZAMAN_OKU
        IF SAYAC=30 THEN LOW porta.3
       
        IF Y=SUM THEN Y=0
        IF Y>(EKRAN_ZAM) AND Y<SUM THEN
         if y=(EKRAN_ZAM+1) then GOSUB SENSOROKU
         GOSUB EKRAN1
        ENDIF
       
        if esn=sn then atla
        Y=Y+1 : ESN=SN : SAYAC=0
        IF Y<=EKRAN_ZAM THEN
           HIGH porta.3
           GOSUB EKRAN0
        ENDIF           
     
ATLA:  if SEC=0 THEN AYAR  'MODE TUŞUNA BASILMIŞ İSE AYAR'A GİT
       
       GOTO BASLA
'-----------------------alt programlar-------------------------------------------       
TEKRAR:
       SHIFTOUT DTA,CLK,1,[SAYI]
       RETURN
BAK_0:
       GOSUB AL
       IF Z=1 AND W=1 THEN SAYI=0 
       RETURN
BAK_1:
       GOSUB AL
       IF Z=1 AND U=1 THEN SAYI=0             
       RETURN
BAK_2:
       GOSUB AL
       IF Z=1 AND T=1 THEN SAYI=0             
       RETURN
     

EKRAN0:         
       
        X= DAK DIG 0:GOSUB BAK_1:GOSUB TEKRAR
        X= DAK DIG 1 :GOSUB BAK_1:GOSUB TEKRAR
        u=0
        X= SAAT DIG 0 :GOSUB BAK_0:GOSUB TEKRAR
        X= SAAT DIG 1:GOSUB BAK_0:GOSUB TEKRAR
        w=0
       HIGH st:PAUSEUS 2:LOW st
       RETURN
       
AL:    LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN
     

EKRAN1:LOW PORTA.3
       X=11:GOSUB AL:GOSUB TEKRAR
       X=10:GOSUB AL:GOSUB TEKRAR
       
       x=(ISI DIG 0):GOSUB AL:GOSUB TEKRAR
       x=(ISI DIG 1):GOSUB AL:GOSUB TEKRAR
       HIGH st:PAUSEUS 2:LOW st
       RETURN
       
EKRAN2:IF POZ=0 THEN HIGH porta.3
       X= YIL DIG 0:GOSUB BAK_2:GOSUB TEKRAR
       X= YIL DIG 1:GOSUB BAK_2:GOSUB TEKRAR
       T=0
       X= AY DIG 0:GOSUB BAK_1:GOSUB TEKRAR       
       X= AY DIG 1:GOSUB BAK_1:GOSUB TEKRAR
       U=0     
       X= GUN DIG 0:GOSUB BAK_0:GOSUB TEKRAR
       X= GUN DIG 1:GOSUB BAK_0:GOSUB TEKRAR
       w=0
       HIGH st:PAUSEUS 2:LOW st   
       RETURN 
       
EKRAN_3:

        X= SN DIG 0:GOSUB BAK_1:GOSUB TEKRAR
        X= SN DIG 1 :GOSUB BAK_1:GOSUB TEKRAR
        u=0
        SAYI=0:GOSUB TEKRAR
        SAYI=SUM:GOSUB TEKRAR
        w=0
       HIGH st:PAUSEUS 2:LOW st
       RETURN           
'----------------------------------------------------- 
ZAM_AYAR:
        LOW PORTA.3:SN=0:POZ=1:SUM=6
        SN=EKRAN_ZAM:GOSUB EKRAN_3
        WHILE SEC=0:WEND
       
ZAM_BIR:
        W=1
        IF SEC=0 THEN ZAM_IKI
        IF YUKARI=0 THEN
          IF Z=0 THEN sn=SN+1
          IF SN=31 THEN SN=0       
        ENDIF             
        IF ASAGI=0 THEN
           IF Z=0 THEN SN=SN-1
           IF SN=255 THEN SN=30
        ENDIF
        Z=1-Z
        GOSUB EKRAN_3       
        GOSUB GECIKME
        GOTO ZAM_BIR
       
ZAM_IKI:
        EKRAN_ZAM=SN:SUM=91
        SN=EKRAN_ISI:GOSUB EKRAN_3
        WHILE SEC=0:WEND
       
ZAM_UC:
        W=1
        IF SEC=0 THEN ZAM_DORT
        IF YUKARI=0 THEN
          IF Z=0 THEN sn=SN+1
          IF SN=31 THEN SN=0       
        ENDIF             
        IF ASAGI=0 THEN
           IF Z=0 THEN SN=SN-1
           IF SN=255 THEN SN=30
        ENDIF
        Z=1-Z
        GOSUB EKRAN_3       
        GOSUB GECIKME
        GOTO ZAM_UC       
       
ZAM_DORT:
         EKRAN_ISI=SN
         SUM=EKRAN_ZAM+EKRAN_ISI
         Z=0:W=0:POZ=0
         GOTO ILK       
AYAR: 
       LOW PORTA.3:SN=0:POZ=1
       gosub ekran0
       WHILE SEC=0:WEND
HOUR:  W=1
       LOW PORTA.3
       IF SEC=0 THEN MINBIR
       IF YUKARI=0 THEN
          IF Z=0 THEN SAAT=SAAT+1
          IF SAAT=24 THEN SAAT=0       
        ENDIF   
        IF ASAGI=0 THEN
           IF Z=0 THEN SAAT=SAAT-1
           IF SAAT=255 THEN SAAT=23
        ENDIF
        Z=1-Z
        GOSUB EKRAN0   
        GOSUB GECIKME
        GOTO HOUR
       
MINBIR: W=0:Z=0
        GOSUB EKRAN0
        WHILE SEC=0
        WEND
       
MINUTE: U=1       
       LOW PORTA.3
       IF SEC=0 THEN ara
        IF YUKARI=0 THEN
           IF Z=0 THEN  DAK=DAK+1
           IF DAK=60 THEN DAK=0
        ENDIF
        IF ASAGI=0 THEN
           IF Z=0 THEN  DAK=DAK-1
           IF DAK=255 THEN DAK=59             
        ENDIF
        Z=Z-1
        GOSUB EKRAN0
        GOSUB GECIKME
        GOTO MINUTE
       
SECBIR: WHILE SEC=0
        WEND
        U=0
GECIKME:
        FOR X=0 TO 3500
        PAUSEUS 5
        NEXT
        RETURN
DELAY:
        FOR X=0 TO 1900
        PAUSEUS 10
        NEXT
        RETURN     

ARA:    W=0:u=0:T=0:Z=0
        GOSUB FLASH
        Gosub EKRAN0
        HIGH PORTA.3
        WHILE SEC=0 
        wend
        MEM=SN:GOSUB TERSCEVIR:SN=SAYI
        MEM=DAK:GOSUB TERSCEVIR:DAK=SAYI
        MEM=SAAT:GOSUB TERSCEVIR:SAAT=SAYI
        MEM=GUN:GOSUB TERSCEVIR:GUN=SAYI
        MEM=AY:GOSUB TERSCEVIR:AY=SAYI
        MEM=YIL:GOSUB TERSCEVIR:YIL=SAYI
        GOSUB ZAMAN_YAZ
        GOSUB ZAMAN_OKU
        y=0:POZ=0
        goto BASLA
       
FLASH:
      TOGGLE PORTA.3:GOSUB DELAY:TOGGLE PORTA.3:GOSUB DELAY
      TOGGLE PORTA.3:GOSUB DELAY:TOGGLE PORTA.3:GOSUB DELAY
      return
'-------------------------------------------------------------------------------     
           
             
             
SENSOROKU:     
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIn    Comm_Pin, 0, [HAM.LOWBYTE, HAM.HIGHBYTE, Skip 4, Kalan, Syc]  'fark bu satırda iki parametre ilave ediliyor.
           GOSUB   Hesapla
           RETURN
   
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       HAM=~HAM+1
    endif
   
    FLOAT = (((HAM) * 50) - 25) + (((Syc - Kalan) * 100) / Syc)
    ISI=FLOAT/100
    ISI2 = (ISI //100)/10
RETURN
ZAMAN_OKU:
         high RTC_RST:OUTPUT rtc_dta
         shiftout RTC_DTA, RTC_CLK, 0, [$BF]:INPUT RTC_DTA
         SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, MEM, YIL, MEM]  'OKU
         MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         low RTC_RST
         return

ZAMAN_YAZ:
     
         high  RTC_RST:OUTPUT RTC_DTA
         SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]    'WRT Protek açıldı
         low RTC_RST:PAUSEUS 10
         high RTC_RST         
         SHIFTOUT  RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, 0, YIL, 128]  'YAZ
         low RTC_RST
         PAUSEUS 10
         return
               
CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
         RETURN 

TERSCEVIR:               
         ONLAR=MEM DIG 1
         ONLAR=ONLAR<<4
         BIRLER=MEM DIG 0
         SAYI=ONLAR+BIRLER
         RETURN
         
DISABLE
KESME:IF POZ=1 then CIK
        SAYAC=SAYAC+1  'kesme sayacı  1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
CIK:     INTCON.2=0  'TMR0 Kesme bayrağı sıfırlanıyor
         RESUME
         ENABLE
                 
         
END


Hocam program kısmen çalıştı fakat değerler çok tutarsız geliyor. Sensörü ilk okuduğunda 85 değeri geliyor. Birdahaki okumada düzeliyor. Bazen bakıyorsun çok farklı bir değer geliyor. Simülasyonda DS18S20 kullandım. Acaba program ilk açıldığında sensörün Set edildiği bölümü kullanmadık. Bu böyle bir sonuç çıkarabilirmi.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Gerçek devrede deneme yapıyorsan sensör set satırlarınıda kullan istersen.
Bu sensörü bir kere kullandım ve sorunla karşılaşmamıştım.
iki okuma arasına biraz gecikme koymayıda deneyebilirsin. Pullup direncide etkili olabilir.

Ete

Mucit23

Hocam Bayramdı felan derken ilgilenemedim konuyla.İlk başta Simülasyonda deneme yapıyordum. Az önce gerçek devrede denedim gözüme takılan birşey olmadı. İyi çalışıyor yani.
Teşekkür ederim
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Mucit23

#6
Hocam ds18b20 ve 1820 sensörlerinde arıza tespiti yapmaya çalışıyorum. Buna yapabilmek için bana sensörün reset sinyaline cevap verip vermediğine bakmak gerekir diye söylediler. Eğer sensör reset sinyaline cevap vermiyorsa sensör arızalı demektir. Anlamadığım nokta bunu manuel olarak nasıl yapabileceğim. PBPde Owın ve Owout komutu reset işlemini otomatik olarak yapıyor.

Birde Sensörün takılı olup olmadığını veya hattın kopuk olup olmadığını anlamak için ben Data hattını low konumuna çekip çekip sonra bellirli bir süre bekleyip data hattının konumuna bakıyorum. Eğer 1 okursam hat kopuk demekdir. Sensör yerinde ise data hattı yine 0 konumunda oluyor.

Siz bu konuda nasıl bir yol izliyorsunuz.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Mucit23,
Bu gibi soruların cevabı nerede yazıyor biliyorsun ama nedense sen hep kesitrmeden gitmeye çalışıyorsun.
Data sheete açıp bir baksan her şeyi görebileceksin. İllaki lisan bilmeye gerek yok. Adamlar anlaşılsın diye kos koca resim koymuşlar.
Data sheet'i aç ve 15. ci sayfada yer alan "INITALIZATION TIMING Figure 13" isimli şekle bir bak lütfen.
Bu şekilde Master (Pic) in sensöre nasıl yada ne kadar süre ile reset pulsi yolladığını buna karşılık Sensöründe ben burdayım varım demek için ne yaptığını göstermişler.
Bu resimde Koyu kalın çizgi ile gösterilen çizgi MASTER yani Pic tarafından verilen sinyal şeklini,  Kalın Gri renk ile belirlenen çizginin ise Sensör tarafından verilen sinyal şeklini arada yer alan inca siyah çizgilerinde pullup direnci nedeni ile oluşan sinyal şeklini ifade etmektedir.
Sorunun cevabı burada. Ancak ben bu defa yalnızca cevabın yerini göstermiş olacağım. İncele bakalım içinden çıkıp anlayabilecekmisin.
Bu şekle bakıpta olayı anlamak için lisan bilmek gerekmiyor. Biraz kafayı çalıştırmak yeterli bence. Ufak tefek tercüme işlerini zaten google yada başka kaynaklar sana yapbiliyor. O halde geriye biraz çalışmak  kalıyor. Hadi bakalım çöz şu işi.
Yindede çözemez isen ben açıklayacağım .
Hemen şunu belirteyim. Bu işlem sonucunda sensörün varlığı anlaşılabilmektedir. Var ise sıcaklık ölçümüne geçilebilir yok ise ekrana sensor yok yazılıp sıcaklık okumasından vaz geçilebilir.
Ben şimdiye kadar kullanmadım. Bana kalırsa artistik bi iş. Sensör bağlamaz isen yok olur elbette. Çokmu gerekli sence?
Bu işlem data hattının kopukluğunuda sana bildirebilir. Oda çok gerekli değil bana göre çalışmıyorsa bakar tamir edersin sonuçta. BU sensörle yazdığım programlar genelde hafıza limitlerinde kalıyor. Bu nedenle bu tür artistik konuları hep es geçmişimdir. Yalnızca SHT sensörleri ile uğraşırken sensörün varlığını yokluğunu test edip ekrana yazdırmıştım.
Elbette bu benim görüşüm ve seçimim sen farklı düşünüyor isen kendi programlarına koyabilirsin. Bence zor bir iş değil.

Ete

Mucit23

Hocam bazı denemeler yaptım.

hosting images
Datasheettteki açıklamaya göre Data hattını MCU tarafından low konumuna çekip yaklaşık 480us beklemek gerekiyor.(ben 500 yaptım) Sonra Data hattını giriş yapıp bi 100uS kadar daha bekleyip data hattını okumak gerekiyor. Eğer hala 1 okursak sensör terkrar hattı low konumuna çekmemiş demektir. Sensörün yerinde olmadığı anlamına gelir. Teoride böyle olması lazım. Ben bu anladıklarıma göre birşeyler yaptım. Çevremdede buna benzer örnekler var. Hepsi aynı şekilde.

DS_Check:
          Comm_Pin=0            ;PortA.7
          pauseus 500
          Data_Pin=1               ;TRISA.7
          PAUSEUS 100 
          IF Comm_Pin=1 THEN
            HATA=1                ;Sensör Yok
          ELSE
            HATA=0
          ENDIF
          pauseus 400
return


Her sensör okumadan önce bu işlemi yapıyorum ama herseferinde Hata değerini 1 olarak okuyorum. Sebebi ne olabilir.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Mucit23

Hocam kusura bakmayın Sanırım çözdüm sorunu. Birazdan açıklayacağım
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

#10
Pullup direncinin fonksiyonunu ihmal ediyorsun. Oradaki islem sırasına dikkat et.
Bir şeye daha dikkat etmen gerek. Comm_Pin hem giriş hem çıkış çalışan bir pin.
Dolayısıyla giriş çalışacağı zaman o pinin Giriş yapılması , çıkış çalışacağı zaman ise çıkış yapılması gerekir.
Bazı komutlar bu işi otomatik olarak yapıyor. AYrıca Data_Pin diye bir şey tanılamışsın ama programın tamamını görmeyince bir şey söyleyemiyorum. Yalnızca dikkat etmeni öneriyorum o kadar.

Ete

Mucit23

Hocam sorunun sebebi yine benden kaynaklanıyor

İlk başta Data hattını sıfıra çekiyordum Ama data hattını sıfıra çekerken Data hattını çıkış olarak ayarlamayı unutmuştum. Bu yüzden Data hattı hiç sıfır konumuna inmiyordu. Şimdi çözdüm sorunu.

DS_Check:
          Data_Pin=0
          Comm_Pin=0
          pauseus 500
          Data_Pin=1
          PAUSEUS 100 
          IF Comm_Pin=1 THEN
            HATA=1               ;Sensör Yok
          ELSE
            HATA=0
          ENDIF
          pauseus 400
return


Doğrusu bu şekilde olması gerekiyor.

  Yaptığım değişiklikleri dün akşam sitede paylaştığım Pic16F88 & Ds18B20 Multi Termostat Devresine uyguladım. Oradan inceleyebilirsiniz.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Tebrik ederim.
Çok da zor değilmiş değilmi?

Ete

Mucit23

Hocam zor değil elbet. Ben daha önce sensör olup olmadığını anlamakla sensörün arızalı olup olmadığını anlamak için farklı işlemler yapmam gerektiğini düşünmüştüm. Halbuki Öyle değilmiş
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal