18f4550 encoder pals kaçırma sorunu

Başlatan malaga, 07 Ocak 2016, 16:30:57

malaga

arkadaşlar 18f4550 48 mhz de aşagıdaki programda ve aşagıda data sheetini verdiğim encoder da pals kaçırma problemi yaşıyorum bu sorunu nasıl halledebilirim. şimdidden yardımlarınız için teşekkür ediyorum^
kristal 20 mhz

http://www.dunkermotoren.com/data/technical_data/servocomponents/pdf/Inkrementalgeber_RE.pdf#page=1

asm
    __CONFIG _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
    __CONFIG _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_ON_1H           
    __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _BORV_0_2L & _VREGEN_OFF_2L   
    __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
    __CONFIG _CONFIG3H, _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_ON_3H               
    __CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _ICPRT_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_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
    __CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H       
    __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
    __CONFIG _CONFIG7H, _EBTRB_OFF_7H
endasm

Define    OSC   48

DEFINE LCD_DREG   PORTD       'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT      4      'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG   PORTD       'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT      3      'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG   PORTD   'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT   2      '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

DEFINE CCP1_REG   PORTC     'Hpwm 1 pin port
DEFINE CCP1_BIT     2       'Hpwm 1 pin bit
DEFINE CCP2_REG   PORTC     'Hpwm 2 pin port
DEFINE CCP2_BIT     1       'Hpwm 2 pin bit

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 129  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1

PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

TRISD=%00000011   
TRISA=%11111101   
TRISB=%00000000
TRISE=%00001111
TRISC=%10000000

high porta.2

INTCON2 = %10000000
ADCON0 = %00001111
ADCON1 = %00001111
'ADCON2 = %00000000
'SPPCON = 0
CMCON = 7

'SAYI  VAR  WORD
'NEW   var byte
'OLD   VAR BYTE
'YON   var  bit


'-----------------------------------------------------------------------------
CLEAR  'tüm de?i?kenler s?f?rland?
LCDOUT $FE,1
PAUSE 200

'-----------------------------------------------------------------------------


eski var byte           '(use a byte here for PBP)
yeni var byte           '(use a byte here for PBP)
YON var byte     'direction flag bit
b var word





ENC:
ESKI= PORTD & %00000011
basla:
YENI = PORTD & %00000011
IF YENI=ESKI THEN BASLA
IF YON=1 then
   b=b+1
ELSE
   b=b-1
ENDIF
LCDOUT $FE,$03, DEC5 B
GOTO ENC
                             

END
Hiç bir kimsenin gönlünü yapmak için Allahın hükmünü çiğneme


malaga

Portb kesmesi ni kullansam acaba pals  kaçırır mi
Hiç bir kimsenin gönlünü yapmak için Allahın hükmünü çiğneme

esensoy

En tehlikeli an "zafer" anıdır.

malaga

Portb4-portb7 değişiklik  kesmesi mi yoksa portb.0 ve portb.1 kesmesi mi kullanmalıyız sizce
Hiç bir kimsenin gönlünü yapmak için Allahın hükmünü çiğneme

ahmetbudak

Alıntı yapılan: malaga - 08 Ocak 2016, 11:19:17
Portb4-portb7 değişiklik  kesmesi mi yoksa portb.0 ve portb.1 kesmesi mi kullanmalıyız sizce
portb.0 kesmesi kullanabilrsiniz.

esensoy

tasarımın müsaitse b0 ve b1 i kullan
En tehlikeli an "zafer" anıdır.

malaga

Ete hocamin yazısında b4-B7 değişiklik  kesmesi kullanarak  yaparsan iyi olur dedi b0 ve b1 kesmesi ni göre dezavantajı nedir
Hiç bir kimsenin gönlünü yapmak için Allahın hükmünü çiğneme

ete

