Comment passer d'un Arduino à l'utilisation directe d'un microcontrôleur?

19

J'ai travaillé sur un projet Arduino. Après avoir tout fait fonctionner en utilisant l'Arduino, je voudrais passer à une solution qui n'utilise PAS Arduino. Autrement dit, je voudrais utiliser un microcontrôleur sans impliquer la carte Arduino. Cela permettra une seule carte, pas de solution de blindage.

Je sais qu'il existe des méthodes pour fabriquer mon propre Arduino sur une planche à pain, mais ce n'est pas vraiment ce que j'essaie de faire.

Je ne sais pas vraiment comment faire ça.

À moins qu'il n'y ait une meilleure option, je penche pour l'utilisation de l'ATmega328, qui est utilisé par l'Arduino. Je comprends que les outils de développement sont disponibles gratuitement ou du moins pas très chers.

Aux fins de cette question, supposons que je puisse obtenir + 5 V sur mon circuit.

Ma première question est de savoir comment programmer le MCU. Je pense qu'il y a deux options:

  1. Achetez un programmeur, programmez le MCU, puis placez la puce dans mon circuit.
  2. Concevez mon circuit pour inclure la prise en charge de la programmation en circuit.

Je suppose que si je choisis l'option # 1, c'est aussi simple que d'insérer une puce programmée dans mon circuit; Je n'ai besoin de rien d'autre. Bien sûr, changer le logiciel serait gênant.

Mais pour l'option # 2, je ne suis pas sûr de ce dont j'ai besoin. D'après le peu de lecture que j'ai fait, je pense que j'ai besoin d'un câble de programmation et d'un connecteur sur ma carte (quel type?). Ensuite, je suppose que je (correctement) câble le connecteur à certaines broches de l'ATmega.

Dans tous les cas, j'aurai besoin du studio Atmel.

Deuxièmement, à part l'alimentation, y a-t-il quelque chose sur l'Arduino dont j'ai absolument besoin? Je suppose que peut-être un interrupteur de réinitialisation?

Meule
la source
2
Vous pouvez utiliser un Arduino pour programmer des AVR. Personnellement, j'aime utiliser des outils de ligne de commande et un makefile, plutôt qu'un IDE.
jippie
1
Cette question pourrait être plus appropriée pour l'Arduino Stack Exchange. arduino.stackexchange.com Il est maintenant en version bêta publique
akellyirl
4
Mais mon objectif est un design sans arduino.
Rick
"y a-t-il quelque chose sur l'arduino dont j'ai absolument besoin?" Je pense que vous aurez besoin des broches UART (aka le port série), cela est pratique pour le débogage.
vvy
Le studio Atmel n'est absolument pas nécessaire. Je programme mes puces à partir de la ligne de commande (et d'un éditeur de texte). Bien qu'accordé pour de grands projets, le studio Atmel le rendra certainement plus facile
Chris Laplante

Réponses:

10

Bienvenue dans le monde merveilleux d'Atmel. Permettez-moi de vous offrir quelques réponses à vos questions basées sur mon passe-temps et mon expérience professionnelle.

Ne vous embêtez avec rien MAIS la programmation en circuit. À moins que vous ne soyez un codeur parfait, retirer une puce à chaque fois que vous voulez la programmer est un cauchemar. Je recommande l'AVRISPmkII comme outil de programmation d'entrée de gamme. L'inconvénient est qu'aucun débogage matériel n'est pris en charge. Une alternative est le dragon mais je n'ai aucune expérience avec ça. Je peux dire que le JTAGICEmk3 est un bel outil de débogage capable.

Atmel studio est bon pour la programmation. Il s'agit en fait de mon environnement de développement intégré préféré. Vous pouvez utiliser des outils CLI tels que AVRDUDE et AVR-GCC mais l'IDE s'en charge pour vous.

EN RÉSUMÉ:

Achetez un AVRISP pour une simple programmation (plus simple, plug & play) ou un DRAGON (je ne peux pas vous conseiller).

Sur votre carte, sortez les broches ICSP vers un en-tête à double rangée de 0,100 "à 6 broches - les connexions sont décrites dans cette fiche technique .

Les commutateurs de réinitialisation ne sont pas nécessaires.

