P10 panel sürmek

Başlatan gogoce, 20 Şubat 2021, 16:07:38

gogoce

Elimdeki devre bu şekilde daha önceden de kullanıyordum

Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

aRci

Merhaba
değişiklik yaptıktan sonraki halini paylaşırmısını. muhtemelen kesme kısmında problem olabilir. senin paylaşştığın kodda kesme rutunine gidince "WG" alındıktan sonra 12 byte veri almayı sürekli bekleyen bir halde eğer gelen bilgi "WG01234" Şeklinde gelecekse zaten bu kodda takılı kalması ve çalışmıyor olması normal.

gogoce

Alıntı yapılan: aRci - 11 Nisan 2021, 15:09:24Merhaba
değişiklik yaptıktan sonraki halini paylaşırmısını. muhtemelen kesme kısmında problem olabilir. senin paylaşştığın kodda kesme rutunine gidince "WG" alındıktan sonra 12 byte veri almayı sürekli bekleyen bir halde eğer gelen bilgi "WG01234" Şeklinde gelecekse zaten bu kodda takılı kalması ve çalışmıyor olması normal.
Alıntı yapılan: aRci - 11 Nisan 2021, 15:09:24Merhaba
değişiklik yaptıktan sonraki halini paylaşırmısını. muhtemelen kesme kısmında problem olabilir. senin paylaşştığın kodda kesme rutunine gidince "WG" alındıktan sonra 12 byte veri almayı sürekli bekleyen bir halde eğer gelen bilgi "WG01234" Şeklinde gelecekse zaten bu kodda takılı kalması ve çalışmıyor olması normal.

nasıl yani anlamadım
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

DISABLE         
KESME:
HSERIN [WAIT ("WG"),VERI[0],VERI[1],VERI[2],VERI[3],VERI[4],VERI[5],VERI[6]]  
TOGGLE PORTB.1
        TEMP=RCREG 

        
RESUME         
ENABLE


Kesme programını bu şekilde kısalttım değişen olmadı
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

aRci

test olarak ilk önce kesmeye gidildiğini test edelim

DISABLE        
KESME:
Hserout ["Kesti...",13]

HSERIN [VERI[0]]  
Gec:
TEMP=RCREG 
if VERI[0] = "1" then Toggle portc.1
toggle portc.0
Hserout [VERI[0]]        
RESUME        
ENABLE

gogoce

sadece rx kullanıyorum. TX kullanmıyorum kesmede toggle portb.1 var kesmekye girebilse ordan anlayacağım ama çözemedim.
programda GIE 1 set etmemişim onu farkettim
daha sonra dtrxp bitini 1 yaptım yine olmadı
şimdi
TABLE 18-5: BAUD RATES FOR ASYNCHRONOUS MODES
tablosunu inceliyordum
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

@ete hocam uart olayında takıldım yardımcı olabilir misiniz?
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

aRci

Merhaba
Simulasyonda çalışan bir program test edebilir misiniz.

asm
 __CONFIG    _CONFIG1H, _FOSC_HSPLL_1H & _FCMEN_OFF_1H & _IESO_ON_1H
 __CONFIG    _CONFIG2L, _PWRT_OFF_2L & _BOREN_OFF_2L 
 __CONFIG    _CONFIG2H, _WDTEN_OFF_2H 
 __CONFIG    _CONFIG3H, _MCLRE_ON_3H & _HFOFST_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_PORTC_3H 
 __CONFIG    _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L 
 __CONFIG    _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L
 __CONFIG    _CONFIG5H, _CPB_ON_5H & _CPD_ON_5H 
 __CONFIG    _CONFIG6L, _WRT0_ON_6L & _WRT1_ON_6L & _WRT2_ON_6L & _WRT3_ON_6L
 __CONFIG    _CONFIG6H, _WRTB_ON_6H & _WRTC_ON_6H & _WRTD_ON_6H  
 __CONFIG    _CONFIG7L, _EBTR0_ON_7L & _EBTR1_ON_7L & _EBTR2_ON_7L & _EBTR3_ON_7L 
 __CONFIG    _CONFIG7H, _EBTRB_ON_7H
