Affichage sur écran PC depuis un Atmega328P breadboard [RESOLU]

Bonjour à tous,
Depuis peu je suis parvenu à réaliser (non sans difficulté) une arduino sur breadboard avec une puce Atmega328P. J'ai gravé la "séquence d'initialisation" via une arduino Uno, j'ai pu télécharger le sketch Blink. Par contre je bute sur le recours à la fonction Serial.println() pour afficher du texte ou des données sur l'écran de mon PC comme je le faisais avec ma carte arduino Uno via le bouton "moniteur série" en haut à droite de l'IDE.
Je ne sais pas comment câbler l'Atmega breadboard avec l'arduino Uno. J'ai lu quelques sites en anglais ou les liaisons RX et TX sont évoquées mais rien de compréhensible.
Merci par avance de votre retour.

Bonjour,

Il te faut un adaptateur usb-serie. Cet adaptateur peut aussi te permettre de programmer ton atmega328 si tu y as gravé le boot-loader.
Voir par exemple ici.

Salut

Après avoir flashé le bootloader dans l'ATMEGA, il faut connecter un convertisseur USB / Série sur la broche RX (2) et TX (3) comme ICI.
Ensuite il sera possible de téléverser l'application sans la UNO et d'utiliser le moniteur série.

En attendant, en téléversant l'application Blink avec la UNO, tu a certainement écrasé le bootloader.

@+

kamill:
Bonjour,

Il te faut un adaptateur usb-serie. Cet adaptateur peut aussi te permettre de programmer ton atmega328 si tu y as gravé le boot-loader.
Voir par exemple ici.

Merci de ton retour. J'ai malheureusement commandé ce modèle là. Pourrais-je également y parvenir avec?
Voici le lien ici.

Pas de problème.
Mais n'oublie pas de reflasher le bootloader, sinon, ce sera blink for ever.

Oui, tout a fait. Il y a plusieurs modèles d'interface usb-série avec des chips différents. Tous fonctionnent à condition d'installer le bon driver (s'il n'est pas déjà reconnu par le système d'exploitation).
Tu peux même utiliser une carte uno comme interface usb-serie.

Par contre avec l'adaptateur que tu montres tu ne pourras pas programmer (automatiquement) ton atmega328 car il n'a pas de dtr. On peut utiliser un mode manuel en appuyant sur reset au moment du transfert.

hbachetti:
Pas de problème.
Mais n'oublie pas de reflasher le bootloader, sinon, ce sera blink for ever.

Je ne comprends pas l’enchaînement des tâches:

  1. je flash le bootloader avec la carte Uno (ça ça marche)
  2. je téléverse mon programme sur l'Atmega328P via la carte Uno qui fait appel à Serial.println ("essai affichage écran") par exemple (ça marche aussi)
    3)j'utilise le FDTI CP2102 en connectant le RX FDTi sur le TX Atméga328P, le TX FDTI sur le RX Atméga328P, GND avec GND et 5v FDTI avec la pin7 de l'Atmega328P (je n'ai pas encore essayé) et je dois voir l'affichage sur l'écran du PC?

C'est très confus. Merci de vos éclairages même si je sais que ces questions reviennent sans cesse.

Oui c'est ça.
Par contre tu ne connectes pas le 5V si l'atmega est déjà alimenté par une autre alimentation.
Le 5V sert à alimenter l'atmega via l'usb.

kamill:
Oui c'est ça.
Par contre tu ne connectes pas le 5V si l'atmega est déjà alimenté par une autre alimentation.
Le 5V sert à alimenter l'atmega via l'usb.

Merci.
J'essaie et vous fais un retour.

Oui c'est ça.
Par contre tu ne connectes pas le 5V si l'atmega est déjà alimenté par une autre alimentation.
Le 5V sert à alimenter l'atmega via l'usb.

Ça fonctionne, j'ai bien la liaison avec l'écran PC. Le message texte s'affiche.
Question bonus!: si je veux changer le texte, à part refaire les étapes 1) à 3), puis je:
a) garder les connexions comme à l'étape 3
b) changer le texte dans l'IDE et téléverser le programme en appuyant sur téléverser. Appuyer sur Reset (mettre pin 1 à la masse?) pendant le téléversement

J'ai essayé mais j'ai un message d'erreur

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xe0
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xe0
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xe0
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xe0
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xe0
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xe0
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xe0
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xe0
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xe0
Une erreur est survenue lors du transfert du croquis

Un conseil? Merci.

Il faut maintenir le reset jusqu'à apparaisse "Téléchargement...", à ce moment là relacher le reset.
Il faut avoir gravé le bootloader.

Tu peux aussi brancher le DTR du converisseur USB / Série sur le RESET de l'ATMEGA, comme sur une NANO, à travers un condensateur de 100nF.

Le schéma ICI.

@+

kamill:
Il faut maintenir le reset jusqu'à apparaisse "Téléchargement...", à ce moment là relacher le reset.
Il faut avoir gravé le bootloader.

Il faut que je re-grave le bootloader avec ma carte Uno?
Je ne comprends pas ce principe de bootloader. Je pensais qu'il fallait le faire une fois et qu'après cela n'était plus utile.

J'ai déjà expliqué plus haut.
En chargeant l'application Blink en utilisant une UNO comme programmateur tu as écrasé le bootloader. Il n'existe plus.

Tu dois le recharger, toujours avec la UNO. Ensuite tu débranches la UNO, tu branches le convertisseur et tu téléverses l'application par l'USB dans l'ATMEGA.

@+

