Stabilität der USB-Verbindung

OP #4122845
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.
Angehängte Dateien:
Gast #4122880
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.
OP #4122911
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.