C

caller id

Başlatan compacta, 21 Mayıs 2014, 22:38:14

compacta

ete hocam ve diğer üyeler herkese kolay gelsin.ekteki devre ve yazılımı incceledim.devreyi kurdum ve çalıştı ama benim çözemediğim lcd ekrana düşen numaranın if döngüsüyle "gelen numara bu ise boştaki portlardan birinden bir ledi yakmak.bunu yapabilirsem geliştirmeye devam edicem.ama ne gelen numarayı nede eeproma kaydedilen numarayı koşullandırıp istediğimi yapamadım.kod yazılımında yardımcı olusanız sevinirim.kısaca gelen arama örnek olarak 2324553232 ise belirlenen portaki ledi yak söndür.

compacta

kimsenin ilgisinimi çekmedi yoksa yardımcı olacak birisi yokmu!

ete

Kolay sanıyorsun değilmi. Birisi bakacak hemen şıp diye sana lazım olan şeyi söyleyecek. Ama düşündüğün gibi değil maalesef.
Birincisi program Proton da yazılmış hemde komplike bir mantık kullanılarak yazılmış. İstediğini yapabilmek için bütün programa hakim olmak lazım. Bunu yapmak içinde en az 1 gün bu programla haşır neşir olmak gerekiyor.
15 dakikadır programa bakıyorum ama hala gelen telefon numarasının nasıl hafızada tutulduğunu yada ne şekilde tutulduğunu hala anlayamadım. Anlamak da o kadar kolay değil.
Peki sen bak istersen bana söyle telefon numarası nasıl ve hangi değişkenlerde tutuluyor?. Bunu bulursan bende sana ne yapman gerektiğini söyleyeceğim.

Ete

compacta

hocam herkesin işi var doğrudur.maalesef.ben bütün değişkenleri if döngüsüyle denedim.artık tıkandığım için (2 gün sonunda) artık yardım almam lazım dedim ve foruma baş vurdum.belki biri şıp diye deyilde ilgilenebilecek zamanda bakabilir diye.tek numara 1,2 vs.. olarak numberrecieved alt programında if dmtf=1 gibi bir koşul yazıldığında mesela print "dogru" satırını işliyor.ama bu numarayı birden fazla yazınca mesela if dmtf=2222 gibi o zaman saki koşuldaki şartı görmüyor.bende diğer değişkenlerle değişik dallanmalarda denedim ama başarılı olamadım.

ete

Dtmf tarafından numaralar tek tek alınır. Program kaç (digit) numara aldığının kaydınıda tutuyor.
Ama onları nadıl kullanıyor henüz çöezemedim. Çok karmaşık bir program.
Ete

compacta

hocam yani size karışık geldiyse ben zaten kaybolmuşum. yazılımda eeproma kayıtı iptal etmeyi denicem.eğer sadece tek tek gelen numaraları koşullamayı becerebilirsem sonuca yaklaşmış olurum.yani eeproma kayıt bana lazım deyil diye hareket ediyorum.birde digit sayısı bana lazım olan 4 digit.normal telefon digit sayısı kadar deyil o yüzden yazılımın en üstündeki tanımlamalarda Symbol RAM_Max     = 4 olarak yazılımı yapmaya çalışıyorum.bu şekilde 4 digit dolduğunda led yanıyor.işte eeproma kayıtı olmadığını kabul ederek lcd üzerindeki bu 4 digit numarayı eğer koşullandırmama (if .......= 2222 then cls: print "oldu") yardımcı olursanız sonuca ulaşmış olucam.benim bulamadığım parantez içinde yazdığım ....... deişkeninin ne olduğu....

ete