Si je peux me permettre quelques réflexions et conseils je dirais volontiers :

  1. Avoir chercher et réussi à faire fonctionner un micro atmega328p sur breadboard est une très bonne chose qui t'as permis de voir que le micro a d'énormes possibilités.

  2. Tu as pu découvrir la programmation par ISCP. Posséder une carte UNO pour programmer en ISCP n'est pas une obligation, il existe pour de 2€ des programmeurs tout faits avec le bon cordon et basé sur un autre micro Atmel, je veux parler des USBasp et TinyUSB.

Ce qu'il faut en retenir c'est qu'il existe deux méthodes pour programmer un Atmega328p :

  • par une interface USB/Série qui exige la présence d'un programme permanent dans la mémoire flash : le bootloader
    ou
  • par l'ISCP comme pour charger le bootloader mais qui ne nécessite pas d'avoir chargé le bootloader.

La plus courante est par l'interface USB/série mais elle n'est pas obligatoire.

Par l'ISCP si tu utilises le même ordre pour charger un programme que celui pour charger le bootloader tu va écraser le bootloader.
Il faut donc lire la notice du logiciel "avrdude" et faire la programmation en ligne de commande.

D'un autre coté utiliser l'ISCP permet de récupérer la place du bootloader dans la mémoire. S'il est toujours le même on récupère 2k sur un total de 32 k, ce n'est pas négligeable.

3) Si tu préfère rester dans "le sérail" et utiliser la programmation par l'interface USB/Série il faut faire comme on t'a dis avec la sortie DTR, franchement cela ne vaut pas le coup de t'embêter avec un module qui ne le possède pas.

  1. Dernier point : je ne veux surtout pas te casser et je répete qu'avoir monté un atmega sur breadbord est une excellente initiative dont tu n'auras qu'à te féliciter plus tard, bravo, mais désolé, économiquement ce n'est pas viable et question emmerdes n'en parlons pas.

Les prix des composants varient dans des proportions énormes selon que tu les achètes à l'unité ou que tu négocies un accord pour la livraison de 2,5 millions de pièces selon un rythme de 500 000 pièces par an sur une durée de 5 ans.
Actuellement on trouve des mini pro, qui est ce que tu réalises, pour moins de 2 €, sous un format que tu n'arrivera pas à atteindre.

68tjs merci de toutes tes précisions. Je comprends complètement ton point de vue.
Je me suis mis à essayer de programmer un Atmega28P sur breadboard car je suis à la recherche d'un module qui consomme le moins possible. Il n'y a pas de régulateur, pas de led... Pour de petits projets simples sur pile c'est très économe. J'explore également la piste de la Pro Mini en la bricolant. J'ai vu un tutoriel où on l'enlève le régulateur et où l'on shunte la led. Je voulais comparer les deux versions et voir celle qui consomme le moins. Je regarde aussi du côté du mode sleep.
Je vais de ce pas commander une interface USB/Série. Une dernière demande si ce n'est pas abuser (!), aurais-tu un lien Aliexpress ou Banggood afin que je ne me trompe pas de produit. J'ai déjà eu quelques mauvaises surprises.
Merci encore pour ton explication.

Actuellement on trouve des mini pro, qui est ce que tu réalises, pour moins de 2 €, sous un format que tu n'arrivera pas à atteindre.

Comme dirait l'autre, ce n'est pas faux.

D'un autre coté utiliser l'ISCP permet de récupérer la place du bootloader dans la mémoire. S'il est toujours le même on récupère 2k sur un total de 32 k, ce n'est pas négligeable.

Tout à fait d'accord sauf que la liaison série console de l'ATMEGA devra passer par un convertisseur USB / série sur un port différent de celui utilisé pour le téléversement si l'on utilise une UNO.
Dans l'IDE, le port choisi est utilisé pour la UNO ISP et pour l'ATMEGA sur breadboard se choisit avec la même option Outils / port.
Il faut changer de port après le téléversement pour ouvrir le moniteur série. Galère ...
Ou utiliser un autre terminal. C'est mieux ...

Avec un USBAsp bien sûr pas de problème. C'est de loin mon choix préféré.

@+

on shunte la led

Non, on la dessoude.

Tout est ICI.

Il te faut un convertisseur USB/Série sachant fonctionner en 5V et en 3.3V, comme CELUI-CI.

Mais je trouve quand même que tu devrais aller jusqu'au bout avec l'ATMEGA sur breadboard, juste pour la compréhension.

Profites-en pour commander un USBAsp. Ce n'est jamais inutile.

A commander avec l'adaptateur comme sur la photo du lien.

@+

hbachetti:
Non, on la dessoude.

Tout est ICI.

Il te faut un convertisseur USB/Série sachant fonctionner en 5V et en 3.3V, comme CELUI-CI.

Mais je trouve quand même que tu devrais aller jusqu'au bout avec l'ATMEGA sur breadboard, juste pour la compréhension.

Profites-en pour commander un USBAsp. Ce n'est jamais inutile.

A commander avec l'adaptateur comme sur la photo du lien.

@+

Merci du conseil.
C'est commandé.

gaelcom:
Il faut que je re-grave le bootloader avec ma carte Uno?
Je ne comprends pas ce principe de bootloader. Je pensais qu'il fallait le faire une fois et qu'après cela n'était plus utile.

Il suffit de graver le bootloader une seule fois, ensuite tu peux télécharger via la liaison série autant de fois que tu veux.
Sauf si comme le dit hbachetti tu détruis le bootloader en programmant un programme via ta carte uno comme programmateur (ou avec un autre programmateur).