A

Pulsin ve PWM okuma

Başlatan aytekin, 21 Ekim 2011, 22:05:16

aytekin


Arkadaşlar merhaba;

bir pwm sinyalini okumak istiyorum
bu sinyal toplamda 20000 ms genişliğinde
high palsi 500 ile 2500 arasında değişiyor low palside 17500 ile 19500 arasında değişiyor





@ DEVICE PIC12F675
@ DEVICE PIC12F675, WDT_OFF
@ DEVICE PIC12F675, PWRT_OFF
@ DEVICE PIC12F675, PROTECT_ON
@ DEVICE PIC12F675, BOD_OFF
@ DEVICE PIC12F675, MCLR_OFF
@ DEVICE PIC12F675, INTRC_OSC_NOCLKOUT
include "modedefs.bas"
TRISIO=%00000100

songaz var word
gaz    var word
i      var byte
a      var byte
say    var byte
say=0
i=0
a=0
olc:
for i=0 to 15
pulsin gpio.2,1,songaz
pause 100
next
high gpio.1
pause 1000
low gpio.1


basla:
say=0
PULSIN GPIO.2,1,GAZ
    if gaz>songaz then gpio.4=gpio.2
    if gaz<songaz then goto cntrl
    high gpio.1
    pause 500
     low gpio.1
goto basla

cntrl:
    PULSIN GPIO.2,1,GAZ
    if gaz<songaz then goto basla
say=say+1
    if say>15 then goto servo
pause 100
goto cntrl
.....





programın bir bölümü burada nerde hatalıyım bir türlü pals okuyamadım

inventor

#1
Komutu yazış şeklinizde sorun yok ancak bilmeniz gereken konular var.  Öncelikle PULSIN komutu 16 bitlik bir komuttur. Yani bir sinyal geldiği ya da geleceği zaman osilatör frekansına bağlı olarak 16 bitlik bir bekleme yapar. Bu zaman zarfında sinyal gelmezse alt satıra atlar. Diyelim ki sizin osilatör frekansınız 8 mhz. 16 bitin decimal karşılığı 65535 birim zaman demektir. 8 Mhz lik bir osilatörde 1 birim için geçen zaman 5 us olduğuna göre;
65535 x 5 us = 327675 us   yapacaktır. Yani en fazla 327,675 ms lik bir pals genişliğini ölçebilirsiniz.

Böyle durumlar için kullanılan ek bir komutumuz var.

Pulsin_Maximum

Bu komut ile maximum pals genişliğini ön bilgi olarak veriyoruz. Kullanımı şu şekilde

Pulsin_Maximum = 100.000

Buradaki 100.000 değeri ; birim zaman olarak yazılır. 8 Mhz lik bir osilatörde 100.000 birim 100.000 x 5us = 500.000 us demektir. Yani PULSIN komutu bu öndeğer ile kullanılırsa 327 ms değil 500 ms bekleme yapar.

O zaman siz BASLA satırından önce

Pulsin_Maximum = 4.000.000 gibi bir değer girerseniz ve osilatörünüzüde 8 mhz kabul edersek;
4.000.000 x 5 us = 20.000.000 us = 20.000 ms = 20 sn  gibi bir pulsin ölçümü yapabilirsiniz demek oluyor. AMA SORUN ŞU;

Daha önce bu değeri
Pulsin_Maximum = 120.000 e kadar kullandım. Milyon birimi kullanılabiliyormu bilmiyorum. Denemek lazım 
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

aytekin

peki hocam başka bir yol ile okuma yapamazmıyız?

pwm.c

şurada proton+ ile hazırlanmış pwm oranını lcd ile okuma yazılımı var. test etmedim ama belki işine yarar.

'****************************************************************
'*  Name    : PWM.BAs                                           *
'*  Author  : John F Drew                                       *
'*  Notice  : Copyright (c) 2007 [John F Drew]                  *
'*          : All Rights Reserved                               *
'*  Date    : 12/10/07                                          *
'*  Version : 1.0                                               *
'*  Notes   : Reads PWM incoming on RB3 and then                *
'*          : calculates DutyCycle which may then be converted  *
'*          : to other units based on device used               *
'*          : acknowledging CCP tricks from Microchip DS41214A  *
'****************************************************************

Device =16F877A'16F648A
Config WDT_OFF,PWRTE_ON,HS_OSC,CP_OFF,BODEN_OFF,LVP_OFF   'set fuses
    Xtal=10
    LCD_DTPin = PORTD.4
   LCD_RSPin = PORTD.0
   LCD_ENPin = PORTD.1
   LCD_Interface = 4
   LCD_Lines = 2
   LCD_Type = 0
   LCD_CommandUs = 2000
    LCD_DataUs = 50
'setup Timer1

T1CON = %00000001                       'set the divider to produce a 1:1 and timer1 enabled                                     
CCP1CON = 0                             'PWM module off initially
TRISB=%00001000                       '(outputs)   all ports except B.3 (other ports to user needs)
TRISA=%00000000                        'Configure A user will adjust to own needs
TRISD=%00000000

'following variables used in developing DutyCycle
Dim FirstCapture        As Word         'the timer count for first capture
Dim SecondCapture       As Word         'the timer count for second capture
Dim ThirdCapture        As Word         'timer count for third capture
Dim PulseWidth          As Word         'pulse width in timer counts
Dim Period              As Word         'the period of the wave
Dim DutyCycle           As Float        'duty cycle 0.0 to 1.0
Dim frq As Word
Symbol PWMin = PORTC.2                  'pin 17  interrupt occurs on this pin from PWM
Symbol CaptureFlag = PIR1.2             'define the Capture flag 0=cleared, 1 = a TMR1 capture occurred
All_Digital=true

GoTo MAIN

'********************** this section brings in data from the PWM device on portb.3 ************************   

GetData:   
        'set capture to every rising waveform
        TMR1L = 0                               'reset the timer to 0
        TMR1H = 0               
        CCP1CON = %00000101                     'set ccp interrupt
        PIE1.2 = 0                              'clear the ccp1 interrupt bit
        CaptureFlag = 0                         'reset the flag after setting mode
        'configure time prescaler so that timer will run Tmax without overflow - done in general setup   
        'enable the CCP interrupt
       
        PIE1.2=1                                'set the interrupt on port C.2 (CCP)         

        'save the captured timer value thus providing the zero count
        While CaptureFlag=0:Wend                'wait for the flag to go high
        FirstCapture.LowByte=CCPR1L
        FirstCapture.HighByte=CCPR1H            'firstcapture now has value of timer         
        'set capture to every falling waveform
        CCP1CON = %00000100                     'interrupt on falling waveform
        CaptureFlag=0                           'prepare for next interrupt must be reset after changing mode   

        'when CCP interrupt occurs again subtract saved value (T2) from previous captured value - pulse width
        While CaptureFlag=0:Wend                'wait for the flag to go high
        SecondCapture.LowByte=CCPR1L
        SecondCapture.HighByte=CCPR1H           'firstcapture now has value of timer
        PulseWidth=SecondCapture - FirstCapture 'now we have the pulse width
        'set capture to every rising waveform
        CCP1CON = %00000101
        CaptureFlag=0                           'capture flag must be reset after change in mode to avoid false trigger

        'when CCP interrupt occurs again subtract saved value (T1) from this new value to give T, period of waveform
        While CaptureFlag=0:Wend                'wait for the flag to go high
        ThirdCapture.LowByte=CCPR1L
        ThirdCapture.HighByte=CCPR1H            'firstcapture now has value of timer
        CaptureFlag=0                           'prepare for next interrupt
        Period = ThirdCapture - FirstCapture    'now we have the period
        PIE1.2=0                                'disable the interrupt on port B3 (CCP)
        CCP1CON = %00000000                     'turn off module
        If PulseWidth<=Period Then              'just in case of conversion problem near limits
            DutyCycle=PulseWidth/Period         'conversion to duty cycle as float 0.0-1.0
       
        Else
            DutyCycle=1                         'catch all in case of error
        EndIf
Return
       
'********************** end of PWM in section *********************************************************
                                         
MAIN:
       GoSub GetData                     'get the data in DutyCycle
        'the DutyCycle may now be converted to whatever the reference refers to
        'for example DutyCycle * 4096 / 360 would convert DutyCycle to degrees if using a 12 bit encoder
      Print At 1,1, "duty:" ,Dec2 DutyCycle,"%"
        Print At 2,1, "FRQ:" , Dec3 2500.00/Period
       
        GoTo MAIN
