18F2550 Yada 4550 ile RB0 Kesmesi

Başlatan muhittin_kaplan, 10 Kasım 2008, 02:00:22

muhittin_kaplan

Proton Plus Kullanarak 18F2550 yada 4550 de RB0 kesmesi nasıl oluşturabilirim. Kısacası kesme Oluştuğunda B portuna Bakacak ve USB den Gönderecek Basit Bişey. Kesme İçin Yardım Ederseniz Yaterli Olur.
İyi Çalışmalar.

muhittin_kaplan


Maxim

bende baya uzun bir süredir interruptlar üzerine çalışma yapıyorum ,
nedense interrupt dedinmi insanlar buz kesiyor ,yardım alman genelde imkansız .

bende uzman değilim ,
ama biryerden başlayalım .
18 serisinde B0 kesmesi yerine INT0 ,INT1 gibi kesmeler gelmiş ,
INT0 kesmesi zaten port.b0 ucuna bağlı .


ben ufak bir çalışma yapayım dur .

Maxim

18F2550 nin konfig ayarlarını bilmediğim için devreyi 18F1320 üzerine kurdum , temel aynı ,sadece config ayarlarının değişmesi gerekiyor ,
işte birde 18F1320 de portb.0 ucu 8 numaralı pin ,18F2550 de ise 21 numara . Yani birkaç değişiklik lazım .


devre açıklaması :

normal loop ta her saniyede 1 kere artan bir sayımız var(say1) .
INT0 girişine bağlı butona her basışımızda yükselen kenarda bir interrupt oluşturuyoruz ve her interrupt oluşumunda say0 değerimiz 1 artmaktadır .
Bütün bu rakamlar lcd ekranda gösterilir .

tabiki lcd ekran hızı , 1 saniye bekleme koyduğum için saniyede bir kere tazelenmektedir. Say1 değeride dediğim gibi saniyede 1 kere artar .

Burada en önemli nokta şudur ,
interrupt hardware interruptır ,ben buna hardcore da diyorum  :D
hiç bir şekilde bekleme falan oluşmamaktadır ,
deneyin, delayms 1000 bekleme komutu sırasında kaç kere butona basarsanız basın say0 değeri artacaktır .

Malesef USB konusunda bilgim yok ,
hatta o tarafıda sen bize öğretirsen ne mutlu bize .





'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : MaxiBoost                                         *
'*  Notice  : Copyright (c) 2008 MaxiBoost                      *
'*          : All Rights Reserved                               *
'*  Date    : 14.11.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device = 18F1320 
XTAL=8
DelayMS 5
OSCCON = %01110100 ' Internal 8 MHz osc

@ CONFIG_REQ 
@ __CONFIG CONFIG1H, IESO_ON_1 & FSCMEN_OFF_1 & INTIO67_OSC_1
@ __CONFIG CONFIG2L, BORV_27_2 & BOR_ON_2 & PWRT_ON_2 
@ __CONFIG CONFIG2H, WDT_OFF_2 & WDTPS_32_2
@ __CONFIG CONFIG3H, MCLRE_OFF_3 
@ __CONFIG CONFIG4L, DEBUG_OFF_4 & LVP_OFF_4 & STVR_ON_4 
@ __CONFIG CONFIG5H, CPB_ON_5 & CPD_ON_5 
@ __CONFIG CONFIG5L, CP0_ON_5 & CP1_ON_5 
@ __CONFIG CONFIG6H, WRTC_OFF_6 & WRTB_OFF_6 & WRTD_OFF_6 
@ __CONFIG CONFIG6L, WRT0_OFF_6 & WRT1_OFF_6 
@ __CONFIG CONFIG7H, EBTRB_OFF_7 
@ __CONFIG CONFIG7L, EBTR0_OFF_7 & EBTR1_OFF_7

ALL_DIGITAL = TRUE

TRISA = %00110000
TRISB = %11001011

Declare LCD_DTPIN PORTA.0     
Declare LCD_RSPIN PORTA.6 
Declare LCD_ENPIN PORTA.7 
Declare LCD_INTERFACE 4    
Declare LCD_LINES 2
Cls

Print At 1,5 ,"MaxiBoost"
DelayMS 1500
Cls

Dim say1 As Byte
Dim say0 As Byte

'Interrupt symbols                
Symbol GIE = INTCON.7 ' Global Interrupt Enable
Symbol PEIE = INTCON.6 'peripheral interrupt enable

'------------INT0 INTERRUPT-------------------
Symbol INTEDG0 = INTCON2.6       ' External Interrupt Edge selection         
Symbol INT0IE = INTCON.4        ' External INT0 Interrupt Enable
Symbol INT0IF = INTCON.1        ' External Interrupt Flag

INTEDG0 = 1 'çıkan kenarda interrupt oluşur

PEIE = 1  'pherepheral interruptlar açıldı.
While GIE=1 : GIE=0 : Wend         ' make sure to disable the Global interrupt

INT0IE = 1

'------------------------------------------------------------------------
GIE=1                              ' Enable Global interrupt ( 0 disable)
ON_HARDWARE_INTERRUPT ISR          ' If interrupted go to MY_ISR         
GoTo LOOP


ISR: '-----------------------
Inc say0

INT0IF = 0
retfie fast 
Context Restore


LOOP: '------------------------------------------------    

Inc say1

Print At 1,1,"Sayi1:",Dec say1 ,"  "
Print At 2,1,"Int0:",Dec say0 ,"  "

DelayMS 1000
GoTo LOOP '---------------------------------------------

muhittin_kaplan

