Fórum témák

» Több friss téma
Fórum » V-USB Használata AVR-el
Lapozás: OK   3 / 3
(#) sargarigo hozzászólása Szept 11, 2016 /
 
Sziasztok!

Mit szóltok ehhez a projekthez?
Ahogy látom egy arduino uno elég hozzá, és a beépített rs232-usb átalakításra használt chipet kódolja át billentyűzetnek. Mi a véleményetek róla? Szét lehet lőni a panelt valahogy? Azt írja hogy nem, de azért jobb ha megkérdem. Ha jól látom az lenne az előnye hogy nem foglal semmi erőforrást az avr-ből, ráadásul semmit nem kell pluszban hozzá építeni.

Az eredeti elgondolásom az lett volna hogy egy usb-s billentyűzetet szétszedek, és én "nyomogatom" a gombjait egy uno-val. A fenti azért sokkal szebb megoldásnak tűnik
(#) sargarigo válasza sargarigo hozzászólására (») Szept 11, 2016 /
 
Megszívtam. Ami nekem van, az nem is atmega16u2 chipet használ, hanem CH340G-t. Afrancba. Rá lehet ezt venni valahogy hogy billentyűzetnek mutassa magát? Gondolom itt már megint kezd drágább lenni a leves mint a hús.
A hozzászólás módosítva: Szept 11, 2016
(#) sargarigo válasza sargarigo hozzászólására (») Szept 13, 2016 /
 
Na hogy érdemben is hozzászóljak: Bővebben: Link
Ez egy arduino unóval működik. Fontos, hogy le kell tölteni hozzá az 1.0-ás ide-t, mert különben nem fordul le!!!
Lefordítani sikerült, holnap szerzek külső alkatrészeket hozzá, és kipróbálom!
(#) Sick-Bastard hozzászólása Feb 5, 2020 /
 
Üdv!

Valakinek akadt e már gondja a V-USB-ben, a USB_CFG_PULLUP_IOPORTNAME, azaz a 1k5 ohmos felhúzó ellenállás beállításával?

Nem a gyári V-USB-t használom, hanem az USBasp forráskódjában próbáltam beállítani, de nem működik. Ha simán VCC-re kötöm, akkor minden jól megy. Több PORT-on is próbáltam.
(#) Sick-Bastard válasza Sick-Bastard hozzászólására (») Feb 5, 2020 /
 
Üdv!

Szóval, ha jól értem a leírást, akkor elég lenne csak az usbconfig.h-ban ezt a 2 sornyi definíciót engedélyezni (és természetesen a megfelelő pinre kötni az ellenállást):

  1. /* ----------------------- Optional Hardware Config ------------------------ */
  2. #define USB_CFG_PULLUP_IOPORTNAME   D  
  3. /* If you connect the 1.5k pullup resistor from D- to a port pin instead of
  4.  * V+, you can connect and disconnect the device from firmware by calling
  5.  * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
  6.  * This constant defines the port on which the pullup resistor is connected.
  7.  */
  8. #define USB_CFG_PULLUP_BIT          7  
  9.  */


Mivel ez igy nem működik, igy a comment segítségével belenéztem az usbdrv.h-ba is, hogy hol is van a usbDeviceConnect() és a társa:
  1. #ifdef USB_CFG_PULLUP_IOPORTNAME
  2. #define usbDeviceConnect()      ((USB_PULLUP_DDR |= (1<<USB_CFG_PULLUP_BIT)), \
  3.                                   (USB_PULLUP_OUT |= (1<<USB_CFG_PULLUP_BIT)))
  4. #define usbDeviceDisconnect()   ((USB_PULLUP_DDR &= ~(1<<USB_CFG_PULLUP_BIT)), \
  5.                                   (USB_PULLUP_OUT &= ~(1<<USB_CFG_PULLUP_BIT)))
  6. #else /* USB_CFG_PULLUP_IOPORTNAME */
  7. #define usbDeviceConnect()      (USBDDR &= ~(1<<USBMINUS))
  8. #define usbDeviceDisconnect()   (USBDDR |= (1<<USBMINUS))
  9. #endif /* USB_CFG_PULLUP_IOPORTNAME */


Elég egyszerűnek tűnik, hogy mi is történik itt.
Egy gondolattól vezérelve összeraktam a két kódot, hogy akkor mi is történik.
Így mindkét esetben felismeri az USB, ha a pinre vagy ha a VCC-re van kötve az ellenállás.

Marad a kérdés:
Mire jó, ha pinre van kötve az ellenállás és nem a VCC-re?
(#) Lucifer válasza Sick-Bastard hozzászólására (») Feb 6, 2020 /
 
Idézet:
„Mire jó, ha pinre van kötve az ellenállás és nem a VCC-re?”


Oda van írva a kommentbe:

Idézet:
„* If you connect the 1.5k pullup resistor from D- to a port pin instead of
* V+, you can connect and disconnect the device from firmware by calling
* the macros usbDeviceConnect() and usbDeviceDisconnect()”


Firmware-ből el tudod dobatni az USB kapcsolatot a hostoddal.

A következő esetekben tud hasznos lenni:
- Eszköz lemegy valami low power módba.
- Bootloader más USB protokollt használ így firmware frissítés előtt újra kell enumerálni (hogy pld. a Windows a másik drivert töltse be)
(#) Sick-Bastard válasza Lucifer hozzászólására (») Feb 7, 2020 /
 
Ok, ez érthető, csak a gyári kód nekem mégsem megy.
Mint fent is írtam, hogy ha aktiválom (kikommentelem) a két sornyi definiciót:
  1. #define USB_CFG_PULLUP_IOPORTNAME   D
  2. #define USB_CFG_PULLUP_BIT          7

akkor a leírás szerint működnie kéne, de mégsem.

Ha az usbDeviceConnect()-et módosítom:
  1. #define usbDeviceConnect()      ((USB_PULLUP_DDR |= (1<<USB_CFG_PULLUP_BIT)), \
  2.                                   (USB_PULLUP_OUT |= (1<<USB_CFG_PULLUP_BIT)), \
  3.                                   (USBDDR &= ~(1<<USBMINUS)))

azaz a két parancsot összevonom, akkor megy.
(#) szabi95 hozzászólása Jan 24, 2021 /
 
Üdv!
Egy gamepad-et építek V-USB-vel ami a távirányítóm PPM jeléből kapja az adatokat. Az alap 4 tengelyes megoldás működik, de amikor gombokat is adok a jelentésleíróhoz akkor valamiért meg se mukkan. Több megoldást is próbáltam, volt amikor a számitógép is hibásnak mutatta, és volt amikor nem volt hibaüzenet, felismerte az eszközt de a se a gombok se a tengelyek nem működtek. A mellékelt kód az alap 4 tengelyes megoldás, a bővitett jelentésleíró ki van kommentelve(ez az utóbbi hibát produkálja) meg a report_t struktúrában a gomb változó és a változó értékének beírása is.

Mi lehet a gond a bővített jelentésleírómmal?

main.c
    
(#) szabi95 válasza szabi95 hozzászólására (») Márc 29, 2021 /
 
Megoldottam. Úgy tűnik a gond az volt hogy a V-USB összesen csak 8 adatbájtot enged használni. A tengelyeket 8 bitesre cserélve már működik.
Következő: »»   3 / 3
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem