avatar_ete

DTMF Projeleri

Başlatan ete, 04 Eylül 2011, 19:05:04

fofo

         
BINLER=Dig TEMP,3
         YUZLER=Dig  TEMP,2
         ONLAR=Dig TEMP,1
         BIRLER=Dig  TEMP ,0


şeklinde değiştirin.

dedim

sukru abının devre kartını yapıp ete hocamızın yazılımını kullanarak cep telefonu ıle calısır duruma getırdım.soyle bır sıkıntı mevcut.roleler kodları gırınce acılıyor.burda sıkıntı yok.mesela #1 dedıgımde 1 nolu role acılıyor.ama role sanıyeler ıcerısınde bu sure cok kısa role ac kapa yapıyor sureklı role degıstırdım olmadı.ters dıyot 1n 4007 kullanıyorum.role enerjı uclarına 100 nf taktım olmadı.roleye baglı olan led yanıyor.ondada sıkıntı yok.ama sankı role enerjısı kesılırmıs gıbı anlık tık tık diye calısıyor yazılımı eklıyorum konu ıle ılgılı yardımcı olabılırmısınız

dedim

 Device = 16F628A
@ CONFIG_REQ 
@ __config CP_OFF & DATA_CP_OFF & WDT_OFF &  XT_OSC & MCLRE_OFF & LVP_OFF & BODEN_OFF & PWRTE_OFF 

Xtal 4
CMCON=7

PORTA=0:PORTB=0
TRISB=%01011111   
TRISA=%11110000   


Dim SIFRE  As Word 
Dim RAKAM  As Word 
Dim TEMP   As Word 
Dim BASKA  As Word 
Dim ZAMAN  As Word 
Dim SURE   As Word 
Dim SAYAC  As Byte 
Dim  SAYI   As Byte
Dim  DURUM  As Byte
Dim  BIRLER As Byte
Dim ONLAR  As Byte
Dim YUZLER As Byte
Dim BINLER As Byte  
Dim ZIL    As Byte    'ÇALACAK ZİL ADEDİ
Dim X      As Byte
Dim CIK    As Bit
Dim YAZ    As Bit
Dim sayı As Word

Symbol CIKIS1=PORTA.0
Symbol CIKIS2=PORTA.1
Symbol CIKIS3=PORTA.2
Symbol CIKIS4=PORTA.3


Symbol ROLE  =PORTB.6
Symbol VALDAT=PORTB.0
Symbol BUZZER=PORTB.7

PORTA=0:PORTB=0
DelayMS 200
Clear
SAYI=ERead 0:DelayMS 10
If SAYI=$FF Then
   SIFRE=1234       'şifre değişirken buradaki şifre yerine yenisi yazılacak
   GoSub SIFREYAZ
EndIf 

BINLER=ERead 0 :DelayMS 10
YUZLER=ERead 1 :DelayMS 10
ONLAR =ERead 2 :DelayMS 10
BIRLER=ERead 3 :DelayMS 10
SIFRE=BINLER*1000+YUZLER*100+ONLAR*10+BIRLER
;ZIL=ERead 16
;If ZIL=255 Then
  ; ZIL=5
   ;EWrite 16,[ZIL]
;EndIf   
;DURUM=ERead 10
;If DURUM=255 Then
; DURUM=0
 ;GoSub ROLEYAZ
;EndIf 
;PORTA=DURUM
'--------------------------------------ANA--------------------------------------
 
                                                                   
BASLA:
SAYAC=0
GoSub SES1
YINE:  RAKAM=0  : GoSub SIFREAL   
         ;  If CIK=1 Then BITIR  'süre aşımı olmuş ise
           If RAKAM=3232 Then 'yedek şifre olan 2006 buradan değiştirilecek.
              SIFRE=1234     'şifre değiştirilirken buradaki 2580 yerine yenisi yazılacak.
              GoSub SES2
              ;GoSub SES1
              ;GoSub SES2
              ;GoSub SES1
              GoSub SIFREYAZ
              GoTo  ROLEKONTROL
           EndIf   
           If RAKAM=SIFRE Then
            GoSub SES4:DelayMS 50
            GoTo ROLEKONTROL
          EndIf 
           SAYAC=SAYAC+1
           If SAYAC=3 Then  '3 defa yanlış şifre girilebilir fazlasında bloke olur
 ATLA:           
        GoSub CIKIS
             ; Sleep 600   '600 sn bloke olacak.
              GoTo BASLA
           EndIf   
         GoSub SES2
           GoSub SES1
           GoSub SES3  
           GoTo YINE

