usb projesinde if xx=1 then gosub xxx sorunu

Başlatan ibo1973, 04 Haziran 2008, 12:43:00

ibo1973

arkadaşlar easy hid kulanarak kurduğum usb projemde if then goto buton kodlarını çalıştıramıyorum baya aradım taradım orneklere baktım ama çalışmıyor 18f2550 yi programlıyım bilgisayara takınca cihazı algılıyor tara: gosub DoUSBIn gosub DoUSBOut burdan sonra  goto tara kısmına geçmiyor program dolaysıyla butonlar çalışmıyor ve ilgili işi yapmıyor buttonlar ve devre test edilmiştir kesin olarak çalışıyor aşağıdaki kodla bu şekilde oluyo not: kod kısaltılmıştır sadece ilgili kısmı verdim kodun kendisi oldukça uzun
DEFINE OSC 48          
DEFINE LOADER_USED 1
TRISA=1 'A portu giriş olarak ayarlandı
TRISB=1'B portu giriş olarak ayarlandı
TRISC=1'c portu giriş olarak ayarlandı
PORTA=0
PORTB=0
PORTC=0
SYMBOL iki= PORTC.2
SYMBOL uc= PORTC.1
SYMBOL dort= PORTC.0
USBBufferSizeMax   con 8  ' maximum buffer size
USBBufferSizeTX    con 8  ' input 
USBBufferSizeRX    con 8  ' output
USBBuffer        Var Byte[USBBufferSizeMax] 
USBBufferCount   Var Byte
usbinit ' initialise USB...

tara:
gosub DoUSBIn
gosub DoUSBOut
if iki=1 then gosub ikia 'ikia mevcuttur sadece burda yok
if uc=1 then gosub UCA    ' uca mevcuttur sadece burda yok
if dort=1 then gosub DORTA ' dorta uzun olan programda mevcut burda program kısalsın diye vermedim
goto tara

DoUSBIn:
   USBBufferCount = USBBufferSizeRX              ' RX buffer size
   USBService                                    ' keep connection alive
   USBIn 1, USBBuffer, USBBufferCount, DoUSBIn   ' read data, if available
   return
    
' ************************************************************
' * wait for USB interface to attach                         *
' ************************************************************
DoUSBOut:
   USBBufferCount = USBBufferSizeTX              ' TX buffer size
   USBService                                    ' keep connection alive
   USBOut 1, USBBuffer, USBBufferCount, DoUSBOut ' if bus available, transmit data
   return

ibo1973

yada kodu aşağıdaki gibi yapınca buttonlar çalışıyor ama bu seferde butona basılınca bilgisayar cihazı algılıyor ve  yaklaşık 30-40 işlem sonra gene butttonlar çalışmıyor.


tara:
if iki=1 then gosub ikia
if uc=1 then gosub UCA
if dort=1 then gosub DORTA

DoUSBOut:  'usb ye gonder
  USBBufferCount = USBBufferSizeTX   ' TX buffer size
  USBService                                      ' keep connection alive
  USBOut 1, USBBuffer, USBBufferCount, DoUSBOut '
goto tara

ibo1973

usb konusuna tam detaylı vakıf değilim ama sanırım 1 inci verdiğim kodda usb den gelicek bir kod bekliyor yani bi şekilde DoUSBIn: DoUSBOut: burda takılıp kalıyor 2 inci verdiğimdede usb buffer doluyor ama bufferi  temizlemeye çalışşamda beceremedim sanırım .

Elektron74

@ibo1973
easy hidi nedir? Rica etsem açıklarmısınız?
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

ibo1973

mcode std içinde ki kolayca usb projesi kurabiliceğin yardımcı bir program.

ErsinErce

Usb ye max her 10ms(HID için) de bir burda olduğunu belirtmen gerekiyor yoksa tekrar usbinit le tanıtman gerekiyor ama usbinit bazen sistemde çakışmaya neden olabiliyor bu yüzden her 10ms de bir usb ye burda olduğunu belirt. UsbService (Proton da UsbPoll) diye bi komut la yapılıyor.

Sisteminin zamanla donmasının sebebi pc nin sistemden cihazını otomatik ayırması, bu ayırma işlemi gerçekleşince pic bilgiyi gönderemiyor ve sistem sürekli olarak iletildi mesajını (Komut içinde) bekleyerek başka işlem yapamıyor