End
           
         
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

aytekin

ozaman timer ı kullanarak yapıcaz :)

ete

PWM sinyalini okumak ne anlama geliyor tam olarak açık değil. Ancak yazılan programa bakarak HIGH süresini okuma peşinde olduğunuzu anlıyorum.
Basic de bunu yapmanız için PULSIN komutu varki sizde onu kullanmışsınız.
Aslında komut gayet güzel çalışır. Yalnızca kullanıma dikkat etmek gerekir.  Okunan süre değişkene us cinsinden ve kullanılan kristal frekansına bağlı olarak katlar şeklinde yerleştirilir. 4 Mhz de 10us nin katları şeklinde okunur. 20 Mhz de ise 2us nin katları şeklinde okunur.  Genel formül şöyledir.  Örneği 10 Mhz için vereyim.
Çalışma Frekansı=Kristal frekansı/4
10Mhz/4=2,5
10/2,5=4us nin katları şeklinde olacaktır.
Kısaca 10 Mhz kristal ile çalıştırılan bir Pulsin komutunda elde edilen süre 4 ile çarpılarak gerçek süre bulunmalıdır.

Şimdi gelelim sizin hesabınıza 20.000 ms lik bir süre yaklaşık 20.000.000us lik bir değere eşdeğerdir.
4 Mhz kristal kullanırsak okunacak değer bunun 10'a bölünmüş hali olacaktır. Bu durumda okunacak değer 2.000.000us okunması gerekirki bu çok yüksek bir değerdir ve bilinen değişken limitlerini aşmaktadır.
Bu konu Capture kesmesi ile de halledilemez. Capture T1 sayacını kullanır. T1 sayacının enbüyük bölücüsü 8 dir.
Dolayısıyla 20.000.000 sayısını 8' e bölsek bile limitler içinde kalamayız. O halde yapılacak tek bir şey kalıyor.
TMR0 veya TMR1 sayaçlarından birisini bağımsız olarak kullanmak ve hangisi kullanılacak ise ona ait kesmeyi de açmak gerekiyor. 20.000.000 sayısının 256 ya bölümü yine bir word değerini aşan bir değer verdiği için TMR1 kesmesini kullanmak daha doğru olacaktır.
İşlem sırası şöyledir.;
- Sİnyal giriş pini high oluncaya kadar bekleyin (While Signal=0:wend)
- TMR1 kesmesini açın.
-TMR1 değerini sıfırlayın
- Her kesme oluştuğunda SAYI=SAYI+1 şeklinde sayı değişkenini bir artırın.
- Signal ucu low olunca kesmeyi kapatın ve TMR1 değerini rakam değişkenine verin.
- Aslında elinizde iki sayıda tutulan bir değişken değeri olacaktır. Doğru duty değeri SAYI+RAKAM dır. Ancak 20.000.00 sayısını göz önüne alırsanız 20.000.000/65536=305 demekki SAYI=305 değerine ulaşacaktır.
20.000.000 - (305*65536)=11.520 değerini verecek olup buda rakam değerine eşdeğer olacaktır.
Şimdi asıl mesele bunları ekrana yazdırmakta. Zira elimizdeki sayıların açılımı şöyle olacak 305 * 65536+11.520
Burada şayet 18F serisi bir işlemci kullanırsanız LONG cinsinden bir değişken kullanabilirsiniz. Bu değişken direk 32 bitlik
Tabiiki LONG değişkeni kullanılınca SAYI isimli değişkeni LONG cinsinden tanımlayıp işlem sonunda ;
SAYI=SAYI+RAKAM   şeklinde bir eşitlik ile sayımızı tamamlamış oluruz. Bu sayıyıda ekrana;
LCDOUT $fe,1,dec SAYI şeklinde yazdırmak mümkün olur.

Burada hemen bir soru sorayım cevabını heniz bende bilmiyorum.
Elimizde SAYI=305 ve RAKAM=11520 sayıları var. Bunu ekrana 20.000.000 şeklinde nasıl yazdırabiliriz.?
Akıl akıldan üstündür derler birisi kolay bir yol bulabilir herhalde. Matematiksel yolu söyledim. Aslında 305 sayısı 65536 ile çarpılmalı 11520 de buna eklenmelidir. Yolu bu ama biz nasıl yapacağız.?
PBP da 32 bit völme ve çarpma yapabiliyoruz ama değişken olarak kullanamıyoruz biliyorsunuz.

