Eine besonders irritierende Vielfalt von Fehlern in einem mikroprozessorgesteuerten System besteht darin, dass der Mikroprozessor unerwartet zurückgesetzt wird. Ein wichtiges Werkzeug zum Debuggen dieser Art von Problem ist eine Liste möglicher Ursachen. Was könnte dazu führen, dass ein Mikrocontroller unerwartet zurückgesetzt wird?
Auf PIC- und dsPIC-Chips habe ich die folgenden Ursachen für unerwartetes Zurücksetzen beobachtet.
Hardware:
Software:
Bei einigen dsPICs speichert das RCON-Register Bits, die die Ursache des Zurücksetzens angeben. Dies kann beim Debuggen sehr hilfreich sein.
Der RESET-Pin muss ordnungsgemäß von einer Reset-Schaltung angesteuert werden, die Über-/Unterspannung überwacht und ein ausreichend langes Reset-Signal erzeugt. Vor diesem Hintergrund stammen meine Erfahrungen mit einem unkontrollierten Hardware-Reset dann von:
Eine weitere Möglichkeit, die ich in dieser Liste nicht gesehen habe, ist ein Gerät, das ICSP unterstützt. Wenn auf Leitungen, die im schaltungsseriellen Programmiermodus ausgelöst werden, nicht genügend Pull-Ups verwendet werden, ist es manchmal möglich, diesen Modus zufällig aufzurufen. Dies führt kurze Zeit später zu einem Reset, wenn keine Programmaktualisierung an die vorgesehenen seriellen Empfängerleitungen gesendet wird. Ich vermute, dass ein interner Watchdog-Timer das Zurücksetzen erzwingt, wenn ICSP gestartet wird und keine Programmierdaten gesendet werden. Dies ist ein Fehler, den ich gemacht und viel Zeit damit verbracht habe, ihn mit einem 16F876 zu finden.
Wenn Sie CMOS- oder TTL-Logikchips in Ihrer Schaltung verwenden, stellen Sie sicher, dass sie über ausreichende Entkopplungskondensatoren zwischen Vdd und Masse verfügen (normalerweise 0,1 uF). Ich habe einen CD4021 in einem Design verwendet, und als er verwendet wurde, verursachte er anscheinend eine Spitze, die den Neustart des Mikroprozessors verursachte. Dann würde sich der Kreislauf wiederholen. Aus diesem Grund ist es auch eine gute Idee, am Anfang Ihres Codes eine offensichtliche Testsequenz (wie das mehrmalige Ein- und Ausschalten einer LED) einzufügen, damit Sie wissen, dass der Mikroprozessor arbeitet und Code ausführt.
Dies ist eines dieser seltenen Dinge, die auftauchen könnten:
Ich hatte ein Projekt mit einem Mikrocontroller, der sich sporadisch selbst zurücksetzte. Um es kurz zu machen, es stellte sich heraus, dass einige Optionen aktiviert oder deaktiviert werden mussten, da sonst Resets auftreten könnten. Das habe ich erst durch das Lesen der Errata herausgefunden, nachdem ich alles andere aufgegeben hatte.
Jetzt mache ich es mir zur Gewohnheit, die Errata zu lesen, bevor ich mich überhaupt entscheide, einen Chip zu verwenden, um zu wissen, worauf ich mich einlasse und ob ich damit umgehen kann. Leider hatte ich nach dem Abschluss niemanden, der mich über gängige Praktiken aufklärte, so dass ich viel in der realen Welt durch Misserfolg und Frustration gelernt habe.
Jon L
Stefan Collings
Vorac
Simon A. Eugen