16F88 PWM

Başlatan zeus48, 18 Nisan 2022, 03:42:46

ete

Lib (library) dosyasına bağlı bir hata oluşuyor.
Bu durumda kurduğunuz programda kusur var gözüküyor. Yada yamaların sıralaması yanlış olmuş gibi hissediyorum.

Ete

zeus48

Bu hata  PBP  demi hocam

ete

#17
Öyle olduğunu düşünüyorum. Uyguladığın yamalar genelde Lib ve INC dosyalarında değişiklik yapıyor.
Ya yama olması gerektiği gibi çalışmadı ve gereken düzeltmeleri yapamadı yada yaparken bir hata oluştu. SOnuçta derleyici o dosyaları derleme esnasında kullanıyor ve uymayan bir yer var ise hata veriyor.
Lib dosyasında 112 ve 113 nolu satırlara bakmak lazım ne var orada.
Yada derleyiciyi kaldırıp tamamen temizleyip yeniden kurmak en iyisi olacaktır.

Sonuçta programda kusur yok derleme hatası bu. Hata açıklamasına bakarak söylüyorum bunları.

Benim ....14e.lib dosyasına baktım aşağı yukarı belirtilen satır numaraları ADC bitleri ayarına geliyor.
Şunlar var orada;
;****************************************************************
;* Default Adcin values                                         *
;****************************************************************

    ifndef ADC_BITS		; ADC number of bits
ADC_BITS EQU 8
    endif
    ifndef ADC_SAMPLEUS		; ADC sample time in microseconds
ADC_SAMPLEUS EQU 50
    endif
Ancak satır numaraları standart denk gelmiyor olabilir. Yani sendeki 112-113 farklı bir komut satırına denk geliyor olabilir.

DEFINE ADC_SAMPLEUS 11  ; ADC sampling time (uSec)  satırındaki 11 rakamını 50 yap ve tekrar derlemeye çalış bakalım belki düzelir.


Ete

zeus48

Ete hocam mrb. Üzgünüm sizi bezdirdim. 14e.lib    bendekide sizinkiyle aynı.  11 i 50 yaparak denedim değişen birşey yok Hocam. Tşk. 

zeus48

pbp260 kaldırdım,mcs kaldırdım,mplab 8.15 idi kaldırdım. mplab 8.53 yaptım,mcs yeniden kurdum,pbp260  yeniden kurdum a-b-c yamalarını sırası ile yükledim.sonuç aynı.

Ayrıca bir yıldır kullanmadığım dizüstü 64 bit bilgisayarımı da aynı işlemleri yaptım sonuç aynı. Demekki biryerde hatam var. Hocam benim kodları sizin pc derliyormu denedinizmi ?. Tşk 

Error[113] c:\pbp\pbppi14e.lib.5845 :symbol not previously defined ()
Error[112] c:\pbp\pbppi14e.lib.5845 :missing operator

zeus48

Hocam mrb . "pbppi14e"lib dosyasını  not defteri formunda zipledim eke koydum. Ben baktım not defterinde sağdan aşağı yukarı  yaparken altta satır sayısı yazıyor bulmam kolay oldu. Error hatasındaki 6201. satırda ADCIN le ilgili şeyler yazıyor "c" dili sanıyorum. Zipi açıp bakabilirsiniz yinede  o bölümün birazını buraya koyuyorum.tşk

Error[113] c:\pbp\pbppi14e.lib.6201 :symbol not previously defined ()
Error[112] c:\pbp\pbppi14e.lib.6201 :missing operator




;****************************************************************
;* ADCIN      : Get data from ADC                               *
;*                                                              *
;* Input      : W = channel                                     *
;* Output     : R0 + 1, W                                       *
;*                                                              *
;* Notes      : TRIS, ADCON1 and ANSEL must already be set.     *
;****************************************************************

    ifdef ADCIN_USED
  LIST
ADCIN	andlw	1fh		; Mask channel
	lslf	WREG, W		; Move channel into proper position
	lslf	WREG, W
	iorlw	1		; Turn on ADC
	movlb	ADCON0 >> 7	; Point to bank
	movwf	ADCON0		; Set up to start sampling
      if ((ADC_SAMPLEUS) != 0)
	movlb	0
	movlw	(ADC_SAMPLEUS) >> 8	; Get sample time
	movwf	R0 + 1
	movlw	low (ADC_SAMPLEUS)
	call	PAUSEUSL	; Wait sample time
	movlb	ADCON0 >> 7	; Point to bank
      endif
	bsf	ADCON0, GO_NOT_DONE	; Start conversion
adcinloop btfsc	ADCON0, GO_NOT_DONE	; Wait for conversion to complete
	goto	adcinloop
  ;     if ((ADRESH >> 7) != (ADCON0 >> 7))
 ;	movlb	ADRESH >> 7	; Point to bank
 ;      endif
       if ((ADC_BITS) <= 8)                            ;ETE hocam error uyarısındaki 6201.satır burası[attach id=7576]pbppi14e.rar[/attach][attach id=7576]pbppi14e.rar[/attach]   
	movf	ADRESH, W	; Get 8-bit result
	movlb	0
	clrf	R0 + 1
      else
	movf	ADRESH, W	; Get 16-bit result
	movlb	0
	movwf	R0 + 1
	movlb	ADRESL >> 7	; Point to bank
	movf	ADRESL, W
      endif
        goto    DONE
  NOLIST
DONE_USED = 1
PAUSEUS_USED = 1
    endif

;****************************************************************


ete

Senin kodlar bende sorunsuz derleniyor. Dosyalar ilişiktedir.

Ete

zeus48

Hocam mrb. Yıldırdım sizi özür dilerim. Kafayı yiyeceğm. Sizin gönderdiniz sorunsuz derlendi. Bir değişiklik yapmışmıydınız ?. Tşk

ete

Sorunsuz derlendi ise senin versiyonun 3.xx sen ise sanki versiyonun 2.60 gibi yamalar vs ler yapmaya çalışıyorsun.
Programda sadece config (sigorta ayarları) verme şeklini değiştirdim.
V.2.60 da ASM - ENDASM , V.3.0 da ise #Config - #Endconfig arasında veriliyor sigorta ayarları.

Ete

zeus48

Hoam mrb. "#Config - #Endconfig "leri ben  "ASM   ENDASM"  yaptım.

zeus48


Hocam iyi pazarlar. Ne değiştirdiniz de düzeldi ?  Paylaşabilirmisiniz  ?
Sizin gönderdiğiniz kodları
"#Config -- #Endconfig "leri ben  "ASM--ENDASM"  yaparak denedim. PBP260 kullanıyorum.
Aslında PbP3xx var ama nasıl kullanılacağını bilmiyorum. Şu ana kadar ihtiyaç duymadığım için araştırmadım.
Tşk.

zeus48

Arkadaşlar mrb. AN4  çalıştıramadım. Bilen arkadaştan yardım istiyorum.Tşk

DEFINE PIC16F1827

asm
 __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_ON &_CPD_ON& _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF  
 __config _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_19 & _LVP_OFF

endasm
	 
	DEFINE OSC 8
	OSCCON = %01110000
	OSCTUNE=0
	 
	TRISA =%00110100
	TRISB =%00000100
	PORTA =0
	PORTB =0
	
	ANSELA=%00010100        ; AN2-AN4 KULLANILIYOR
	ANSELB =%00000000       ; ANALOG KULLANILMIYOR
	
	ADCON0=%00110011
	;ADCON0 Register baktığımda 7.bit kullanılmıyor.6-2 bitleri kanal şecimi ben 2-4 kanalları
	;kullanıyorum 00110 yaptım. 1.bit 1 yaptım A/D dönüştürme döngüsü devam ediyor. 
	;0.bit 1 yaptım   ADC is enabled
	
	
	ADCON1=%10010000 
	;ADCON1  Register baktığımda 7.bit 1 yaptım sağa dayalıdan anladığım sağdan 1. bit 0 
	;6-4.bitler osc seçimi anladığım şu pic i çalıştırdıım osc 8mhz bende 001 yaptım
	;3. bit boş  2. bit Negatif Voltaj Referansı Yapılandırma biti pek anlamadım ama
	;pic adc referans - voltajı nereden alsını soruyor gibi bende 0 =VREF- VSS'ye bağlı
	;1-0.bitler  Pozitif Voltaj Referansı Konfigürasyon bitleri 00 =VREF+ VDD'ye bağlı
	;00 yaptım 
	
    ;Bunlara yapmama  rağmen AN4 den ham değer 000 gözüküyor  pıc in AN4 bacağını ölçtüğümde 
    ;2.5v olmasına rağmen
    ;Bilen arkadaşlardan yardım bekliyorum. Tşk

	deFINE ADC_BITS 10        ; ADCIN resolution  (Bits)
	DEFINE ADC_CLOCK 3      ; ADC clock source  (Fosc/16)
	DEFINE ADC_SAMPLEUS 50  ; ADC sampling time (uSec) 
	  

    APFCON0=%10110110
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ete

