Problème avec un Atmega 328

Bonjour,
J'ai acheté deux Atmega 328 pour piloter deux compteurs Geiger, j'ai donc chargé le même programme sur les deux circuits intégrés.
Le premier fonctionne impeccablement.
Le second a deux défauts, deux fonctions ne marchent pas, j'ai plusieurs fois rechargé le programme et c'est toujours pareil, je me pose la question comment est-ce possible ?
Merci de vos éventuelles réponses.
CDL

En l'état, avec les seules informations que tu donnes, on ne peut dire qu'une chose
oui c'est possible.

Maintenant si tu veux des réponses plus complètes, il va falloir donner un peu plus de renseignement sur les problèmes en question.

Avec ce programme je peux faire afficher (sur un afficheur 16x2) entre autre, les données soit en "Sieverts" ou soit en "Roentgen" en appuyant sur un bouton qui met à la masse la PIN23 (PC0) et aussi faire afficher la "dose totale", c'est à dire si je reste dans un endroit radioactif, la dose cumulée, que je peux remettre à "zéro" au démarrage du compteur par appui sur un autre bouton relié à la PIN24 (PC1), donc avec le Atmega qui fonctionne, toutes ces fonctions sont OK, avec celui qui ne fonctionne pas, ces données ne sont jamais affichées, mais toutes les autres fonctions fonctionnent.
En fait comme j'ai trois Atmega 328, j'ai essayé le programme sur les trois, seul un Atmega ne fonctionne pas correctement.
Le programme n'est pas en cause, il n'est pas de moi, mais d'un programmeur qui fabrique des compteurs Geiger.

Je ne programme pas, j'en suis incapable, par contre j'ai déjà essayé d'adapter des programmes en modifiant quelques lignes et ça fonctionne. Je débute avec ce Atmega.

il peut y avoir des difference entre des masque de gravure.
quelle est la reference EXACTE des atmega que tu as?
(ex:atmel 1228, atmega328P-PU)

un lien sur ton programe pourrai indiquer si un bug affecte une fonctionnalité concernée.
j'ai eu le cas sur du 68HC705B16, probleme d'ecriture en EEProm.
j'ai du modifier mon code ASM pour que ca fonctionne.

C'est un Atmega 328P-PU.

Extrait du programme :

// configure atmega IO
pinMode(LIGHT, OUTPUT); // turn on backlight
digitalWrite(LIGHT, HIGH);
pinMode(LED, OUTPUT); // configure led pin as output
digitalWrite(LED, LOW);
pinMode(2, INPUT); // set pin INT0 input for capturing GM Tube events
digitalWrite(2, HIGH); // turn on pullup resistors
pinMode(BUTTON_UP, INPUT); // set buttons pins as input with internal pullup
digitalWrite(BUTTON_UP, HIGH);
pinMode(BUTTON_DO, INPUT);
digitalWrite(BUTTON_DO, HIGH);

Extrait du programme :

#if (EEPROM_LOG)
absorbedDose = eepromReadFloat(ABSOR_ADDR);
if (readButtonUp()== LOW){
absorbedDose = 0.00;
eepromWriteFloat(ABSOR_ADDR, absorbedDose);
}
#endif

//--------------------------What to do if buttons pressed----------------------------//
// swith dose units
if (readButtonDo()== LOW){
units = 1 - units;
digitalWrite(LIGHT, HIGH);
if (units == 0){
lcd.setCursor(0, 0);
lcdprint_P((const char *)pgm_read_word(&(string_table[6]))); // "Sieverts"

}
else
{
lcd.setCursor(0, 0);
lcdprint_P((const char *)pgm_read_word(&(string_table[7]))); // "Roentgen"

}
EEPROM.write (UNITS_ADDR, units); //save units to eeprom
}

if (readButtonUp()== LOW){
digitalWrite(LIGHT, HIGH);
float absorbedDose_tmp = eepromReadFloat(ABSOR_ADDR); // check if eeprom value is smaller than
// current absorbed dose and write to eeprom
if (absorbedDose > absorbedDose_tmp){ // should safe eerpom cycles
eepromWriteFloat(ABSOR_ADDR, absorbedDose);
lcd.setCursor(10, 0);
lcdprint_P((const char *)pgm_read_word(&(string_table[5]))); // "SAVED!"
}
}

//------------------------------------------------------------------------------------//

Je n'ai pas de lien pour ce faire, j'ai mis il me semble les endroits concernés du programme.