endasm
define OSC 64
TRISA = %00000000
TRISB = %00000000
TRISC = %10000000
TRISD = %00000000
TRISE.0=0
TRISE.1=0
TRISE.2=0
TRISE.3=0
OSCCON=%01110000 
OSCTUNE=%01000000                                      

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_SPBRG 130 ' 9600 Baud @ 64MHz, -0,02%
SPBRGH = 6
BAUDCON.3 = 1         ' Enable 16 bit baudrate generator

Symbol OERR      = RCSTA.1    'Sürekli veri alma etkin = 1
Symbol CREN      = RCSTA.4    'Sürekli veri alma etkin = 1
Symbol TMR0IF    = INTCON.2    'TMR0 Taşma Bayrağı Ouyarak Sıfırlanmalı

INTCON=%11000000
T0CON= %11010111
PIE1= %00100000
PIR1= %00000000
IPR1= %01111111
RCSTA= %10010000
TXSTA= %00100000

P10_A VAR PORTD.1  
P10_B VAR PORTB.2 
CLK VAR PORTC.3
DTA VAR PORTC.5
LATCH VAR PORTD.2
OE VAR PORTD.3    
SSPSTAT =%11000111
SSPCON1 =%00100001
clear
pause 250
porta=0
portb=0
portc=0
portd=0
porte=0

A var byte [32]
B var byte [32]
C var byte [32]
D var byte [32]
Y VAR BYTE
x var WORD
SAYI VAR LONG
S1 VAR BYTE
S2 VAR BYTE
S3 VAR BYTE
S4 VAR BYTE
S5 VAR BYTE
S6 VAR BYTE
S7 VAR BYTE
S8 VAR BYTE
VERI VAR BYTE [12]
TEMP VAR BYTE

FOR X=31 TO 0 STEP -1
A[X]=255
B[X]=255
c[X]=255
d[X]=255
NEXT X
PORTB.1=1
PAUSE 500
PORTB.1=0
Hserout ["Kesti...",13]
    Hserout ["INTCON=%",bin8 INTCON,13,"T0CON= %",bin8 T0CON,13,"PIE1= %",bin8 PIE1,13,_
             "PIR1= %",bin8 PIR1,13,"IPR1= %",bin8 IPR1,13,"RCSTA= %",bin8 RCSTA,13,_
             "TXSTA= %",bin8 TXSTA,13]
ON INTERRUPT GOTO KESME 'komut satırını ekle programa (BASLA satırından bir evvele koyabilirsin)
BASLA:
portd =  BAUDCTL
Portb = TXSTA
s1=veri[7]
s2=veri[6]
s3=veri[5]
s4=veri[4]
s5=veri[3]
s6=veri[2]
s7=veri[1]
s8=veri[0]

'GOSUB RAKAM_AL
'GOSUB TARA
if OERR = 1 then CREN = 0:CREN = 1
goto basla

;RAKAM AL ALT PROGRAMI UZUN OLDUĞU İÇİN EKLEMEDİM
DISABLE        
KESME:
Hserout ["Kesti...",13]
if TMR0IF = 1 then 
toggle portc.2
Temp = TMR0IF
endif


HSERIN [VERI[0]]  
Gec:
TEMP=RCREG 
if VERI[0] = "1" then Toggle portc.1
toggle portc.0
Hserout [VERI[0]]        
RESUME        
ENABLE
        
        
        
END



gogoce

Alıntı yapılan: aRci - 15 Nisan 2021, 17:38:53Merhaba
Simulasyonda çalışan bir program test edebilir misiniz.