ADCON0 registerine sen değer verme o satırı sil. O işi Basic otomatik yapmaktadır.
ADCON1 registerine verilecek değer ise ADCON1=%11010000 şeklinde olmalıdır.
BU şekilde yaparsan çalışacaktır.
Komutlara dikkat etmek gerekiyor. Örnek vereyim.

ADCON1 registeri 6-4 arası bitler ADC çevrim CLK seçme bitleridir. Data sheet de 8 MHZ osc frekansı için ideal frekans FOSC/16 olduğu belirtiliyor. Bunun karşılığı ise 6-4 bitlere %101 değerinin verilmesi ile sağlanıyor.
Diğer taraftan ;
		DEFINE ADC_BITS 10        ; ADCIN resolution  (Bits)
		DEFINE ADC_CLOCK 3      ; ADC clock source  (Fosc/16)
		DEFINE ADC_SAMPLEUS 50  ; ADC sampling time (uSec) 
komut satırlarıda benzer ayarlama yapıyor. Burada verilen değer doğro. Ama ADCON1 registerine yanlış bilgi vererek işi bozmuşsun. Onu düzeltmiş oluyorum bende.
Özellikle "DEFINE ADC_CLOCK 3      ; ADC clock source  (Fosc/16)" satırı ile ADCON1 registeri 6-4 bitlerine verilen değer uyumlu olması gerekir. Bu tür şeylere dikkat etmek gerekiyor.
ADCON0 registerine değer vermeniz için ASM de program yazıyor olmanız gerekir. Basic bu değerleri otomatik verdiği için ADCO0 registerine herhangi bir değer vermiyoruz.

Ete


zeus48

Tşk  hocam .Sayende çalışmayan birşey kalmadı.Heralde 16F628a terk edeceğiz. Dikkatimi çeken birşey var
pwm ile ilgili onu sormak istiyorum.Ben portb.3 pwm1-portb.6 pwm2-  porta.3 pwm3  kullanıyorum hepside  istediğim gibi çalışıyor. Sorum

A=255
CCP1CON =%00001100  ;PWM çıkışında 4.9V görüyorum
HPWM 1,A,255   

B=255
CCP2CON =%00001100  ;PWM çıkışında 4.9V görüyorum
HPWM 2,B,255
 
SRZ=255
CCP3CON =%00001100  ;PWM çıkışında 3V görüyorum
HPWM 3,SRZ,255

Porta.3 deki pwm3  1-2 den farklımı çalışıyor yani donanımsal özelliğimi, yada yazımla
ayarlanabiliyormu. Tşk


ete

Hangi ayarlarla bu sonuca ulaşıyorsun kod vermediğin için anlamam zor.
Bu işlemcide birden fazla Timer PWM üretilmesi için kullanılabiliyor. Bu işide CCPTMRS isimli register ayarlıyor. Öncelikle her bir kanal için timer ayarının verilmesi gerekir.
Data sheet 206 nolu sayfada CCPTMRS register bitlerinin ayar değerleri verilmiş. CCPTMRS=0 verirsen hepsi TMR2 ye ayarlanmış olur.
İlişikteki kodu bir dene istersen. Yanlızca ;
- PORTB.3 =CCP1
- PORTB.6 =CCP2
- PORTA.3 =CCP3 çıkışı olarak kullanılacaktır.

Ete



Powered by EzPortal