Tmr0 ı 9-10 ms ye ayarlayarak gönderme işleminin yapılmadığı zamanlarda kesmeyle UsbService(UsbPoll) gönder

İyi çalışmalar

ibo1973

Alıntı yapılan: "cynetron"Usb ye max her 10ms(HID için) de bir burda olduğunu belirtmen gerekiyor yoksa tekrar usbinit le tanıtman gerekiyor ama usbinit bazen sistemde çakışmaya neden olabiliyor bu yüzden her 10ms de bir usb ye burda olduğunu belirt. UsbService (Proton da UsbPoll) diye bi komut la yapılıyor.

Sisteminin zamanla donmasının sebebi pc nin sistemden cihazını otomatik ayırması, bu ayırma işlemi gerçekleşince pic bilgiyi gönderemiyor ve sistem sürekli olarak iletildi mesajını (Komut içinde) bekleyerek başka işlem yapamıyor

Tmr0 ı 9-10 ms ye ayarlayarak gönderme işleminin yapılmadığı zamanlarda kesmeyle UsbService(UsbPoll) gönder

İyi çalışmalar

verdiğin biligler için çok teşşekkür ederim verdiğin bilgiler ışığında programı aşağıdaki gibi düzenledim fakat hala 40 -50 işlem sonra takılıp kalıyor  sorun nerden kaynaklanıyor bir türlü bulamadım. ben hala buffer larla ilgili bir sorun olabiliceğini düşünüyorum bu durumda bilgili arkadaşlarında fikirlerini almak isterim yardımcı olan herkeze teşşekür ederim sorunu çözersem problemi ve çözümünü buraya koyucam insallah.

DEFINE OSC 48          
DEFINE LOADER_USED 1

TRISA=1 'A portu giriş olarak ayarlandı
TRISB=1'B portu giriş olarak ayarlandı
TRISC=1'c portu giriş olarak ayarlandı
PORTA=0
PORTB=0
PORTC=0
SYMBOL iki= PORTC.2
SYMBOL uc= PORTC.1
SYMBOL dort= PORTC.0
USBBufferSizeMax   con 8  ' maximum buffer size
USBBufferSizeTX    con 8  ' input 
USBBufferSizeRX    con 8  ' output
USBBuffer        Var Byte[USBBufferSizeMax] 
USBBufferCount   Var Byte
x var byte
usbinit ' initialise USB...

tara:
if iki=1 then gosub ikia 
if uc=1 then gosub UCA     
if dort=1 then gosub DORTA

gosub DoUSBOut
 for X = 0 to 99 ' Short delay between updates 
     pausEUS 1000 
     USBSERVICE     ' Maintain HID connection during delay period 
    NEXT X 

goto tara 

DoUSBOut:
   USBBufferCount = USBBufferSizeTX              ' TX buffer size
   USBService                                    ' keep connection alive
   USBOut 1, USBBuffer, USBBufferCount, DoUSBOut ' if bus available, transmit data
   return

ibo1973

arkadaşlar sorunu çözdüm yardımcı olan herkeze teşşekür ederim sorun her programcının bildiği ama bazen ihmal ettiği bir şeyden kaynaklı yani gosub la goto ile gidilen yerden return ile dönülür ben programımda nedense gosupla gidip goto ile dönüyordum programda biraz uzun olduğu için 40-50 işlem yapıp donuyordu gosubla gittiğim yerden return ile donunce sorun kalmadı gayet sağlıklı çalıştı

tirenium

Projeni burada bizimle paylaşabilirmisin =?

Teşekkürler.

Alıntı yapılan: "ibo1973"arkadaşlar sorunu çözdüm yardımcı olan herkeze teşşekür ederim sorun her programcının bildiği ama bazen ihmal ettiği bir şeyden kaynaklı yani gosub la goto ile gidilen yerden return ile dönülür ben programımda nedense gosupla gidip goto ile dönüyordum programda biraz uzun olduğu için 40-50 işlem yapıp donuyordu gosubla gittiğim yerden return ile donunce sorun kalmadı gayet sağlıklı çalıştı