avatar_Mastercodex

Pic 18F2550 Kesme KUllanımı

Başlatan Mastercodex, 18 Eylül 2012, 21:18:17

Mastercodex

Merhaba ,

İnternette birçok foruma yazmama rağmen yardım eden hiç kimseyi bulamadım.Sadece sorduğum sorulara büyük bir sabırla ETE hocam yanıt verdi.18F2550 işlemciinin kesmelerini kullanamak istiyorum.Bu konuda bana yardım edecek birilerini arıyorum.

Biraz açıklamak gerekirse 18F2550 işlemcisi ile çoklu kesme işlemine örnek olarak bana RB0 , Timer1 ve Timer3 kesmelerinin kullanımı gerekli.RB0 kesmesini kullanmak çok kolay ama Timer1 ve Timer3 kesmesi işimi çok zorlaştırıyor.

Yardım etmek isteyen varsa sizinle kodları burada paylaşabilirim yada bana RB0 , Timer1 ve Timer3 kullanımını örnek kodlar lle açıklayabilirsiniz.Yardım edecek tüm arkadaşlara şimdiden teşekkürler.
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Madem portb.0 kesmesini biliyorsun bende timer kesmelerini anlatayım bari.
Data sheet sayfa 131 e bakarsan her şey orada yazıyor tabiiki timer1 ile ilgili olanlar. Digerleride peşinden gelen sayfalarda var.
Timer1 kesmesi 16 bitlik bir zamanlayıcı. Direk 16 bit olarak ulaşamıyoruz kendisine. TMR1H ve TMR1L şeklinde iki ayri byte olarak değerine ulaşılıyor.
Tmr1 kesmesini açmak icin  Önce Intcon.7 =1 yapılmalı
Ardından data sheet pek bahsetmemiş ama Intcon.6=1 yapılmalı diye düşünüyorum.
Buraya kadar yapılanlar bütün kesmeler ve timer kesmeleri için ortak unsurlar.
Tmr1 kesmesi için ilave olarak PIE1.0 biti high yapılmalıdır. Kesme bayrağı ise PIR1.0 biti ile kontrol ediliyor. Bayrak=1 olmuş ise kesme oluşmuş demektir.

TMR3 kesmesi için PIE2.1 biti high yapılmalıdir. Tabiiki Intcon.7 ve Intcon.6 da high olmasi gerekiyor.
Kesme bayrağı ise PIR2.1 biti ile kontrol ediliyor. Timer3 de 16 bitlik bir zamanlayıcı ve TMR3H ve TMR3L registerleri ile timer degeri okunup yazılabiliyor.

Her ne kadar portb.0 kesmesini biliyorum desende bu işlemcide ilgili kesme adi Int0 kesmesi olarak adlandırılıyor. Kesmenin açılması için. Intcon.7=1. Ve Intcon.4=1 yapılmalıdır. Kesme bayrağı ise Intcon.1 biti ile kontrol ediliyor.

Şimdi bu üç kesmeyi bir programda kullandın ve hepsini aktif ettin. Programında ,
ON INTERRUPT GOTO KESME. Şeklinde bir komut satırın olacak. Bu satır bütün kesmelerin aynı yerde değerlendirilmesini sağlayacaktır.
Diyelimki bir kesme oluştu ve program kesme etiketine geldi ne yapacaksın?. Tabiiki ilk iş kesme bayraklarına bakarak hangi kesmenin oluştuğunu bulacak ve programı o kesme ile ilgili kısıma yönlendireceksin. Örnek vermek gerekirse,

İf pir1.0=1 then timer1 kesmesine
İf pir2.1=1 then timer3 kesmesine
Üstteki iki satırı program aşıyorsa bu satıra gelecek ve bunun anlamıda portb.0 kesmesi oluşmuş demektir bu kısıma portb.0 kesme komutlarını yazarsın
Sonra kesme bayrağını sıfırlayıp goto cikis komutu ile Resume ve enable satırlarina atlarsın
Timer1kesmesi:
Buraya timer1 kesmesi ile ilgili satirlari yazarsın . Kesme bayrağını sıfırlarsın ve gerekirse timer1 i yeniden deger vererek kurarsın ve goto cikis deyip cıkarsın
Timer3kesmesi:
Burayada timer3 kesme satırlarıni yazarsın . Kesme bayrağını sıfırlarsın ve gerekirse timere yeni deger verirsin.Altta artık CIKIS isimli satırın yer alır ve buradan kesmeden cıkarsın.