ROLEKONTROL:    If YAZ=1 Then GoSub ROLEYAZ
                GoSub ALBILGI
                If CIK=1 Then BITIR 'süre aşımı olmuş ise
                If SAYI=12 Then ACMA  '#  '# tuşuna basılmış ise açma ya git
                If SAYI=11 Then KAPAT '*  '* tuşuna basılmış ise kapatmaya git.
                GoSub SES2:GoSub SES3
                
               GoTo ROLEKONTROL
ACMA:     
          GoSub ALBILGI
          If CIK=1 Then BITIR
           If SAYI=0 Then      'sıfır tuşuna basılmış ise çık ve tekrar başa git
              GoSub SES3
              GoSub CIKIS
              GoTo BASLA
           EndIf 
   
           
           
           If SAYI=1 Then
              If DURUM.1=0 Then 
                GoSub SES1:YAZ=1 
                PORTA=DURUM | %00000001  ;%00000010 '1 tuşuna basılınca 1 nolu çıkışı aç
             ; High  PORTA.0 
                GoTo ROLEKONTROL
              EndIf
           EndIf
           
          If SAYI=2 Then
              If DURUM.2=0 Then
                GoSub SES1:GoSub SES1:YAZ=1
                PORTA=DURUM | %00000010    '%00000100  2 tuşuna basılınca 2. ci çıkışı aç
           ;High    PORTA.1 
                DelayMS  2000
         ;  Low     PORTA.1 
                PORTA=DURUM & %11111101
                GoTo ROLEKONTROL
              EndIf  
           EndIf           
                 
           If SAYI=3 Then
              If DURUM.3=0 Then
                 For X=1 To 3:GoSub SES1:Next
                 YAZ=1
                 PORTA=DURUM | %00000100   '3 %00001000 tuşuna basılınca 3. çıkışı aç
             ; High PORTA.2
                 GoTo ROLEKONTROL
              EndIf   
           EndIf
          
           If SAYI=4 Then
              If DURUM.4=0 Then
                 For X=1 To 4:GoSub SES1:Next
                 YAZ=1
                 PORTA=DURUM | %00001000  '4  %00010000 tuşuna basılınca 4. çıkışı aç
              ; High PORTA.3
                 GoTo ROLEKONTROL
              EndIf   
           EndIf
                                   
 If SAYI=5 Then        '#5
              GoSub SIFREAL      '5 rakamı girilirse 
              GoSub SES4 :GoSub SES1
              If CIK=1 Then BITIR
                If RAKAM=SIFRE Then  'önce eski şifreyi gir
                  GoSub SES2:GoSub SES4
                  GoSub SIFREAL    'sonra yeni şifreyi gir
                 If CIK=1 Then BITIR
                  SIFRE=RAKAM
                  GoSub SES4
                  GoSub SIFREYAZ   'yeni şifreyi eproma kayıt et.
                EndIf
           EndIf
        GoTo ROLEKONTROL    
             
        
                  
