Forum: Mikrocontroller und Digitale Elektronik Stabilität der USB-Verbindung


von A. S. (rava)


Angehängte Dateien:

Lesenswert?

Hi,

nach langem hin und her habe ich es doch geschafft, ein USB-HID-Device 
mit einem PIC24FJ128GC010 umzusetzen. Der IC hat einen internen 
Transceiver eingebaut.
Ich hab mich weitestgehend an Kapitel 14.5 und 14.6 dieses Tutorial 
gehalten:
http://www.engscope.com/pic24-tutorial/

Die Kommunikation geschieht über 12Byte Pakete, die mit 
Interrupt-Priorität gesendet werden.

Anders als der Autor nutze ich aber den internen Oszillator und das 
auto-tuning feature des PICs, bei dem die genaue Taktfrequenz an das 
USB-Signal angepasst wird (über die tuning-register).

letzten Endes klappt das alles recht gut und ich kann das 
Debugger-Projekt des Autors mithilfe des SimpleHIDWrite utilitys nutzen 
(http://janaxelson.com/hidpage.htm).

Allerdings verliert das Gerät alle paar Minuten die Verbindung. Das 
äußert sich dann, als würde ich es aus und sofort wieder anstecken. Das 
utility meldet dann "Removal" & "Arrival" des Devices (siehe 
Screenshot).


Lässt sich irgendwie nachvollziehen, was der Grund dieser Ausfälle ist?
Zur Auswahl steht viel:
Entweder liegt's am schlechten Auto-Tuning. Oder es liegt an irgendeinem 
System-Reset der aufgetreten ist. Ein Problem könnte auch sein, dass 
VUSB3V3 mit 3.0-3.6 betrieben werden muss. Im Moment liegen da eher 
2.85V an, da ich aus Versehen einen falschen Spannungsregler verbaut 
habe.


Es steht also viel Pfusch zur Auswahl aber vielleicht ist es ja etwas 
ganz Anderes? Vielleicht ein Bug in der Software?

Mir fällt v.a. auf, dass nach einem "Removal" & "Arrival" der RAM des 
PICs zurückgesetzt wurde. Konkret: der Debugspeicher, den man da von 
außen schreiben und lesen kann, steht wieder auf 0.
Also war da mal die Versorgung weg? Denn geschrieben werden die Werte 
sonst an keiner Stelle.


Möglicherweise reicht mir schon ein brauchbareres Tool, um das USB 
Device PC-seitig einigermaßen zu debuggen.

von Noch einer (Gast)


Lesenswert?

> Also war da mal die Versorgung weg?

Das lässt sich doch recht einfach herausfinden. BrownOut Reset arbeitet 
zuverlässig und nach einem BrownOut wird main() aufgerufen. Im main() 
kannst du auch das RCON Register abfragen.

von A. S. (rava)


Lesenswert?

Hast natürlich recht. Der Fehler war ein Dummer: Ich hatte den Watchdog 
timer nicht wegkonfiguriert.

Das stand tatsächlich im RCON. Debuggen über USB + SimpleHIDWrite ist 
sehr angenehm, wie ich eben feststellen durfte :-)


Hier sind zu viele Dinge gleichzeitig neu für mich. Danke für die Hilfe! 
Langsam wird's

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
Noch kein Account? Hier anmelden.