Senin aradığın yada işini görecek program yeri ;
NumberComplete: isimli etiket ve altındakilerde. Program buraya geçerli bir telefon numarası girildikten sonra geliyor ve hafızada kayıtlı numralar ile gelen numarayı test ediyor. Şayet gelen numara hafızadakilerden biri ise ,
ExistNumber = TRUE
oluyor.  Bu senin ip ucun olabilir. işte. Aşağıdaki satırlarda    ExistNumber = TRUE olma koşulunda yapılan işlemler yer almaktadır.
ELSE satırından sonra ne istiyorsan onu yaptırabilirsin.

 ELSE                        ;ELSE
   EE_Teller = MinAddress    ;Adjust the EE_Teller to the address where to start searching
   REPEAT                    ;Search which EEPROM address the exist number stays, to put the *N* sign
     BD1 = EREAD EE_Teller
     INC EE_Teller
   UNTIL BD1 >> 4 = TelNr    ;Shift the HIGH-NIB to LOW-NIB so that this one can compare with TelNr
   
   BD1 = 240 | EREAD EE_Teller ;HIGH-NIB from the 2nd digit high (=240) (='unseen number' sign (*N*))
   EWRITE EE_Teller, [BD1]   ;...and write it then to EEPROM

   BD1 = 1
   REPEAT
     TOGGLE LED              ;Blink LED for a while, phonenumber exist
     DELAYMS 100
     INC BD1
   UNTIL BD1 > 40            ;Attention: even number only
ENDIF


Ete

medes

#7
compacta bu devreyle neyi konrol etmek istediğini söylersen daha anlaşılır olur çünki telefonla elle ton göndermek ile seri ton göndermek farklıdır  o zaman okuyucuda yapılan programda aynı şekilde seri veya yavaş algılama şeklinde yapılması lazım yavaş
elle algılama için yazılmış programa sen seri ton gönderirsen senin okuyucu bu hıza ulaşması zor olacağından veya şu an kullandığın progam hızlı senin göderin yavaş ise yine algılamada hata meydana gelir bu gibi nedenlerden dolayı bu ton okuma ile
ilgili yazılımları okuma zamanını senin yapmak istediğin şartlara göre belirlemen gerekli olacağından.ete hocamında dediği gibi
bu işler o kadar kolay değil sağ olsun ete hocamın yardımları sayesinde sorulara verdiği yanıtlar sayesinde kendime yetebilmekteyim. inşallah sanada yardımcı olur bizlerde yardımcı olmaya çalışırız. sen hangi program dili kullanıyorsun.

compacta

Hepinizin ilgisine tesekkurler bu devre yerel santrali olan bir yerde kullanmak istiyorum telekom gibi datalar fsk olark deyilde tel nosu dtmf ile 4 digit seklinde ornek 2367 gibi  gonderiliyor.yapmak istedigim lcd ekrandaki gelen bilgi olan 4 digit numara bu ise bos portlardan birisinden ledi yak hepsi bu.derleyici olarak proton basic kullaniyorum. Simdiden yardimlariniz icin tesekkurler

medes

#9
dört haneli şifre okuyucu  şifresi=3456 olarak çalışıyor sadece şifreleri değiştirmen yeterli şifreler=c1-c2-c3-c4 bunların önündeki rakamlarları değiştirmen yeterli tanımlamalar yapılmış çalışır durumdadır RA2. pin led çıkışı

@ DEVICE pic16F628A  'kullanılan işlemci 16F628A                                                   
@ DEVICE pic16F628A, WDT_OFF  'watch dog timer açık           
@ DEVICE pic16F628A, PWRT_ON  'power on timer açık
@ DEVICE pic16F628A, MCLR_OFF  'MCLR pin'i kullanılmıyor
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT 'local osc devrede           
@ DEVICE pic16F628A, PROTECT_ON  'pic code devrede
CMCON=7            'tüm çıkışlar dijtal
OPTION_REG.7=1     'pullup dirençleri 0=devrede  1=DEVREDIŞI
TRISB=%00011111    'çıkışlar ve girişler ayarlandı
TRISA=%11111011
PORTA=0            'giriş ve çıkışlar sıfırlandı
PORTB=0
'***************************************************************
DEFINE SHIFT_PAUSEUS 10
'***********************  DEĞİŞKEN VE SABİTLER  ******************

  CL   VAR PORTB.5       'TANIMLAMALAR
  DTT  VAR PORTB.6
  LE   VAR PORTB.7   
  STD VAR PORTB.4    '1 STD 8870) TONE enable
  E1  VAR PORTB.0    'Q1 DU 8870
  E2  VAR PORTB.1    'Q2 DU 8870
  E3  VAR PORTB.2    'Q3 DU 8870
  E4  VAR PORTB.3    'Q4 DU 8870
 
  SIFRE_1 VAR PORTA.2   'role çıkışı RA2

  b1 VAR BYTE           'TANIMLAMALAR
  b2 VAR BYTE
  b3 VAR BYTE
  b1=0
  b2=0
  b3=0

  c1 VAR BYTE '1 CODE DTMF
  c2 VAR BYTE '2 CODE DTMF
  c3 VAR BYTE '3 CODE DTMF
  c4 VAR BYTE '4 CODE DTMF   
  Q1  VAR BIT
  Q2  VAR BIT
  Q3  VAR BIT
  Q4  VAR BIT
