carte NANO par différents fabricants, incompatibilité ??

Bonjour.

J'utilise une carte NANO de je ne sais pas quelle fabricant, ce n'est pas indiqué dessus et j'ai créé un programme qui fonctionne très bien sur cette carte. La configuration est Arduino, Nano, processeur ATmega328P (old Bootloader). J'ai acheté une autre carte ,mais d'un autre fabricant (Elegoo). La configuration est Arduino NANO processeur ATmega 328P. Lorsque je transfert le programme sur cette carte, je n'ai aucun message d'erreur mais le programme ne roule pas. Est-ce que les différents fabricants ne seraient pas compatible pour rouler les mêmes programmes ?

Je sais que la carte fonctionne car si je transfert le programme "Blink", il fonctionne et je peut changer les valeurs de vitesse de clignotement et il les enregistre.

Est-ce que je serai mieux d'acheter des cartes du fabricant ARDUINO tout simplement ou il y a quelque chose a faire pour qu'ils puissent rouler mon programme ?

Merci :slight_smile:

Jacques3012

Jacques3012:
Bonjour.

J'utilise une carte NANO de je ne sais pas quelle fabricant, ce n'est pas indiqué dessus et j'ai créé un programme qui fonctionne très bien sur cette carte. La configuration est Arduino, Nano, processeur ATmega328P (old Bootloader). J'ai acheté une autre carte ,mais d'un autre fabricant (Elegoo). La configuration est Arduino NANO processeur ATmega 328P. Lorsque je transfert le programme sur cette carte, je n'ai aucun message d'erreur mais le programme ne roule pas. Est-ce que les différents fabricants ne seraient pas compatible pour rouler les mêmes programmes ?

Je sais que la carte fonctionne car si je transfert le programme "Blink", il fonctionne et je peut changer les valeurs de vitesse de clignotement et il les enregistre.

Est-ce que je serai mieux d'acheter des cartes du fabricant ARDUINO tout simplement ou il y a quelque chose a faire pour qu'ils puissent rouler mon programme ?

Merci :slight_smile:

Jacques3012

Bonsoir
carte nano "officielle" ou clones le coeur est un atmega328P
avec les "nano" anciens ou clones , l peut y avoir un probleme de version de bootloder , mais çà ne sembl ps etre ton probléme puisque que tu es capable d'uploader un "blink"modifié.
ton soucis est donc 'un autre ordre
fais une/des bonnes photos recto/verso de ton nano dont tu a oublié l'origine et sur lequel tourne ton programme

Bonjour.

Merci pour votre réponse.

Les photos sont pour les numéros sur les IC ?

Jacques3012

Jacques3012:
Bonjour.

Merci pour votre réponse.

Les photos sont pour les numéros sur les IC ?

Jacques3012

entre autres , mais pas que ! 8)

c'est surtout pour voir ce que c'est comme origine et si ce n'est pas un clone connu pour avoir "des particularités"

Voici les photos des deux côtés. J'ai aussi les numéros du IC sur les deux cartes si vous en avez besoins

Jacques3012

Voici la seconde photo.

Le numéro qui est sur le chip de la carte qui fonctionne avec mon programme est
MEGA328P
U-TW
35473D
19.262KS et sur celle qui ne fonctionne pas c'est

MEGA328P
U-TH
35473D
1917CCM

Les photos

Ça ressemble à un pro mini, non ?

Non, le pro mini n'a pas l'USB

Bonsoir. C'est bien un NANO. Voici la photo de la boite. J'en ai trois et les trois ne fonctionne pas avec mon programme.

Jacques3012

PS comment faites vous pour mettre la photo directement sur le post ?

Voir ici, réponse 10

lesept:
Voir ici, réponse 10

J'ai lu mais absolument rien compris. Ça semble bien compliqué comparé a d'autres forum pour insérer une simple image.

Jacques3012

C'est vrai que c'est pas simple :

  • Tu charges d'abord l'image dans ton message en pièce jointe (Attachments and other options) et tu publies le message
  • Tu cliques 'droit' sur le lien de l'image qui apparaît maintenant sous le message et tu sélectionnes l'adresse du lien : https://forum.arduino.cc/index.php?action=dlattach;topic=656755.0;attach=340208 dans ce cas précis
  • Tu édites le message ('More', option 'modify') et tu insères l'image en utilisant le bouton qui représente un rectangle bleu avec un petit + en bas
  • Tu sauves le message modifié

Lorsque je transfert le programme sur cette carte, je n'ai aucun message d'erreur mais le programme ne roule pas

Un peu plus de précisions seraient les bienvenues.

hbachetti:
Un peu plus de précisions seraient les bienvenues.

+1
De ce que j'ai compris :
situation à ce jour :

  • un "systeme" basé sur nano de provenance X est actuellement uploadé (depuis quand ?) avec un programme qui donne satisfaction = situation nominale.

  • des tentatives de portage du programme (compile/upload OK ) vers un/des nouveaux nano ne donne pas satisfaction