Ete

aytekin

ETE Hocam;
cevabınız için teşekkür ederim.

kullandığım işlemci 12f675.bu işlemcinin datasheetinden tm1 control bitlerini sayfa 32 den kontrol ettim.
ancak tam kavrayamadım
T1CON=%00100001
bu örnek bir timer 1 contol biti  seçme

burada alt alta sıraladığınız timer 1 i açmak 0 lamak nasıl yapılıyor.


bunu örnek bir programda gösterebilirmisiniz.

örneğin ben gpio.2 den pwm sinyalini tmer kullanarak okumak istiyorum bunu nasıl kodlayabilir basic olarak?


ete

T1CON registeri 7-6 bitleri sıfır olacak kullanılmıyorlar.
4-5 bitleri bölme oranını ayarlıyor. Bize 1/1 oran gerek yani bölme olmayacak. Onun karşılığı %00 00 değeri
Bit 3 TMR1 osc enable biti 1 yapılacak.  %00 00 1
Bit 2  senkron biti bize gerekli değil 0 yapılacak   %00 00 1 0
Bit 1  CLK kaynağı seçme biti bize dahili osc lazım o halde 0 yapılacak  %00 00 1 0 0
Bit 0 TMR1 enable biti  bu bit TMR1'i aktif ediyor o halde 1 olması gerek. %00 00 1 0 0 1
O halde T1CON=%00001001 değerini alacak demektir.
TMR1 16 bitlik bir sayaç ama direk ulaşılamıyor. Yalnızca 8 er bitlik alt bytlarına ulaşılıyor. Onlarda TMR1H ve TMR1L registerleri.
O halde TMR1 i sıfırlamak için TMR1L=0:TMR1H=0 değerlerini vermek sayacı sıfırlayacaktır.
Aynı şekilde sayaç değerini bir word değişkenine aktarmak için
SAYI.Byte0=TMR1L
SAYI.Byte1=TMR1H  demeniz yeterli olacaktır.

Kodlamanın nasıl yapıldığını yukarıaki mesajda adımlar halinde verdim. Yapılacak iş bu adımları programa dönüştürmek yalnızca. Bunu örnek haline getirsem programı yazmış olacağım öyle değilmi?
Yalnızca TMR1 kesmesinin nasıl açıldığını anlatayım gerisini sen hallet artık.
Önce INTCON registeri 7. biti 1 yapılarak global kesmeler açılır.
Aynı şekilde INTCON.6 cı biti 1 yapılarak peripheral kesmelerde açılır (TMR1 kesmesi bir peripheral kesmedir)
Kesme PIE1 registeri sıdırıncı biti  1 yapılarak aktif hale getirilir.  (PIE1.0=1)
Daha sonra kesme olunca hangi etikete gidileceği ON INTERRUPT GOTO KESME şeklinde belirlenir.
Her kesme oluştuğunda kesme bayrağı olan PIR1.0 biti kesmeden çıkmadan sıfırlanır. (PIR1.0=0)

Hepsi bu kadar.

Ete



aytekin



ŞÖYle bir program oluşturmaya çalıştım sizin bu konudaki dersinizi kaçırmışım hocam :)
örneklere ve anlatımlara bakarak kesme konusunu kavramaya çalışıyorum.
anladığım kadarı ile ;

program normal seyrinde devam ederken pwm sinyalimiz değiştiğinde kesme olacak ve 'kesme' etiketine dallanacak
peki burada pwm'in high palsini sayı.byte0 ve sayı.byte1 i toplayarak mı bulacağız?




