18f4550 encoder pals kaçırma sorunu

Başlatan malaga, 07 Ocak 2016, 12:23:02

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

Mucit23

Selamlar.

Kullandığınız enkoder ler nispeten yüksek çözünürlüğe sahip. Örneğin 1 turda 512pulse veren bir enkoder var ise ve motor dakikada 500rpm civarı dönüyorsa enkoderden gelen pulsların sayısı 4000'inin üzerine çıkar. Bu frekansta gelen bir sinyali doğrudan kod ile yakalamak pek mümkün olmayabilir. En sağlam çözüm Pic içerisindeki Timer donanımıyla gelen puls ları saymaktır.

Bu yazımı iyice bir okuyun fikir verecektir size.
http://arectron.com/microchip/pic16f628_ile_aci_olcer.html
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

malaga

üstadım gayet güzel yazmışsın ama ben c bilmiyorum basic bildiğim için birşey anlamadım basic te timer kesme olmadan nasıl kullanılıyor.

Hattuşa

sanırım bir dersten aynı konuyu birkaç öğrenciye veriyorlar, geçen hafta öğrencinin birisi için yaptığım bir yardım. umarım işine yarar. bu arada rpm formulünü kendin hesaplarsın. şema ve kod gerçekte çalışıyor

Powered by EzPortal