-- une levée de doute réussie sur la compile et upload vers ce(s) nouveaux nano à été faite en utilisant un simple blink avec une frequence de clignotement modifiée .

Une levée de doute supplémentaire consisterait déjà pour moi à :

  • faire une compile et upload d'un blink modifié dans le "vieux" nano actuellement chargé avec le systeme OK

  • refaire ensuite si OK une compile et upload du systeme vers le vieux nano et verifier que l'on est bien revenu en situation nominale

Bonjour.

Avec mon NANO non identifié, (que j'ai depuis 1 mois) j'ai transféré blink et ça fonctionne très bien même en modifiant la vitesse de clignotement. J'ai transféré a nouveau mon programme avec afficheur deux lignes et plusieurs input avec interrupteurs et ça fonctionne de nouveau.

Si je transfert le même programme, je configure premièrement le processeur a ATmega328P. Je compile et ça indique que les options de compilation ont été modifiée, tout sera recompilé. Je transfert par la suite et je vois les leds de RX et TX clignoter et ça indique à l'écran que le transfert est fait. Je n'ai aucun message d'erreur, mais ça ne fonctionne tout simplement pas.

Jacques3012

Bonjour,

Jacques3012:
................
Si je transfert le même programme, je configure premièrement le processeur a ATmega328P. Je compile et ça indique que les options de compilation ont été modifiée, tout sera recompilé. Je transfert par la suite et je vois les leds de RX et TX clignoter et ça indique à l'écran que le transfert est fait. Je n'ai aucun message d'erreur, mais ça ne fonctionne tout simplement pas.

Magnifique et le programme fait certainement ce que tu lui as demandé de faire :smiling_imp:

mais ça ne fonctionne tout simplement pas

Quand je demande "Un peu plus de précisions seraient les bienvenues.", c'est justement sur ce non-fonctionnement.
Cela ne marche pas, ça bogue, oui très bien, mais quels sont les effets, les symptômes ?

Bonjour.

Je n'ai absolument rien qui s'affiche à l'écran après le download du programme.

Mais avec l'autre NANO, aussitôt que je transfert le programme, l'afficheur affiche ce que je demande.

Jacques3012

Afficheur ? Il n'en était pas question jusque là !!

Bonjour. Voici le code. J'en ai fait mention dans le #14 qu'il y avait un écran 2 lignes. Désolé si je me suis mal exprimé.

#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27,16,2);

int D,N,S,N2;
int secondes = 0;
unsigned long millisecondes = 1000;
unsigned long temp = 0;
int ZERO = 1;

void setup() {

  lcd.begin(16,2);
  pinMode(7,INPUT);   //entreé planeur en marche
  pinMode(8,INPUT);   //entrée enregistrement des nouvelles valeurs
  pinMode(9,INPUT);   //entrées - délai (D)
  pinMode(10,INPUT);  //entrée + délai (D)
  pinMode(11,INPUT);  //entrées - nombres (N)
  pinMode(12,INPUT);  //entrée + nombre (N)
  pinMode(6,OUTPUT);  //sortie tempon
  pinMode(13,OUTPUT); //sortie pour cylindre pneumatique
   
  D=0;
  N=0;
  N2=0;
  S=0;
  secondes = 0;
 
  lcd.clear();                //effacer l'écran    
  lcd.backlight();            //Allumer le rétro-éclairage

  EEPROM.get(0,D);            //Lire mémoire de D a l'initialisation
  EEPROM.get(4,N);            //Lire mémoire de N à l'initialisation
}  

void loop() {

  if (digitalRead(8)==HIGH){  //si l'entrée 8 est activée (high), on enregistre les nouvelles valeurs
    EEPROM.put(0,D);          //enregistrement de la valeur D
    EEPROM.put(4,N);          //enregistrement de la valeur N
    delay(20);                //délai filtre pour rebond de l'interrupteur
    }
   
  lcd.setCursor(0,0);     //positionnement du curseur de la première ligne pour affichage du mot Délai:
  lcd.print("Delai:");    //afficher le mot Délai: a la position 0,0 (première ligne)
  lcd.setCursor(6,0);     //positionnement du curseur pour afficher la valeur de D sur la première ligne
  lcd.print(D);           //affichage de la valeur de D a la position 6,0
  lcd.setCursor(10,0);    //positionnement du curseur de la première ligne pour afficher le mot Cnt:
  lcd.print("Cnt:");      //affichage du mot Cnt a la position 10,0
  lcd.setCursor(0,1);     //positionnement du curseur de la seconde ligne pour affichage du mot Nombres:
  lcd.print("Nombres:");  //afficher le mot Nombres: a la position 0,1 (seconde ligne)
  lcd.setCursor(9,1);     //positionnement du curseur pour afficher la valeur de N sur la première ligne
  lcd.print(N);           //affichage de la valeur de N a la position 9,1
  lcd.setCursor(14,0);    //positionnement du curseur pour afficher la valeur de minutes sur la première ligne
  lcd.print(secondes);    //affichage de la valeur de minutes a la position 14,0
  lcd.setCursor(14,1);    //positionnement du curseur pour afficher la valeur du compteur sur la seconde ligne
  lcd.print(N2);          //affichage de la valeur de minutes a la position 14,1  
  

  //MODIFICATION DE LA VALEUR CORRESPONDANT AU DÉLAI//

  if ((digitalRead(11)==HIGH)&&(D>=0)&&(D<60)){                         //si l'entrée 11 est high et que la valeur de D est entre 0 et 60 secondes                                                                   
    D++;                                                                //on additionne 1 a la valeur de D
    lcd.setCursor(6,0);                                                 //on affiche la valeur de D à la position 6,0 (première ligne)
    lcd.print(D);                                                       //affichage de la valeur de la variable D
    lcd.print(" ");                                                     ///effacement des valeurs non voulues
    delay(250);}                                                        //délai filtre pour rebond de l'interrupteur sur l'entrée 11  
  
  if ((digitalRead(12)==HIGH)&&(D>0)&&(D<=60)){                         //si l'entrée 12 est high et que la valeur de D est entre 0 et 60 secondes                                                                    
    D--;                                                                //on soustrait 1 a la valeur de D   
    lcd.setCursor(6,0);                                                 //on affiche la valeur de D à la position 6,0 (première ligne)
    lcd.print(D);                                                       //affichage de la valeur de la variable D
    lcd.print(" ");                                                     ///effacement des valeurs non voulues
    delay(250);}                                                        //délai filtre pour rebond de l'interrupteur sur l'entrée 12
    

    //MODIFICATION DE LA VALEUR CORRESPONDANT AU NOMBRE//

   if ((digitalRead(9)==HIGH)&&(N>=0)&&(N<60)){                         //si l'entrée 9 est high et que la valeur de N est entre 0 et 60 secondes
    N++;                                                                //on additionne 1 a la valeur de N
    lcd.setCursor(9,1);                                                 //on affiche la valeur de N à la position 9,1 (seconde ligne)
    lcd.print(N);                                                       //affichage de la valeur de la variable N
    lcd.print(" ");                                                     ///effacement des valeurs non voulues
    delay(250);}                                                        //délai filtre pour rebond de l'interrupteur sur l'entrée 9    
  
  if ((digitalRead(10) ==HIGH)&&(N>0)&&(N<=60)){                        //si l'entrée 10 est high et que la valeur de D est entre 0 et 60 secondes
    N--;                                                                //on soustrait 1 a la valeur de N
    lcd.setCursor(9,1);                                                 //on affiche la valeur de N à la position 9,1 (seconde ligne)
    lcd.print(N);                                                       //affichage de la valeur de la variable N
    lcd.print(" ");                                                     //effacement des valeurs non voulues
    delay(250);}                                                        //délai filtre pour rebond de l'interrupteur sur l'entrée 10

     //COMPTEUR CYCLES DE LUBRIFICATION 0-10 CYCLES//

   while ((secondes == D)&&(N2<N)){                                     //si secondes=D et que N2 (nombres atteint) est plus petit que N (nombres de cycles demandés (1-10 cycles)) 
     digitalWrite(6, HIGH);                                             //sortie 6 devient HIGH jusqu'a la fin du cycle
     digitalWrite(13, HIGH);                                            //sortie 13 a HIGH (sortie cylindre pneumatique pour lubrification)
     delay(1500);                                                       //délai sortie 13 a HIGH
     digitalWrite(13, LOW);                                             //sortie 13 a LOW (sortie cylindre pneumatique pour lubrification)
     N2++;                                                              //on additionne 1 a N2
     delay(1500);                                                       //délai sortie 13 a LOW    
     lcd.setCursor(14,1);                                               //positionnement du curseur à la position 14 de la ligne 2
     lcd.print(N2);                                                     //affichage de la valeur de la variable N2 (nombres de cycles demandés (1-10 cycles))
     lcd.print("");                                                     //effacement des valeurs non voulues
     } 

   if (N2 == N){                                                        //après le cycle de lubrification, on remet la sortie 6 a LOW
      digitalWrite(6, LOW);
      }


     //COMPTEUR DU DÉLAI ENTRE LES CYCLES DE LUBRIFICATION (0-60 SECONDES)

  if ((digitalRead(7)==HIGH) && (digitalRead(6) == LOW) && (millis() > temp + millisecondes)){ //Condition pour comptage
     N2 = 0;                                                           //remise a zéro de N2     
     temp = millis();
     secondes++;}

  if (secondes > D){     //remise a zéro de "secondes" lorsque le setpoint est atteint
    secondes = ZERO;}

    lcd.setCursor(14,0);
    lcd.print(secondes);
    lcd.print(" ");
    lcd.setCursor(14,1);
    lcd.print(N2);
    lcd.print(" ");     

}

Jacques3012