18F252 OSC TANIMLAMASI

Başlatan zeus48, 30 Nisan 2020, 14:15:25

zeus48

Arkadaşlar mrb.  18f252  osc tanımlamasını aşağıdaki gibi yaptım  çalışmadı. Dataheed okudum anladığım bu kadardı. Bilen arkadşlardan yardım istiyorum iyi çalışmalar
Alıntı Yap'İŞLEMCİ  :18F252

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;İŞLEMCİ AYARLARI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


@ __CONFIG _XT_OSC
@ __CONFIG    _CONFIG2H, _WDT_OFF_2H 
@ __CONFIG    _CONFIG5H, _CPB_ON_5H

DEFINE OSC 4

ADCON1=7 'ADC leri iptal pinlerin hepsi digital
INTCON2=0   ; PORT B PULLUP DEVREDE



TRISA=%00010000
TRISB=%00111111
TRISC=%00000000

PORTA=0
PORTB=0
PORTC=0

ete

#1
Tüm ayarlar aşağıdaki şekilde istediğini seç.


asm
    __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H  ;  _HSPLL_OSC_1H      
    __CONFIG _CONFIG2L, _BOR_ON_2L  & _BORV_20_2L & _PWRT_OFF_2L
  __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
    __CONFIG _CONFIG3H, _CCP2MX_ON_3H
    __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
    
    __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
    __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H    
    
;    __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, _WRTC_OFF_6H & _WRTB_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
MPASM klasörü içinde p18F252.INC dosyasını bul ve ya MCS yada text editör ile açıp sonlara doğru yer alan bu ayarları gözden geçir. Alternatifleri ile verilmiş olmalı. Oradan seçsen daha iyi olur senin için.
Ete

zeus48

Cevabın için tşk hocam. Başındada yazdın okudum anlayamadım diye.
18f252  işlemcinin 4 mhz kristalle çalışması için ne yazmam lazım. Benim kapasitem bu kadar. Tşk

zeus48

Yadığım kodlar isiste düzgün çalışıyor. Çünki osc orada biz seciyoruz. Ama devreye taktığımda garib çalışıyor

ete

Garip çalışıyor kelimesi sorunu açıklamaya yetmiyor. Biraz detay verebilirsen belki bir yorum yapma şansına sahip olabiliriz. Ne yapıyorda sen ona garip çalışma diyorsun?

4 Mhz lik bir kristal yada rezonatör bağladın umarım devreye. Kristal bağladın ise uçlarını 22pF kondansatörle GND ye verdin herhalde. MCLR bacağına bir pullup direncide bağlamışsındır sanırım.
BU saydıklarım Isisin var kabul ettiği seçeneklerdir. Ama gerçek devrende bunların mutlaka yer alması gerekir.

Sigorta ayarlarında yer almayan BorV seçimi en azından _BORV_20_2L şeklinde seçilmeliki besleme voltajın ancak 2V un altına düşerse sistem resetlensin yada kapatılsın. BU ayar _BORV_45_2L şeklinde ise (default olarak) besleme 4,5V altına düşerse pic kendini kapatacaktır.

_WDT_OFF_2H  şeklinde wdt kapatılmalıdır aksi halde bekleme anlarında sürekli reset atar.

_STVR_OFF_4L   seçeneği kapatılmalıdır aksi halde stac taşması sürekli reset atar.

_LVP_OFF_4L  seçeneği kapatılmalıdır aksi halde ICSP de 5V ile programlama moduna girer işlemci.

diğerleri sorun yaratacak seçenekler değiller.

Ete

zeus48

;Ete hocam mrb . Dediğiniz config ayarlarını koydum. Derledim 18f252 hex yükledim yaptığım devreye taktığımda ekran geliyor herhangi bir butonu bastığımda reset atıyor.
Aynı kodları 16f873a işlemcisine uyarlıyorum  ve aynı devreye takıyorum sorunsuz çalışıyor.
Nerde hata yaptığımı anlayamadım.

Devrede besleme sorunu olsa yada mcrl direncinde hata olsa  xt ve 22pf larda hata olsa 16f873a neden çalışsın ?

''****************************************************************
'*  İşlemci : 18F252                                                 *
'****************************************************************

@ __CONFIG _CONFIG1H, _XT_OSC_1H
@ __CONFIG _CONFIG2H, _WDT_OFF_2H  
@ __CONFIG _CONFIG5H, _CPB_ON_5H
@ __CONFIG _CONFIG4L, _STVR_OFF_4L
@ __CONFIG _CONFIG4L, _LVP_OFF_4L 
DEFINE OSC 4

ADCON0=0 'ADC leri iptal pinlerin hepsi digital 
INTCON2=0   ; PORT B PULLUP DEVREDE
TRISA=%00000000
TRISB=%00111100
TRISC=%00000000

PORTA=0
PORTB=0
PORTC=0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;LCD TANIMLAMALARI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEFINE LCD_DREG    PORTC  
DEFINE LCD_DBIT    0      
DEFINE LCD_EREG    PORTB  
DEFINE LCD_EBIT    7      
DEFINE LCD_RSREG    PORTB 
DEFINE LCD_RSBIT  6                             
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
'************  DEĞİŞKENLER  *******************
X VAR BYTE
Z VAR BYTE
MEM VAR BYTE
MEZ VAR BYTE
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
GUN VAR BYTE
AY VAR BYTE                                                       
YIL VAR BYTE
HFGUN  VAR BYTE
SAYI VAR BYTE
BIRLER VAR BYTE
ONLAR VAR BYTE
MENUS VAR BYTE 'SELECT CASE SEÇİM DEĞİŞKENİ




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;DS1302 TANIMLAMASI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SYMBOL  RTC_DTA=PORTA.1
SYMBOL  RTC_CLK=PORTA.0
SYMBOL  RTC_RST=PORTA.2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

'******************   GİRİŞ-ÇIKIŞ TANIMLAMA ************************
SYMBOL  SEC   =PORTB.5 'GİRİŞ-MENU BUTONU 
SYMBOL  ASAGI =PORTB.4  'GİRİŞ-AŞAĞI BUTONU
SYMBOL  YUKARI=PORTB.2  'GİRİŞ-YUKARI BUTONU
SYMBOL  TMM=PORTB.3  'GİRİŞ-TMM BUTONU

'*******************************************************************
                                     

'*********************   ANA DÖNGÜ  *******************************************
BASLA:
GOSUB ZAMAN_OKU
GOSUB EKRAN0
IF SEC=0 THEN GOTO MENU
PAUSE 500

goto BASLA
''******* :)))))))))   SAAT İLE İLGİLİ SATIRLAR ******************


ZAMAN_OKU:
         HIGH RTC_RST
         SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BF]
         SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, HFGUN, YIL, MEZ]  'OKU
         MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         LOW RTC_RST :PAUSE 100
         RETURN
         
ZAMAN_YAZ:
            
        HIGH  RTC_RST 
        SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BE, 0]    'YAZMAK İÇİN HAZIRLA
        LOW RTC_RST:PAUSE 1
        HIGH  RTC_RST 
        SHIFTOUT RTC_DTA, RTC_CLK, 0, [$90, 169]    'ŞARJ AÇILDI
        LOW RTC_RST:PAUSE 1         
        HIGH RTC_RST          
        SHIFTOUT  RTC_DTA, RTC_CLK, 0, [$BE,SN, DAK, SAAT,GUN , AY,HFGUN,  YIL, 0]  'YAZ
        LOW RTC_RST 
        PAUSE 10
        RETURN
         
''*******:))))))))))))))  EKRANLAR   *********************
EKRAN0:
LCDOUT $FE,$80,DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
LCDOUT $FE,$C0,DEC2 GUN,"/",DEC2 AY,"/20",DEC2 YIL,"/"
GOSUB DAYYAZ
RETURN
EKRAN1:
LCDOUT $FE,1
LCDOUT $FE,$80,"SAAT AYARI"
LCDOUT $FE,$C0,DEC2 SAAT,":",DEC2 DAK
RETURN                
EKRAN2:
LCDOUT $FE,$80,"TARIH AYARI"
LCDOUT $FE,$C0,DEC2 GUN,"/",DEC2 AY,"/20",DEC2 YIL,"/"
GOSUB DAYYAZ
RETURN
''*** :))))))))))))))))    :))))))))))))))))))
CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
         RETURN
TERSCEVIR:
        ONLAR=MEM DIG 1
        ONLAR=ONLAR<<4
        BIRLER=MEM DIG 0
        SAYI=ONLAR|BIRLER 
RETURN

' --- MENÜ EKRANI ----         
MENU:
SELECT CASE MENUS
CASE 0
LCDOUT $FE,1
LCDOUT $FE,$80,"TARIH AYARI"
LCDOUT $FE,$C0,">>TMM>>"
PAUSE 200
WHILE TMM=1
IF YUKARI=0 THEN
MENUS=MENUS+1
GOTO MENU
ENDIF
WEND
GOTO TGUN
CASE 1
LCDOUT $FE,1
LCDOUT $FE,$80,"SAAT AYARI"
LCDOUT $FE,$C0,">>TMM>>"
PAUSE 200
WHILE TMM=1
IF YUKARI=0 THEN
MENUS=MENUS+1
GOTO MENU
ENDIF
WEND
GOTO HOUR
CASE 2
LCDOUT $FE,1
LCDOUT $FE,$80,"SERVIS MENU"
LCDOUT $FE,$C0,">>TMM>>"
PAUSE 200
WHILE TMM=1
IF YUKARI=0 THEN
MENUS=MENUS+1
GOTO MENU
ENDIF
WEND
MENUS=4
GOTO MENU
CASE 3
LCDOUT $FE,1
LCDOUT $FE,$80,"MENU CIKIS"
LCDOUT $FE,$C0,">>TMM>>"
PAUSE 200
WHILE TMM=1
IF YUKARI=0 THEN
MENUS=0
GOTO MENU
ENDIF
WEND
MENUS=0
CASE 0
LCDOUT $FE,1
GOTO BASLA

END SELECT

'''************* :))))) SAAT AYAR BÖLÜMÜ   *******************
HOUR:  
GOSUB EKRAN1
LCDOUT $FE, $C0
LCDOUT $FE, $14
LCDOUT $FE, $0F 'DDD
PAUSE 200
       IF TMM=0 THEN MINUTE
       IF SEC=0 THEN
       LCDOUT $FE,08
       PAUSE 10
       LCDOUT $FE,$0C
       GOTO MENU
       ENDIF
       IF YUKARI=0 THEN
          SAAT=SAAT+1
          IF SAAT=24 THEN SAAT=0       
        ENDIF   
        IF ASAGI=0 THEN
           SAAT=SAAT-1
           IF SAAT=255 THEN SAAT=23
        ENDIF   
        GOTO HOUR
        
       
MINUTE: 
        GOSUB EKRAN1
        LCDOUT $FE, $C0
        LCDOUT $FE, $14: LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14
        LCDOUT $FE, $0F'DDD
        PAUSE 200
        IF TMM=0 THEN KAYDET
        IF SEC=0 THEN
       LCDOUT $FE,08
       PAUSE 10
       LCDOUT $FE,$0C
       GOTO HOUR
       ENDIF
        IF YUKARI=0 THEN
           DAK=DAK+1
           IF DAK=60 THEN DAK=0
        ENDIF
        IF ASAGI=0 THEN
           DAK=DAK-1
           IF DAK=255 THEN DAK=59              
        ENDIF
        GOTO MINUTE
'''*********** :)))))  TARİH AYAR BÖLÜMÜ  *********************        
       TGUN:  
GOSUB EKRAN2
LCDOUT $FE, $C0
LCDOUT $FE, $14
LCDOUT $FE, $0F'DDD
PAUSE 200
       IF TMM=0 THEN TAY
       IF SEC=0 THEN
       LCDOUT $FE,08
       PAUSE 10
       LCDOUT $FE,$0C
       GOTO MENU
       ENDIF
       IF YUKARI=0 THEN
          GUN=GUN+1
          IF GUN=32 THEN GUN=1       
        ENDIF   
        IF ASAGI=0 THEN
           GUN=GUN-1
           IF GUN=0 THEN GUN=31
        ENDIF   
        GOTO TGUN
      
        TAY: 
        GOSUB EKRAN2
        LCDOUT $FE, $C0
        LCDOUT $FE, $14: LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14
        LCDOUT $FE, $0F'DDD
        PAUSE 200
        IF TMM=0 THEN TYIL
        IF SEC=0 THEN
       LCDOUT $FE,08
       PAUSE 10
       LCDOUT $FE,$0C
       GOTO TGUN
       ENDIF
        IF YUKARI=0 THEN
           AY=AY+1
           IF AY=13 THEN AY=1
        ENDIF
        IF ASAGI=0 THEN
           AY=AY-1
           IF AY=0 THEN AY=12              
        ENDIF
        GOTO TAY
          TYIL: 
        GOSUB EKRAN2
        LCDOUT $FE, $C0
        LCDOUT $FE, $14: LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14
        LCDOUT $FE, $0F'DDD
        PAUSE 200
        IF TMM=0 THEN TDAY
        IF SEC=0 THEN
       LCDOUT $FE,08
       PAUSE 10
       LCDOUT $FE,$0C
       GOTO TAY
       ENDIF
        IF YUKARI=0 THEN
           YIL=YIL+1
           IF YIL=100 THEN YIL=12
        ENDIF
        IF ASAGI=0 THEN
           YIL=YIL-1
           IF YIL=11 THEN YIL=99              
        ENDIF
        GOTO TYIL
            TDAY:
        GOSUB EKRAN2
        LCDOUT $FE, $C0
        LCDOUT $FE, $14: LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14
        LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14:LCDOUT $FE, $14
        LCDOUT $FE, $0F'DDD
        PAUSE 200
        IF TMM=0 THEN KAYDET
        IF SEC=0 THEN
       LCDOUT $FE,08
       PAUSE 10
       LCDOUT $FE,$0C
       GOTO TYIL
       ENDIF
        IF YUKARI=0 THEN
           HFGUN=HFGUN+1
           IF HFGUN=8 THEN HFGUN=1
        ENDIF
        IF ASAGI=0 THEN
           HFGUN=HFGUN-1
           IF HFGUN=0 THEN HFGUN=7             
        ENDIF
        GOTO TDAY 
