kesmeyi serin komutu ile aktif etme sorunu!

Başlatan ramazotti, 27 Kasım 2008, 21:14:59

ramazotti

Arkadaşlar şu anda yapmakta olduğum bir proje hakkında yardıma ihityacım var forumda çesitli benzer şeyler okumama rağmen sorunu çözemedim şimdiden yardımlarınız için teşekkürler.
Ben rfalıcıdan bilgi aldığım zaman zamanlayıcıyı başlatmak istiyorum ancak bir türlü başaramadım bunu nasıl yapabilirm ?

'****************************************************************
'*  Name    :CAGRI TIMER.BAS                                    *
'*  Author  : [RAMAZOTTI]                                       *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 27.11.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

'-----------------------------------------------------------------
DEFINE LCD_DREG	PORTB	'LCD data bacaklarý hangi porta baðlý?
DEFINE LCD_DBIT		4		'LCD data bacaklarý hangi bitten baþlýyor?
DEFINE LCD_EREG	PORTB	'LCD Enable Bacaðý Hangi Porta baðlý?
DEFINE LCD_EBIT		3		'LCD Enable Bacaðý Hangi bite baðlý ?
DEFINE lcd rwreg PORTB 	'LCD R/W Bacaðý Hangi Porta baðlý?
DEFINE LCD_RWBIT 	2 		'LCD R/W Bacaðý Hangi bite baðlý ?
DEFINE LCD_RSREG	PORTB	'LCD RS Bacaðý Hangi Porta baðlý ?
DEFINE LCD_RSBIT	1		'LCD RS bacaðý Hangi Bite baðlý  ?
DEFINE LCD_BITS		4		'LCD 4 bit mi yoksa 8 bit olarak baðlý?
DEFINE LCD_LINES	2		'LCD Kaç sýra yazabiliyor
'-------------------------------------------------------------------------
salise VAR BYTE 
saniye VAR BYTE 
dakika VAR BYTE 
saat VAR BYTE 
SAYAC VAR BYTE  
mode VAR PORTA.2 'Ayar menü butonu 
durdur VAR PORTA.3 'Ayar arttýrma butonu 
'-----------------------------------------------------------------------------
Clear  'tüm deðiþkenler sýfýrlandý
Pause 200
LCDOut $fe, 1
Low PORTB.2  'LCD -R/W bacaðý LOW'a çekildi.
TRISA=%00001100
CMCON = 7 			'16F628 de komparatör pinleri iptal hepsi giriþ çýkýþ
'-----------------------------------------------------------------------------
 Pause 200 

baslangic: 
Clear 'tüm deðiþkenler sýfýrlandý 
LCDOut $FE,1 
LCDOut $fe,$80,"CAGRI______TIMER"
LCDOut $FE,$C0,DEC2 SAAT,":",DEC2 dakika,":",DEC2 saniye
Pause 100 
IF mode=1 Then
GoTo saymayabasla 
Else
GoTo baslangic
EndIF 

saymayabasla: 
ON INTERRUPT GoTo KESME 'kesme oluþursa KESME adlý etikete git. 
OPTION_REG=%10000100 'Pull up dirençleri ÝPTAL- Bölme oraný 1/64. 
INTCON=%10100000 'Kesmeler aktif ve TMR0 kesmesi aktif 
TMR0=0 

ekransay: 
LCDOut $FE,$C0,DEC2 SAAT,":",DEC2 dakika,":",DEC2 saniye

IF durdur=0 Then 
While durdur=0 
Wend 
GoTo baslangic 
Else 
GoTo ekransay 
EndIF 

 Disable 
 
KESME: 
SAYAC=SAYAC+1 
IF SAYAC=1 Then 
SAYAC=0 
salise=salise+1 
IF salise=100 Then 
salise=0 
saniye=saniye+1 
IF saniye=6 Then
GoTo baslangic
IF saniye=60 Then 
saniye=0 
dakika=dakika+1
EndIF 
EndIF
EndIF 
EndIF
INTCON.2=0 
Resume 
Enable 

End

mustafa_cmbz

rf alıcıdan gelen bilgiyi okuma protokolün nerede_?

benim gördüğüm sadece mode=1 olursa saymaya başlatıyorsun..rf alıcı verici mantığını kavrayamamışsın...biraz daha araştır daha sonra aşağıda yazdıklarım kafanda yer edecektir...