KAPAT:     GoSub ALBILGI         'önce * tuşuna basılmış ise program buraya gelir
           If CIK=1 Then BITIR
           
           DURUM=PORTA
           
           If SAYI=0 Then     'sıfır tuşuna basılmış ise her şeyi kapat
              GoSub SES3
           Low   PORTA  '*0   %10000001
           EndIf   
 
           If SAYI=1 Then     '1 tuşuna basılmış ise 1. çıkışı kapat
              If DURUM.1=1 Then
                 GoSub SES2:YAZ=1
                 PORTA=DURUM & %11111110      ;%11111101
        ; Low    PORTA.0 
                 GoTo ROLEKONTROL
              EndIf
           EndIf   
              
        ;   If SAYI=2 Then          '2 tuşuna basılmış ise 2. çıkışı kapat
 ;            If DURUM.2=1 Then
             ;   GoSub SES2:GoSub SES2
            ;    YAZ=1
    ;            PORTA=DURUM & %11111101
             ;   GoTo ROLEKONTROL
            ; EndIf
       ;    EndIf  
 
           If SAYI=3 Then       '3 tuşuna basılmış ise 3. çıkışı kapat
              If DURUM.3=1 Then
                 For X=1 To 3:GoSub SES2:Next
                 YAZ=1
                 PORTA=DURUM & %11111011    ;%11110111
            ;      Low PORTA.2
                 GoTo ROLEKONTROL
              EndIf   
           EndIf

           If SAYI=4 Then    '4 tuşuna basılmış ise 4. çıkışı kapat
             If DURUM.4=1 Then
                For X=1 To 4:GoSub SES2:Next
                 YAZ=1
                PORTA=DURUM & %11110111    ;%11101111
               ;   Low PORTA.3
                GoTo ROLEKONTROL
              EndIf   
          EndIf
           
SIFREAL:  GoSub ALBILGI
          If CIK=1 Then Return
          RAKAM=SAYI*1000 
          GoSub ALBILGI
          If CIK=1 Then Return
          RAKAM=RAKAM+SAYI*100 
          GoSub ALBILGI
          If CIK=1 Then Return
          RAKAM=RAKAM+SAYI*10    
          GoSub ALBILGI
          If CIK=1 Then Return
          RAKAM=RAKAM+SAYI        
          Return      

ALBILGI: 
         SURE=0:ZAMAN=0
           While VALDAT=0
             SURE=SURE+1
             DelayUS 900
               If SURE=22000 Then
                GoSub CALIS
             EndIf
           Wend        
               
SAYIAL: 
        SAYI=0
        While VALDAT=1       ;STD
        SAYI.0=PORTB.4      ;Q1
        SAYI.1=PORTB.3      ;Q2
        SAYI.2=PORTB.2      ;Q3
        SAYI.3=PORTB.1      ;Q4
        Wend
        If SAYI=10 Then SAYI=0
        Return

SIFREYAZ:
TEMP=SIFRE          
       BINLER=Dig TEMP,3
         YUZLER=Dig  TEMP,2 
         ONLAR=Dig TEMP,1
         BIRLER=Dig  TEMP ,0
         
EWrite 0,[BINLER]:DelayMS 10 
EWrite 1,[YUZLER]:DelayMS 10
EWrite 2,[ONLAR] :DelayMS 10
EWrite 3,[BIRLER]:DelayMS 10
Return
         
ROLEYAZ:
        DURUM=PORTA & %11110000  ; %01111110
        EWrite 10,[DURUM]
        YAZ=0
        Return         
          
SES1: Sound BUZZER,[110,12]:DelayMS 130:Return
SES2: Sound BUZZER,[95,12] :DelayMS 130:Return
SES3: Sound BUZZER,[85,25] :DelayMS 130:Return         
SES4: Sound BUZZER,[50,25]  :DelayMS 130:Return
BITIR:
GoSub CIKIS  
GoTo BASLA
Return 
         
CIKIS:  
        SURE=0
        CIK=0 
        SAYAC=0
        RAKAM=0
        GoSub SES2
        GoSub SES2
        GoSub SES3
        GoSub SES3
        Return
              
CALIS:
    
      If ROLE=0 Then
      ; While ROLE=1 :Wend
        ;PORTA=DURUM & %00000000
        Low PORTA
        Else
      GoTo ROLEKONTROL
     EndIf
    Return                       