'''***** :)))))) AYARLARI KAYDET BÖLÜMÜ *********
KAYDET:
SELECT CASE MENUS
CASE 0   
LCDOUT $FE,08
PAUSE 10
LCDOUT $FE,$0C
LCDOUT $FE,$80,"*TARIH AYARLANDI*"
PAUSE 2000
LCDOUT $FE,1
MENUS=1:GOTO MENU
CASE 1
LCDOUT $FE,08
PAUSE 10
LCDOUT $FE,$0C
LCDOUT $FE,$80,"*SAAT AYARLANDI*"
PAUSE 2000
LCDOUT $FE,1
END SELECT
        MEM=DAK:GOSUB TERSCEVIR:DAK=SAYI'&%01111111
        MEM=SAAT:GOSUB TERSCEVIR:SAAT=SAYI'&%00011111
        MEM=GUN:GOSUB TERSCEVIR:GUN=SAYI'&%00111111
        MEM=AY:GOSUB TERSCEVIR:AY=SAYI'&%00011111
        MEM=YIL:GOSUB TERSCEVIR:YIL=SAYI 
        SN=0
        MENUS=0
        GOSUB ZAMAN_YAZ:PAUSE 100
        GOSUB ZAMAN_OKU      
        GOTO BASLA       
'''***** :))))))  GÜN YAZMA TEKRARI  ************
DAYYAZ:
SELECT CASE HFGUN
CASE 1
LCDOUT $FE,$CB,"PAZR"
CASE 2
LCDOUT $FE,$CB,"PZTS"
CASE 3
LCDOUT $FE,$CB,"SALI"
CASE 4
LCDOUT $FE,$CB,"CARS"
CASE 5
LCDOUT $FE,$CB,"PERS"       
CASE 6
LCDOUT $FE,$CB,"CUMA"
CASE 7
LCDOUT $FE,$CB,"CMTS"
CASE ELSE
LCDOUT $FE,$CB,"HATA"
END SELECT
RETURN


END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

zeus48

Note 1: External Power-on Reset circuit is required
only if the VDD power-up slope is too slow.
The diode D helps discharge the capacitor
quickly when VDD powers down.
2: R < 40 kΩ is recommended to make sure that
the voltage drop across R does not violate
the device's electrical specification.
3: R1 = 100Ω to 1 kΩ will limit any current flowing into MCLR from external capacitor C, in
the event of MCLR/VPP pin breakdown due to
Electrostatic Discharge (ESD) or Electrical
Overstress (EOS).



ete  hocam 18f252  data bilgisinde bunlar yazıyordu sanırım  sorunum bu galiba . Ne dersiniz ?

ete

Programında bazı kusurlar var ondan olmasın.
Kusur-1:
Bu işlemcide A portu anlogdur hemde default olarak. İptal etmek için ADCON1=7 vermen gerekir. Sende eksik. ADCON0 registeri iptal işini yapmaz. O komutu silmen gerekir.

Kusur-2:
LCD nin ayarlanması için aşağıdaki formatı kullan. Bazı şeyler eksik kalmış.
DEFINE LCD_DREG PORTC 'LCD data port 
DEFINE LCD_DBIT 0 'LCD data başlangıç biti 0 veya 4 
DEFINE LCD_RSREG PORTB 'LCD register port seçimi
DEFINE LCD_RSBIT 6 'LCD register select bit 
DEFINE LCD_EREG PORTB 'LCD enable port 
DEFINE LCD_EBIT 7 'LCD enable bit 
 
DEFINE LCD_BITS 4 'LCD bus size 4 or 8 
DEFINE LCD_LINES 2 'Number lines on LCD 
DEFINE LCD_COMMANDUS 2000 'Command delay time in us 
DEFINE LCD_DATAUS 50 'Data delay time in us 
Kusur-3: Programında açılış gecikmesi eksik. Bu durumda pic rastgele açılıyor ve registerlerde rastgele değer alıyordur. Buda bir hata sebebi olabilir. BASLA satırından evvel veya değişken tanımlamalarından hemen sonra programa PAUSE 300 ekle.
Başkada bir kusur bulamadım.
Bunları düzelttikten sonra çalışması gerekir. Çalışmıyor ise devrende ,besleme kaynağında , kristalinde bir sorun olabilir. Hepsi doğru ve sağlam ise işlemcin çakma olabilir başkada söyleyecek laf bulamıyorum artık.

Ete

Powered by EzPortal