Je n'ai jamais eu affaire à des pièces défectueuses du digikey, mais 3 nouveaux Atmel ATmega164A que j'ai reçus ont présenté un comportement extrêmement étrange.
Je l'ai réduit à quelque chose à voir avec l'horloge et il s'est avéré que le signal d'horloge résultant de l'oscillateur interne soi-disant "calibré en usine" oscillait entre 650 et 700 kHz au lieu du 1 MHz solide qu'il est censé être. J'ai pu écrire dans l'octet d'étalonnage pour obtenir ce très proche de 1 MHz (toujours avec une gigue) et la plupart des choses fonctionnent mais les UART ne se comportent pas correctement, ils semblent produire un flux continu d'impulsions courtes, peu importe ce que vous leur demandez de faire.
J'ai traité la version basse consommation de ce microcontrôleur auparavant (164P) avec aucun problème et j'ai décidé de le laisser en place et de vérifier la sortie d'horloge à ce sujet, et c'est un solide 1 MHz sans gigue. Je penche vers la conclusion que ces puces 164A sont défectueuses, mais y aurait-il d'autres tests que je pourrais essayer de confirmer?
Edit: Je pensais juste que je décrirais le processus par lequel je mesure l'horloge. J'ai activé le bit de fusible de sortie d'horloge et mesuré la broche appropriée avec un échantillonnage d'analyseur logique à un taux très élevé. J'ai un programme qui écrit dans le registre d'étalonnage OSCCAL
et j'ai pu faire des essais et des erreurs sur 1 MHz.
Edit # 2: Après une enquête plus approfondie, il semble que le microcontrôleur commence à agir après une certaine taille de programmeseuil. Un projet simple avec un fichier source unique faisant clignoter une LED semble être OK, mais la compilation et la liaison dans l'un de mes autres fichiers (par exemple la bibliothèque UART ou autre) sans même appeler de fonction à ces méthodes fait que le microcontrôleur se comporte le comportement décrit ci-dessus. Les connexions électriques sont correctes et un découplage correct a été effectué. Je n'ai pas le temps de déboguer davantage pour le moment, nous avons donc plutôt opté pour la version basse consommation. Je ne sais pas exactement où le problème pourrait être soit 1) 164A et 164P ne sont pas compatibles avec le code 2) La procédure de programmation est différente pour ces deux uC 3) Les unités sont défectueuses. Je suis confiant dans la conception de notre carte et exclurais les problèmes d'alimentation. Malheureusement, je ne peux pas vraiment choisir une bonne réponse, je vais donc laisser cette question telle quelle - peut-être que je ' Je reviendrai sur le problème à l'avenir. Merci à tous ceux qui ont fourni des commentaires ou des réponses perspicaces, ils pourraient être utiles à quelqu'un d'autre avec des problèmes uC prêts à l'emploi.
Réponses:
Il est rare d'avoir ce genre d'échec. Vous pourriez vous attendre à voir un peu plus de bruit sur une broche, ou avoir cette broche complètement non fonctionnelle. Mais le faire "fonctionner quelque peu, mais pas de manière utile" est rare. Je soupçonne que des problèmes de conception sont à l'origine des problèmes et ont quelque chose à voir avec une différence entre le 164A et le 164P. Étant donné que la gigue est élevée, je regarderais les choses liées au pouvoir. Toutes les broches d'alimentation / gnd sont-elles connectées? Les broches d'E / S sont-elles entraînées ou tirées haut ou bas? Etc.
Mais il reste toujours la possibilité que les pièces soient mauvaises. C'est rare, mais pas inconnu. La seule vraie façon de le savoir est d'obtenir des pièces supplémentaires d'un autre fournisseur et de les essayer. S'ils fonctionnent, alors vous devez enquêter davantage et voir si vous les avez tués lors de la manipulation / soudure ou s'ils venaient vraiment de Digikey.
la source
J'ai eu une fois un problème très similaire avec les pièces de base de Microchip. Nous gâchions la programmation ICSP et trouvions un moyen d'effacer le trim de l'oscillateur, provoquant des erreurs grossières dans la précision de l'horloge interne. Assurez-vous que votre appareil de programmation et / ou vos outils de programmation sont correctement connectés et sont utilisés correctement.
Il n'y a pas de moyen facile de vérifier la précision de l'oscillateur sans programmer les pièces, donc j'écrirais simplement un programme de bascule de port trivial (un qui ne fait rien mais agiter une ligne d'E / S) et demander à quelqu'un d'autre de programmer le pièces, de préférence avec un matériel de programmation différent. Une fois que vous avez vérifié la manœuvre, vous pouvez reflasher avec votre propre code et voir si le problème persiste.
la source