;End             

ete

#183
Program üzerinde çok oynanmış ve denemeler yapılmış gözüküyor.
Sorunun röle açma kısmında olduğunu düşünüyorum. Bu nedenle önceden nasıl yazmışım hatırlamıyorum ama bugün yazsam aşağıdaki şekilde yazardım.
Aşağıda 4 adet rölenin açma şekli yer alıyor eskisi ile değiştir bunları.
Temel düşünce bir röle açık ise yeniden açmaya çalışmanın anlamı yoktur hatta zararlıda olabilir. Sürekli aç kapa yaptırabilir bu işlem. Açıksa dokunmuyoruz çünki gelen emir açma yönünde aynı şeyi kapatma içinde yapmak lazım.
Programda bir sürü şu anda kafama yatmayan olumsuzluklar mevcut ama bütün programı düzeltmeye kalkışmak da hata olur. Aksayan yerleri düzeltmek daha uygun olacak.
ACMA:    
          GoSub ALBILGI
          If CIK=1 Then BITIR
          If SAYI=0 Then      'sıfır tuşuna basılmış ise çık ve tekrar başa git
              GoSub SES3
              GoSub CIKIS
              GoTo BASLA
          EndIf    
          
          If SAYI=1 and CIKIS1=0 Then
              CIKIS1=1
              DURUM=PORTA & %00001111
                GoSub SES1:YAZ=1 
                GoTo ROLEKONTROL
              EndIf
          EndIf
          
          If SAYI=2 and CIKIS2=0 Then
                CIKIS2=1    
                GoSub SES1:GoSub SES1:YAZ=1
                DURUM=PORTA & %00001111
                DelayMS  2000
                CIKIS2=0
                DURUM=PORTA & %00001111
                GoTo ROLEKONTROL
              EndIf  
          EndIf          
                
          If SAYI=3 AND CIKIS3=0 Then
                For X=1 To 3:GoSub SES1:Next
                YAZ=1
                CIKIS3=1
                DURUM=PORTA & %00001111
                GoTo ROLEKONTROL
          EndIf

          If SAYI=4 AND CIKIS4=0 Then
                For X=1 To 4:GoSub SES1:Next
                YAZ=1
                CIKIS4=1
                DURUM=PORTA & %00001111
                GoTo ROLEKONTROL
              EndIf  
          EndIf

Bu arada unutmayın, Eproma yazma işlemi 10 ms gecikme iseter. Ama okuma işleminde bir gecikme koyma ihtiyacı yoktur. Her türlü bilgi ard arda okunabilir gecikmesiz oarak.
Yazma işlemi zor olandır. Fiziksel olarak voltaj ve akım uygulanıyor eproma ve bu işlemin gerçekleşmesi en az 10 ms sürüyor. Yazma işinde gecikme olmadan ikinci bri yazma emri gelirse ilkini yazamaz. Bu nedenle gecikme koyuyoruz.
Bir eprom adresine ardışık bilgi yazılabilir ve her bilgi yerine tüm bilgi (diyelimki 5-6 byte) için tek bir 10ms gecikmede yeterli olacaktır.
Mesela,
Write 10, Veri1:pause 10
Write 11, Veri2:pause 10
Write 12, Veri3:pause 10
yerine
Write 10, Veri1, Veri2, Veri3:pause 10
şeklinde bir komut kullanmanız halinde 20 ms lik tasarruf etmiş olursunuz. Her iki örnektede veriler güvenli şekilde eproma yazılmış olur.

Aşağıdaki kodları farklı yazardım;
SAYIAL: 
        SAYI=0
        While VALDAT=1      ;STD
        SAYI.0=PORTB.4      ;Q1
        SAYI.1=PORTB.3      ;Q2
        SAYI.2=PORTB.2      ;Q3
        SAYI.3=PORTB.1      ;Q4
        Wend
        If SAYI=10 Then SAYI=0
        Return
