avatar_ete

PIC Basic Ders-11 (PWM Kullanımı)

Başlatan ete, 28 Ağustos 2011, 16:21:42

Evren Kılıç

simülasyonda bir şeyler görmek adına yaptım onu, hatalı olduğunu biliyorum asıl sıkıntı şu, pwm komutları işlendikten sonra program TUT: etiketine gidiyor fakat orada yük sembolündeki GPIO.4 pinin high yapamıyorum bunu sebebi ne olabilir. ham değer 143 altına ininceye kadar high da kalmalı ama kesinlikle high olmuyor.

aRci

Merhaba, süre çok düşük olması simde ledin yada pinin konumunu görmenize yeterli olmaya bilir isterseniz ilgili pine osiloskopla izlemeyi deneyin belki orada en azından pwm i görebilirsiniz.

Evren Kılıç

Alıntı yapılan: aRci - 18 Mart 2022, 23:17:55Merhaba, süre çok düşük olması simde ledin yada pinin konumunu görmenize yeterli olmaya bilir isterseniz ilgili pine osiloskopla izlemeyi deneyin belki orada en azından pwm i görebilirsiniz.

merhaba,

gpıo.2 ve gpıo.3 pinlerini kontrol edebiliyorum, ama gpıo.4 kesinlikle lojik seviyesini değiştirmiyor. Ayrıca pwm komutunu gpıo 2 veya 3 den verdiğimde de aynı durum onlarda gerçekleşiyor. PWM komutundan çıkan pin bu şekilde davranıyor, bir anlam veremedim açıkçası

aRci

gp4 analog girişe sahip analog girişini kapatmalısınız. kod un devamını paylaşırsanız daha kolay çözüm bulabilirsiniz.

ete

Hep söylüyorum ama hep aynı şey tekrarlanıyor. Çalışmayan bir pin var ve ben kodun tamamını göremediğim için herhangi bir şey söyleyemiyorum. Kodun verilmemesine saygım var. Ama o zaman bir sorundan behsetmek ve çözüm aramak yanlış oluyor.
Pek çok kişi bütün kodu versem ne olacak diye düşünüyor sanırım. Bunun pek çok örneğini yaşadık. Verdiğin zaman sorun genellikle çözülüyor!!!.  Zorlama yok bizde isteyen verir cevabını alır isteyen vermez bekler yada kendi çözer sorunu.
Arci nin de dediği gibi GPIO.4 pini aynı zamanda analog pin dir ve şayet bir tedbir almaz isen açılışta o pin Analog olarak aktive edilir. Çözüm  ANSEL registerinde ona ait biti sıfır yapmakta. Yani Ansel.3=0 yada Hiç bir analog pin kullanmıyorsanız ANSEL=0 vermek gerekir.


Ete

Evren Kılıç

#65
merhabalar,
Öncelikle söylediklerinizde haklısınız, aslında kodun tamamı bu kadar. sadece kodlara yoğunlaştığım için bir o kadarda önemli olan tanımlamalar kısmını eklememişim bu konuda değerlendirme noktasında bir belirsizlik oluşturduğum için özür dilerim. AN0 kanalından analog okuma yapıyorum digerler pinleri çıkış olarak kullanmak istiyorum. tanımlamalar ile birlikte kodlarım aşağıdaki gibi. Ve aynen dediğiniz gibi GP4 pinin analog olarak bırakmışım sanırım. Ama ansel registerini ANSEL = %00000001 yaptığım halde durumda bir değişiklik olmadı, pwm sinyali gönderdiğim pini TUT: etiketi altında high yapamıyorum GP2 pini de aynı şekilde davranıyor.

@ DEVICE pic12F675                      'işlemci 16F628                                
@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON             'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF         'Kod Protek
@ DEVICE pic12F675, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 

DEFINE OSCCAL_1K 1  
DEFINE OSC 4

DEFINE ADC_BITS 10    ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 1    ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 10 ' ADC sampling time (uSec)

CMCON = 7
ANSEL = %00010001
ADCON0=%10000000
GPIO=0
TRISIO=%00000011
WPU=2
'----------------------değişkenler-------------------------------

 HAM VAR WORD
 SURE VAR WORD



symbol YUK=GPIO.4
SYMBOL SRJ=GPIO.5
   PAUSE 200
   SURE=0
   yuk=0
   srj=0



DEVAM12:
  
   ADCIN 0,HAM        
      
 IF HAM <143 THEN :pause 1: SRJ=1:YUK=0 
 IF HAM >179 THEN GOTO FREN12
 SURE=0
 GOTO DEVAM12
 
FREN12:
 
SRJ=0 
FOR SURE=0 to 255
PWM YUK ,SURE,10
Pause 3
Next
 
GOTO TUT
 
TUT:
 
  YUK=1
  ADCIN 0,HAM        
    IF HAM <143 THEN :GOTO DEVAM12      
     GOTO TUT
 
  END

ete

Programda gördüğüm tek eksiklik ,
WPU=2 verildikten sonra ayrıca OPTION_REG.7=0 da verilmesi gerekir pullup aktivasyonu için.

Onun dışında her şey doğru ve denedim simulasyonda çalışıyor. Söylediğin pinler HIGH - LOW olabiliyor. YUK pini PWM den sonra HIGH konumuna geçiyor PWM komutundan sonra ayrıca YUK=1 de yazılabilir döngü altına.

Gerçek devrende çalışmıyor ise ya işlemci bozulmuştur. Yada OSCCAL değerini kaybetmiştir ki bunu programlarken Pickit2 ile yapıyorsanız sizi ikaz eder Osccal değerini alamadım yada eksik diye.

Ete

Evren Kılıç

#67
@ete, @aRci desteğiniz için teşekkürler, devre üzerinde hafta içi eve gittiğimde deneyebileceğim ama ben hala simülasyonda  çalıştıramadım, bord üzerinde devreyi kurup deneyeceğim belki orada çalışır.

Powered by EzPortal