Hi, ich habe mir ein Breakout-Board für meinen ATMega16PU erstellt. Um mit ihm per USB zu kommunizieren benutze ich den Software-Stack v-usb von obdev.net und eine angepasste HID-Schnittstelle von rayshobby.net. Laut v-usb muss die D+ Leitung an INT0 (PD2) angeschlossen werden. Die D- Leitung kann am PortD angeblich beliebig gewählt werden. Zu Testzwecken auf dem Schaltbrett habe ich für D- PD3 (INT1) gewählt, was auch prima funktioniert hat. D.h. ich kann Daten auf meinem PC vom meinem Mikrocontroller empfangen als auch an ihn senden. Für mein Breakoutboard (geätzte Platine) habe ich ohne zu testen D- mit PD6 (ICP) verbunden. Ich weiß war nicht schlau und es funktioniert auch nicht. Mein Mikrocontroller wird von meinem PC noch nicht einmal erkannt. Ich habe alle anderen Ports von PortD ebenfalls zu Testzwecken an D- angelegt. Meine Hostsoftware auf meinem PC erkennt zwar meinen Microcontroller dann, kann aber keine weiteren Daten vom Microcontroller erhalten. Wirklich funktionieren tut es also nur wenn D- an PD3 (INT1) anliegt. Hat jemand eine Ahnung warum die Kommunikation mit den anderen Pins nicht funktioniert?
Hast du die Firmware im uC ebenfalls auf den "neuen" Port umgebaut? Einfach den Pin zu änder geht natürlich nicht. Evtl. braucht die FW den Interrupt auf der D- Leitung. Lg.
Alle Pins funktionieren, wenn ich sie in der FW angebe und zustätzlich mit INT1 (PD3) verbinde. D.h. z.B D- liegt an PD6 und an PD3 an, wobei in der FW nur PD6 als D- Leitung angegeben wurde. Ich werde mal bei der Firma nachfragen, die den Softwarestack geschrieben hat. Denn ich habe keine Ahnung woran es liegt. Habe geschaut, ob irgendwo in der FW PD3 oder INT1 vorkommt aber nichts gefunden.
Wenn V-USB so konfiguriert ist, dass INT0 oder INT1 genutzt werden, muss D- an einen dieser Pins angeschlossen werden. Die neueren AVRs unterstützen allerdings einen Pin-Change interrupt an jedem Pin. Mit diesem ist es möglich alle Pins zu nutzen.
poste doch mal deinen Code, bevor du die Leute dort mit deinen "Problemen" belästigst.
In der sogenannten usbconfig.h werden die Leitungen D+ und D- festgelegt.
1 | #define USB_CFG_IOPORTNAME D
|
2 | /* This is the port where the USB bus is connected. When you configure it to
|
3 | * "B", the registers PORTB, PINB and DDRB will be used.
|
4 | */
|
5 | #define USB_CFG_DMINUS_BIT 6
|
6 | /* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
|
7 | * This may be any bit in the port.
|
8 | */
|
9 | #define USB_CFG_DPLUS_BIT 2
|
10 | /* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
|
11 | * This may be any bit in the port. Please note that D+ must also be connected
|
12 | * to interrupt pin INT0! [You can also use other interrupts, see section
|
13 | * "Optional MCU Description" below, or you can connect D- to the interrupt, as
|
14 | * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
|
15 | * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
|
16 | * markers every millisecond.]
|
17 | */
|
Da USV_COUNT_SOF nicht aktiviert ist dürfte D- auch keinen Interupt gebrauchen.
1 | #define USB_COUNT_SOF 0
|
2 | /* define this macro to 1 if you need the global variable "usbSofCount" which
|
3 | * counts SOF packets. This feature requires that the hardware interrupt is
|
4 | * connected to D- instead of D+.
|
5 | */
|
Ich überlege, ob es möglicherweise eine Hardware-Problem ist. Sprich die Spannung die an PD6 anliegt ist zu gering um von diesem detektiert zu werden. Bei PD3 es aber reicht.
Gerrit V. schrieb: > Da USV_COUNT_SOF nicht aktiviert ist dürfte D- auch keinen Interupt > gebrauchen. Eigentlich brauchst du den Interrupt trotzdem. Auf Interrupt zu verzichten ist komplizierter: http://forums.obdev.at/viewtopic.php?f=8&t=8738&sid=129a0c27435d4518266cc816b06fa103 MfG
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.