Thông báo

Collapse
No announcement yet.

[TUT]Hướng dẫn giao tiếp USB với PIC18F

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #31
    bạn gì đó ơi, bạn có thể post sơ đồ mạch LT của mạch giao tiếp usb cho mình ko (sơ đồ trong TUT chưa đầy đủ thì phải). Và bạn cho mình hỏi cái TUT của bạn là làm giao tiếp usb, nhưng ứng dụng cụ thể của cái bạn làm là gì ? Nếu mình muốn giao tiếp với chuột or bàn phím dùng lớp hid, thì bạn có thể nói cho mình bik các bước thực hiên ko ( như sơ đồ mạch, cách viết firmware và xài 1 số phần mềm cần thiết có sẵn ). Thanks

    Comment


    • #32
      Trong TUT này mình chỉ làm một ví dụ đơn giản về truyền dữ liệu qua USB, từ đó bạn có thể ứng dụng trong các thiết bị để thay thế các chuẩn truyền thông cũ như RS232, còn về phần nguyên lý thi như thế là khá đầy đủ cho một ứng dụng nhỏ rồi, ban chỉ cần chú ý các điểm sau:
      - mach nguon, thạch anh, tu, tro treo chan RST --> đảm bảo cho con chíp của bạn chạy được.
      - dây D+ và D- dây GND của cổng USB nối chung với GND nguồn.
      - tụ dàng cho chân VUSB.
      nếu bạn muốn làm với các ứng dụng của chuôt và fim thì có thể tham khảo các example có sẵn trong PICC.

      Comment


      • #33
        thanks bạn, ai cũng nói nên tham khảo example của picc, nhưng vấn đề là mình vẫn chưa hình dung ra ứng dụng khi giao tiếp với chuột or bàn phím là ntn? Thế này nhé, trong picc có 1 example, và ứng dụng là làm con trỏ chạy vòng vòng trên màn hình( theo như 1 bạn đã HD trong topic mô phỏng usb dùng proteus), Nhưng đương nhiên là mình muốn làm 1 ứng dụng khác chứ ko phải chỉ là cho con trỏ chạy vòng vòng, bạn có thể cho mình 1 gợi ý hay định hướng ko ? ( vì mình hiện đang rất mơ hồ và ko biết nên làm ứng dụng từ đâu, mặc dù về lý thuyết mình đã đọc "usb in a nutshell" nên cũng nắm sơ dc rồi).

        Mình có thể mô phỏng trên proteus các ứng dụng kiểu này dc ko? ( dưạ trên lớp hid nên chắc ko cần viết driver và mình cũng muốn mô phỏng xong xuôi mới dám làm mạch thiệt). À, còn về giao diên , mình có cái dở là biết C++ nhưng ko biết xài VC++ . Mong bạn có thể nói kĩ 1 chút, vì mình còn nhiều cái chưa bik , khi tham khảo trên web thì thấy ng ta nói nhiều về thư viện này nọ, như API xài cho lớp hid, nhưng mình ko bik nó là gì và cách tiếp cận ra sao. mình hy vọng có thể làm dc 1 mạch ứng dụng usb nho nhỏ dưạ trên lớp hid mà vẫn loay hoay về các bước thực hiện . Và cũng ko bik làm sao để hiểu và phát triển ứng dụng trên code có sẵn
        Last edited by phuongdua; 24-02-2010, 08:26.

        Comment


        • #34
          Chủ topic cũng mới học nên cái project còn lỗi
          Bà con nên tận dụng cái tut cho tốt hay hơn

          Comment


          • #35
            Hi bạn, cho mình hỏi thêm là khi vẽ mạch trên orcad, có cần phải gắn R = 1.5 K lên 3.3 V ở dây D+ cho chế độ full speed ko vậy? Hay là pic có hỗ trợ và mình sẽ viết trong chương trình.

            Comment


            • #36
              Nguyên văn bởi hung_nguyen Xem bài viết
              HIHI! vấn đề về giao tiếp USB đã có nhiều luồng bàn luận nhưng tôi thấy đa số các luồng đều chỉ bàn về một phần trong cả một project về USB, và chủ yếu là dùng driver, thư viện lập trình giao diện có sẵn của nhà sản xuất vì thế rất khó khăn khi ta muốn giao tiếp USB mà dùng loại chíp khác. Còn tài liệu thì chưa thât sự tỷ mỷ nên nhưng người mới học khó tiếp cận được đặc biệt là các sinh viên. Với mục đính hướng dẫn tốt nhất cho các bạn mới học có thể nhanh chóng tiếp cận tôi xin mở ra một luồng mới hy vọng được sự quan tâm của tất cả các bạn.
              Trong tài liệu hướng dẫn này tôi đã chỉ ra cho các bạn cách làm phần cứng, viết fimware, tạo driver và viết một giao diện đơn giản trên máy tính. Mong rằng có nó sẽ giúp ích cho tất cả ai muốn làm về USB. Phần mềm mà tôi sử dụng đó là:
              - CCS
              - Windriver 9.21
              - visual studio 2005
              tài liệu này đuợc viết khi tôi làm Project nó được tổng hợp từ nhiều nguồn tài liệu, do kiến thức còn hạn chế nên có thể sẽ có sai sót mong đuợc sự chỉ giáo của tất cả các bạn từ đó xây dựng lên một tài liệu phổ thông nhất để càng ngày càng có nhiều người làm đuợc giao tiếp USB. thân ái!
              down ở đây! đọc xong làm ngay..
              Em đã làm như hướng dẫn và chạy ngon rồi. Nhưng cho em hỏi có cách nào phát hiện vendorID và productID ngay sau khi cắm thiết bị vào không? (giống bọn Windriver ấy ). Tại em đang cần gắn nhiều con cùng lúc.

              Comment


              • #37
                dạ xin hỏi vì sao em copy code của tut, biên dịch file main.c mà nó lại bị lỗi và nhảy vao "usb.c" ở dòng : " #ERROR You must include USB descriptors."
                dù em đã include các file như tut T_T

                Comment


                • #38
                  Máy tính không nhận đc USB 18f4550

                  Hiện đang làm đề tài về giao tiếp qua USB bằng 18f4550,chạy trên proteus ngon lành rùi,trong manager computer báo nhận thiết bị,nhưng khi em cắm trên testboard thì không nhận đc,cũng có lúc nó báo USB not recognized,em nghe noí nếu đúng thì chân Vus là 3.3V phải không,nhưng em đo thì không có Vôn nào cả,em kiểm tra dây rợ khá kĩ rùi,nhưng em chỉ dùng tụ 1uF ở chân Vusb thui chứ không phải 470nF,không biết có sao khônh?em dùng thạch anh trên thực tế là 12Mhz và 2 tụ 22pF,các chân D+ và D- đã nối vô 24 và 23,2 bên Vss và Vdd cũng đã nối với nhau,đo các chân này đều lên 5V,em post code máy anh xem có vấn đề ji không,

                  #include "usb_demo_bulk.h"
                  #include <pic18_usb.h>
                  #include <usb_desc_scope1.h>
                  #include <usb.c>
                  #include <lcd4bit.c>
                  void usb_debug_task(void)
                  {
                  static int8 last_connected;
                  static int8 last_enumerated;
                  int8 new_connected;
                  int8 new_enumerated;
                  new_connected=usb_attached();
                  new_enumerated=usb_enumerated();
                  if (new_connected && !last_connected)
                  printf("\r\n\nUSB connected, waiting for enumaration...");
                  if (!new_connected && last_connected)
                  printf("\r\n\nUSB disconnected, waiting for connection...");
                  if (new_enumerated && !last_enumerated)
                  printf("\r\n\nUSB enumerated by PC/HOST");
                  if (!new_enumerated && last_enumerated)
                  printf("\r\n\nUSB unenumerated by PC/HOST, waiting for enumeration...");
                  last_connected=new_connected;
                  last_enumerated=new_enumerated;
                  }

                  void main()
                  {
                  int8 out_data[3];
                  int8 in_data[64];
                  int8 i=0;
                  char c;
                  int8 send_timer=0;
                  int8 count=0;


                  setup();


                  usb_init_cs();
                  lcd_init();

                  while (TRUE)
                  {
                  usb_task();
                  usb_debug_task();
                  if(usb_enumerated())
                  {
                  if (!send_timer)
                  {
                  count++;
                  send_timer=250;
                  out_data[0]=100;
                  out_data[1]=111;
                  out_data[2]=233;
                  if (usb_put_packet(1, out_data, 3, USB_DTS_TOGGLE))
                  printf("\r\n<-- Sending 2 bytes: 0x%X", out_data[0]);
                  }

                  if (usb_kbhit(1))
                  {

                  usb_get_packet(1, in_data, 64);

                  lcd_putc("\f");i=0;
                  for(;i<32;i++)
                  {
                  if(i==15) lcd_putc("\n");
                  c=in_data[i];
                  lcd_putc(c);
                  }
                  //printf("\r\n--> Received data: %s",in_data);
                  }
                  send_timer--;
                  delay_ms(1);
                  }
                  }
                  }
                  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                  #include <18F4550.h>
                  #device adc=8

                  #FUSES NOWDT //No Watch Dog Timer
                  #FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
                  #FUSES EC_IO //External clock
                  #FUSES NOPROTECT //Code not protected from reading
                  #FUSES BROWNOUT //Reset when brownout detected
                  #FUSES BORV20 //Brownout reset at 2.0V
                  #FUSES NOPUT //No Power Up Timer
                  #FUSES NOCPD //No EE protection
                  #FUSES STVREN //Stack full/underflow will cause reset
                  #FUSES NODEBUG //No Debug mode for ICD
                  #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
                  #FUSES NOWRT //Program memory not write protected
                  #FUSES NOWRTD //Data EEPROM not write protected
                  #FUSES IESO //Internal External Switch Over mode enabled
                  #FUSES FCMEN //Fail-safe clock monitor enabled
                  #FUSES PBADEN //PORTB pins are configured as analog input channels on RESET
                  #FUSES NOWRTC //configuration not registers write protected
                  #FUSES NOWRTB //Boot block not write protected
                  #FUSES NOEBTR //Memory not protected from table reads
                  #FUSES NOEBTRB //Boot block not protected from table reads
                  #FUSES NOCPB //No Boot Block code protection
                  #FUSES NOMCLR //Master Clear pin enabled
                  #FUSES LPT1OSC //Timer1 configured for low-power operation
                  #FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
                  #FUSES PLL3 // PLL PreScaler 3
                  #FUSES USBDIV
                  #FUSES VREGEN
                  #FUSES CPUDIV1
                  #FUSES HS



                  #DEFINE USB_HID_DEVICE FALSE
                  #define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1 for IN bulk/interrupt transfers
                  #define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1 for OUT bulk/interrupt transfers
                  #define USB_EP1_TX_SIZE 64 //size to allocate for the tx endpoint 1 buffer
                  #define USB_EP1_RX_SIZE 64 //size to allocate for the rx endpoint 1 buffer
                  #use delay(clock=12000000)
                  #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
                  void setup()
                  {
                  setup_adc_ports(AN0|VSS_VDD);
                  setup_adc(ADC_OFF);
                  setup_psp(PSP_DISABLED);
                  setup_spi(FALSE);
                  setup_wdt(WDT_OFF);
                  setup_timer_0(RTCC_INTERNAL);
                  setup_timer_1(T1_DISABLED);
                  setup_timer_2(T2_DISABLED,0,1);
                  setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
                  setup_comparator(NC_NC_NC_NC);
                  setup_vref(FALSE);
                  setup_low_volt_detect(FALSE);
                  setup_oscillator(False);
                  }
                  Còn ,mấy file kia em nghĩ không có gì quan trọng,mọi người xem giúp

                  Comment


                  • #39
                    Nguyên văn bởi somali Xem bài viết

                    #FUSES HS
                    Bạn thử khai báo #FUSES HSPLL xem thế nào

                    Comment


                    • #40
                      giao tiếp 18f4550 với usb

                      em đã làm 1 mạch in thực hiện giao tiếp qua usb giữa 18f4550 với Pc,firmware đã có đảm bảo đúng 100%,em đã mắc tụ vô chân Vusb,D- cổng usb với D+ Pic và ngược lại,nhưng nó không hoạt động,nhưng khi em dùng đồng hồ VOM đặt vào 2 chân D+ Pic với chân VCC thì thấy nó báo USB not recognized,mình nghĩ phải có điện trở trong mạch này,bạn nào có kinh nghiệm ji chỉ mình voi

                      Comment


                      • #41
                        Hi, tớ cũng đang lọ mọ tìm hiểu giao tiếp USB, mà tớ quen xài AVR, gặp tài liệu này chắc phải chuyển sang xài PIC quá,

                        Comment


                        • #42
                          Chào mọi người
                          Hiện tại tớ chưa có phần cứng PIC nên chi mô phỏng bằng proteus, mô phỏng máy báo found new hardware nhưng lại không có driver.
                          Và khi mở file project_usb_4550.sln máy báo Unable to load DLL 'wdapi921.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

                          mong các bạn cho biết cách khắc phục.

                          tớ đang cần driver:

                          1. project_usb_4550_lib.dll
                          2. wdapi_dotnet921.dll
                          3. driver cho máy tính

                          Chúc mọi người vui vẻ.
                          Last edited by newbie2009; 22-06-2010, 16:35.

                          Comment


                          • #43
                            chào các bác , em đang tập làm giao tiếp USB , em làm theo hướng dẫn không hiểu sao khi em biên dịch CCS lại báo lỗi này

                            A #DEVICE required before this line

                            Kiểm tra lỗi thì nó hiện ra file usb_hw_layer.h ở dòng

                            enum USB_DTS_BIT {USB_DTS_DATA1=1, USB_DTS_TOGGLE=2, USB_DTS_DATA0=0,
                            USB_DTS_STALL=3, USB_DTS_USERX=4};

                            mong các bác có thể giải thích giúp em lỗi này ko ạ ! thank
                            Mr. Danh Le Tran
                            Email:

                            Comment


                            • #44
                              to RTKP:

                              lỗi đó là do include file "usb_demo_bulk.h" sai đường dẫn, kiểm tra lại chỗ đó.

                              to newbie2009:
                              chạy mô phỏng khác xa nhiều so với chạy thực tế-->> bạn nên làm mạch luôn, rồi làm theo sẽ tốt hơn, tớ nghĩ cứ làm theo hướng dẫn trong luồng này sẽ chạy thôi ( tớ chưa làm nên chưa biết , nhưng thấy nhiều bạn ủng hộ chắc là làm chạy rồi ).

                              tớ cũng đang chuẩn bị làm ...

                              ----^..^----

                              Comment


                              • #45
                                Hi all!

                                Tớ mới viết 1 phần mềm nhỏ giao tiếp USB, mời các bác xem thử.

                                Ban đầu viết bằng C# không được, nên chuyển sang viết bằng VB6. (nên máy phải cài VB6 mới chạy được ).

                                Không cần driver cho Pic18f4550, nạp firm cắm vào máy tính là tự nhận-->tự cài driver luôn ( rất tiện).

                                Trong chương trình có schematic luôn...

                                File đính kèm gồm:
                                1. PIC18F4550 USB Control led_VB6.exe
                                2. PIC18F4550 USB Control led_Xtal12Mhz.hex
                                3. PIC18F4550 USB Control led_Xtal20Mhz.hex
                                Attached Files
                                Last edited by chuotdientu; 26-07-2010, 19:53.

                                ----^..^----

                                Comment

                                Về tác giả

                                Collapse

                                hung_nguyen Tìm hiểu thêm về hung_nguyen

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X