yerine
SAYIAL: 
        SAYI=0
        IF VALDAT=1 THEN
          SAYI.0=PORTB.4      ;Q1
          SAYI.1=PORTB.3      ;Q2
          SAYI.2=PORTB.2      ;Q3
          SAYI.3=PORTB.1      ;Q4
          While VALDAT=1:Wend
          If SAYI=10 Then SAYI=0
        ENDIF
        Return
şeklinde yazmak daha doğru olurdu.
Bana kalırsa bu yazılımın iyice kontrol edilmesi gerek. Çünki stack problemide olabilir. Stack taşıyorsa işlemci reset atar röle bırakır çeker (muhtemelen). Nerden çıkartıyorum ? kodu incelediğimde diyelimki program ALBILGI etiketine geldi. Buraya GOSUB ile geliniyor. Return ile dönülmesi gerek. ALbilgi içinde süre aşımı olursa GoSub CALIS komutu çalışıyor program bu sefer oraya gidiyor iki adet return gerekecek şimdi. Orada röle çekili değil ise LOW PORTA denilmiş. Buda yanlış PORTA=0 desen daha doğru olurdu. Ama röle zaten çekili durumda ise GOTO ROLEKONTROL denilerek stack işi çuvallamış oluyor. Şayet Rolekontrol dan GOTO BITIR yada THEN BITIR komutları ile çıkarsa program GOTO BASLA ile başa dönecek ve bir müddet sonra bu stack taşacaktır.
Programı inceledikçe sürekli bu mesajda ekleme yapıyorum.
En baş kısımda BASLA etiketinden sonra GOSUB SIFREAL diye bir komut var. Bu DTMF den gelen sayıları alan kısım. Her zaman sayı gelecek diye beklemek yanlış olacağı için oraya gidip belirli bir süre bekleyim sayı gelmedi ise geri dönmek gerekirdi. Sayı alan kısım ise ALBILGI etiketi altındaki kodlar. Burada VALDAT pininin 1 olması beklenior ama aynı zamanda bir sayaç da çalışıp zamanı sayıyor. Zaman yeterince geçti ise CIK=1 yapılıp geri dönülmesi gerekirken kodu değiştirip oraya GOSUB CALIS eklenmiş. Orada da GOTO ROLEKONTROL komutu olunca işler sarpa sarıyor. Diyeceğim odurki kod orjinal halinden çıkmış artık. Bilmeden yada düşünmeden yapılan değişiklikler program için sorun oluyorki olmuş burada görüldüğü gibi.
Orada GOSUB CALIS komutu yerine CIK=1:RETURN komutu olması gerkirdi. Zira süre bitmiş ve sayı gelmemiş demek oluyor. Boşuna sayı gelmeden CALIS etiketine gitmenin bir anlamıda yok.
Dediğim gibi program baştan aşağı yeniden kontrol edilmeli yada orjinal yazılımı kullanmak gerek.
Ete

dedim

denıycem hocam tesekkur ederım

dedim

gosub calıs etıketını eklememın sebebı picin 12 nolu bacagına + sınyal geldıgınde roleler sureklı calıssın.bu bacaktakı sınyal kesildiginde sistem basa donsun ıstemıstım.soylekı bu kontrolu arac kontrol olarak kullanmak ıcın dusunmustum.CALIS komutunu o yuzden oraya ekledım.süre sonunda sınyal gelmedı ıse roleler kapanıyor.orda bır problem olmadıgını dusunmustum ben.uzaktan aracı calıstırdım.ama arabaya gıtmekten vazgectım.belırlenen sure sonunda calıs komutuna bakacak sınyal olmadıgını gördugunden basa donecek sekılde olmasını ıstedıgımden gosub calıs etıketıne dallanıp ordanda goto rolekontrol ıle basa donduruyordum.yanlısmı yapmıs oluyorum hocam o zaman ben?

dedim