Hepsi bu kadar umarım anlaşılır olmuştur.
Ete


Mastercodex

Merhaba ETE hocam ,

Öncelikle yardımlarınız için çok teşekkür ediyorum.İnternette o kadar araştırmama rağmen ve çok kişiden yardım istememe rağmen o kadar kişiden birtek siz bana yardımcı oldunuz.Hakkınızı nasıl ödesem bilemiyorum.Donanım forum haber sitesinde benimde yazılarım var ve benden yardım isteyen hiçbir arkadaşımı yardımsız bırakmadım.Herkese elimden geldiğince yardımcı oldum ve bilgimi tüm arkadaşlarım ile paylaştım.Yapı olarak ben böyle hareket ederken benim yardım isteklerime karşı duyarsızlık beni çok üzüyor.Herneyse sizi bu cümlelerimle yormak isteme tabiki.

Cevabınızda yazdığınız üzere daha önceden bana yardımlarınız ile RB0 ( INT0 ) kesmesine çok iyi şekilde hakimim.Yeni oluşturduğum kodlarla INT0 kesmesi zaten sorunsuz çalışıyor.Bu arada 16F serisindeki OPTION_REG.6 kenar seçimi yerine 18F serisinde INTCON2.6 registerı rol almış.Sizin bana yazdığınız register ayarları benim kodlarımla aynı ama iş devreyi çalıştırmaya gelince INT0 kesmesi aktif ve sorunsuz çalışırken TMR1 ve TMR3 kesmeleri aktif olmuyor.Muhakkak bir noktada yanlış yapıyorum.Dğer arkadaşlarda yaralanabilsinler diye kodlarımıda buraya koyuyorum.Bir bakarsanız nerede hata yapmışım.

İşlemci : 18F2550
Editör  : Microcode Studio Plus
Compiler : PBP 2.60 + MPASM

Kodlar
------------------------------
asm
__CONFIG _CONFIG1L, _PLLDIV_1_1L
__CONFIG _CONFIG1H, _FOSC_XT_XT_1H &_FCMEN_OFF_1H &_IESO_OFF_1H
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L &  _VREGEN_OFF_2L
__CONFIG _CONFIG2H, _WDT_OFF_2H
__CONFIG _CONFIG3H, _MCLRE_OFF_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_OFF_3H
__CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L &_XINST_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 _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
__CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_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
'--------------------------------------------------
DEFINE OSC 8
ADCON0=0
CMCON=7   
TRISA=%00011100 : PORTA=0
TRISB=%00000001 : PORTB=0
'---------------
INTCON.7=1  ' GENEL TÜM KESMELER AÇIK
INTCON.6=1  ' ÇEVRESEL TÜM KESMELER AÇIK
INTCON.4=1  ' INT0 KESMESİ AÇIK
INTCON2.6=1 ' INT0 KESME KENAR SEÇİMİ / YÜKSELEN
T1CON.7=1   ' 16 BİT OKUMA / YAZMA AKTİF
T1CON.5=0   ' TMR1 PRESCALE
T1CON.4=0   ' TMR1 PRESCALE 1:1
T1CON.3=0   ' TMR1 OSİLATÖR AÇIK
T1CON.1=0   ' TMR1 SAAT KAYNAĞI / Fosc/4
T1CON.0=1   ' TMR1 KESMESİ AKTİF
T3CON.7=1   ' 16 BİT OKUMA / YAZMA AKTİF
T3CON.5=0   ' TMR1 PRESCALE
T3CON.4=0   ' TMR1 PRESCALE 1:1
T3CON.1=0   ' TMR3 SAAT KAYNAĞI / Fosc/4
T3CON.0=1   ' TMR3 KESMESİ AKTİF
'--------------------------------------------------
R VAR WORD : R=5000
RL VAR BYTE : RH VAR BYTE : RH=R/256 : RL=R-(Rh*256)
F VAR WORD : F=5000
FL VAR BYTE : FH VAR BYTE : FH=F/256 : FL=F-(Fh*256)
TMR1L=RL:TMR1H=RH : TMR3L=FL:TMR3H=FH
MENUPOS VAR BYTE : MENUPOS=1
DLY VAR WORD : DLY=10830
POL VAR BIT : POL=0
STP VAR BYTE : STP=5
'--------------------------------------------------
SYMBOL SGN1=PORTA.0 ' 1. SİNYAL ÇIKIŞI
SYMBOL SGN2=PORTA.1 ' 2. SİNYAL ÇIKIŞI
SYMBOL UP=PORTA.2
SYMBOL DOWN=PORTA.3
SYMBOL MENUSEC=PORTA.4
SYMBOL KENAR=INTCON2.6
HIGH PORTB.4 : LOW PORTB.5 : LOW PORTB.6
PORTB.7=POL
'--------------------------------------------------
PAUSE 200
ON INTERRUPT GoTo KESME