asm
 __CONFIG    _CONFIG1H, _FOSC_HSPLL_1H & _FCMEN_OFF_1H & _IESO_ON_1H
 __CONFIG    _CONFIG2L, _PWRT_OFF_2L & _BOREN_OFF_2L 
 __CONFIG    _CONFIG2H, _WDTEN_OFF_2H 
 __CONFIG    _CONFIG3H, _MCLRE_ON_3H & _HFOFST_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_PORTC_3H 
 __CONFIG    _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L 
 __CONFIG    _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L
 __CONFIG    _CONFIG5H, _CPB_ON_5H & _CPD_ON_5H 
 __CONFIG    _CONFIG6L, _WRT0_ON_6L & _WRT1_ON_6L & _WRT2_ON_6L & _WRT3_ON_6L
 __CONFIG    _CONFIG6H, _WRTB_ON_6H & _WRTC_ON_6H & _WRTD_ON_6H  
 __CONFIG    _CONFIG7L, _EBTR0_ON_7L & _EBTR1_ON_7L & _EBTR2_ON_7L & _EBTR3_ON_7L 
 __CONFIG    _CONFIG7H, _EBTRB_ON_7H
endasm
define OSC 64
TRISA = %00000000
TRISB = %00000000
TRISC = %10000000
TRISD = %00000000
TRISE.0=0
TRISE.1=0
TRISE.2=0
TRISE.3=0
OSCCON=%01110000 
OSCTUNE=%01000000                                      

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_SPBRG 130 ' 9600 Baud @ 64MHz, -0,02%
SPBRGH = 6
BAUDCON.3 = 1         ' Enable 16 bit baudrate generator

Symbol OERR      = RCSTA.1    'Sürekli veri alma etkin = 1
Symbol CREN      = RCSTA.4    'Sürekli veri alma etkin = 1
Symbol TMR0IF    = INTCON.2    'TMR0 Taşma Bayrağı Ouyarak Sıfırlanmalı

INTCON=%11000000
T0CON= %11010111
PIE1= %00100000
PIR1= %00000000
IPR1= %01111111
RCSTA= %10010000
TXSTA= %00100000

P10_A VAR PORTD.1  
P10_B VAR PORTB.2 
CLK VAR PORTC.3
DTA VAR PORTC.5
LATCH VAR PORTD.2
OE VAR PORTD.3    
SSPSTAT =%11000111
SSPCON1 =%00100001
clear
pause 250
porta=0
portb=0
portc=0
portd=0
porte=0

A var byte [32]
B var byte [32]
C var byte [32]
D var byte [32]
Y VAR BYTE
x var WORD
SAYI VAR LONG
S1 VAR BYTE
S2 VAR BYTE
S3 VAR BYTE
S4 VAR BYTE
S5 VAR BYTE
S6 VAR BYTE
S7 VAR BYTE
S8 VAR BYTE
VERI VAR BYTE [12]
TEMP VAR BYTE

FOR X=31 TO 0 STEP -1
A[X]=255
B[X]=255
c[X]=255
d[X]=255
NEXT X
PORTB.1=1
PAUSE 500
PORTB.1=0
Hserout ["Kesti...",13]
    Hserout ["INTCON=%",bin8 INTCON,13,"T0CON= %",bin8 T0CON,13,"PIE1= %",bin8 PIE1,13,_
             "PIR1= %",bin8 PIR1,13,"IPR1= %",bin8 IPR1,13,"RCSTA= %",bin8 RCSTA,13,_
             "TXSTA= %",bin8 TXSTA,13]
ON INTERRUPT GOTO KESME 'komut satırını ekle programa (BASLA satırından bir evvele koyabilirsin)
BASLA:
portd =  BAUDCTL
Portb = TXSTA
s1=veri[7]
s2=veri[6]
s3=veri[5]
s4=veri[4]
s5=veri[3]
s6=veri[2]
s7=veri[1]
s8=veri[0]

'GOSUB RAKAM_AL
'GOSUB TARA
if OERR = 1 then CREN = 0:CREN = 1
goto basla

;RAKAM AL ALT PROGRAMI UZUN OLDUĞU İÇİN EKLEMEDİM
DISABLE        
KESME:
Hserout ["Kesti...",13]
if TMR0IF = 1 then 
toggle portc.2
Temp = TMR0IF
endif