HL-SDK
la source
1
J'ai eu d'excellents résultats avec un EvUSBasp.
Ignacio Vazquez-Abrams
Une fois que j'ai sorti les broches ICSP sur ma carte, dois-je les dédier à la programmation en circuit, ou puis-je quand même les utiliser comme broches GPIO?
Ricardo
2
Vous pouvez les utiliser comme GPIO car ils partagent les fonctions avec SPI. Le programmeur remet la puce à zéro puis communique avec elle.
HL-SDK
1
Série de didacticiels connexes sur le début de la programmation du microcontrôleur . Ils utilisent l'AVRMega et passent par le processus de câblage du FAI et du code C luxueux pour faire clignoter une LED.
MDMoore313
1
@ HL-SDK a raison de dire que seule la broche RESET doit vraiment être dédiée à ICSP, mais une certaine prudence est également nécessaire pour les autres broches, c'est-à-dire qu'elles devraient probablement être utilisées comme broches de sortie plutôt que comme broches d'entrée (donc les signaux ne t être dérangé par des circuits extérieurs en mode ICSP), et tout ce qui leur est attaché doit être conçu pour ne pas réagir négativement à la combinaison de signaux aléatoires que le trafic de programmation leur envoie.
microtherion
10

Vous n'avez pas à "graduer" d'un seul coup. Voici comment j'ai converti:

Pour commencer, j'ai continué à utiliser un Arduino, mais j'ai converti les appels à la bibliothèque Arduino en registres de lecture et d'écriture, une ligne à la fois, pour voir si mes programmes fonctionnaient toujours. De cette façon, je me suis habitué à utiliser les registres et j'ai vu qu'ils n'étaient pas radicalement discontinus avec la façon de faire des choses Arduino. Les fonctions Arduino comme digitalWrite () manipulent simplement les registres - vous êtes libre de les lire et d'y écrire directement dans vos croquis.