MASTER:
        IF UP=0 THEN
            IF MENUPOS=1 AND F < DLY THEN
                F=F+STP
                FH=F/256:FL=F-(fh*256)
                WHILE UP=0:WEND   
            ENDIF
            IF MENUPOS=2 AND R < DLY THEN
                R=R+STP
                RH=R/256:RL=R-(Rh*256)
                WHILE UP=0:WEND   
            ENDIF
            IF MENUPOS=3 AND POL <> 1 THEN
                POL=1 : PORTB.7=POL
            ENDIF
        ENDIF   
           
        IF DOWN=0 THEN
            IF MENUPOS=1 AND F > 0 THEN
                F=F-STP
                FH=F/256:FL=F-(fh*256)
                WHILE DOWN=0:WEND     
            ENDIF
            IF MENUPOS=2 AND R > 0 THEN
                R=R-STP
                RH=R/256:rL=R-(Rh*256)
                WHILE DOWN=0:WEND
            ENDIF
            IF MENUPOS=3 AND POL <> 0 THEN
               POL=0 : PORTB.7=POL
            ENDIF
        ENDIF

        IF MENUSEC=0 THEN
            MENUPOS=MENUPOS+1
            IF MENUPOS=4 THEN MENUPOS=1
            GOSUB MENULGHT
            WHILE MENUSEC=0:WEND
        ENDIF     
goto MASTER
DISABLE
'--------------------------------------------------

KESME:

IF PIR1.0=1 THEN                    'TIMER1 KESME BAYRAK KONTROLÜ
    SGN1=1                          'ÇIKIŞ SİNYALİ 1
    PIR1.0=0                        'TIMER1 KESME BAYRAĞI SIFIRLANDI
    PIE1.0=0                        'TIMER1 KESMESİ İPTAL EDİLDİ
    T1CON.0=0                       'TİMER1 İPTAL EDİLDİ
ENDIF

IF PIR2.1=1 THEN                    'TIMER3 KESME BAYRAK KONTROLÜ
    SGN1=0                          'ÇIKIŞ SİNYALİ 0
    PIR2.1=0                        'TIMER3 KESME BAYRAĞI SIFIRLANDI
    PIE2.1=0                        'TIMER3 KESMESİ İPTAL EDİLDİ
    T3CON.0=0                       'TIMER3 İPTAL EDİLDİ
ENDIF

IF INTCON.1=1 THEN                  'INT0 KESME BAYRAK KONTROLÜ

    IF KENAR=1 THEN                 'YÜKSELEN KENAR KESMESİ
        T1CON.0=1                   'TIMER1 AKTİF EDİLDİ
        PIE1.0=1                    'TIMER1 KESMESİ AKTİF EDİLDİ
        PIR1.0=0                    'TIMER1 KESME BAYRAĞI SIFIRLANDI
        TMR1L=FL : TMR1H=FH         'TIMER1 REGISTER DEĞERİ AKTARILDI
    ENDIF                           
    IF KENAR=0 THEN                 'DÜŞEN KENAR KESMESİ
        T3CON.0=1                   'TIMER3 AKTİF EDİLDİ
        PIE2.1=1                    'TIMER3 KESMESİ AKTİF EDİLDİ
        PIR2.1=0                    'TIMER3 KESME BAYRAĞI SIFIRLANDI
        TMR3L=RL : TMR3H=RH         'TIMER3 REGISTER DEĞERİ AKTARILDI
    ENDIF

    KENAR=1-KENAR                   'INT0 KENAR DEĞİŞTİRME
    INTCON.1=0                      'INT0 KESME BAYRAĞI SIFIRLANDI

ENDIF