şimdi ilk önce serin komutuyla rf alıcdan bir data beklersin bu datayı alırsın ve bir şart ile bunu sorgularsın eğer alıcı tarafın beklediği data ise istenilen etikete gider ve programı dallandırırsın ister kesmeyi başlatırsın...özet geçtim çünki alıcı verici mantığını daha anlayamamışsın...sadece alıcıdan 1 veya 0 bekliyorsun bu böyle olmaz...çevrede diğer sinyaller parazite neden olur ve senin devreni etkiler....kolay gelsin...

ramazotti

çok sağol söylediklerini deneyeceğim umarım bu kez istediğim gibi çalışır teşekkürler yalnız bu kesme konusu bana karışık geliyor.

ramazotti

Arkadaşlar rf kısmını da tamamlayıp öyle yaptım program tam istediğim gibi oldu ancak şu anki sorunum program simülasyonda çalışmasına rağmen devrenin üzerinde çalışmıyor alıcı ve verici arasındaki iletişim kontrol edildiğinde hiçbir sorun yok.Sorunu bulamadım sizce neden olabilir?.Teşekkürler.

'****************************************************************
'*  Name    :CAGRI TIMER.BAS                                    *
'*  Author  : [RAMAZOTTI]                                       *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 27.11.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

'-----------------------------------------------------------------
DEFINE LCD_DREG	PORTB	'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT		4		'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG	PORTB	'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT		3		'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE lcd rwreg PORTB 	'LCD R/W Bacağı Hangi Porta bağlı?
DEFINE LCD_RWBIT 	2 		'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG	PORTB	'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT	1		'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS		4		'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES	2		'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------------
salise VAR BYTE 
saniye VAR BYTE 
dakika VAR BYTE 
saat VAR BYTE 
SAYAC VAR BYTE  
mode VAR PORTA.2 'Ayar menü butonu 
ALICI VAR BYTE
durdur VAR PORTA.3 'Ayar arttırma butonu 
'-----------------------------------------------------------------------------
Clear  'tüm değişkenler sıfırlandı
Pause 200
LCDOut $fe, 1
Low PORTB.2  'LCD -R/W bacağı LOW'a çekildi.
TRISA=%00001101
CMCON = 7 			'16F628 de komparatör pinleri iptal hepsi giriş çıkış
ALICI=0

'-----------------------------------------------------------------------------
 Pause 200 
High PORTB.0
	Pause 1000
	Low PORTB.0
baslangic: 



Clear 'tüm değişkenler sıfırlandı 
LCDOut $FE,1 
LCDOut $fe,$80,"CAGRI______TIMER"
LCDOut $FE,$C0,DEC2 SAAT,":",DEC2 dakika,":",DEC2 saniye
Pause 100 


SerIn2 PORTA.0,396,[WAIT("RAMA"),ALICI]

	IF ALICI=100 Then

GoTo saymayabasla 
Else
GoTo baslangic
EndIF 

saymayabasla: 
ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git. 
OPTION_REG=%10000100 'Pull up dirençleri İPTAL- Bölme oranı 1/64. 
INTCON=%10100000 'Kesmeler aktif ve TMR0 kesmesi aktif 
TMR0=0 

ekransay: 
LCDOut $FE,$C0,DEC2 SAAT,":",DEC2 dakika,":",DEC2 saniye

IF durdur=0 Then 
While durdur=0 
Wend 
GoTo baslangic 
Else 
GoTo ekransay 
EndIF 

 Disable 
 
KESME: 
SAYAC=SAYAC+1 
IF SAYAC=1 Then 
SAYAC=0 
salise=salise+1 
IF salise=100 Then 
salise=0 
saniye=saniye+1 
IF saniye=6 Then
GoTo baslangic
IF saniye=60 Then 
saniye=0 
dakika=dakika+1
EndIF 
EndIF
EndIF 
EndIF
INTCON.2=0 
Resume 
Enable 

End

mustafa_cmbz

* pic'e bağlı mclr direnç'ini kontrol et.
* alıcı ve vericideki kristaller aynı mı_?
* 4mhz krıstal kullandıysan 2400 baud'tan yukarısını kullanma...
* rf modülün data ucu kullandığıın pic'in anolog uçlarına bağlıysa bu uçları ı/o olarak ayarla....

aklıma gelenler bunlar...

ayrıca şemanı ve pcb dosyanı veya resimlerini de eklersen data ayrıntılı şekilde yardım alabilirsin...büyük ihtimal ile gözden kaçırdığın ufak bir ayrıntıdan dolayı bir sorun çıkıyordur yada programını tam incelemedim programdan da kaynaklanabilir...