Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Proton USB Interrupt

Başlatan ibrsel, 29 Mart 2012, 15:30:32

ibrsel

Merhaba arkadaşlar..Proton da 18F4550 işlemcisi ile USB port üzerinden bilgisayar ile bilgi alış verişi yapan bir devre üzerinde çalışıyorum..Tek taraflı olarak bilgisayardan bilgi okumada,veya PIC ten bilgisayara veri göndrememde bir problem yok..Ama işlemciye hem bilgi okuma , hemde bilgi gönderme komutlarını eklediğimde,bilgi okuma rutinine gelince burada takılıyor.USB den bilgi gelmediği sürece bu rutini geçmiyor.Bu işi interrupt ile yapmam gerekiyor. Daha önce bir çok işlemcide interrupt kullandım.Fakat 18F4550 de USB interrupt ını çözemedim..Bu konuda arkadaşlarımızın yardımını bekliyorum.Aşağıda yazmış olduğum proton programı ve ISIS devresi mevcut.

Alıntı Yap
''*************************************************************
Device = 18F4550
Xtal = 48
All_Digital = True
''*************************************************************
USB_Descriptor = "PICUSBDESC.inc"        '' USB ayarları için include dosyayı yükle
''*************************************************************
Symbol USBBilgiMax = 8
Symbol USBBilgiTX  = 8
Symbol USBBilgiRX  = 8
Dim    bilgi[USBBilgiMax] As Byte
''*************************************************************   
Dim PP0 As Byte System        ' USBPOLL status return
Symbol CARRY_FLAG = STATUS.0  ' high if microcontroller does not have control over the buffer
Symbol ATTACHED_STATE = 6     ' is USB attached
''************************************************************
TRISD = %00000000
Input PORTC.0 
''*************************************************************
Declare LCD_DTPin PORTD.4
Declare LCD_RSPin PORTD.3
Declare LCD_ENPin PORTD.2
''*************************************************************
Dim i As Byte                        '' Döngü değişkeni   
''*************************************************************       
    GoSub AttachToUSB                  '' USB Hazırmı kontrol ET
''*************************************************************
''        P R O G R A M       B A Ş L I Y O R
''*************************************************************
Main:   
   GoSub DoUSBIn       '' Program bu satırda takılı kalıyor.USB den bilgi okuma rutinini geçmiyor.
   GoSub yaz   
   If PORTC.0=1 Then              '' Butona basılmış ise değişkene değer yükle ve USB den gönder
      GoSub ata1 : GoSub DoUSBOut
   EndIf
GoTo Main

''*************************************************************
''        P R O G R A M       B İ T İ Y O R
''*************************************************************

yaz:
        Print At 1,1,"USB Gelen:" : DelayMS 5
    For i=0 To 15
        Print At 2,1+i,bilgi   : DelayMS 2
    Next
Return

''------------------------------------------------------------     
''---------      USB ALT PROGRAMLAR     ---------------------- 

DoUSBIn:       '' ------- USB DATA OKU  ---------------------
    USBIn  1, bilgi, USBBilgiRX,DoUSBIn   
Return
   
DoUSBOut:      '' ------- USB DATA YAZ  ---------------------
    USBOut 1, bilgi, USBBilgiTX,DoUSBOut   
Return

AttachToUSB:   '' ------- USB YÜKLENMESİNİ BEKLE-------------
   Repeat                        
      USBPoll      
   Until PP0 = ATTACHED_STATE
Return   
''------------------------------------------------------------   
ata1:
    bilgi[0]=0
    bilgi[1]=1
    bilgi[2]=2
    bilgi[3]=3
    bilgi[4]=4
    bilgi[5]=5
    bilgi[6]=6
    bilgi[7]=7
Return



muhittin_kaplan

DoUSBIn:
USBIn  1, bilgi, USBBilgiRX,DoUSBIn   

komutu inceleyecek olursanız. bilgi gelmediği sürece sonsuz dögüye giriyor.Komut satırındaki  DoUSBIn etiketini değiştiriseniz istediğini zyere gidebirsiniz.

Maxim

protonun kendi içinde gelen örnekler vardı onlar işe yaramadımı acaba ?
bende bu konuda zayıfım

muhittin_kaplan


ibrsel

Alıntı Yap
DoUSBIn:
USBIn  1, bilgi, USBBilgiRX,DoUSBIn 

@ muhittin_kaplan hocam çok teşekkür ederim..Şuan denedim,proteusta simülasyonda sorun kalmadı..Yarın devre üzerinde deneyeceğim..İnşallah sorunsuz çalışır..
Bu arada programla ilgili soruları olan arkadaşlara elimden geldiğince yardımcı olabilirim..USB üzerinden haberleşmek Seri port ile haberleşmekten  daha zevkli imiş :))

Maxim

mahsuru yoksa eğer dosyaları indirebilirmiyiz ?
isis ve bas

ibrsel

#6

demirkan1

bilgisayar tarafından hiç bahsetmemişsiniz. Pc den bilgiyi nasıl gönderiyorsunuz ve alıyorsunuz acaba paylaşırmısınız?

Maxim

hocam teşekkürler
verdiğiniz kodu 20mhz unutmuşunuz 48 yapınca çalıştı

dışarıdan usb üzerinden gelen data nasıl olması gerekiyor
yani, bir programdan ne şekilde data yollanır
programda usb portları için alt yapı olması lazım değilmi ?
o kısımda kör nokta var bende, hep aklıma rs232 seri protokolü falan geliyor

ibrsel

USB den gelen bilgi "string" olarak okunuyor.Sizin bunu işlemeniz için,örneğin portB ye bağlı ledlere aktarmanız için Decimal e çevirmeniz gerekir.Paylaştığım prgramda onun ile ilgili komut satırı olması lazımdı..Yoksa akşam evde tekrar yüklerim.

demirkan1

pc tarafında yapmış oldugunuz arayüz programı yokmu? datayı nasıl yolluyorsunuz usb den?

ibrsel

#11
Proteustaki virtual terminal gibi USB terminal programları var...Şimdilik onlarla işimizi görüyoruz..İnternette Visual Basic ile ve Delphi ile yapılmış arayüz programları var.Onlardan bir tanesi ile haberleşme yapabilirsiniz.Hatta Sitemizde Fırat Üniversitesinden bir arkadaşımızın yaptığı USB kontrollü kayan yazı projesi vardı.Onun arayüz programı da iş görüyor.Arama kısmından aratır isen ulaşabilirsin...

stapan

slm kardes senin su download linkini yenilersen memnun olurum bendede bu sekilde bi problem var