Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

seri iletişim hatası

Başlatan styx75, 23 Nisan 2014, 17:02:57

styx75

selam arkadaşlar. öncelikle herkezin 23 nisan ulusal EGEMENLİK cocuk bayramı kutlu olsun
1 gündür ugraşmama rağmen 18f4550 ve 16f628a yı usart haberleştiremedim okadar çok nette gezindim ama sonunda kafa çorba oldu  :) çok bilmediğim bir konu oldugu için buraya yazmaya karar verdim kodları veriyorum ..glcd de ölçüm sonucu alakasız değerler göstermekte
verici
Device = 16F628A
Declare Xtal=4  
OPTION_REG=%0000000 
TRISA=%00111110
TRISB=%11100011   
CMCON=7

Declare All_Digital= TRUE       
Declare Hserial_Baud 9600
Declare Hserial_RCSTA %10010000
Declare Hserial_TXSTA %00100100
Declare Hserial_Clear = On
Declare Hserial_SPBRG 25 

Dim DEGER As Word
Dim DERECE As Word
Dim derece1 As Byte
Dim derece2 As Byte  
            
Symbol DQ=PORTB.0

DelayMS 200
BASLA: 
GoSub OKU
GoSub GONDER


GoTo BASLA

OKU:
OWrite DQ , 1, [$CC, $44] 
OWrite DQ, 1, [$CC, $BE]           
ORead DQ, 0, [DEGER.LowByte, DEGER.HighByte]   
DERECE = DEGER */ 160:derece1=DERECE/10:derece2=DERECE //10 
Return  

GONDER:    
HSerOut [derece1,derece2]
HSerOut [derece1,derece2]   
Return

 


alcı
Device = 18F4550
Declare Xtal=20    
Declare All_Digital= TRUE 
INTCON=%00000000     
TRISA=%00000001    
TRISB=%11111111 
TRISC=%10000000
TRISD=%00000000 
INTCON2=%01000001
TRISE=%000

Declare LCD_DTPort = PORTD     
Declare LCD_RSPin = PORTA.1
Declare LCD_ENPin = PORTA.2
Declare LCD_RWPin = PORTA.3
Declare LCD_CS1Pin = PORTA.4
Declare LCD_CS2Pin = PORTA.5
Declare LCD_Type =  GRAPHIC
Declare GLCD_STROBE_DELAY = 1
Declare GLCD_CS_Invert = On        
Declare Internal_Font = On                 
Declare Font_Addr = 0

Declare Hserial_Baud 9600
Declare Hserial_RCSTA %10010000
Declare Hserial_TXSTA %00100100
Declare Hserial_Clear = On
Declare Hserial_SPBRG 25 

Dim DERECE1 As Byte
Dim DERECE2 As Byte

Cls 
DelayMS 200
BASLA: 
GoSub AL
Print At 4,10,Dec DERECE1,".",Dec1 DERECE2,  

GoTo BASLA

AL:
HSerIn [DERECE1,DERECE2] 
Return  

End
Include "font.inc"

serhat1990

Merhabalar, kodlarınızı bilmiyorum. Proton ile daha önce çalışmadım. Ama size önerim tranceiver olarak seri haberleşme yoluyla haberleşen bir kart ile alıcı ve vericiyi ayrı ayrı olarak test etmeniz. Bu sayede hatanın hangisinde olduğunu daha rahat anlayabilirsiniz. Bahsettiğim kartı board'un üzerine bile rahatlıkla monte edebilirsiniz. Max232 ile bir devre kuracaksınız sadece. Bilgisayarda herhangi bir terminal programıyla vericinin uygun baudrate değerinde veri gönderip göndermediğini , alıcının ise uygun baudrate değerinde gönderilen dataları işleyip işlemediğini gözlemleyebilirsiniz. LCD üzerinde karakterlerin farklı çıkması mcu'nun çalışma frekansı ile ilgili olabilir. İyi çalışmalar dilerim. Bayramınız kutlu olsun :)

styx75

ilginize teşekkü ederim.dogrusu bu sanırım

styx75

#3
Device = 18F4550 
Declare Xtal=20 
On_Hardware_Interrupt GoTo VERIAL 
Declare All_Digital= TRUE Symbol GIE  =INTCON.7   
Symbol PEIE =INTCON.6  
Symbol RCIE=PIE1.5
Symbol RCIF=PIR1.5 
Symbol IPEN=RCON.7

Dim AL As Byte
Dim TEMP As Byte
GoTo BASLA 
'------kesme----
VERIAL:
Context Save  
If RCIF=1 Then 
AL=0
HSerIn [Wait("STYX"),Dec AL] 
TEMP=RCREG 
RCIF=0   
EndIf    
Context Restore   
'-----------------------------
BASLA:
 PORTE=0
GIE=0 
IPEN=1  
RCIE=1
PEIE=1
GIE=1  
DelayMS 500
Cls                   
NN:  
Print At 4,10,"STYX"
Print At 5,10,Dec3 AL
PORTE.0=1
DelayMS 1
PORTE.1=1
DelayMS 1
PORTE.2=1
DelayMS 1
PORTE.0=0
DelayMS 1
PORTE.1=0
DelayMS 1
PORTE.2=0
DelayMS 1
GoTo NN                                   
End
Include "font.inc"


buradaki durumu kısaca izah edeyim (devre bread broad üzerinde kurdum.)
seri kesme kaynagı olarak başka bir picden  500 ms aralıklarla 11 ve 12 bilgisi geliyor. bilgi alışı ve donanım kesmesine girmeyle ilgili sıkıntı yok ama sorun ,kesme gerçekleştigi zaman program tekrar geldiği yere dönmesi için bir kesmenin gelmesi daha gerekiyor..bu durumda 1ms aralıklarla yanması gereken üç led kesme kaynagından gelen kesme hızına göre çalışıyor  :) ..kesme rutinini protonun manuelinden yapmaya çalıştım..
kesmeden sonra otomatik geri kaldıgı yere gitmesi için neyi yanlış yapıyoum sizce yardımlarınızı bekliyorum..
saygılar

elektrodeney

Usta bizde bu konu ile alakalı baya sıkıntı yaşıyoruz sorunu halledebildin mi?