HSERIN [VERI[0]]  
Gec:
TEMP=RCREG 
if VERI[0] = "1" then Toggle portc.1
toggle portc.0
Hserout [VERI[0]]        
RESUME        
ENABLE
        
        
        
END


sanırım baudrate hatam var yada başka bir problem var 2 max232 ile netice alamadım farklı bir rs232 converter ile deniyorum 13:28:07.310 -> ⸮xxxx⸮x⸮x⸮⸮xx⸮x⸮xx sonuç bu şekilde.
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

ete

RS232 entegresi belalıdır. Bilmeyenleri epeyce zorlar. Her şeyden önce kondansatörlerin bağlantı şekline çok dikkat etmek gerekir. Zira bazıları negatif kutupları insana ters geliyor. Öncelikle şemanın doğruluğunu kontrol etmeni öneririm.
Elbette baud rate de hatalı olabilir ama onu milticalc hesaplayıp vermiş fazla hata arama orada bence.
Usart kullandığın zaman TX pinini TX olarak kullanmasanda başka amaçlar için kullanamazsın. Derleyici o pine rezerv koyuyor bunuda unutma.

RS232 entegresinin doğru çalışıp çalışmadığını anlamanın bir yolu var aslında. TTL girişine HIGH yani +5V ver direnç üzerinden de verebilirsin. Onun karşılığı olan RS232 çıkışını ölç bakalım -10V civarında ama ters voltaj olarak çıkış almalısın. Bu voltaj 7V lara kadar düşebilir ama daha aşağı düşmemesi gerekir. Aynı girişe LOW verdiğin zamanda karşıdan bu sefer pozitif 7-10 V aralığında bir voltaj alman gerekir.

Ete

aRci

Merhaba.
Simulatorde verileri alabiliyorum. ve geri gönderiyor. eğer devrenin doğruluğundan eminsek geriye sigorta ayarları kaynaklı olabilir.


gogoce

Alıntı yapılan: ete - 17 Nisan 2021, 18:16:26RS232 entegresi belalıdır. Bilmeyenleri epeyce zorlar. Her şeyden önce kondansatörlerin bağlantı şekline çok dikkat etmek gerekir. Zira bazıları negatif kutupları insana ters geliyor. Öncelikle şemanın doğruluğunu kontrol etmeni öneririm.
Elbette baud rate de hatalı olabilir ama onu milticalc hesaplayıp vermiş fazla hata arama orada bence.
Usart kullandığın zaman TX pinini TX olarak kullanmasanda başka amaçlar için kullanamazsın. Derleyici o pine rezerv koyuyor bunuda unutma.

RS232 entegresinin doğru çalışıp çalışmadığını anlamanın bir yolu var aslında. TTL girişine HIGH yani +5V ver direnç üzerinden de verebilirsin. Onun karşılığı olan RS232 çıkışını ölç bakalım -10V civarında ama ters voltaj olarak çıkış almalısın. Bu voltaj 7V lara kadar düşebilir ama daha aşağı düşmemesi gerekir. Aynı girişe LOW verdiğin zamanda karşıdan bu sefer pozitif 7-10 V aralığında bir voltaj alman gerekir.

Ete

Hazır çalışan bir max232 üzerinde denemeler yapıyorum hocam. Nitekim picmulticalc ile değerleri alıp programa eklemiştim ama nasıl olduysa hata yapmışım . Tekrar hesaplatınca doğru ayarlar ile uart çalışır hale geldi. Şimdi cihazdan okuduğum veriyi pc ye gönderebiliyorum.
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

Alıntı yapılan: aRci - 17 Nisan 2021, 22:31:23Merhaba.
Simulatorde verileri alabiliyorum. ve geri gönderiyor. eğer devrenin doğruluğundan eminsek geriye sigorta ayarları kaynaklı olabilir.


sorun
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_SPBRG 130 ' 9600 Baud @ 64MHz, -0,02%
SPBRGH = 6
BAUDCON.3 = 1         ' Enable 16 bit baudrate generator
satırlarındaymış.
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

Powered by EzPortal