BASLA:
         
DTMF1:
          BUTTON STD,1,255,0,b1,1,DECODER1
          PAUSE 100
          BUTTON STD,0,255,0,B2,1,RAZ
         
          GOTO DTMF1             
DECODER1:
          Q1=E1
          Q2=E2
          Q3=E3
          Q4=E4
          c1 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4
          GOTO DTMF2
DTMF2:
           b3=0
           WHILE b3<75
           BUTTON STD,1,255,0,b1,1,DECODER2
           PAUSE 100
           b3=b3+1
           wend
           goto DTMF1
DECODER2:
           Q1=E1
           Q2=E2
           Q3=E3
           Q4=E4
           c2 = q1 + 2*q2 + 4*q3 + 8*Q4
         
           GOTO DTMF3                         
         
DTMF3:
           b3=0
           WHILE b3<75
           BUTTON STD,1,255,0,b1,1,DECODER3
           PAUSE 100
           b3=b3+1
           WEND
           GOTO DTMF1
       
DECODER3:
           Q1=E1
           Q2=E2
           Q3=E3
           Q4=E4
           c3 = q1 + 2*q2 + 4*q3 + 8*q4
           GOTO DTMF4
           
DTMF4:
           b3=0
           WHILE b3<75
           BUTTON STD,1,255,0,b1,1,DECODER4
           PAUSE 100
           b3=b3+1
           WEND
           GOTO DTMF1
DECODER4:                                           
           Q1=E1
           Q2=E2
           Q3=E3
           Q4=E4
           c4 =  Q1 + 2*Q2 + 4*Q3 + 8*Q4
           GOTO SIFRE
RAZ
           q1=0   
           q2=0
           q3=0
           Q4=0
           goto DTMF1
           END
SIFRE:     
           PAUSE 10                                  'ŞİFRE DEĞİŞTİRME
          if c1=3 AND c2=4 AND C3=5 AND C4=6 then     ' 3456 ledi yak
          HIGH SIFRE_1    'ledi yak
           ENDIF
         c1=0
         c2=0
         c3=0
         c4=0
          return
        END

compacta

medes hocam çokkkk teşekkürler.inşallah benimde yardımcı olabileceğim bir  konu olur bir gün.saygılar....

medes

compacta sorun değil işini gördüyse  programı ister ikili ister üçlü kullanabilirsin sorun olursa yardımcı olmaya çalışırım. saygılar

devreci22

Alıntı yapılan: medes - 26 Mayıs 2014, 19:54:39compacta sorun değil işini gördüyse  programı ister ikili ister üçlü kullanabilirsin sorun olursa yardımcı olmaya çalışırım. saygılar
merhaba medes arkadaş im ben bu program ı çalıştıramadım yardımcı olabilir misiniz

ahmet_zxc

iş salt numarayı okuyabilmek ise;

ve lcd ekranda numara yazıyorsa.

lcd ekranda bir pini high yaparak yazma değil de okuma moduna alabilirsiniz lcd yi. ordan okuyup işi çözebilirsin belki..

devreci22

#14
Devre çalışıyor

Powered by EzPortal