Si c'est des différences entre des masques de gravures, ce qui veut dire que ce Atmega 328P-PU qui m'a été vendu est hors norme, donc déclassé ?

C'est un Atmega 328P-PU.

Non,
Je t'ai demandé la reference EXACTE de ce qu'il y a ecrit sur le boitier.
il doit y avoir d'autre indications.
et pour comparaison, ce serai bien egalement que tu me donne la reference de ceux qui fonctionnent.

ton 328 a été produit en chine, au japon, aux USA, ou partout ailleurs. chaque "Fondeur" a ses sous-traitant, filliales, partenaire, ect.
et ceux ci on leurs propres outils de productions, et chaque fois qu'il produisent un "lot" (en millions de circuits), il est specifiquement identifié.
Il n'est donc pas "déclassé", mais s'il y a un probleme sur ce lot, une NA devrait etre publiée par Atmel.

il se peut aussi que ton circuit soit défaillant pour une raison quelconque. d'apres ce que tu en dis, il semblerait que ce soit une broche qui ne reponde pas a la commande reset. est ce exact, et est ce la seule chose qui ne va pas?

un schema de cablage serai egalement bienvenu.

Celui qui est défectueux : Atmel, 1312, Atmega328P-PU, TaiwanK2, 2Y3813-1, 35473-D, 1P-1312 e3

Celui qui qui fonctionne est un : Atmel, 1404, Atmega328-PU, Taiwan K2, 3Y2294-1, 35473D, 1P-1404 e3. En fait j'en ai deux qui fonctionnent achetés chez le même revendeur.

Tous ont le bootloader installé d'origine. Je sais pour l'avoir lu que les "bootloader" sont légèrements différents sur le Picopower et sur le normal, mais comme les bootloader sont installés il n'y a pas de problème de ce coté.

Le circuit imprimé est le même, je change juste le MCU, donc mon électronique fonctionne, elle n'est pas en cause, car j'ai deux compteurs Geiger identiques et le circuit défectueux ne fonctionne ni sur l'un, ni sur l'autre compteurs Geiger et les deux autres Atmega que je possède, fonctionnent sur les deux compteurs.

Bon, ce n'est pas grave, le MCU qui est défectueux acheté sur Ebay Chine pour $2.90 port inclu, a donc pour moi un problème.
Mais vu que j'achéte la plus part de mes composants électroniques (passifs et actifs) en Chine et jusqu'à présent c'est le premier composant défectueux, pour moi, ça correspond a une défectuosoté inférieure à 2% ce qui est négligeable en regard des prix pratiqués.

Comme je suis curieux je posais la question simplement pour savoir à quoi pouvait correspondre la panne sur ce MCU.

Merci pour vos réponses.
CDL

d'apres ce que tu en dis, il semblerait que ce soit une broche qui ne reponde pas a la commande reset. est ce exact, et est ce la seule chose qui ne va pas?

reponse svp.
s'agit t il d'une entrée analogique, genre A0?

ou est ce que tu as pris ton circuit imprimé?
lien ou schema svp.

Ce sont deux entrées analogique A0 et A1, broche 23 et 24.
C'est un circuit sur circuit pastillée, circuit d'essai et de prototype, de ma fabrication. J'ai l'habitude de fabriquer ce genre de circuit, je n'ai pas de graveur de PCB.
Comme dit plus haut, le shéma et le circuit fonctionne correctement avec un MCU qui fonctionne, donc le shéma et le circuit ne sont pas en cause.

donc le shéma et le circuit ne sont pas en cause.

laisse moi le soin d'en juger.
mais pour ca, il me faudrai au moins le schema de comment t'a cablé les entrées, meme un scan a main levée fera l'affaire.
a moins que ce ne soit secret defense.
ca peut etre un circuit déféctueux, mais peut etre pas.

voir datasheet Atmel
40.7 Errata ATmega328.

essaie en tete de setup quelque chose comme

