Duty cycle ölçümü ?

Başlatan Maxim, 26 Kasım 2006, 20:08:10

ete

Pic RB0 girişi schmid Trigger olarak konfigüre edilemez. Olsa olsa bu çıkış bir schmid triggerden geçirilip pice giriyordur.

Verdiğin sürelere bakınca devreye prescalerin sokulması gerekecek.

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

Maxim

Alıntı yapılan: "ete"Pic RB0 girişi schmid Trigger olarak konfigüre edilemez. Olsa olsa bu çıkış bir schmid triggerden geçirilip pice giriyordur.

Verdiğin sürelere bakınca devreye prescalerin sokulması gerekecek.

Ete

Abicim o zaman adamlar sallamış ,çünkü girişte 2 adet 10k direnç ,1 nf kondansatör ve zenerden başka birşey yok .
Birde bu devre universal ,yani benim arabamda 20 ms maximum süredir ama başka bir arabada atıyorum 40 ms dir .
Sanki programda çok daha basit bir tasarım varmış gibi geliyor bana ,gerçi ben sizin anlattığınız şeyleri becerebilecek kadar pic programlamayı bilmiyorum ya neyse .

Veli B.

RB0 pini giriş olarak tanımlanır ve EXT_INT açılır ise, bu pin Schmitt Trigger olarak set edilir.
Giriş olarak tanımlanır fakat EXT_INT açılmaz ise TTL çalışır.

ete

@Katana ,
teşekkürler. Bir şey daha öğrenmiş olduk. Senin mesajından sonra hemen data sheet'e baktım. Bu bilgi note 1 olarak alt tarafta verilmiş. Aslında yukarıda verilmiş olması gerekir idi. Daha doğrusu verilse idi gözüme çarpardı.

Her neyse maxiboost, kusura bakma senide yanlış bilgilendirmiş oldum ama nesyeki çabuk düzeldi.

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

Maxim

Şimdi böyle basit birşey yaptım ,bu örnek zaten help dosyasında`da var .
Fakat saçmalıyor ,nedir ne değildir acaba ?
proteusta "digital clock" generatoru seçtim girişe verdim ,
kristali 10 mhz -20 mhz yaptım gene saçmalıyor .
şöyle saçmalıyor 10 hz gibi değerler doğru ,56 hz gibi giriş verirsem 124 gösteriyor .
Word denedim o da saçmalıyor .

Birde pulsin ile counter komutları arasındaki fark nedirki acaba ?

device 16f877
xtal =4

Declare     LCD_DTPIN	PortD.4
Declare	LCD_RSPIN	PortD.1
Declare	LCD_ENPIN	PortD.0
Declare	LCD_INTERFACE	4
Declare	LCD_LINES	4  
 
DIM WRD as BYTE   

Loop:
WRD = PULSIN PORTB.0 , 1 
PRINT $FE,$80 
PRINT DEC WRD
GOTO Loop

ete

Goto loop ifadesinden önce bir pause koy en az 100 ms olsun.
Ekranda senin görebileceğin süre dolmadan yeni değer ekrana geliyor ve sende abuk subuk şeyler görüyorsun muhtemelen.

Counter komutu belirkli süre içinde gelen pals adedini sayar.
PULSIN ise sinyalin high veya low süresini ölçer.

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

Maxim

Bu şekilde yapınca resmen frekans counter oldu ,
1 hz ile yaklaşık 6.5 khz arasında güzel çalışıyor ,
frekansın duty cycle`ı değişse bile sonuç değişmiyor ,
yani işi gücü frekans ile .

device 16f877
xtal =4

Declare LCD_DTPIN	PortD.4
Declare	LCD_RSPIN	PortD.1
Declare	LCD_ENPIN	PortD.0
Declare	LCD_INTERFACE	4
Declare	LCD_LINES	4  
 
DIM WRD as float

Loop:
delayms 250
WRD = counter PORTB.0 , 10000
PRINT $FE,$80 
PRINT DEC2 WRD /10 ," Hz"
GOTO Loop


Bu şekilde ise dediğiniz gibi sonuç çok değişik ,
yani sinyalin high ve low süresini ölçüyor olmalıki ,
hem frekans hemde duty cycle değişimlerinde sonuç değişiyor .

device 16f877
xtal =4

Declare LCD_DTPIN	PortD.4
Declare	LCD_RSPIN	PortD.1
Declare	LCD_ENPIN	PortD.0
Declare	LCD_INTERFACE	4
Declare	LCD_LINES	4  
 
DIM WRD as float

Loop:
delayms 250
WRD = pulsin PORTB.0 , 1
PRINT $FE,$80 
PRINT DEC2 WRD /10 
GOTO Loop

Maxim

Bu adamın yaptığı devreye çok benzemeye başladı ,
http://www.diy-efi.org/diy_efi/projects/pw_meter1/

"PULSIN Measure pulse width on a pin"

device 16f877
xtal =4

Declare     LCD_DTPIN	PortD.4
Declare	LCD_RSPIN	PortD.1
Declare	LCD_ENPIN	PortD.0
Declare	LCD_INTERFACE	4
Declare	LCD_LINES	4  
 
