Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

usb interrupt !

Başlatan omereliusuk, 06 Nisan 2012, 23:29:12

omereliusuk

pic 'i usb bağlantısını sağdan soldan toplayarak yapabildim. ama şimdi usb'i interrupt ile yapmak istiyorum.
usb ile veri gönderip alabiliyorum. pic tarafına interrupt yapabilirsem diger işlemler için fazlaca zamanım olacak ayrıca pic sadece usb için çalışmayacak. yardımcı olanlara şimdiden teşekkür ediyorum. lütfen C harici <uygun bir kod da olsa> bir kod göndermeyin. teşekkürler.

muhittin_kaplan

sanki daha öncede yazdım.
şurayı bir incele
http://www.lvr.com/hidpage.htm

omereliusuk

şimdi oldu. usb interrupt zaten driverinde yüklü. "ccs c": ben harici bir int koyunca bak zaten bununla ilgili bir interrupt var, senin koymana gerek yok diyor. error veriyor. şimdi oldu gibi. biraz daha ugraşırsam hiç ilişmeden bu usb bağlantı sıkıntısını üzerimden atacağım. şimdi şu an için tek sorun var. o da malum driveri iyice inceleyerek ben direkt interruptın içinden usb portundan aldığım bilgilere nasıl ulaşırım olacak. inşallah bunda da muvaffak olurum.

M.s.d

Merhaba,
pic pc arası data alıverişi yapabiliyorum ancak pc den pice gelen datada uart gibi bir kesme bulamadım. Sonsuz döngüde hep kontrol ediyor bulursa o fonksiyona giriyor.
Bana bilgi geldiği an haber vermesi gerekiyo ki bulunduğum döngüden çıkıp farklı bi döngüye anlık olarak gidebileyim. Link çökmüş muhittim hocam. Şimdiden teşekkürler.


M.s.d


Hocam teşekkürler en kısa sürede inceleyeceğim inşallah.
Danışman hocanızın kendi hocam olduğunu görünce şaşırdım açıkçası :)
Tekrardan teşekkürler

MCansız

Şimdiden kolay gelsin sıkıntı yaşarsanız yazın buraya yardımcı olmaya calışırım Danışman hocanızından birşey beklemeyin onlar için tek şey iyi bir sunum ve projenin calışması

M.s.d

Mükail bey merhaba,

Sorunumu hala çözemedim. Derleyici olarak CCS C kullanıyorum. USB üzerinden pc ye veri göndermek için timer0 interruptını kullanıyorum. Burada bir problem yok. Saniyede 4 kere data gönderiyorum.
Ancak data alma kısmında timer interruptını kullanınca;

         if (usb_kbhit(1))             //Eğer pc'den yeni bir paket geldiyse
         {             
         usb_get_packet(UcNokta1,usb_data_rec,8); //paketi oku 
         }

fonksiyonu işlevsiz oluyor. Herhangi bir data alamıyorum. Bu fonksiyonuda sonsuz döngüde kontrol etmek işime yaramıyor. Çünkü bu fonksiyona gelmeden ard arda 2 data alınca pic tarafı kilitleniyor. Ya bu buffer ı arttırmam gerek  ya da data alındı mı fonksiyonunu her saniye kontrol etmem gerek. Lütten yardımcı olun.

MCansız

M.s.d merhaba

CCS C hiç kullanmadım kesin bir cevap veremiyorum eger projenin tamamını paylaşırsan bilen arkadaşlar yardımcı olurlar

mikroC kullanırsan yardımcı olurum

veri almak için neden timer kullanıyorsun ?

araştırmalarıma göre örnek bir kullanım buldum şurada https://320volt.com/ccs-c-ile-pic18f2550-usb-led-uygulamalari/

void main(void) {

   int8 iBuff[2];                   //buffers
   int8 oBuff[2];
      
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   

   LED_OFF(LED);

   usb_init();

   usb_task();
   usb_wait_for_enumeration();
   
   while (TRUE)
   {
      if(usb_enumerated())          // PicWinUSB is enumerated?
      {
         if (usb_kbhit(1))          // EP has data?
         {
            usb_get_packet(1, iBuff, 2); // Read 2 byte packet from EP 1

            if (iBuff[0] == 0) // Led_Mode
            {
               if (iBuff[1] == 1) output_toggle(LED); // Toggle LED
            }

            if (iBuff[0] == 1) // ADC_Mode
            {
               oBuff[0] = 1;
               oBuff[1] = read_adc();
               usb_put_packet(1, oBuff, 2, USB_DTS_TOGGLE); // Send 2 byte packet to EP 1
            }
         }
      }
   }
}




bundan dolayı seninki de

if(usb_enumerated())    {
  if (usb_kbhit(1))             //Eğer pc'den yeni bir paket geldiyse
         {             
         usb_get_packet(UcNokta1,usb_data_rec,8); //paketi oku 
         }
                                        }

şeklinde olmalı