seri iletişimde kesme

Başlatan mech, 04 Haziran 2008, 09:51:14

Gurkan-Demirbas

Alıntı yapılan: "Gurkan-Demirbas"kolay gelsin
DÜZELTME : Hocam ben PBP kullanıyorum, proton'a tamamen yabancıyım; sanırım proton'da tanımlamalar farklı, özür diliyorum

@Mech hocam, özürüm sanaydı aslında; proton kullanıyorsun ama ben proton'a yabancıyım.
Eğer program isis'de çalışıyorsa, kurduğun devrede bir sorun olma ihtimali daha yüksek;

SPBRG değerlerini hem 877'de hem de 628'de 25 olarak tanımla HSERIAL_SPBRG = 25
Bir de 628 alıcı durumunda, TXSTA'yı %00000000 yap; alıcıda transmit'i enable yapmaya gerek yok.

Bunlar dışında br sorun göremedim şahsen

Gürkan

mech

devrede herşey normal görğnğyor ama sonuç yok.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

kusura bakmayın arkadaşlar hata benimmiş. Devremde korkunç bi hata yapmışım. Neyse şimdilik deneme başarılı oldu.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

Tamam ilk testi geçti ama. Gönderdiğim sayıları ISIS'te Lcd'de okutayım dedim, alakasız sayılarla karşılaştım. Bana çalışan bir örnek verebilir misiniz? Sanırım bu iş sandığımdan zor olacak.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

Maxim

mech ,

yukarıda verdiğin kodlar hardware usart değilki ama ?
yani interrupt ile çalışan bir kod değil ,
normal proton+ kendi serial haberleşme kodu ,

interrupt oldumu şöyle başlamalı ,

ON_INTERRUPT GOTO FALAN

usart interrupt kullanmaya gerek yokmu diyorsunuz ?

mech

hserout sonuçta hardware seri haberleşmeyi kullanıyor. Ama ben yine de kesmeli yaptım. Bi şekilde şuan çalışıyor, bakalım ileriki aşamalarda neler çıkacak karşımıza.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

16f628'den direkt 16f877'ye bilgi gönderdiğimde lcd'de görebiliyorum. Fakat 16f877'den 16f628'e bilgi gönderdiğimde; kesme oluştuğunda yanması gereken bir led bile yanmıyor. Yani kesme oluşmuyor. Bazen de 16f877 ilk açılışta sanki kesme oluşmuş gibi keme alt programına dallanıyor.
Device=16F628
XTAL 4
ALL_DIGITAL true
HSERIAL_BAUD = 2400        ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 '
HSERIAL_TXSTA = %00100000 
HSERIAL_CLEAR = On

Dim a1 As Byte
Dim a2 As Byte
Dim a3 As Byte
Dim a4 As Byte
Dim a5 As Byte
Dim a6 As Byte
Dim c As Word
Dim d As Word
Dim e As Word
Dim f As Word
Dim g As Word
Dim h As Word
Dim i As Word
Dim j As Word
Dim oku As Byte
Clear
TRISB=0
INTCON = %11000000  'CEVRESEL KESMELER AÇIK 
PIE1   = %00100000  'RCIE ACTIVE 
PIR1  =  %00100000 'RCIF FLAG 
   
On Interrupt GoTo  SERI_KESME
Low PORTB.0

dev:
If oku=1 Then DelayMS 200:c=324:d=563:e=456:f=354:g=54:h=256:i=987:j=634:HSerOut [c,d,e,f,g,h,i,j]:oku=0
GoTo dev
SERI_KESME:
If PIR1.5 = 1 Then 
High PORTB.0
PIE1.5 = 0 
PIR1.5 = 0
HSerIn [a1,a2,a3,a4,a5,a6]
If a1="O" And a2="K" And a3="U" Then oku=1
PIE1.5 = 1
EndIf
Resume
Enable

Device=16F877
XTAL 10
ALL_DIGITAL true
 HSERIAL_BAUD = 2400        ' Set baud rate to 9600
 HSERIAL_RCSTA = %10010000  ' Enable serial port and continuous receive
 HSERIAL_TXSTA = %00100000  ' Enable transmit and asynchronous mode 
 HSERIAL_CLEAR = On         ' Optionally clear the buffer before receiving

 LCD_DTPIN		PORTB.4
 LCD_RSPIN		PORTE.0
 LCD_ENPIN		PORTE.2
 LCD_LINES	   	2
 LCD_INTERFACE	4
 TRISB.0=0