Ma prochaine étape était de mettre un ATTiny 85 sur une planche à pain et de le programmer avec Arduino en tant que FAI ( http://highlowtech.org/?p=1695 ). Si vous achetez un bloc d'alimentation et que vous utilisez l'oscillateur interne de l'ATTiny, cela nécessite ridiculement peu de câblage. J'ai utilisé l'IDE Arduino pour compiler, mais j'ai continué à utiliser autant que possible les registres.

Ensuite, j'ai installé la chaîne d'outils de ligne de commande Crosspack gratuite et compilé un programme clignotant. Après quelques essais et erreurs, j'ai réussi à programmer l'ATTiny avec avrdude uniquement, en restant complètement en dehors de l'écosystème Arudino.

Une fois que vous avez atteint blinky avec les outils de ligne de commande uniquement, vous êtes libre d'Arduino. Explorez les différents périphériques et leurs registres et bientôt ce sera totalement naturel.

Après tout cela, je me retrouve souvent à utiliser Arduino parce que c'est plus rapide. J'ai trouvé que regarder les descriptions de registre était un peu nul; pas de sens de le faire si vous n'êtes pas obligé. Mais il est bon de savoir comment.

user24505
la source
8

Je suis d'accord avec le commentaire de HL-DSK ci-dessus. Je dépenserais l'argent supplémentaire et trouverais un programmeur avec des capacités de débogage. J'utilise JTAGICE3, environ 110 $ sur digi-key.

Lisez ici la programmation des FAI . Il vous montrera comment faire ressortir les connexions SPI. Les connexions SPI sur votre puce seront dans la fiche technique ATmega. Regardez à la page 2 pour les broches MISO / MOSI / SCK / RESET. Le programmeur doit pouvoir contrôler la ligne de réinitialisation. N'oubliez pas d'utiliser une résistance de rappel sur la ligne de réinitialisation afin que votre puce fonctionne après la déconnexion du programmateur.

Procurez-vous un en-tête 2x3 ici . Ou créez le vôtre en utilisant des en-têtes séparables.

qce88
la source
2
Je vais ensuite obtenir un programmeur avec un support de débogage. Plus tôt ce mois-ci, j'ai été plongé dans le grand bain sur un projet PIC32 sans expérience préalable de bas niveau. Même avec quelqu'un d'autre écrivant la fonctionnalité de frappe de bits de niveau le plus bas, je ne veux même pas penser à combien plus difficile de trouver où étaient mes problèmes si tout ce que je devais voir à l'intérieur était une seule LED rouge / verte.
Dan Neely
Ceci, une fois que vous avez des outils professionnels, vous ne pouvez plus revenir en arrière.
Matt Young
7

La différence entre un Arduino et un ATmega328 nu n'est que deux choses. Le chargeur de démarrage Arduino et les bibliothèques Arduino. Vous pouvez coder un Arduino avec du C ou du C ++ nu sans utiliser aucune des bibliothèques. Vous pouvez également utiliser l'assemblage à la place. Le chargeur de démarrage vous permet de charger du nouveau code via la série sans passer par la programmation en série (légèrement) plus compliquée (essentiellement SPI).

Vous pouvez utiliser les bibliothèques de programmation standard et avr-gcc avec presque n'importe quelle idée. Contrairement à ce que d'autres pourraient dire, coder un Arduino est fondamentalement comme coder un microcontrôleur nu, avec quelques commodités supplémentaires au détriment de certaines performances.

Passant
la source
4
Mais vous pouvez également utiliser le chargeur de démarrage Arduino et les bibliothèques avec un ATmega328 nu.
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams qui en fait un arduino aux os nus, natch.
Passerby
5

J'achète des puces Atmega328P pré-chargées et les programme en circuit avec un câble FTDI et avrdude, de la même manière que je programmerais l'Arduino. J'aime l'IDE Eclipse mais vous pouvez utiliser n'importe quel environnement que vous préférez - Atmel Studio, l'IDE Arduino, emacs ou pieds nus sur la ligne de commande.

Cette carte est en cours de construction au point où elle est suffisamment complète pour tester avec un programme Hello, en utilisant le câble pour la programmation, l'alimentation et le terminal. Il aura toujours besoin de son alimentation - régulateur de tension à courant de repos ultra-faible LM2936 et un connecteur de batterie, dans mon cas - et de tous les autres composants intégrés et connexions externes dont le projet aura besoin:

NotDuino

Puisque vous avez un Arduino, vous pouvez économiser un peu d'argent et utiliser des puces non programmées, en utilisant l'Arduino pour installer le chargeur de démarrage. Les jolies étiquettes bleues à broche aident à maintenir mon taux de gaffes bas! J'utilise un cristal de 16 MHz mais si vous pouvez exécuter avec l'oscillateur interne, votre nombre de pièces diminue de 3 (le xtal et 2 condensateurs).

JRobert
la source
2

Pour passer d'Arduino où le matériel est fourni et le logiciel est une superposition en langage C, je voudrais faire quelques suggestions. Je vois que les gens ont posté des réponses utiles mais j'ai été là où vous êtes et je ferais des choses un peu différentes.

  1. Choisissez un débogueur. Les débogueurs vous offrent la possibilité de programmer le microcontrôleur ainsi que le débogage qui comprend le traitement `` étape par étape '', les `` points d'arrêt '' qui vous permettent de suspendre le programme sur une certaine ligne de code pour vérifier ce que le code est en train de faire. ISP (In-Circuit Programming) est une interface série, utilise 3 broches ce qui est bien mais ne fournit pas toutes les fonctionnalités qu'un débutant voudrait. L' interface JTAG utilise 4 broches qui vous offrent essentiellement des fonctionnalités complètes en termes d'utilisation de points d'arrêt et d'autres choses. Les gens se penchent généralement plus vers les FAI parce que c'est «relativement» plus facile à configurer, mais si vous me demandez, JTAG n'est pas difficile à configurer, mais cela se résume également à vos préférences personnelles. Et il y a le fil de débogage interface que je voudrais ignorer dans cette discussion parce que vous utilisez plutôt le FAI que le fil de débogage.
  2. Achetez un débogueur doté de fonctionnalités ISP et JTAG. Je pense que vous achetez une fois mais achetez bien ce qui vous aidera à l'avenir si vous souhaitez changer votre design. Je recommande AVR Dragon ou JTAGICE. Les deux se connectent au PC via USB et fournissent tous les deux ISP et JTAG. JTAGICE est un peu plus cher que AVR Dragon mais je recommande vraiment AVR Dragon.
  3. Vous constaterez que la plupart des microcontrôleurs Atmel ont des fonctionnalités ISP mais peu ont JTAG. Les petits microcontrôleurs tels que les séries AT90S2313 ou ATTINY utilisent la série ISP car ils sont de petite taille. Mais si vous cherchez non seulement à clignoter quelques LED, mais que vous souhaitez vous connecter avec, par exemple, un écran LCD ou un clavier ou ce que vous avez, je vous recommande d'opter pour un microcontrôleur légèrement plus grand. Si vous utilisez une alimentation 5V, je vous recommande ATMega8 ou même ATMega16 ou ATMega128 (mon préféré). ATMega16 et ATMega128 ont une interface ISP et JTAG.
  4. En ce qui concerne l'IDE, j'avais l'habitude d'utiliser Code vision et AVR Studio mais je recommande d'utiliser Atmel Studio 6.0 ou une version plus récente qui répond à tous vos besoins.

J'ai quelques idées schématiques que j'ai apprises par moi-même afin que vous ayez une interface propre et fluide avec votre micro. Dis-moi si tu as besoin d'aide.

David Norman
la source
1

Conseils honnêtes

Arduino est pour les débutants, il y a deux façons d'aller d'ici

Méthode 1: Comprendre le fonctionnement d'un microcontrôleur / processeur (approche préférable)

Atmel 8051

J'entends par là l'apprentissage des architectures et du code d'assemblage (ou du métal nu) pour le micro p / c. Si vous avez besoin d'un point de départ pour cela, je suggère Atmel 8051 qui est un microcontrôleur 8 bits avec l'architecture la plus simple et le jeu d'instructions d'assemblage. Tout autre processeur 32 bits ou 64 bits moderne possède une architecture dérivée. Ce microcontrôleur est toujours utilisé dans le cadre de mes cours de troisième cycle car c'est un bon point de départ et beaucoup de littérature est disponible.

Oh et des kits pour créer votre carte ISP sont vendus (kits complètement assemblés avec processo, composants de soudure à des kits de carte et vous pouvez construire la carte de développement vous-même ne nécessite que quelques circuits intégrés et câbles / prises RS-232)

Puisqu'il s'agit d'une technologie de pointe, tous les composants seront bon marché.

Méthode 2: passez à une approche matériel-logiciel (moins préférable)

Tarte aux framboises Beagle bone Noir

C'est l'approche pour les fainéants qui ont plongé dans un peu d'assemblage et "exploité" OU les gens qui veulent passer à plus de logiciels que de matériel. Je suggérerais de passer à un autre conseil amateur comme Raspberry Pi ou BeagleBoneBlack avec des processeurs ARM et commencer à faire des projets dans leur créativité.

Dexobox
la source
0

Vous pouvez utiliser la carte Arduino, sans utiliser les bibliothèques sandbox et l'environnement, vous pouvez tout programmer vous-même directement. Si vous souhaitez utiliser leur chargeur de démarrage via serial / uart pour programmer, cela fonctionne très bien. Mais la plupart / toutes les parties avr peuvent également être programmées d'une autre manière, la partie étant maintenue à zéro, ce qui signifie qu'elle n'est pas brickable. il est assez facile de mordre bang spi à partir d'un arduino ou d'un autre microcontrôleur ou avec une rupture ftdi d'une certaine saveur. sparkfun a des cartes arduino et non-arduino (le 32u par exemple) dont l'en-tête spi est évident. et des cartes de dérivation ftdi que vous pouvez facilement bitbang en utilisant la bibliothèque de ftdi ou la bibliothèque ftdi fournie avec linux.

La documentation de chaque partie présente les options de démarrage et les options de programmation flash. oui, il n'est pas difficile de simplement acheter des pièces et de créer votre propre carte de dérivation. Je ne ferais pas cela jusqu'à ce que vous ayez utilisé une carte existante ou une carte d'évaluation simple, puis clonez-la si nécessaire. Idéalement, commencez par une pièce avec un oscillateur rc interne, essentiellement des broches d'alimentation, de terre et de programmation ...

old_timer
la source