RESUME
ENABLE
'--------------------------------------------------
MENULGHT:
    IF MENUPOS=1 THEN PORTB.4=1 : PORTB.5=0 : PORTB.6=0 : PORTB.7=POL
    IF MENUPOS=2 THEN PORTB.4=0 : PORTB.5=1 : PORTB.6=0 : PORTB.7=POL
    IF MENUPOS=3 THEN PORTB.4=0 : PORTB.5=0 : PORTB.6=1 : PORTB.7=POL
RETURN
End
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Programda bir hata göremedim. Bir takım iyileştirmeler yapılabilir belki ama sonucu etkileyecek şeyler değil.
Neden çalışmıyor anlamadım. Aslında simulason dosyası varsa bakmak isterdim doğrusu.
Bu arada bazı konuları dikkatle izlemek gerekir diye düşünüyorum.
Programın başında hem TM1 hemde TMR3 kesmesini aktif ediyorsun. Her ikiside  çalışıp kesme oluşturmaları gerekir.
Kesme oluşturdukları anda ise Timer kesmeleri iptal ediliyor. Taaki INT0 kesme oluşup kenar durumuna bağlı olarak timer kesmelerinden birini aktif edinceye kadar. Şayet bu durum oluşmuyor ise timer kesmeleride çalışmayacaktır.
Bana kalırsa INT0 kesme kısmına bir başka işaretçi (mesela bir led) koyup kesmenin oluşup oluşmadığını en azından ledin yanıp sönmesi ile anlayabilirsin.
Dediğim gibi INT0 kesmesi oluşması lazımki Timer kesmeleride oluşabilsin.
Sorunun burada olduğunu düşünmekteyim.

Ete


Mastercodex

Ete Hocam ,