void setup(){
  DIDR0  = bit (ADC0D);
  ADMUX = bit (REFS0);
  ADCSRB = 0;
...

Je n'ai aucun secret mais si le circuit d'essai était en cause, tous mes MCU aurait le même symptôme, or, ce n'est pas le cas.........Je viens de retrouver dans mes pièce un autre Atmega 328P-PU, il fonctionne sans aucun problème. Donc poubelle celui qui est défectueux.

Bonjour,

De ce que j'ai lu, je pencherai pour l’hypothèse d'un microcontrôleur défectueux, même si ça me parait un peu gros.

Une autre hypothèse, plus probable selon moi, serait une surtension sur une des broches causée par une mauvaise conception du montage, ou alors un problème de code qui ne se fait sentir que dans une situation bien précise.

Dans tout les cas, acheter des composants en provenance de chine sur ebay, dx ou autre c'es jouer à la loterie. Même des pro comme sparkfun se sont déjà fait avoir.

je suis de l'avis de skywodd.

neamoins, s'il y a une probabilité - et il en reste plus d'une - que les circuits qui fonctionnent soient tolerance au montage+code mis en oeuvre, alors que celui qui ne fonctionne pas soit "defectueux" pour d'autre raisons que HS electroniquement, il est certain que ca se reproduira.

exemple: le bout de code exposé valide une resistance de pullup interne sur les entrées. la valeur de ces resistances n'est jamais la meme exactement d'un circuit a l'autre. selon le montage fait avec le bouton, il se pourrai qu'on soit sur un seuil limite.

Des faux Atmel ou des Atmel déclassés mis à la vente j'ai beaucoup de mal à y croire. ATmel aurait trop à y perdre en réputation.

Par contre des micros, bons en sortie ATmel, mais mal manipulés et/ou bootloader arduino injecté à la va vite et sans contrôle, cela oui c'est fort possible chez certains fournisseur et à moins de 2,9$ (2,2 €) bootloader compris effectivement on peut se poser des questions.
Mais au prix où il les a payé c'est un risque acceptable sauf si c'est la conséquence de mauvaise manipulations, décharges électrostatiques par exemple, et que pour les autres pièces les défauts peuvent, ou ne peuvent pas, se manifester plus tard .
Tout dépend de la destination finale du matériel : sécurité ou loisir.

68tjs:
Des faux Atmel ou des Atmel déclassés mis à la vente j'ai beaucoup de mal à y croire. ATmel aurait trop à y perdre en réputation.

Bof, Sparkfun c'est bien retrouvé avec une palette d'atmega 100% plastique et cuivre made in china :grin:
(cf https://www.sparkfun.com/news/364)

68tjs:
Par contre des micros, bons en sortie ATmel, mais mal manipulés et/ou bootloader arduino injecté à la va vite et sans contrôle, cela oui c'est fort possible chez certains fournisseur et à moins de 2,9$ (2,2 €) bootloader compris effectivement on peut se poser des questions.

+1, on obtient ce pour quoi on paye, surtout en chine.
Un micro à 2€ bootloadé, alors qu'un vrai ATmega de chez ATmel sans bootloader est à 4€ par 1000pc ... pas besoin d'un anarqu'o'meter pour sentir le problème :grin:

alors qu'un vrai ATmega de chez ATmel sans bootloader est à 4€ par 1000pc

Il faut revoit tes prix :
Origine Mouser.com (USA) , prix communiqué en € sans FDP ni TVA
ATMEGA328p CMS

  • par 1 = 2,59 €
  • par 10 = 1,47 €
    ATMEGA328P PDIP
  • par 1 = 3,12€
  • par 10 = 1,77 €

Je ne te dit pas les prix par cartons de 1000 avec prévision de commande de 10 000 annuel !
C'est aussi pour cela que les cartes UNO ou Mega qu'on trouve sur Ebay sont si peu chères. Imagine un façonnier qui se spécialise dans ce domaine et qui achète 100 000 pièces/an. Surtout que comme tu l'as dit les frais de transport il n'y en a pas trop c'est fabriqué en Chine ou Singapoure ou Taïwan ou Macao (bon c'est la Chine maintenant).

68tjs:

alors qu'un vrai ATmega de chez ATmel sans bootloader est à 4€ par 1000pc

Il faut revoit tes prix :
(...)

Je viens d'aller voir le prix du plateau de 20 m328p cms que j'ai commandé récemment, c'est bien 2.10€/pc ht.
Donc j'ai rien dit, je sais pas pourquoi j'étais absolument certain de les avoir payés ~4€/pc.

Edit : 4.72€/pc ht, sans possibilité de prix dégressif. C'est le prix des m328p avec bootloader chez farnell. Ça a du me choquer le jour où je suis tomber dessus vu que j'ai garder en tête ce prix depuis ...

Donc j'ai rien dit,

Ca tombe bien si tu n'a rien dis, on a rien entendu :grin:

Je viens d'aller voir le prix du plateau de 20 m328p cms que j'ai commandé récemment, c'est bien 2.10€/pc ht.

chez qui?
il y a une différence notable entre avec et sans bootloader, de toutes facons.

jean-I:
chez qui?

Farnell