Encoderin A ve B diye iki çıkışı var. Bu çıkışlar ,%00 - %01 - %10 ve %11 konumlarını alıyor.
Yalnızca PortB.0 kesmesi kullanırsan bu girişlerden birisini kontrol edebilirsin. Üstelik PORTB.0 kesmesi ya düşen kenarda yada yükselen kenarda gerçekleşir. Halbuki sana bir yükselen bir düşen kenar kesmesi gerekiyor.
PORTB değişiklik kesmesi ise bir önceki konuma göre pinlerin farklı konuma geçmesi ile kesme oluşturur. Ayrıca Encoderin iki çıkışını iki pine bağlayarak hangisinde değişiklik olursa kesme oluşmasını sağlamış olursun.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

esensoy

Alıntı yapılan: ete - 08 Ocak 2016, 21:48:29
Encoderin A ve B diye iki çıkışı var. Bu çıkışlar ,%00 - %01 - %10 ve %11 konumlarını alıyor.
Yalnızca PortB.0 kesmesi kullanırsan bu girişlerden birisini kontrol edebilirsin. Üstelik PORTB.0 kesmesi ya düşen kenarda yada yükselen kenarda gerçekleşir. Halbuki sana bir yükselen bir düşen kenar kesmesi gerekiyor.
PORTB değişiklik kesmesi ise bir önceki konuma göre pinlerin farklı konuma geçmesi ile kesme oluşturur. Ayrıca Encoderin iki çıkışını iki pine bağlayarak hangisinde değişiklik olursa kesme oluşmasını sağlamış olursun.

Ete

Hocam ext int yani b0 b1 b2 kesmesi kullanırken kesme içerisinde yükselen kenarda mı düşen kenarda mı tetikleneceğini tekrar kurarsanız takip eden her durumda kesmeye düşer

Ben bir projemde şöyle yapmıştım,
3 adet encoder ın a a/ b b/ değil uçlarını am26ls32 ile a ve b ye çevirdim,
her bir a ve b  uçlarını exor kapısına soktum, çıkışını b0 b1 b2 ext interruptlarına girdim, böylelikle her bir encoderın her bir a b uçlarının düşen ve yükselen kenarlarında kesme oluştu,
kesme içerisinde de a ve b yi okuyup, bir önceki durum ile karılaştırıp 32 bit bir konum değişkeninde tutuyordum, pals falan da kaçırmıyordu,
En tehlikeli an "zafer" anıdır.

ÜC

Ext int yalnıozca portb.0 için geçerli diye biliyordum , yanlışmı biliyorum ?

kimlenbu

bu nereye bağlı, bir turda 100-1000 arası pals üretiyor modele göre. kaç devirle/dk ile dönecek ? ve sizdekinin tam modeli nedir ?

vitruvius

Alıntı yapılan: umitco - 09 Ocak 2016, 12:49:47
Ext int yalnıozca portb.0 için geçerli diye biliyordum , yanlışmı biliyorum ?

Kullanılan mikroişlemciye göre değişir. Datasheet'te "Pinout I/O Descriptions" yada "Interrupts" kısmına bakabilirsiniz.

18f4550 datasheet:
http://ww1.microchip.com/downloads/en/devicedoc/39632c.pdf

Pinout I/O Descriptions: Sayfa 20
Interrupts: Sayfa 99

malaga

#13
Data sheet deki  re20  modeli
Saniyede 2 tur
Hiç bir kimsenin gönlünü yapmak için Allahın hükmünü çiğneme

ÜC

Alıntı yapılan: vitruvius - 09 Ocak 2016, 14:36:42
Kullanılan mikroişlemciye göre değişir. Datasheet'te "Pinout I/O Descriptions" yada "Interrupts" kısmına bakabilirsiniz.

18f4550 datasheet:
http://ww1.microchip.com/downloads/en/devicedoc/39632c.pdf

Pinout I/O Descriptions: Sayfa 20
Interrupts: Sayfa 99

Teşekkürler , bunuda attık ambara...