Biraz Datashit :) ini inceledim.
diğer 16 serici MCU lardan Farklı Olarak Bunda İnt. Priorty yani interrupt önceliğinden bahsetmişler. Yani RB0 değilde INT0,INT1,INT 2 ... arasındaki int. önceliğinden.
Bu Ayarı RCON registerinin 7. bitiyle Yapıyorsunuz (RCON.7) eğer bu bit Set olursa Öncelikli yani interruptlar arasındaki önceliği seçmenize yarıyor.
Eğer 0 olursa normal 16 serisi gibi çalışıyor. Banada burada gerekli olan int0 (eski rb0) ın düşen kenarında int almasıydı (Yükselen Yada Düşen Kenarıda intcon2 registeriyle ayarlıyorsunuz) bunu kullanarak ledleri yakıp söndürmeyi başardım. Yanlız Problemde Burada Oluşuyor. Eğer USB rutinlerini Kullanırsam Ya Usb problem Veriyor Yada İnt.

Kodları Düzenleyince USB ve İnt ve 18F2550 ve 4550 ile Bilgileri ve Visual Basic ile ilgili kodları Vereceğim.

muhittin_kaplan

Birde Bu jan Axelson nun kitabını sipariş verdim. Artık USB ile Daha Raha t Çalışabişeceğime İnanıyorum.

egokdua

Sn. Üstad.
Ben 18f4620 ile  RB0   (  int0 )  kesmesini kullanıyorum. Sorunum şu :  kesme  sayısı belirli bir adeti geçtiği zaman ( 10 - 30 gibi )   reset oluşuyor ve program tekrardan başlıyor . Ne yapmalıyım ?
Saygılarımla
Emrah GÖKDUA

Maxim

Alıntı yapılan: egokdua - 03 Eylül 2012, 12:34:22
Sn. Üstad.
Ben 18f4620 ile  RB0   (  int0 )  kesmesini kullanıyorum. Sorunum şu :  kesme  sayısı belirli bir adeti geçtiği zaman ( 10 - 30 gibi )   reset oluşuyor ve program tekrardan başlıyor . Ne yapmalıyım ?
Saygılarımla
Emrah GÖKDUA

kodu buraya koyabilirsin, bizde bakar yorum yaparız ?

egokdua

üstad olayı çözdüm . ısıs de denedim overflow stak  hatası verdi . ilgili bayrağı 0 yaptım düzeldi. Bu arada usb ile bende uğraşıyorum .  jan Axelson ( infogate ) kitabı aldım fakat bu kitap bana çok tuğaf geldi yada amacıma uygun değil sanırım. Ben rb0  ile ps2 klavye kullanıyorum . Bunu usb klavye olarak kullanmak istedim. Sadece  ps2 soket yerine  usb soket taktım ve devreye usb klavye taktım çalıştı . Çok sevindim fakat  başka bir usb klavye taktığımda çalışmadı . Sonradan anladım ki ilk usb klavyeler  ps2 klavye ile aynı .Sadece jak değişik . Sanırım daha sonra çıkan klavyeler  birtakım data alış verişine ihtiyaç gerektiriyor ve bundan sonra aktif oluyor . Bunun üzerine usb.org a biraz baktım . sanırım olar hid ile ilgili . İlk önce takılan usb cihazın hid mi yoksa hızlı data iletişimi yapan bir cihaz mı olduğuna karar veren bir sistem var . Şimdilik bu iş ile uğraşamıyorum ama   pic e takılan usb cihazı ( klavye ) görebilen ve çalıştırabilen bir program hazırlarsanız görmek isterim . Bu arada arm stm32 4f  aldım . usb 2  olayı özellik olarak içinde var sanırım . sanki tek başına mini bilgisayar sd , usb , ethernet   vb.. ne ararsan var ve kütüphanelerini biraz inceledim sanırım usb cihazı sorguluyor ve adını söyleyebilen bir yapıya  sahip . Neyse keşke pic  ile bu olayı yapabilsek te  proton ile her işi çözsek  .
Saygılarımla.
Emrah GÖKDUA

muhittin_kaplan

Usb Host Özelliği Olan Bir İşlemci gerekli Dediğiniz işlem yapması için.

Mastercodex

Merhaba Arkadaşlar,

Sitede yeni olduğum için hangi konu altına yazacağımı bilemedim.Konular arasında gezinirken tesadüfen bu konuyu gördüm ve şunu sormak istiyorum.Öncelikle 16F628a işlemcisi için bir program yazmıştım.Bu programda RB0 kesmesi ile Timer1 kesmesini tetikleyip yükselen ve düşen kenarlarda delay yapmayı ete hocamızında sayesinde başardım ama bu programımı bir üst seviye işlemciye geçirip RB0 kesmesinin yükselen kenarı ile Timer1 kesmesini RB0 ın düşen kenarı ile Timer3 kesmesini tetiklemek istiyorum.Böylece yükselen kenarda tetiklenen timer1 ve düşen kenarda tetiklenen timer3 'e verilen değerler ile RB0 pininden giren ana sinyale paralel ama gecikmeli ayrı bir sinyal oluşturulmuş olacak.

Esas işlem bu noktada başlıyor.Çünkü 18F serisinde register lar biraz farklılık gösteriyor.Programlarımı Picbasic pro ile yazıyorum.Bu konuda bana yardım edebilirmisiniz ?

Amaç : Devrede RB0 , Timer1 (16 Bit) , Timer3 (16 Bit ) kesmelerini aynı anda kullanmak.
İşlemci : 18f2550
Kodlar : Picbasic Pro / PBP 2.60 / MPASM
Programlayıcı : Expkits EX8B2

Bu konuda bana yardım edebilecek arkadaşların ilgisini bekliyorum.

Saygılarımla
Mastercodex
Mastercodex