GSM DIALER ( SMS ÖZELLİĞİ de OLAN ) ÇALIŞMASI

Başlatan armys2000, 01 Ekim 2007, 21:08:58

armys2000

Çok önceleri yazdığım bir SMS li DialUp lı bir GSM Dialer çalışması

Şemasını bulamadım ama cihazın içeriği

bir adet Ericsson A1018
bir adet PIC16F877
bir adet ISDN1200
bir adet CM8870 ( DTMF için )


Acil yetiştirmem gereken bir iş olduğundan dalayı  bu kodda hatalar olabilir.

Amaç ilgili arkadaşlara PDU mesaj ve GSM Pic haberleşmesi hakkında biraz yardımcı olabilmek.


'*******************************************************************************
'*							
'*									GSM  DIALER (MESAJ)
'*	
'*  
'*
'*		File Name                   : gsmtelv6.bas
'*		File Version                : 24.09.2004
'*		PCB Version                 : 16.09.2004			
'*		Entegre Name                : PIC16F877 / 20 (MicroChip)
'*		Clock Frequancy             : 20 MHZ High Speed
'*		Convertor                   : MAX232 TTL > CMOS Convertor
'*		Power						: 12 Volt DC
'*		SYS_LED						: SYSTEM Led  
'*		SIN_Led						: GSM Sinyal Led i 
'*		
'*		DB9 Male Port 				: Computer Data Cable Port
'*		GSM Anten SMA Connector		: TriBand GSM Anten Connector
'*
'*
'*
'*								PIN DESCRIPTION
'*
'*		PIN NAME	PIN			EQUIVALENT					DESCRIPTION
'*	
'*		Porta.0		2			dtmfout	
'*		Porta.1		3			role1
'*		Porta.2		4			role2			
'*		Porta.3		5			etetik
'*		Porta.4		6			sys_led
'*		Porta.5		7			islem_ses_msg
'*
'*		Portb.0		21			D0
'*		Portb.1		22			D1
'*		Portb.2		23			D2
'*		Portb.3		24			D3
'*		Portb.4		25			NC					
'*		Portb.5		26			NC
'*		Portb.6		27			NC
'*		Portb.7		28			NC
'*
'*		Portc.0		11			ring_port
'*		PORTC.1		12			gsm_tx
'*		PORTC.2		13			gsm_rx
'*		PORTC.3		14			cep_pwr
'*		PORTC.4		15			isdn_ply
'*		PORTC.5		16			tel_hat_knt
'*		PORTC.6		17			NC
'*		PORTC.7		18			tus_kont
'*
'*		
'******************************************************************************		
		
		
@ DEVICE HS_OSC,WDT_ON, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF				
		
'************************   KONFİGÜRASYON    **********************************
		
			INCLUDE "modedefs.bas"				' File Include
			
			DEFINE OSC 20						' OSC Speed  Set 20 Mhz
			DEFINE I2C_SLOW 1
			adcon1 = 7 							' Port A ve Port E Dijital I/O
			intcon=0							' Disable Interrupts
			pie1=0								' Set PowerOnReset Bit



'************************      ATAMALAR      **********************************
			sys_led			VAR			PORTA.0
			sin_led			VAR			PORTA.1
		    role1			VAR			PORTA.2
			role2			VAR			PORTA.3
			nc1				VAR			PORTA.4
			etetik			VAR			PORTA.5
			
			
			nc3				VAR			PORTB.7
			nc4				VAR			PORTB.6 
			cep_pwr			VAR			PORTB.5
			tus_kont		VAR			PORTB.4
			
			
			nc5				VAR			PORTC.0
			nc6				VAR			PORTC.1
			nc7				VAR			PORTC.2
			nc8				VAR			PORTC.3
			islem_ses_msg	VAR			PORTC.4
			isdn_ply		VAR			PORTC.5
			gsm_tx			VAR			PORTC.6
			gsm_rx			VAR			PORTC.7
			
			sda				VAR			PORTD.0
			scl				VAR			PORTD.1
			nc11			VAR			PORTD.2
			nc12			VAR			PORTD.3
			nc13			VAR			PORTD.4
			nc14			VAR			PORTD.5
			nc15			VAR			PORTD.6
			nc16			VAR			PORTD.7
			
			
		

'************************   YÖNLENDİRMELER   **********************************
			TRISA=%11101000
			TRISB=%11011111
			TRISC=%11000101




'************************      SABİTLER      **********************************

			gsmbaud			CON			16468







'************************     DEĞİŞKENLER    **********************************
a          VAR BYTE 
b          VAR BYTE
c          VAR BYTE
i          VAR BYTE           ' eeprom 0 yazma ve ptt arama değişkeni
j          VAR BYTE
m          VAR BYTE
k          VAR BYTE
t          VAR BYTE 
aa         VAR BYTE           ' telefon cevap verme suresinin değişkeni
bb         VAR BYTE           ' telefon cevap verme suresinin değişkeni
dt         VAR BYTE           ' ID değişkeni
jj         VAR BYTE           ' eeprom 0 yazma ve ptt arama değişkeni
ss         VAR BYTE           ' eeprom 0 yazma ve ptt arama değişkeni
tt         VAR BYTE           ' eeprom yazma değişkeni işlemlerde kullanılıyor
yy         VAR BYTE           ' eeprom yazma değişkeni işlemlerde kullanılıyor
uu         VAR BYTE           ' eeprom yazma değişkeni işlemlerde kullanılıyor
jjj		   VAR WORD
mmm		   VAR BYTE
nnn        VAR WORD
dtm        VAR BYTE
es1        VAR BYTE
es2        VAR BYTE
es3        VAR BYTE
es4        VAR BYTE
ket        VAR BYTE            
arar       VAR BYTE           ' eeprom 0 yazma ve ptt arama değişkeni
addr       VAR BYTE
modul      VAR BYTE
tetik      VAR BYTE
stone      VAR BYTE
redial     VAR BYTE
msgtur_say VAR BYTE

msgindex    VAR BYTE
msgindex1	VAR BYTE
msgindex2	VAR BYTE


pd1			VAR BYTE
pd2			VAR BYTE
pd3			VAR BYTE
pd4			VAR BYTE
pd5			VAR BYTE
pd6			VAR BYTE
pd7			VAR BYTE


pduadet    VAR BYTE
eaddr	   VAR WORD
txpdu	   VAR BYTE
txt		   VAR BYTE
pdu		   VAR BYTE
pdusay	   VAR BYTE
msgboy	   VAR BYTE
mtel	   VAR BYTE[12]


'************************       DİZİLER      **********************************
kod        VAR BYTE [20]
telno      VAR BYTE [11]   ' Telefon numarası değikeni
sehkod     VAR BYTE [3]
redialno   VAR BYTE [11]
sinyal	   VAR BYTE [4]

kontrol    VAR BYTE[8]
pduveri    VAR BYTE[7]
txtveri	   VAR BYTE[8]
veri2	   VAR BYTE[72]
veri3	   VAR BYTE[72]


'************************ PROGRAM BAŞLANGICI **********************************
'************************ PROGRAM BAŞLANGICI **********************************
'************************ PROGRAM BAŞLANGICI **********************************
'************************ PROGRAM BAŞLANGICI **********************************

'***************** CEP TELEFONUNUN AÇILMASI VE SET EDİLMESİ *******************
enbas:	
			High cep_pwr
			High sin_led
			For addr=0 TO 7
				
				High sys_led
				Pause 500
				Low sys_led
				Pause 500
			
			Next addr
			
			
			
			Low cep_pwr
			
			Pause 1000
			
	'		For addr=0 TO 14
	'			
	'			High sys_led
	'			Pause 500
	'			Low sys_led
	'			Pause 500
			
	'		Next addr
			
		
EEPROM 98,["21"]
EEPROM 0,["1234"]
EEPROM 10,["0532xxxxxxx"]
EEPROM 123,["12345"]
EEPROM 120,["312"]
EEPROM 100,["xxxx"]





j=0 
m=0 
b=10
c=20
t=0

modul=2

set:SerOut2 gsm_tx,gsmbaud,["AT",13,10]
    SerIn2 gsm_rx,gsmbaud,15000,cephata,[wait("OK")]
    Pause 2000
    
    
    
    SerOut2 gsm_tx,gsmbaud,["AT+CPMS=",34,"ME",34,13,10]
    Pause 1000
    For msgindex=1 TO 15
    SerOut2 gsm_tx,gsmbaud,["AT+CMGD=",#msgindex,13,10]
    Pause 300  
    Next msgindex
    
    GoTo bas2

cephata:	GoTo enbas


bas2: High sys_led
      
		j=0 
		m=0 
		b=10
		c=20 
		t=0
		modul=2
		


'*************** Proğram Başlangıcı ****************************
bas:Low sys_led
        
    IF etetik=1 Then 
       ket=1
       High sys_led
       SerOut2 gsm_tx,gsmbaud,["at+ckpd=",34,"E",34,13,10]
       Pause 2000
       GoTo alarm
    EndIF
    
    
    
    SerOut2 gsm_tx,gsmbaud,["at+csq",13,10]
    SerIn2 gsm_rx,gsmbaud,500,bas,[wait ("+CSQ: "),STR sinyal\4]
    
    IF sinyal[1] ="," Then
     High  sin_led
     Else
     Low sin_led
    EndIF
    
    
        'GoTo msg_oku
msg_devam:    
    
    
    SerIn2 gsm_rx,gsmbaud,500,bas,[wait ("RING")]
    ket=0
    modul=2
    Pause 2500
    SerOut2 gsm_tx,gsmbaud,["ATA",13,10]
    Pause 1000
    SerOut2 gsm_tx,gsmbaud,["ATL=7",13,10]
    
    Pause 300
    Sound islem_ses_msg,[120,60]
    Pause 200
	GoTo aranma

GoTo bas	
        
alrm_kont:IF etetik=1 Then 
          ket=1
          High sys_led
          SerOut2 gsm_tx,gsmbaud,["at+ckpd=",34,"E",34,13,10]
          Pause 1500
          GoTo alarm
          EndIF
          Return	
'************** DIŞARIDAN ARANMA DURUMU ***********************
aranma: IF ket=0 Then
       
           IF etetik=1 Then 
		          ket=1
		          High sys_led
	              Pause 100
     	          SerOut2 gsm_tx,gsmbaud,["at+ckpd=",34,"E",34,13,10] 
		          Pause 2000
		          GoTo alarm
            EndIF
       
        EndIF
           
            
        i=1
	         While i<=202

	             IF tus_kont=1 Then
	           		a = (PORTB & $f)
	            	LookUp a,["01234567890*#"],dtm
	            	SerOut2 gsm_tx,gsmbaud,[dtm,13,10]
	            	GoTo dtmf_var1
	             EndIF
	             
	             Pause 50
	             i=i+1

             Wend
             
             
  gsm_cevap_yok:IF ket=1 Then
	                 b=b+11
	                 c=c+11
	                 Pause 100
		     	     SerOut2 gsm_tx,gsmbaud,["at+ckpd=",34,"E",34,13,10] 
				    
				     For i=0 TO 20 
		            	kod[i]=$FF
		             Next i
		             
		             j=0
		             m=0
		             t=0
				     Pause 2000
				     GoTo alarm
                 EndIF 
       
       		 Pause 100
     	     SerOut2 gsm_tx,gsmbaud,["at+ckpd=",34,"E",34,13,10] 
		     
		     For i=0 TO 20 
            	kod[i]=$FF
             Next i
             
             j=0
             m=0
             t=0
		     Pause 2000
		     
		     GoTo bas     
       
dtmf_var1: IF dtm="#" Then
			 GoTo sif_kont
		  EndIF	
			   
		  kod[j]=dtm
	   	  j=j+1
	   	  GoSub keyup
	   	  GoTo aranma

'**************************************************************	   
keyup:IF tus_kont=0 Then
       Pause 300
       Return
       EndIF
       GoTo keyup
'*********************** ŞİFRE KONTROL ***********************
sif_kont:IF (kod[0]="7") AND (kod[4]="7") Then 
	
			GoTo anasif_kont 'enson eklenen
	  
	     EndIF
	         
      IF j=4 Then
	             Pause 10
		         Read 0,es1
		         Pause 10
		         Read 1,es2
		         Pause 10
		         Read 2,es3
		         Pause 10
		         Read 3,es4
				 Pause 10
			     
			     IF (kod[0]=es1) AND (kod[1]=es2) AND (kod[2]=es3) AND (kod[3]=es4) Then
		
					    Pause 300
				        Sound islem_ses_msg,[120,20,0,20,120,20,0,20,120,20]
				        Pause 500
				        
				        For i=0 TO 20 
            	           kod[i]=$FF
                        Next i
             
			            j=0
			            m=0
			            t=0
			            Pause 100
				        
		                GoTo islem
				 Else
				
					 	Pause 300
       					Sound islem_ses_msg,[115,10,110,10,115,10,110,10]
                        Pause 500
					 
					    For i=0 TO 20 
            	           kod[i]=$FF
                        Next i
             
			            j=0
			            m=0
			            t=0
			            Pause 100
			             
		    			 GoTo aranma 
	
				 EndIF
	     
      Else
	     
	               Pause 300
       			   Sound islem_ses_msg,[115,10,110,10,115,10,110,10]
                   Pause 500
					 
				   For i=0 TO 20 
            	      kod[i]=$FF
                   Next i
             
			       j=0
			       m=0
			       t=0
			       Pause 100
			       GoTo aranma
	         
      EndIF



anasif_kont:Pause 10
            Read 100,es1
            Pause 10
            Read 101,es2
            Pause 10
            Read 102,es3
            Pause 10
            Read 103,es4            
            Pause 10
            
         IF (kod[1]=es1) AND (kod[2]=es2) AND (kod[3]=es3) AND (kod[4]=es4) Then
         		
         		Pause 10
         		Write 0,$31
         		Pause 10
         		Write 1,$32  
         		Pause 10
         		Write 2,$33 
         		Pause 10
         		Write 3,$34 
                        
                Pause 300
				Sound islem_ses_msg,[120,20,0,20,120,20,0,20,120,20]
				Pause 500
				        
		        For i=0 TO 20 
            	    kod[i]=$FF
                Next i
             
			    j=0
			    m=0
			    t=0
			      
	            Pause 100
     	        GoTo aranma
		 		   	
         Else
                Pause 300
                Sound islem_ses_msg,[115,10,110,10,115,10,110,10]
                Pause 500
                
                For i=0 TO 20 
            	    kod[i]=$FF
                Next i
             
			    j=0
			    m=0
			    t=0
		        GoTo aranma
		        
         EndIF
         
       
'************************** İŞLEMLER **************************         
islem:  	i=1
	        
	         While i<=202

	             IF tus_kont=1 Then
	           		a = (PORTB & $f)
	            	LookUp a,["01234567890*#"],dtm
	            	SerOut2 gsm_tx,gsmbaud,[dtm,13,10]
	            	GoTo dtmf_var2
	             EndIF
	             
	             Pause 50
	             i=i+1

             Wend
             
             
             IF ket=1 Then
	                 b=b+11
	                 c=c+11
	                 Pause 100
		     	     SerOut2 gsm_tx,gsmbaud,["at+ckpd=",34,"E",34,13,10] 
				    
				     For i=0 TO 20 
		            	kod[i]=$FF
		             Next i
		             
		             j=0
		             m=0
		             t=0
				     Pause 2000
				     GoTo alarm
                 EndIF 
             
             
       		 Pause 100
     	     SerOut2 gsm_tx,gsmbaud,["at+ckpd=",34,"E",34,13,10] 
		    
		     
		     For i=0 TO 20 
            	kod[i]=$FF
             Next i
             
             j=0
             m=0
             t=0
		     Pause 2000
		     
		     GoTo bas     
       
dtmf_var2:IF dtm="#" Then
			 GoTo is_kont
		  EndIF	
			   
		  kod[m]=dtm
	   	  m=m+1
	   	  GoSub keyup
	   	  GoTo islem
'**************************************************************	  
is_kont:GoSub keyup
       
       
	
		       
		
			        IF (kod[0]="1") AND (kod[1]="0")  Then 
			        
				        High role1
				        GoSub ucbip
				        GoSub yenile_kod
					   	GoTo islem
		            EndIF 
	
	
			        IF (kod[0]="1") AND (kod[1]="1")  Then 
			        
				        Low role1
				        GoSub ucbip
				        GoSub yenile_kod
					    GoTo islem
		            EndIF 
	
	
                   	IF (kod[0]="2") AND (kod[1]="0")  Then 
			        
				        High role2
				        GoSub ucbip
				        GoSub yenile_kod
					    GoTo islem
		            EndIF 
	
	
			        IF (kod[0]="2") AND (kod[1]="1")  Then
			        
				        Low role2
				        GoSub ucbip
				        GoSub yenile_kod
					    GoTo islem
		            EndIF 
	
	               
	               IF (kod[0]="0") AND (kod[1]="0")  Then
			        
				        
				        GoSub ucbip
				        GoSub yenile_kod
					    GoTo mesaj_oku
		            EndIF 
	
        
        IF (kod[0]="8") AND (kod[1]="9") Then
         GoTo sif_deg ' Şifre değiştirme    
        EndIF
       
        IF (kod[0]="9") AND (kod[1]="9") Then ' Master Reset
         
         GoTo master_rst
         
        EndIF
       
       
        IF (kod[0]="*") AND (kod[1]="*")  Then 'ID nin girilmesi
        tt=123
        yy=127
        uu=121
        GoTo telno1
        EndIF
        
        
        
        
     
        
        
        IF (kod[0]="3") AND (kod[1]="1") Then 'tetik sinyalinin durumu
           IF kod[2]>"0" AND kod[2]<"3" Then 
		        Write 99,kod[2]
		         GoSub ucbip
		            b=10
			        c=20
		      
				For i=0 TO 20 
				    kod[i]=$FF
				    j=0
			        m=0
			        t=0
				Next i
		
		    	GoTo islem
			
		  Else
		        GoSub hatabip
		       		For i=0 TO 20 
					    kod[i]=$FF
					    j=0
				        m=0
				        t=0
		    		Next i
			    GoTo islem
	      EndIF
        EndIF 
        
        IF (kod[0]="5") AND (kod[1]="1") Then 
        tt=10
        yy=20
        uu=8
        GoTo telno1
        EndIF
        
        IF (kod[0]="5") AND (kod[1]="2") Then 
        tt=21
        yy=31
        uu=19
        GoTo telno1
        EndIF
        
        IF (kod[0]="5") AND (kod[1]="3") Then
        tt=32
        yy=42
        uu=30
        GoTo telno1
        EndIF
        
        IF (kod[0]="5") AND (kod[1]="4") Then 
        tt=43
        yy=53
        uu=41
        GoTo telno1
        EndIF
        
        IF (kod[0]="5") AND (kod[1]="5") Then 
        tt=54
        yy=64
        uu=52
        GoTo telno1
        EndIF
        
        IF (kod[0]="5") AND (kod[1]="6") Then 
        tt=65
        yy=75
        uu=63
        GoTo telno1
        EndIF
        
        IF (kod[0]="5") AND (kod[1]="7") Then 
        tt=76
        yy=86
        uu=74
        GoTo telno1
        EndIF
        
        IF (kod[0]="5") AND (kod[1]="8") Then 
        tt=87
        yy=97
        uu=85
        GoTo telno1
        EndIF
        
        IF (kod[0]="5") AND (kod[1]="9") Then 
       		Low isdn_ply
       		Pause 300
       		High isdn_ply
       		Pause 2000
	   		GoTo islem
       EndIF
       
        
GoSub hatabip
GoSub yenile_kod
GoTo islem 

master_rst:Write 0,$31
           Write 1,$32
           Write 2,$33
           Write 3,$34

			For addr = 10 TO 255
              Write addr,$30
           Next addr
          
         Pause 300
         Sound islem_ses_msg,[120,20,0,20,120,20,0,20,120,20]
         
          Pause 350
			
				For i=0 TO 20 
				    kod[i]=$FF
				Next i
			j=0
			m=0
			t=0
			Pause 1000
        GoTo islem



'******************************** TELEFON NUMARASI KAYIT YAPMA ***************
telno1:For addr=tt TO yy
       Write addr,kod[(addr-uu)]
       Pause 10
	   Next addr
	   GoSub ucbip
	   GoSub yenile_kod
	   GoTo islem
'******************************** ŞİFRE DEĞİŞTİRME ***********************
sif_deg:IF (kod[2]=kod[6]) AND (kod[3]=kod[7]) AND (kod[4]=kod[8]) AND (kod[5]=kod[9]) Then
		GoSub ucbip
		Write 0,kod[2]:Write 1,kod[3]:Write 2,kod[4]:Write 3,kod[5]
		GoSub yenile_kod
		GoTo islem
		Else
		GoSub hatabip
		GoSub yenile_kod
		GoTo islem
		EndIF
'*********************************** ALARM DURUMU *************************
alarm: SerOut2 gsm_tx,gsmbaud,["AT*ECAM=1",13,10]
		
         
              For addr=0 TO 255
			     Read addr,jj
			     IF (jj<48) OR (jj>57) Then
			     Write addr,$30
			     Pause 10
			     EndIF
		     Next addr
		     
		 SerOut2 gsm_tx,gsmbaud,["ATL=7",13,10]
		 
		 Pause 1000    
 
         
         
         IF c=108 Then 
            b=10 : c=20
            GoTo bas 
	     EndIF
	    
	   
	   
	    t=0
	      For addr=b TO c
            Read addr,telno[t]	  	
            Pause 10
            t=t+1	   
          Next addr           
        
         mtel[0]   = telno[0]		' 0
         mtel[1]   = "9"			' 9
		 mtel[2]   = telno[2]		' 3
		 mtel[3]   = telno[1]		' 5
		 mtel[4]   = telno[4]		' 6
         mtel[5]   = telno[3]		' 2
         mtel[6]   = telno[6]		' 2
         mtel[7]   = telno[5]		' 2
         mtel[8]   = telno[8]		' 8
         mtel[9]   = telno[7]		' 0
         mtel[10]  = telno[10]		' 1
         mtel[11]  = telno[9]		' 8     
     
     
     IF (telno[0]="0") AND (telno[1]="0") Then
         b=b+11: c=c+11: t=0
	     Pause 300
         GoTo alarm
	  EndIF 
     
     
       
        
        Read 99,tetik
          IF tetik="1" Then
             IF etetik=0 Then 
                b=10 : c=20 
                GoTo bas
             Else
                GoTo devam
             EndIF
          EndIF
      
      
      
      
devam:	
         I2CRead sda,scl,$A0,301,[txpdu]
         I2CRead sda,scl,$A0,300,[pdusay]
         
'       pd1 = pdusay
'       pd2 = pdusay
       
       
'       pd3 = pd1 >> 4   '***
       
'       pd4 = pd2 << 4
'       pd5 = pd4 >> 4   '***
       
    'pd1 = ( pd3 * 16 ) + pd5
       
        
       
       'txpdu = pd1
       
       
       
         
         
         
        
         
         
         msgboy = 14 + txpdu  
         
		  
		 

		  	     
	      SerOut2 gsm_tx,gsmbaud,["AT+CMGS=",#msgboy,13,10]
          SerIn2  gsm_rx,gsmbaud,5000,msghata2,[wait(">")]
	      

	      SerOut2 gsm_tx,gsmbaud,["0011000C91",STR mtel\12,"0000AA",HEX2 pdusay] 
	       
	       eaddr = 0
	       
	       For addr = 1 TO txpdu
	      
	          I2CRead sda,scl,$A0,eaddr,[pdu]
		  	  
		  	  SerOut2 gsm_tx,gsmbaud,[HEX2 pdu]
		  	  
		  	  eaddr = eaddr + 1
		   Next addr
	      

	      SerOut2 gsm_tx,gsmbaud,[26]
          SerIn2  gsm_rx,gsmbaud,35000,msghata2,[wait("+CMGS")]
	      
	      

         Pause 2000
    
	      
	      'SerOut2 gsm_tx,gsmbaud,["atd",STR telno\11 ,";",13,10]
	      'SerIn2 gsm_rx,gsmbaud,25000,gsm_cevap_yok,[wait ("*ECAV: 1,3,1")]
		  'SerOut2 gsm_tx,gsmbaud,["AT*ECAM=0",13,10]
				 	      
	      'Pause 2000
	      'Low isdn_ply
          'Pause 300
          'High isdn_ply
	      'Pause 13000
	    
	     'Pause 300
          'Sound islem_ses_msg,[120,60]
         'Pause 500 
	      

  GoTo aranma


msghata2:SerOut2 gsm_tx,gsmbaud,["AT+CKPD=",34,"E",34,13,10]
         Pause 100
         GoTo gsm_cevap_yok



'************* Uyarı sesleri ****************************
uzunbip:Pause 300
        Sound islem_ses_msg,[120,60]
        Pause 500 
        Return
ucbip:  Pause 300
        Sound islem_ses_msg,[120,20,0,20,120,20,0,20,120,20]
        Pause 500
        Return
hatabip:Pause 300
        Sound islem_ses_msg,[115,10,110,10,115,10,110,10]
        Pause 500
        Return
'***********************  CEVAP KISMI  *******************
cevap:   Pause 2500
         SerOut2 gsm_tx,gsmbaud,["ata",13,10]
         Pause 300
         Sound islem_ses_msg,[120,60]
         'GoSub uzunbip
         Pause 300
     
     
Return


'**************************************************      
son:Pause 100
    GoSub enson
    GoSub yenile_kod
    GoTo bas
'**************************************************    
enson:Pause 350
	  SerOut2 gsm_tx,gsmbaud,["at+ckpd=",34,"E",34,13,10]
Return
'*************************************************      
uzat:Pause 1000
     Return
'*************************************************
msgoku:Low isdn_ply
       Pause 300
       High isdn_ply
	   Pause 13000
       Return
'*************************************************       






'************************************************
yenile_kod: For i=0 TO 20 
            kod[i]=$FF
            Next i
            j=0
            m=0
            t=0
            Return
            
            
            
            








				




mesaj_oku: SerOut2 gsm_tx,gsmbaud,["AT+CPMS=",34,"ME",34,13,10]  
             SerIn2 gsm_rx,gsmbaud,2000,mesaj_oku,[wait("+CPMS: "),msgindex1,msgindex2] 
          
		     IF (msgindex1 = "0") AND (msgindex2=",") Then 
		       	Pause 2000
		       	GoTo mesaj_oku
		     Else   
		         	IF (msgindex1 > "0") Then
		            	 Pause 2000
		            	 GoTo msg_oku
		            EndIF

			 EndIF




'******************************************************************
'******************************************************************
'************* Cep Telefonuna Gelen Mesajın Okunması  *************
'******************************************************************
'******************************************************************

msg_oku:Pause 200
		SerOut2 gsm_tx,gsmbaud,["AT+CMGR=1",13,10] '102 string hex2 olarak 51
        SerIn2 gsm_rx,gsmbaud,2000,msg_oku_bitti,[wait("+CMGR: "),skip 3,DEC3 pdusay]
        
        
       'pd1 = pdusay
       'pd2 = pdusay
       
       
       'pd3 = pd1 >> 4   '***
       
       'pd4 = pd2 << 4
       'pd5 = pd4 >> 4   '***
       
       
       
       'pd1 = ( pd3 * 16 ) + pd5
       
        
       
       txpdu = pdusay - 19      
       
  
        

        
        SerIn2 gsm_rx,16468,3000,devam2,[wait ("0791"),skip 18,STR telno\12,skip 18,HEX2 pdusay]
        
        
        
        
       
        
        For addr=0 TO 71
        SerIn2 gsm_rx,gsmbaud,4000,devam1,[HEX2 veri2(addr)]
        Next addr
        
 devam1:For addr=0 TO 71
        SerIn2 gsm_rx,gsmbaud,4000,devam2,[HEX2 veri3(addr)]
        Next addr
               
 devam2:        
        I2CWrite sda,scl,$A0,300,[pdusay]
        Pause 10
        I2CWrite sda,scl,$A0,301,[txpdu]
        Pause 10
		
		
		
		
		
 			
 			eaddr = 0
 				For addr = 0 TO 71
					
						I2CWrite sda,scl,$A0,eaddr,[veri2(addr)]
						Pause 10
						eaddr = eaddr + 1
					Next addr	
					
			eaddr = 72
					For addr = 0 TO 71
					
						I2CWrite sda,scl,$A0,eaddr,[veri3(addr)]
						Pause 10
						eaddr = eaddr + 1
					Next addr	

					
		
 			        	

msg_oku_bitti:SerOut2 gsm_tx,gsmbaud,["AT+CMGD=1",13,10]
              Pause 500     
              GoTo msg_devam



'07
'91
'09 35 92 10 00 00 
'04
'0C
'91 09 35 46 19 22 85
'00
'00
'40 21 62 81 84 51 40
'1F 
'61 79 3B 3F 3F 4E 9B 31 D9 8C
'D6 0C CB D7 65 3A BD 0C 9A BF
'F3 E7 BA 1B 64 0F CB 01
'OK



'+CMGR: 0,,58
'07
'91
'09 35 92 10 00 00
'04
'0C
'91 09 35 46 19 22 85
'00
'00
'40 21 62 22 05 83 40
'2C
'61 79 3B 3F 3F 4E 9B 31 D9 8C
'D6 0C CB D7 65 3A BD 0C 9A BF
'F3 E7 BA 1B 64 0F CB 41 61 79
'3B 3F 3F 4E 9B 31 D9 8C 06

'+CMGR: 0,,49
'07
'91
'09 35 92 10 00 00 
'04
'0C
'91 09 35 46 19 22 85 
'00
'00
'40 21 62 22 45 75 40
'22 
'61 79 3B 3F 3F 4E 9B 31 D9 8C 
'D6 0C CB D7 65 3A BD 0C 9A BF 
'F3 E7 BA 1B 64 0F CB 41 61 39



'******************************************************************
'******************************************************************
'*** Gelen PDU Mesajın EEproma PDU ve TXT Formatında Yazılması ****
'******************************************************************
'******************************************************************

pdu_msg_kaydet : 	eaddr = 0
					For addr = 0 TO 69
					
						I2CWrite sda,scl,$A0,eaddr,[veri2(addr)]
						Pause 10
						eaddr = eaddr + 1
					Next addr	
					
					eaddr = 70
					For addr = 70 TO 139
					
						I2CWrite sda,scl,$A0,eaddr,[veri3(addr-70)]
						Pause 10
						eaddr = eaddr + 1
					Next addr	

					
			nnn = 140			
			jjj = 0
            
            For mmm=0 TO 19
            
            
            		For k=0 TO 6
            			I2CRead sda,scl,$A0,jjj,[pduveri(k)]
            			jjj=jjj+1
            		Next k              
           k=0
           txtveri[0]=pduveri[k] << 1
           txtveri[0]=txtveri[0] >> 1
           
           txtveri[1]=pduveri[(k+1)] << 2
           txtveri[1]=((txtveri[1] >> 1 ) | (pduveri[k] >> 7 ))
           
           txtveri[2]=pduveri[(k+2)] << 3
           txtveri[2]=((txtveri[2] >> 1 ) | (pduveri[(k+1)] >> 6 ))
           
           txtveri[3]=pduveri[(k+3)] << 4
           txtveri[3]=((txtveri[3] >> 1 ) | (pduveri[(k+2)] >> 5 ))
           
           txtveri[4]=pduveri[(k+4)] << 5
           txtveri[4]=((txtveri[4] >> 1 ) | (pduveri[(k+3)] >> 4 ))
           
           txtveri[5]=pduveri[(k+5)] << 6
           txtveri[5]=((txtveri[5] >> 1 ) | (pduveri[(k+4)] >> 3 ))
           
           txtveri[6]=pduveri[(k+6)] << 7
           txtveri[6]=((txtveri[6] >> 1 ) | (pduveri[(k+5)] >> 2 ))
           
           txtveri[7]=txtveri[(k+6)] >> 1
 
            
            		For addr = 0 TO 7

	            		I2CWrite sda,scl,$A0,nnn,[txtveri(addr)]
	            		nnn = nnn + 1
	            		Pause 10
            		
            		Next addr
            		
            		
            		
            
            Next mmm
     jjj=0



					
Return




End '************* EndOfCode ************

armys2000

Cihazın ne işe yaradığı ile ilgili  bilgi vermeyi unuttmuşum özürdilerim

Cihaz mevcut güvenlik sistemlerine ( ev alarm sistemi  ) ek olarak  takılıp
normal telefon arayıcılarınım açığını kapatmak üzere tasarlanmıştı.

cihaz alarm panelinden + veya - tetik ile  alarm durumuna geçip daha önce kayıt ettiğiniz numaraya çağrı atıp daha önce kaydettiğiniz (ısdn1200 e)
sesli mesajı okumakta ve bunun yanında sms de gönderebilmektedir.

armys2000

SMS li çalışmalarda eskiden cihazlar PDU modu nu destekliyordu. Yani direkt olarak text halindeki mesajı cep telefonun portuna gönderip bunu gönder diyemiyordunuz. Şimdi artık text mesaj ( mesaj formatı)  destekli modemler ve cep telefonları var. ama bilgi olsun diye buraya PDU to text , text to PDU dönüşümünü yapan PBP kodunu koymayı düşündüm. ilgili arkadaşlara yardımı dokunacağını düşündüm.

Yine bu dönüşümde GSM iletişim protokolleri arasında yer alan SMS in PDU yapısını gösteren protokole dayanılarak hazırlanmıştır.

'**********************************************************************
'**********************************************************************
'********************								*******************
'********************	  TEXT MESAJIN PDU MESAJA  	*******************
'********************		  DÖNÜŞTÜRÜLMESİ    	*******************
'**********************************************************************
'*********************************************************** 20.08.1997
txt_to_pdu:

       i=7
       For addr=0 TO 6
           veri3[addr] =(( veri2[addr] >> addr ) | ( veri2[(addr+1)]  << i )) 
           i=i-1
       Next addr 

       i=7
       For addr=7 TO 13
           veri3[addr] =(( veri2[(addr+1)] >> (addr-7) ) | ( veri2[(addr+2)]  << i )) 
           i=i-1
       Next addr 
	        
	   i=7
       For addr=14 TO 20
            veri3[addr] =(( veri2[(addr+2)] >> (addr-14) ) | ( veri2[(addr+3)]  << i )) 
            i=i-1
       Next addr
            
       i=7
       For addr=21 TO 27
           veri3[addr] =(( veri2[(addr+3)] >> (addr-21) ) | ( veri2[(addr+4)]  << i )) 
           i=i-1
       Next addr 	
Return

'**********************************************************************
'***************************** TEXT Mesajın PDU Mesajına Dönüştürülmesi


'**********************************************************************
'**********************************************************************
'********************								*******************
'********************	  PDU MESAJIN TEXT MESAJ  	*******************
'********************		  DÖNÜŞTÜRÜLMESİ    	*******************
'**********************************************************************
'*********************************************************** 20.08.1997

pdu_to_txt: veri3[0]= veri1[7]   << 1
            veri3[0]= veri3[0]   >> 1
            i=7
            For addr=1 TO 6
            veri3[addr]=(veri1[(addr+7)]   << (addr+1))
            veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+6)]  >> i) 
            i=i-1
            Next addr 
            
            veri3[7]= veri1[13]   >> 1    ' 8 karakter 7 dijit octect
            veri3[8]= veri1[14]   << 1
            veri3[8]= veri3[8]    >> 1
            i=7
            For addr=9 TO 14
            veri3[addr]=(veri1[(addr+6)]   << (addr-7))
            veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+5)]  >> i) 
            i=i-1
            Next addr 
            
            veri3[15]= veri1[20]   >> 1
            veri3[16]= veri1[21]   << 1
            veri3[16]= veri3[16]   >> 1
            i=7
            For addr=17 TO 22
            veri3[addr]=(veri1[(addr+5)]   << (addr-15))
            veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+4)]  >> i) 
            i=i-1
            Next addr 
            
            veri3[23]= veri1[27]   >> 1
            veri3[24]= veri1[28]   << 1
            veri3[24]= veri3[24]   >> 1
            i=7
            For addr=25 TO 30
            veri3[addr]=(veri1[(addr+4)]   << (addr-23))
            veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+3)]  >> i) 
            i=i-1
            Next addr 
            
            veri3[31]= veri1[34]   >> 1
            veri3[32]= veri1[35]   << 1
            veri3[32]= veri3[32]   >> 1
            i=7
            For addr=33 TO 38
            veri3[addr]=(veri1[(addr+3)]   << (addr-31))
            veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+2)]  >> i) 
            i=i-1
            Next addr 
            veri3[39]= veri1[41]   >> 1
            
            veri3[40]= veri1[42]   << 1
            veri3[40]= veri3[40]   >> 1
            i=7
            For addr=41 TO 46
            veri3[addr]=(veri1[(addr+2)]   << (addr-39))
            veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+1)]  >> i) 
            i=i-1
            Next addr 
            veri3[47]= veri1[48]   >> 1
            
            veri3[48]= veri1[49]   << 1
            veri3[48]= veri3[48]   >> 1
            i=7
            For addr=49 TO 54
            veri3[addr]=(veri1[(addr+1)]   << (addr-47))
            veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr)]  >> i) 
            i=i-1
            Next addr 
            
            veri3[55]= veri1[55]  >> 1
            veri3[56]= veri1[56]  << 1
            veri3[56]= veri3[56]  >> 1
            i=7
            For addr=57 TO 62
            veri3[addr]=(veri1[(addr)]   << (addr-55))
            veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr-1)]  >> i) 
            i=i-1
            Next addr 


Return 

'**********************************************************************
'***************************** PDU Mesajın TEXT Mesajına Dönüştürülmesi



Ayrıntılı bilgi için SMS PDU kısmına bakabilirsiniz.

arslan74

Merhaba,

Alıntı Yap
Şemasını bulamadım ama cihazın içeriği

bir adet Ericsson A1018
bir adet PIC16F877
bir adet ISDN1200
bir adet CM8870 ( DTMF için )


Bu chipi herhalde telefon numarası cevirmek için kullaniyorsun. Ev telefonları için uygun olabilir ancak. Cep telefonlarında buna gerek YOK.

Kullandığın telefonun AT komut desteği vardır. Bu komut desteğini kullanarak telefona istediğin numarayı direkt aratma yapabilirsin.

Daha fazla bilgi için telefonun datasheetlerine ki AT komut yapısını inceleyebilirsin.

Selamlar

armys2000

Sanırım CM8870 den bahsediyorsunuz hocam.

Onu ben gelen DTMF tonu çözmek için kullanıyorum arattırma yapmak için değil ..

Kullanıcı cihaza erişmek için (komut gönderme vs işler için ) aramayı yaptığı tel cihazından ton göndererek bir takım fonksiyonları yerine getirmek için bu cm 8870 kullandım.. Zira koda bakarsanız dial için at komut setini kullanıyorum

arslan74

Merhaba,

Alıntı Yap
Kullanıcı cihaza erişmek için (komut gönderme vs işler için ) aramayı yaptığı tel cihazından ton göndererek bir takım fonksiyonları yerine getirmek için bu cm 8870 kullandım.. Zira koda bakarsanız dial için at komut setini kullanıyorum

Ben Basicte kod yazmadığın için kodları incelememiştim. Bu chipi alıcı kısmında kullanabileceğiniz aklıma gelmediği için bu yorumu yazmıştım.

Bu sistemin bir yerde uygulamasını yaptınızmı? Sağlıklı çalışıyormu?

Selamlar.

armys2000

Evet hocam yapmıştım. Gayet güzel çalışıyordu. tabi biraz düzenlenmesi gerek kod çok dağınık ve okunabilirlik yönünden baya berbat.
bu aslında SMS ağırlıklı. Dialer kısmı kodun içerisinde iptal edilmiş durum da. Bulabilirsem son halini ve şemalarını koyacağım.