Dim t1 As Byte
Dim a As Byte
Dim a1 As Byte
Dim a2 As Byte
Dim a3 As Byte
Dim a4 As Byte
Dim a5 As Byte
Dim a6 As Byte
Dim b As Word
Dim c As Byte
Dim d As Byte
Dim e As Byte
Dim f As Word
Dim g As Word
Dim h As Word
Dim i As Word
Dim j As Word

Clear
TRISB=255
INTCON = %11000000  'CEVRESEL KESMELER AÇIK 
PIE1   = %00100000  'RCIE ACTIVE 
PIR1  =  %00100000 'RCIF FLAG 
On Interrupt GoTo  SERI_KESME

Low PORTB.0
For b=1 To 500:DelayMS 2:Next
a1="O":a2="K":a3="U"
PIE1.5=0
HSerOut [a1,a2,a3,a4,a5,a6]
PIE1.5=1
dev2:
Print At 1,1, DEC3 f,"-",DEC3 g,"-", DEC3 h,"-",DEC3 i
Print At 2,1, DEC3 j,"-",DEC3 k,"-", DEC3 l,"-",DEC3 m
GoTo dev2
Disable
SERI_KESME:
If PIR1.5 = 1 Then 
PIE1.5 = 0 
PIR1.5 = 0
HSerIn [f,g,h,i,j,k,l,m]
PIE1.5 = 1
EndIf
Resume
Enable
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

Gurkan-Demirbas

Alıntı yapılan: "mech"Tamam ilk testi geçti ama. Gönderdiğim sayıları ISIS'te Lcd'de okutayım dedim, alakasız sayılarla karşılaştım. Bana çalışan bir örnek verebilir misiniz? Sanırım bu iş sandığımdan zor olacak.
Hocam ben PBP kullanıyorum; PBP'da yazılmış program işini görecek ise göndereyim hemen.

Gürkan

mech

olur canım, temel olarak aynı zaten.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

Gurkan-Demirbas

