Ich habe mich noch nie mit Teilen befasst, die von Digikey defekt sind, aber 3 neue Atmel ATmega164A, die ich erhalten habe, zeigten ein äußerst merkwürdiges Verhalten.
Ich habe es auf etwas eingegrenzt, das mit der Uhr zu tun hat, und es stellte sich heraus, dass das resultierende Taktsignal des angeblich "werkseitig kalibrierten" internen Oszillators zwischen 650 und 700 kHz jitterte, anstatt der soliden 1 MHz, die es sein sollte. Ich konnte in das Kalibrierungsbyte schreiben, um dies sehr nahe an 1 MHz zu bringen (immer noch mit etwas Jitter), und die meisten Dinge funktionieren, aber die UARTs verhalten sich einfach nicht richtig, sie scheinen einen kontinuierlichen Strom von kurzen Impulsen auszugeben, egal was Sie von ihnen verlangen.
Ich habe mich zuvor mit der Low-Power-Version dieses Mikrocontrollers (164P) ohne Probleme befasst und beschlossen, sie an Ort und Stelle zu platzieren und die Taktausgabe zu überprüfen, und es ist eine solide 1 MHz ohne Jitter. Ich neige zu dem Schluss, dass diese 164A-Chips defekt sind, aber würde es andere Tests geben, die ich versuchen könnte, dies zu bestätigen?
Edit: Ich dachte nur, ich würde den Prozess beschreiben, mit dem ich die Uhr messe. Ich habe das Sicherungsbit für den Taktausgang aktiviert und den entsprechenden Pin mit einem Logikanalysator gemessen, der mit einer sehr hohen Rate abtastet. Ich habe ein Programm, das in das Kalibrierungsregister schreibt, OSCCAL
und ich konnte meinen Weg auf 1 MHz ausprobieren.
Edit # 2: Nach weiteren Untersuchungen scheint der Mikrocontroller nach einer bestimmten Programmgröße zu funktionierenSchwelle. Ein Bare-Bones-Projekt mit einer einzelnen Quelldatei, in der eine LED blinkt, scheint in Ordnung zu sein, aber das Kompilieren und Verknüpfen einer meiner anderen Dateien (z. B. UART-Bibliothek oder was auch immer) ohne einen Funktionsaufruf für diese Methoden führt dazu, dass sich der Mikrocontroller verhält das oben beschriebene Verhalten. Die Stromanschlüsse sind in Ordnung und es wurde eine ordnungsgemäße Entkopplung durchgeführt. Ich habe im Moment keine Zeit, dies weiter zu debuggen, daher haben wir stattdessen die Low-Power-Version verwendet. Ich bin mir nicht sicher, wo genau das Problem liegen könnte. 1) 164A und 164P sind nicht codekompatibel. 2) Das Programmierverfahren ist für diese beiden uCs unterschiedlich. 3) Die Einheiten sind defekt. Ich bin zuversichtlich in unser Board-Design und würde Stromprobleme ausschließen. Leider kann ich keine richtige Antwort finden, also lasse ich diese Frage so wie sie ist - vielleicht bin ich ' Ich werde in Zukunft noch einmal auf das Problem zurückkommen. Dank an alle, die aufschlussreiche Kommentare oder Antworten gegeben haben, können sie anderen Personen mit sofort einsatzbereiten uC-Problemen nützlich sein.
Antworten:
Es ist selten, dass diese Art von Versagen auftritt. Es ist zu erwarten, dass ein Pin etwas mehr Rauschen aufweist oder dass dieser Pin nicht mehr funktioniert. Aber es "etwas funktionieren zu lassen, aber nicht auf nützliche Weise", ist selten. Ich würde vermuten, dass es Designprobleme gibt, die die Probleme verursachen und etwas mit einem Unterschied zwischen dem 164A und dem 164P zu tun haben. Da der Jitter hoch ist, würde ich mir leistungsbezogene Dinge ansehen. Sind alle Power / Gnd-Pins angeschlossen? Werden die E / A-Pins entweder angesteuert oder hoch oder niedrig gezogen? Etc.
Es bleibt jedoch die Möglichkeit, dass die Teile schlecht sind. Es ist selten, aber nicht ungewöhnlich. Die einzige Möglichkeit, dies festzustellen, besteht darin, weitere Teile von einem anderen Lieferanten zu beziehen und diese auszuprobieren. Wenn sie funktionieren, müssen Sie weitere Untersuchungen durchführen und feststellen, ob Sie sie beim Umgang / Löten getötet haben oder ob sie wirklich schlecht von Digikey stammen.
quelle
Ich hatte einmal ein sehr ähnliches Problem mit Microchip-Basisteilen. Wir haben die ICSP-Programmierung durcheinander gebracht und einen Weg gefunden, die Oszillator-Trimmung zu löschen, was zu groben Fehlern bei der Genauigkeit der internen Uhr führte. Stellen Sie sicher, dass Ihr Programmiergerät und / oder Ihre Programmierwerkzeuge richtig angeschlossen sind und richtig verwendet werden.
Es gibt keine einfache Möglichkeit, die Genauigkeit des Oszillators zu überprüfen, ohne die Teile zu programmieren. Ich würde also einfach ein triviales Port-Toggle-Programm schreiben (eines, das nichts anderes tut, als eine E / A-Leitung zu wackeln) und das Programm von jemand anderem programmieren lassen Teile, vorzugsweise mit unterschiedlicher Programmierhardware. Sobald Sie das Wackeln überprüft haben, können Sie mit Ihrem eigenen Code erneut flashen und prüfen, ob das Problem weiterhin besteht.
quelle