'—————————————————————–
@ DEVICE pic12F675 'islemci  12F675
@ DEVICE pic12F675, WDT_on  'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON  'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF 'Kod Koruma kapalı
@ DEVICE pic12F675, MCLR_OFF  'MCLR pini kullanılmıyor.
@ DEVICE pic12F675,  INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
'—————————————————————–
ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git.
T1CON=%00001001
INTCON=%01000000' Kesmeler aktif
GPİO=%00000000
(PIE1.0=1

SAYI.Byte0=TMR1L var word
SAYI.Byte1=TMR1H var word
'——————————————————————-
BASLA:
pauseus 10
goto basla
DISABLE
KESME:




PIR1.0=0
Resume
Enable
End



ete

#9
Dediklerimi iyi anlamamışsın. Programda kesme kullanacaksın ama TMR1 taşma kesmesi kullanacaksın.
Senin puls süren çok geniş olduğu için ona ayrıca kesme kullanmaya gerek yok diyorum.

INTCON registeri daha önceden program başında ayarlı tutulur. (INTCON=%11000000)
BASLA:
While giris=0:wend
TMR1L=0:TMR1H=0:PIE1.0=1
WHILE giris=1:wend
Rakam.byte0=TMR1L
Rakam.byte1=TMR1H
SAYI=SAYI+RAKAM  'Bu komut yalnızca SAYAC var LONG şeklinde tanımlanmış ise kullanılabilir.
LCDOUT $fe,1,dec SAYI
FOR I=0 to 5000:next
GOTO BASLA

DISABLE
KESME:
SAYI=SAYI+1
PIR1.0=0
RESUME
ENABLE


Bana yine yazdırdın programı. Aslında bir şey değil ama senin yazmanı beklerdim.
Yalnızca 18F serisinden bir işlemci kullanman gerekiyor. SAYI değişkeni LONG cinsinden olmalı.
Derleme PBPL kullanılarak MPASM ile yapılmalıdır.

Sana yalnızca değişken tanımlamaları ve LCD tanımlamaları ve bazı tris ayarlamaları kalıyor. Onlarıda yap artık.
Gerçi ısrarla 12F675 kullanmak istiyorsun ama o işlemci ile LCD kullanamazsın.Okunan değeri ekranda göstermeyecek isen ne yapacaksın? Yani diyelimki peryodu buldun okudun ne yapacaksın onu?
Ekranda göstermeyecek isen 12F serisi kullanılabilir elbette. O zaman elindeki iki değişkeni (SAYI ve RAKAM ) ayrı ayrı kullanman gerekecek. Dediğim gibi toplam HIGH süresi SAYI*65536+RAKAM şeklinde hesaplanıyor.
Sana topşlam peryot lazım ise aynı işlemin bir kerede LOW süresi için yaparsın. Yukarıdaki satırları aynen kullanabilirsin bir iki ufak değişiklikle. While--wend satırlarının beklediği konumları değiştireceksin o kadar.
Tabiiki okunan değerleri başka değişkenlere aktarman da gerekecek.

Ete


aytekin


hocam lcd ile ilgili bir çalışma yapmayacağım.

sistem şudur;

profesyonel bir kumandamız var bu kumanda alıcısının çıkışında 20000 ms lik bir sinyal var
bu sinyalin daha öncede dediğim gibi high bölümü (500-2500) arasında değişiyor.

beni 12f675 ile bu değişikliği okuyarak bir değişkene atmayı ve o değişkeni okuyarak çıkış ta 595 üzerinden 8 adet röle kontrol etmeyi istiyorum.

bu programda kullancağım komutları daha önce kullanmadığım ve çalışmadığım için konuyu kavrayamdım.
bu sebeple her yerden araştırıyorum burayada daha sonra diğer arkadaşların da yararlanabileceği bir konu bulunması adına açtım.

akşam while,wend,timer,kesme,ıntcon gibi bana yabancı olan komut ve tabirleri araştırıp iyice öğreneceğim

ilginiz için teşekkür ederim


Mastercodex

Merhaba ,

Öncelikle siteye yeni üye oldum ve PicBasic Pro ile ETE hocamızın yayınlamış olduğu dersler ile başladım.Burada aklıma takılan bir soruyu ETE hocamıza yöneltmek istiyorum.

Örnek olarak Pic16F628'e giren 480 Hz frekansında bir kare dalga düşünelim.Bu sinyal piv2e girecek ve çıkış uçlarının birinden girdiği formuyla çıkacak.Yine bu pic'e bağlı dört adet buton yardımıyla giren kare dalganın her yükselen ve düşen kenarı ayrı ayrı kontrol edilebilecek.Yani kısaca Rising edge ve falling edge.Böylece giren frekans modifiye edilerek çıkıştan verilmiş olacak.Girişteki frekans değişken olduğu için buradaki 100Hz - 1 Khz arası gibi düşünelim ama frekans ne oursa olsun önemli olan yükselen ve alçalan kenar tesbiti.

Bu sitedeki kaynaklar ve paylaşımlar ile geçmişten gelen VB.NET bilgim ile ileride çok daha iyi olacağıma eminim.Tüm yazışmaları ve kaynakları eksiksiz takip etmeye çalışacağım ama öncesinde özellikle ETE hocamızın derslerini tamamlamam ve elimdeki kitabı tamamen kontrolüm altına almam gerekiyor.

İlginiz için şimdiden teşekkürler...
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Hemen hemen bütün pic lerde PORTB.0 pini özel bir yakalama görevine sahiptir. PORTB.0 kesmesi şeklinde açıkladığımız bu yakalama görevi bu pine giren sinyali ister low dan High'a yükselirken (yükselen kenar) ister High dan LOW a düşerken (Düşen kenar) anında gerçekleşir.  İşte yakalama işinin yükselen kenardamı yoksa düşen kenarda mı yapılacağın OPTION_REGISTERI nin 6. biti karar verir.  Bu biti HIGH (1) yaparsanız gelen sinyal yükselen kenarda yakalanır. Bu biti LOW (0) yaparsanız gelen sinyal düşen kenarda yakalanır.

Yakalanır derken bahsi geçen anlarda kesme oluşur ve program işi gücü bırakıp kesme etiketine gider. Orada ise ne yapılmak isteniyorsa yaptırılır.
Sen her iki kenarıda yakalamak istiyorsun umarım aynı anda değildir bu yakalama isteği. Şayet öyle ise;
Program öncelikle bir kenar için kurulur. Mesela yükselen kenar ile başlanır kesme oluşunca bu düşen kenara orada çevrilir. Böylece program bir yükselen kenar bir düşen kenar yakalar. Şayet aynı anda yakalama yapacak isen epeyce bir kod yazmak gerekir. Bu durumda PORTB değişiklik kesmesi kullanılır ama burada bir iki özel tedbir almak gerekebilir. Programın bütünü düşünülmeden ne yapılması gerektiğini tespit etmek zor şu anda.

Ete

Mastercodex

Öncelikle hızlı cevabınız için çok teşekkürler.

Aslında sizin derslerinizi takip ediyorum ve kesme olayını uyguluyorum ama tabiki emeklemeden yürünmeyeceğinide düşünüyorum.Öncelikle sizin verdiğiniz örnek uygulamaları inceleyip kendime yeni tasarımlar yapıyorum.

Mesela her yükselen kenarda bir kesme yakalayarak kesme döngüsüne gittik ve çıkış pinini burada uygun komutlar ile 1 yaptığımızda ve sonrasında pauseus ile gecikme sağlasam girişteki sinyali yakalamam ve istediğim delay değeri ile çıkışa değer göndermem mümkünmüdür.

Ekteki resimde net olarak göstermeye çalıştım aslında istediğimi.Ben bunu RC devresi ile yapıyorum ama RC desresi digital kadar hassas değil.Bu yüzden bundan sonraki tüm işlemlerimi pic'ler ile yapmak ve uygulamak istiyorum ve bu konuda sizden çok şey öğreneceğime hiç şüphem yok.

 
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Mademki gelen sinyali benzeterek başka bir pinden çıkış yapacaksın.  O halde tarif ettiğim sistem en doğrusu olacaktır.
Kesme yükselen kenara kurulur.  Cıkış=0 yapılır ve ilk kesme yakalanır.
Kesme:
            - önce kesme düşen kenara ayarlanır.
            - Çıkış konum değiştirilir  CIKIS=1-CIKIS  'ilk kesme de Cıkış=1 olur.SOnrasında Çıkış=0 olacak ve sürekli konum değişecektir.
            - Kesmeden çıkılır.
Bu sistem tamamen gelen sinyale paralel çalışan ikinci bir sinyal oluşturur.
Amacın gelen ile çıkan arasında bir faz farkı oluşturmak ise ufak bir gecikme verebilirsin. Gecikme miktarı low yada high peryodundan dan daha uzun olamaz.

Ete

Powered by EzPortal