tamamdır vereyim o zaman; bu programı 2 adet 16F628A'yı 433MHz'lik basit alıcı vericide haberleştirebilirmiyim diye 1 sene önce denemiştim.
"Aptalmısın sen kardeşim" diyebilirsiniz; ama deneyip kendi gözümle görmek istemiştim.
Neyse; programı direk kopyalayıp yapıştırıyorum, arada benim daha önce yazdığım bazı notlar ve/veya program bug'ları olabilir. Ama program isis'de ve de protoboard üzerinde (RF'siz direk bağlandığında) sorunsuz çalışıyor.


RECEIVE
'4 MHZ ve 22pF'lık kondansatörlerle Konfigürasyon HS olması gerekiyor
' Başka türlü çalışmıyor
@ DEVICE pic16F628A 
@ DEVICE PIC16F628a, HS_OSC
@ DEVICE pic16F628a, WDT_OFF
@ DEVICE pic16F628a, PWRT_OFF
@ DEVICE pic16F628a, MCLR_ON
@ DEVICE pic16F628a, BOD_OFF
@ DEVICE pic16F628a, LVP_OFF
@ DEVICE pic16F628a, CPD_OFF        ; Data Memory Code Protect
@ DEVICE pic16F628a, PROTECT_OFF    ; Program Code Protection

SYMBOL GIE  =INTCON.7   'genel interruptlary açyyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptlary açyyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit

Define  LCD_DREG        PORTB
Define  LCD_DBIT        4       
Define  LCD_RSREG       PORTB
Define  LCD_RSBIT       3
Define  LCD_EREG        PORTB
Define  LCD_EBIT        0
DEFINE LCD_BITS         4
DEFINE LCD_LINES        2   
       
DEFINE OSC    4         'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 00h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 207 
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

ON INTERRUPT GOTO myint

FLAG	VAR	BIT 
RXsayi	VAR	BYTE 
eski_data	VAR	BYTE 
kesme VAR BYTE
kesme = 0
FLAG=0
        CALL SETUP
        CALL LCD_ILK_KOSUL
        
        RCIE=1
        PEIE=1
        GIE=1  
  LOW TXSTA.2
  
     LOOP:        
         IF (FLAG=1) THEN
            lcdout $FE ,$C0, "Kesme sayisi:", HEX kesme , " ", HEX RXsayi
            FLAG=0
         ENDIF  
      GOTO LOOP
        
        
DISABLE
myint:
    Hserin 1, ERROR, [RXsayi]
    FLAG=1
    kesme = kesme + 1
  ERROR:
    Resume
enable

 
SETUP :
    CMCON = $07
    PORTA=$00      ' //clear port B
    PORTB=$00      ' //clear port A
    INTCON=%00000000
    RCSTA=$90
    TXSTA=$00
    TRISB=%00000010      ' //set bit RB1 to be input and RB2-RB3 output
    TRISA=$00
Return

LCD_ILK_KOSUL:
    HIGH PORTA.3
    Pause 50       ' Wait for LCD to start up        
    LOW PORTA.3
    
    Lcdout $fe, $01   ' Clear screen
    Pause 10       ' Wait .5 second
    Lcdout "Receive Terminal"  
    Pause 1       ' Wait .5 second
      
    
RETURN

END


TRANSMIT
'4 MHZ ve 22pF'lık kondansatörlerle Konfigürasyon HS olması gerekiyor
' Başka türlü çalışmıyor

DEFINE   OSC   4

@ DEVICE pic16F628A 
@ DEVICE PIC16F628a, HS_OSC
@ DEVICE pic16F628a, WDT_OFF
@ DEVICE pic16F628a, PWRT_OFF
@ DEVICE pic16F628a, MCLR_ON
@ DEVICE pic16F628a, BOD_OFF
@ DEVICE pic16F628a, LVP_OFF
@ DEVICE pic16F628a, CPD_OFF        ; Data Memory Code Protect
@ DEVICE pic16F628a, PROTECT_OFF    ; Program Code Protection
'@ DEVICE pic16F628A, XT_OSC ;INTRC_OSC_XT ;NOCLKOUT 'XT_OSC - HS_OSC –


DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 207  
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

DONGU 	VAR	BYTE 
  
CALL SETUP
BASA:
    FOR DONGU = 0 to $FF 
        Hserout [DONGU]
         PAUSE 1000   '1 saniye bekle
    NEXT DONGU

GOTO BASA

SETUP :
    CMCON = $07
    RCSTA=$90
    TXSTA=$20
    TRISB=$00      
    TRISA=$00
    INTCON = $00       
    
Return

END

mech

meraba arkadaşlar. Cevaplarınız için sağolun. 628'in programında Trisb=0 yazdığım için Rx pini iptal olmuş. Sorun çözüldü.Tşk .
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

speak48

Include "PROTON_4.INC" 
On Interrupt GoTo kesme 
Dim yazi[30] As Byte
Dim i,n As Byte
GoTo init

Disable
kesme: 
For i=0 To 29

 HSerIn [yazi[i]]
  If yazi[i]=13 Then
  GoTo geldi
  EndIf
   HSerOut [yazi[i]]
Next i
geldi:
HSerOut [13] 

PIR1.5=0
Resume
Enable

init:
INTCON=%1100000
PIE1.5=1
PIR1.5=0
TRISB=0
TRISC=%11000000 
don:GoTo don

mech

Alıntı yapılan: "speak48"
Include "PROTON_4.INC" 
On Interrupt GoTo kesme 
Dim yazi[30] As Byte
Dim i,n As Byte
GoTo init

Disable
kesme: 
For i=0 To 29

 HSerIn [yazi[i]]
  If yazi[i]=13 Then
  GoTo geldi
  EndIf
   HSerOut [yazi[i]]
Next i
geldi:
HSerOut [13] 

PIR1.5=0
Resume
Enable

init:
INTCON=%1100000
PIE1.5=1
PIR1.5=0
TRISB=0
TRISC=%11000000 
don:GoTo don
sanırım pir1.5'i kesme rutininin başında sıfır yampman gerkiyordu değil mi?
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

selvi

alici kisminda( DEFINE HSER_TXSTA 00h ' Enable transmit, BRGH = 0 )bu tanimlama nicin.ben (DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1)bu sekilde tanimliyorum.programin sorun cikartmasi bundan olabilir mi?
Yaşam anlamlandırıldıkça kutsaldır....

OG

DEFINE HSER_TXSTA 00h veya DEFINE HSER_TXSTA 24h
TXSTA yazmacına atanan deger demektir,

Şu da aynı şey
TXSTA = %00000000  '00h
TXSTA = %00100100  '24h

TXSTA registerine bu atama ile ne iş yapılır o önemli. Datasheete bakmak gerek.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.