orjınal yazılımınızı cep telefonu ıle kontrol edılebılır hale getırdıgımden kaynaklı sıkıntılar hocam bunlar.acma ve kapatma da cep telefonu ıle sıkıntım sadece acma bolumunde roleler acılınca sankı besleme cokermıs gıbı sanıyenın altındakı hızda roleler ac kapa yapıyor.bagladıgım sıstemın enerjısı kesılmıyor ama rolelerın mekanık ac kapa omurlerı hızla tukenmıs olmazmı bu sekılde

dedim

Başlangıç kısmını aşağıdaki şekilde yap.


Bunun dışında başka bir şey gerekmiyor.
Gerekmiyor derken hattın alınması telefon hoparlöründen yapılıyor. Bu bağlantıları yapman gerek.
Programda bir zaman sayacı var. Belirli süre içinde şayet herhangi bir komut girilmez ise sistem kendini otomatik kapatır.
Buda 18-20 sn olması gerek ama biraz daha az olabilir. Sen 16 sn diyorsun demekki sende 16 sn olarak çalışıyor otomatik kapanma. Bunu iptal etmek istersen aşağıdaki komut satırlarını bul;
ALBILGI:
         SURE=0:ZAMAN=0
         WHILE VALDAT=0
          SURE=SURE+1
          PAUSEus 270
            IF SURE=65500 THEN
              CIK=1:RETURN
            ENDIF
          WEND
Buradan " IF SURE=65500 then CIK=1:RETURN" komutunu sil yada kapat. Böylece otomatik kapanma iptal edilmiş olacaktır.

otomatık kapanma yı ıptal edıp gosub CALIS komutunu bu yuzden koymustum hocam

ete

Önceden yazılmış programlarda değişiklik yaparken stack  kontrolüne dikkat etmek gerekiyor.
Rastgele yerler gosub vs eklemek kapsamlı projelerde (sinucunu direk göremediğiniz) ekstra dikkat gerektirir. Stack denilen şeyin ne olduğunu tekrar açıklamak ve kriterlerini ortaya koymak istiyorum.
Stack işlemcinin kendisinin kullandığı (ama programcının ulaşamadığı) bir ara hafızadır. Geçici tampon hafıza gibi düşünün. Temel kaidesi şudur hafızaya en son giren mutlaka ilk çıkar.
BU hafıza genellikle GOSUB komutlarında kullanılıyor. Program GOSUB komutunu görünce hemen o komutun fiziksel RAM adresini stack hafızasına atar. Ataratmaz stack boş yer göstergeci hafızaya yerleşen byte sayısı kadar artırılır. Örnek vereyim göstergeç 00 gösteriyor iken 2 bytelık bir adres oraya yazıldı diyelim göstergeç hemen 02 adresini gösterir. Bir sonraki gelen bilgi bu adrese yazılır. Bu şekilde adres göstergeci sürekli artar. Bu ara hafıza sınırsız değildir. 20-30 aralığında bir hafıza gibi düşünün.Program ilk gördüğü return komutu ile hemen gidip Stack den en son kayıtlı olan adresi alır ve o adrese geri döner. Stack göstergeci 2 adres eksilir.
Bu şekilde şayet program düzenli ise stack hiç bir zaman taşmaz. Taşmanın da ne demek olduğunu açıklayayım. Diyelimki 20 stack adresi var ve sürekli stack'a bilgi ekleniyor. Sonunda adres limitinin sonuna gelinir ve daha yazılacak adres kalmayınca stack taşması meydana gelir ve program reset atar yada kilitlenir.
Şimdi gelelim kriterlere. Basic derleyicisi şöyle diyor. İç içe geçmiş olarak ortalama 5 adet GOSUB dan fazlasını kullanmayın. Bu özellik işlemci hafızası ile bağlantılı olsada söylenen şey genel kaidedir ve bazı işlemcilerde bu 6-7-8 adet olabilir.
Bir alt programa GOSUB ile gittin. Oradan RETURN ile dönmeden başak bir GOSUB ile başka bir yere gittin bu iş içe iki gosub demek oluyor. Bir üçüncüsünü orada da uygularsan stack den 6 adres kullanmış olursun. SOnunda oradan GOTO ile programın başına dönersen o kayıtlı olan adresler stack da ilelebet kalır ve stack kapasiten 3 adres eksilmiş olur. Doğrusu, gittiğin yerlerden önce RETURN ile döneceksin ve ilk GOSUB ile ayrıldığın yere geleceksin orada gerekirse GOTO basla diyebilirsin artık. 
Umarım artık gereksiz yere GOSUB ve GOTO komutlarını kulanmazsınız. Yada kontrollü olarak kullanırsınız. İç içe geçmiş 5 GOSUB kaidesini unutmayın. GOSUB ile gittiğiniz yerden mutlaka RETURN ile dönün ve gerekirse işaret biti kullanın ve dönüşte o biti kullanarak nereye gidecekseniz gidin.