Bende kayıtlı e-mail adresinize ISIS simulasyon dosyasını ve kodları gönderdim. Aşağıdaki kodlarda RA1 (SYMBOL SGN2=PORTA.1 ' 2. SİNYAL ÇIKIŞI ) pinini aktif edince INT0 kesmesi ile oluşan sinyali ISIS simulasyondaki osiloskopta görebiliyorum ama RA0 çıkışında bir hareket gözlemlenmiyor.

Kod Değişikliği
---------------------
IF INTCON.1=1 THEN 'INT0 KESME BAYRAK KONTROLÜ

   IF KENAR=1 THEN 'YÜKSELEN KENAR KESMESİ
        SGN2=1
        T1CON.0=1 'TIMER1 AKTİF EDİLDİ
        PIE1.0=1 'TIMER1 KESMESİ AKTİF EDİLDİ
        PIR1.0=0 'TIMER1 KESME BAYRAĞI SIFIRLANDI
        TMR1L=FL : TMR1H=FH 'TIMER1 REGISTER DEĞERİ AKTARILDI
   ENDIF

   IF KENAR=0 THEN 'DÜŞEN KENAR KESMESİ
        SGN2=0
        T3CON.0=1 'TIMER3 AKTİF EDİLDİ
        PIE2.1=1 'TIMER3 KESMESİ AKTİF EDİLDİ
        PIR2.1=0 'TIMER3 KESME BAYRAĞI SIFIRLANDI
        TMR3L=RL : TMR3H=RH 'TIMER3 REGISTER DEĞERİ AKTARILDI
   ENDIF

   KENAR=1-KENAR 'INT0 KENAR DEĞİŞTİRME
   INTCON.1=0 'INT0 KESME BAYRAĞI SIFIRLANDI
ENDIF

Bu kodlar ile tanımlı PORTA.1 ( SGN2 ) portundan sinyali gönderip osiloskopta gölemleyebiliyorum ama PIR1.0 ve PIR2.1 koşulu içindeki PORTA.0 ( SGN1 ) portundan ISIS ten gözlemlediğimde sinyal alamıyorum. 


IF PIR1.0=1 THEN                    'TIMER1 KESME BAYRAK KONTROLÜ
    SGN1=1                           'ÇIKIŞ SİNYALİ 1
    PIR1.0=0                        'TIMER1 KESME BAYRAĞI SIFIRLANDI
    PIE1.0=0                        'TIMER1 KESMESİ İPTAL EDİLDİ
    T1CON.0=0                       'TİMER1 İPTAL EDİLDİ
ENDIF

IF PIR2.1=1 THEN                    'TIMER3 KESME BAYRAK KONTROLÜ
    SGN1=0                          'ÇIKIŞ SİNYALİ 0
    PIR2.1=0                        'TIMER3 KESME BAYRAĞI SIFIRLANDI
    PIE2.1=0                        'TIMER3 KESMESİ İPTAL EDİLDİ
    T3CON.0=0                       'TIMER3 İPTAL EDİLDİ
ENDIF

Bende kodlara tekrar tekrar bakıyorum ama bir türlü nerede sorun oluştuğunu bulamıyorum.16F serisinde sizin bana yrdımlarınız ile yazdığım kodlarda sorun yuktu.16F628a picinde RB0 kesmesi TMR1 kesmesini tetikleme görevini üstlenmişti.18F2550 pici ilede INT0 yükselen kenar kesmesi ile TMR1 , INT0 düşen kesmesi ile ise TMR3 kesmesi tetikleniyör.Böylece her iki kenarda ayrı Timerlar ile kontrol edildiği için kesme çakışmaları engellenmiş oluyor.

Saygılarımla


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

ete

Program gayet güzel çalışmaktadır. Ancak PORTB.0 dan girdiğin sinyal frekansı Timer kesmelerinin oluşabilmesi için yeterince küçük değil. Frekans küçülürse timerlar verilen ön değerleri sayacak zaman bulur ve kesmeyi oluştururlar. Ama zaman yetmeyince sürekli resetleniyorlar. Bu nedenle frekansı 60 Hz değil 20 hz ver ve sonucu gör. Çalışıyor sistem.
Ete

Mastercodex

Ete hocam aynı dediğiniz gibi 20Hz gibi bir sinyal ile TMR kesmeleri oluşuyor ama 60 Hz altındaki bir frekansı kullanama şansım yok.Bu yüzden programdaki timer değerleri ve OSC frekansı ile oynadım.Böylece 60Hz frekansta TMR kesmelerini aktif ettim.

Sonrasında bana dediğiniz gibi uygun timer oranlarını belirleyerek istediğim paralel sinyali elde ettim.Fakat bir sorun var.Programın açılış bölümünde aşağıdaki kodlar ile timerların ilk değerlerini belirliyoruz

R VAR WORD : R=65000
RL VAR BYTE : RH VAR BYTE : RH=R/256 : RL=R-(Rh*256)
F VAR WORD : F=65000
FL VAR BYTE : FH VAR BYTE : FH=F/256 : FL=F-(Fh*256)
TMR1L=RL : TMR1H=RH : TMR3L=FL : TMR3H=FH

Buraya kadar sorun yok.Programın başında zaten RL, RH , FL ,FH değişkenlerine gerekli değerleri aktarıyoruz.Böylece ;

RH = 253
RL =  232
FH=253
FL=232

değerlerini almış oldu.Bu değerleri Up ve Down butonları ile değiştirmeye kalktığımda ise farklı bir değerden artış ve düşüş yapıyor.Bu değerler zaten Kesme bölümündede aktif edilmiş durumda.Sizce bu sorun neden kaynaklanıyor olabilir.Çünkü ilk başta 65000 olarak belirlenen değer proramın her yerinde geçerli olması gerekmiyormu.Yoksa bir yerde değişken resetleniyormu.

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

ete

Hesap ile ilgili bir sorun olabilir. Bu durumu nasıl fark edebiliyorsun bilmiyorum ama değişken tanımlamasını şöye yapsan ayrıca hesap yapman gerekmeyecek.
F VAR WORD
SYMBOL FL=F.Byte0
SYMBOL FH=F.Byte1

R VAR WORD
SYMBOL RL=R.Byte0
SYMBOL RH=R.Byte1

Bu tanımlama ile   RH=R/256 : RL=R-(Rh*256)  ve FH=F/256 : FL=F-(Fh*256) formüllerini kullanman gerekmiyor. Değerler otomatikman FL ve FH ile RL ve RH ye yerleşecektir.

Ete

Mastercodex

Sorunu şöyle çözdüm.İlk değer olarak Timerlara 22000 değerlerini belirledim.Sonra bu değerleri ana döngüye girmeden TMR1H=85 , TMR1L=240 , TMR3H=85 , TMR3L=240  olarak direk girdim.Program açılışta istediğim şekilde sinyal üretti ve sonrasında oluşturduğum bu sinyale UP ve Down filtre rutininde alt ve üst sınır koyarak oluşturduğum sinyali kontrol altına aldım.Şimdi ise sinyal tamamen hiç satmadan kontrolüm altında.

Vermiş olduğunuz yöntemde çok güzel hocam.Sizin sayenizde bizler bilgi ve tecrübenizle yoğruluyoruz.Yardımlarınız için çok teşekkür ederim.inşallah günün birinde bende bilgi ve tecrübem ile başka arkadaşlarıma böyle yardımcı olabilirim.

Saygılarımla
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

Mastercodex

Ete hocam bir soru soracağım ama hangi başlık altında soracağımı bilemedim ve öncelikle size sormak istedim.Benim ölçmek istediğim bir ışık sinyali var.Bu sinyalin frekansını ve modifikasyonun tesbit edebileceğim bir devre yada yazılım mevcutmu ? Eğer beni yönlendiriseniz çok memnun olurum.
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Işık sinyali derken neyi kast ediyorsun tam anlamadım. Sinyalin kaynağınıda açıklarsan ancak yardımcı olabilirim.
Şayet konu bir IR led ışığı sinyalini çözme konusu ise basit bir foto transistörle  ışığı alıp bir lojik analizör ile inceleye bilir yada bir skop ile bakabilirsin. Bu şekilde hem modulasyon şeklini görebilir hemde sinyalin şekli konusunda bilgi edinebilirsin. Modulasyonu bu şekilde tespit ettikten sonra uygun bir IR göz alıp sinyali göz çıkışından ayıklanmış olarak alıp yine bir lojik analizör ile inceleyebilirsin.
Pickit2 programlayıcının lojik analizör özelliğinden yararlanılarak yapılmış bir sisteme ait linki veriyorum oradan inceleyebilirsin.
http://sunbizhosting.co.uk/%7Espiral/blog/?p=85

Ete

Mastercodex

Hocam size konuyu şöyle anlatmak isterim.

3D projeksiyon cihazlarında projeksiyonu cihazının içinde bulunan DLP görüntü çipi White Light adı verilen bir sinyali görüntü ile birlikte perdeye gönderir.Bu 3D senkranizasyon sinyali perdeden yansıyarak DLP Link uyumlu gözlüklere ulaşır.Gözlüklerin üzerinde bulunan
BF104FS modelli fotodiyot aracılığı ile bu sinyal algılanarak projeksiyondan aktarılan 3D sync sinyalinin gözlük camlarına aktarılması sağlanır.


3D Görüntü Arabirim Bağlantı Şekli
-------------------------------------------

3D Film Dosyası > 3D Medya Player > HDMI 1.4 Kablo > 3D Projeksiyon Cihazı > Perdeye Yansıyacak 3D görüntü

sonra perdeye yansıyan görüntü ;

Perde > Dlp Link 3D Gözlükler > Sağ-Sol göz senkranizasyonu

Projeksiyon cihazından 3D görüntü ile birlikte perdeye yansıtılan SYNC sinyalinin hangi frekansta ve hangi modülasyonda kodlandığını çözmek istiyorum.Projeksiyon cihazından gelen SYNC sinyalinin algılanması için piyasadaki Xpand firması BF104FS modelli diyodu kullanıyor.Diğer gözlük modelleri hangi diyodu kullanıyor bakmam lazım.BF104FS modelli diyod İngiltereden den  kolaylıkla temin edilebiliyorum.Aşağıdaki linkte
BP104 FS nin basit kullanımı gösterilmiş.Devredeki ledin olduğu noktadan osiloskopuma giriş yapsam projeksiyondan gelen sinyali alabilirmiyim diye düşündüm ama IR olayıda hiç bilmediğim bir olay olduğu için çok kararsız kaldım.

http://ugursazan.blogspot.com/2011/11/ir-kzlotesi-dedektorler-bp-104.html

Bu arada diğer Kesme sinyali uyguladığım projeyi sayenizde bitirdim.ISIS denemelerimde çok başarılı çalışıyor.Şimdi öncelikle Breadboard üzerinde deneyeceğm , sonrasında ise tasarımı bakır plakete geçireceğim.İngilterede benim tasarladığım bu devreyi Xilinx XC9572XL çipi ile 40Mhz kristal ile tasarlamışlar.Bu konudaki yardımlarınızdan dolayı size tekrar tekrar teşekkür ediyorum.

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

Mastercodex

Ete Hocam 18F2250 'yi 20Mhz crystal ile PLL 48Mhz 'de kullanıyorum ama bana aynı seriden daha yüksek OSC frekansı verebilecek bir işlemci önerebilirmisiniz.Yazdığım kodları sadece config ayarlarını yaparak geçebileceğim bir işlemciye ihtiyacım var.Aslında size sormadan önce Microchip sitesinden 64Mhz OSC destekli işlemcileri gördüm ama tam olarak benimki ile aynımı anlayamadım ve sadece size danışmak istedim.

Crystal : 20 Mhz
İşlemci : 18F2550

__CONFIG _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L
( 20 Mhz / _PLLDIV_5_1L = 4 Mhz ( PLL için ))  ( 96Mhz PLL / Postscaler 2 = 48Mhz )
__CONFIG _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H

Bu konfigürasyon ile her 0,167usn de bir kesme alabiliyorum.Buda bana çok büyük bir avantaj sağlıyor.Mesela 18FxxKxx serisi işlemciler 64 Mhz demi çalışabiliyor veya 18F serisinde daha üstü çalışabilen işlemciler varmıdır.Seçimde çok zorlanıyorum.
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Fluxteam,
Yüksek frekansta çalışan işlemcileri çok iyi bilmiyorum. Pek ihtiyacım olmadığı için incelemedim.
Bu arada yazdıklarında dikkatimi çeken bir şey var , demişsinki 20 mhz kristal ile pll kullanarak 48 mhz de kullanıyorum. Data sheet açıklamalarına bakarsan pll ile maksimum frekans 40 mhz dir. Üstelik Pll kristal frekansını 4 ile çarparak bu frekansı elde ettiğine göre maksimum 10 mhz kristal ile 40 mhz elde etmen gerikir. Açıklamanda sistemin çalıştığı anlaşılıyor. Çok merak ettim doğrusu sistem gerçekte kaç mhz de çalışıyor acaba.
Zira 20 mhz kristal ile hesaba göre Pll ile 80 mhz elde etmen gerekir.
Ete

Mucit23

#14
Hocam;
18F2550 ve 4550 de durum böyle değil.
Aşağıdaki resimde 18F4550 nin osilaatör blok diyagramı var. (Datasheet Syf:26)


online photo sharing

18F4550 de usb birimi bulunduğu için osilatör bölücüleri için birden fazla seçenek var. Normalde USB donanımı min 48Mhz de çalışması gerekiyor. Bu iş için 96Mhzlik Bir PLL çarpanı koyulmuş.(Resimde PLL prescaler inin hemen önünde) Bu birim sadece 4Mhz ile çalışır. Burdan 4Mhz uygulandığında diğer taraftan 96Mhz çıkar.  Yani 24 ile çarpar. Fakat bu birim sadece 4Mhz de çalıştığı için PLL prescaler in bölücü oranı 1,2,3,4,5,6,10,12 olarak kullanıcının hizmetine sunulmuştur. Takılan osilatör kaç mhz ile buradaki bölücü oranı ayarlanarak USB çarpanına sadece 4Mhz girmesi sağlanır.


Ayrıca yine 18F4550 içerisinde iki Adet CPUDIV denen bölücü vardır. Buda işlemcinin kaç mhz de çalışacağını belirler. Eğer İşlemcinin Configürasyon ayarlarında Osilatör tipi XT, HS, EC, ECIO seçilirse PLL prescalerın altındaki bölücü devreye girer ve buradaki bölücü direkmen bizim taktığımız kristal ile beslenir. Şayet eğer Osilatör tipi HSPLL, ECPLL,XTPLL veya ECPIO seçilirse Diğer Bölücü devreye girer ve clock kaynağını USB çarpanının çıkışından alır. Buradan CPUDIV'e 96Mhz girer.

Şimdi birkaç örnek göstereyim.

Diyelim İşlemcimize 4Mhz kristal taktık. Eğer Osilatör Tipini XTPLL yapıp PLL Prescaler ını 1 yaparsanız USB çarpanına 4Mhz girip 96Mhz'e katlanır ve CPUDIV de 2 Yaparsanız 96mhz 2 ye bölünüp 48Mhz olarak işlemciye girer. Yani işlemci Tam olarak 48Mips hızda çalışır.

Veyahut OSC=20Mhz HS ve CPUDIV=1 seçilirse İşlemci 20Mhz hızda çalışır. USB kullanılacaksa PLL prescaler 5 olarak ayarlanıp usb çarpanına 4Mhz girmesi sağlanmalıdır.

Bu konuda seçenekler Bayağı geniş.


Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal