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.
Ja klar, den D- Pin habe ich auch in der FW geändert.
Und wie sieht das mit dem Interrupt aus? 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.
Gast
#3539808
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Da USV_COUNT_SOF nicht aktiviert ist dürfte D- auch keinen Interupt gebrauchen.
1 | |
2 | |
3 | |
4 | |
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.
Gast
#3542559
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.