DIM WRD0 as float
dim WRD1 AS FLOAT

Loop:
delayms 250
pulsin portb.0 ,1,wrd0
PRINT $FE,$80 ,"ON TIME  " 
PRINT DEC2 WRD0 /100 ," mS"

delayms 250
pulsin portb.0 ,0,wrd1
PRINT $FE,$C0 ,"OFF TIME "
print dec2 wrd1 /100 ," mS"
GOTO Loop



Maxim

Alıntı yapılan: "katana"RB0 pini giriş olarak tanımlanır ve EXT_INT açılır ise, bu pin Schmitt Trigger olarak set edilir.
Giriş olarak tanımlanır fakat EXT_INT açılmaz ise TTL çalışır.
(Resim gizlendi görmek için tıklayın.)

Katana ve ete bey ,

Acaba 16f84 ün RB0 girişini schmit trigger olarak tanımlamak için ne yapmalıyız ? Anladığım kadarı ile intcon tanımları ile yapılıyor .

Bu konuda gelişmeler var ,toparlayınca eklerim .

Maxim

Picbasic forumundan @skimask nick li arkadaşın yardımı ile duty cycle ,
ölçebiliyorum ,Kodu o yazdı .

Önce giriş pulsi düşen kenarda ölçülüyor ,
sonra giriş pulsi çıkan kenarda ölçülüyor ,
sonra bu iki puls toplanıyor ,
sonra çıkan değer 100 ile çarpılıyor,
çıkan değer giriş pulsinin çıkan kenarına bölünüyor .

Birkaç sorunum var ,

1-bu kodu proton basic`e nasıl çeviririm ?

2-schmit trigger girişi için tanımlama nasıl yaparım ?

3-%0 ve %100 duty cycle ölçümlerinde ekrana başka birşey yazmalıyım ,
örnek %0 da "low" %100 de "high" gibi ..

Bu picbasic kodunun son hali ;
'DEVICE 16F84A
DEFINE OSC 10

DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 4 
DEFINE LCD_RSREG PORTB 
DEFINE LCD_RSBIT 3 
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 2 
DEFINE LCD_BITS 4 
DEFINE LCD_LINES 2 

PLO VAR WORD 'PULS_LOW
PHI VAR WORD 'PULS_HIGH
PWIDTH VAR WORD 'ADD TWO RESULT (PULS_LOW+PULS_HIGH)
DTYCYC VAR WORD 'DIVIDE PULS_HIGH

PULSIN PORTA.0 , 0 , PLO : PULSIN PORTA.0 , 1 , PHI

cutdown2:
PWIDTH = PLO + PHI
if PWIDTH > 655 then 'divide by 2 until 'TEST4' result 3 lines below won't overflow
PLO = PLO / 2 : PHI = PHI / 2 : goto cutdown2
endif

DTYCYC = ( PHI * 100 ) / PWIDTH
'LCDOUT $FE , $80 , "PLO:" , DEC5 PLO 'puls_low
'LCDOUT $FE , $88 , "PHI:" , DEC5 PHI 'puls_high
'LCDOUT $FE , $C0 , "PW:" , DEC5 PWIDTH 
'LCDOUT $FE , $C8 , "DC:" , DEC2 DTYCYC
    
LCDOut $fe, 1
LCDOUT $FE , $84 , "DUTY:" , DEC2 DTYCYC +1 ,"%"
pause 250

Fixxer

Tam aradığım konuymuş ellerinize sağlık hocalar peki burdaki 555 ile yapılan pwm generatorü yapıp sonra bir transistorle 12 volt tetikleme yapabilirmiyim acaba ???? bir enjektörü çalıştırmam gerekiyor onun için ???
...............................

okanbugdayci

merhabalar ben pulsın komutu hakkıında detaylı bilgi almak istiyorum şimdi benim kaynaklardan edindiğim bilgilerde  pulsinde 4 mhz de 10us lik artışlar şeklinde oluyor diyor bu 10 us register içeriği 1 artıyor anlamına mı geliyor? yani sayılsal artış ve 10 us de bir artış nasıl oluyor ayrıntılı şekilde açıklarmısınız?ayrıca maksimum ne kadarlik bir palsi ölçeblir pulsin komutu 200ms lik bir pals i ölçebilirmi?acil cevap lütfen

lojikmemo1

ilginç çook ilginç bu 3 oldu ya bakalım kokusu çıkar
İnsanlara Akılları Ölçüsünde Söz Söyleyiniz.

okanbugdayci

ilginç olan ne ben onu tam anlamadım ama hala soruma cevap da bulamadım?

okanbugdayci

benim çalıştığım program üzerinde en başta define ile bi tanımlama yapılmış

DEFINE PULSIN_MAX 3000 şeklinde bir tanımlama acaba bu tanımlama palsi ölçeceği maks süreyi mi tanımlıyor yani 3 ms maksimum pals ölçme işlemimi yapılacak bu süreyi define ile en yüksek ne kadar tanımlayabiliriz bu komutu çalıştırmaak benim için çok yardımcı olursanız çok sevinirim