Ete

dedim

o zaman programda yanlıslık yok hocam.ALBILGI dekı zamanı gosub CALIS etıketıne gore rolenın kontrolu ıcın kullanmıstım.sure sonunda rolede sınyal var ıse devam eder sure bıtımınde rolede sınyal yok ıse role kontrol etıketıne gıder.

dedim

hocam role acma komutlarını verdıgınız gıbı duzelttım.ama sorun yıne devam edıyor.kulaklık kablosu telefona takılı kaldıgı surecede sıkıntı aynı ama ne zamankı kulaklıgı cekersem roleler tıkırdamıyor.belkıde hata bende ?

ete

Hatanın sende olduğu kesin. BU programda yalnızca bir sorun yok bir çok sorun var.
Sen birini düzelttin belki ama detaylı inceleme yapmak gerekiyor.
Bu iş de konsantre olan tarafından yapılabilir yani oda sen oluyorsun.
Ara biraz daha . Bir rölenin çekmesi için gerekli olan adımları takip et.
Bulursun sorunu.
Ete

jun

merhaba ete hocam bu projenizin buzzer olmayan baskı devresini yaptım.telefon araken çalma ledi titreşim vaziyetinde yanıp sönüyor 8 çalmadan sonra 5v röle açmasına rağmen otomatik hat açılmıyor.bunun sebebi ne olabilir

ete

DTMF projesini bizzat kartını yaparak denemiştim. Aradan çok zaman geçti. Şu anda o programa hiç hakim değilim. Ancak yinede programa baktım. Başlangıç aşamasında hat=1 ise beklemede kalıyor. Hattın LOW olması anladığım kadarı ile gelen arama ile oluyor. Bu durumda program gelen zilleri sayıyor. Programda default zil sayısı 5 gözüküyor sen 8 diyorsun burada bir uyuşmazlık var. Her neyse değiştirilmiş olabilir.
Sistem hatta arama geldiğini algılayabiliyor ve zilleri sayabiliyor ise doğru yolda olduğunu gösteriyor. Ardından Röle yi aktif edip hattı açması gerekir. Dikkat edersen röle çekinceye kadar sistemin doğru çalışıyor. O halde rölenin çektiği konumda hangi kontağın birleşip hangisinin ayrıldığına tekrardan bakman gerekir. O rölenin NO kontaklarına hat bağlı olması lazım ki röle çektiğinde hat açılsın. Muhtemel sebeplerden birisi PCB de sorun olması başka bir şey olamaz. Bence devreyi karşına alıp PCB de doğruluk kontrolü yapman lazım.

Ete

jun

Hocam cevabınız için teşekkürler çalmada ve röle açmada problem yok lakin röle açtığında telefon açılmıyor rölede problem olabilirmi diye uçları cımbızla kısa devre yapmama rağmen hat açılmıyor devreyi defalarca kontrol ettim problem hat trafosundan kaynaklanabilir mi hat trafosunu adsl splitteri içinden söküp kullandım.problem sistemin çalışmasında değil çalma sayısından sonra rölenin devreye girmesine rağmen hattın açılmaması.

Powered by EzPortal