Carte test de micro-contrôleur

From Fabwiki
Jump to: navigation, search

Cette page Wiki est dédiée à l'étude, la conception et l'utilisation d'une carte de test de µcontrôleur du fabricant Microchip, le PIC 18F2550.


Cahier des charges[edit]

Pourquoi vouloir créer une telle carte ?[edit]

L'idée de créer une carte de ce genre m'est venue alors que j'étais en train d'en concevoir une d'un tout autre genre. Elle était tellement complexe, onéreuse et encombrante qu'il m'a fallu chercher un moyen de pouvoir amoindrir l'ampleur de tous ces inconvénients.

C'est dans cette optique que les murmures d'un petit oiseau m'ont intéressés ( référence cinématographique inconnue ? ... GoT ! ). Les µContrôleurs ! ( µ pour micro )

Un composant intégré, peu coûteux, simple à mettre en place et suffisamment performant pour un très gros panel d'applications. Et quittes à devoir comprendre les fonctionnalités dont j'avais besoin pour le premier projet, autant mettre à profit ces efforts pour en apprendre le plus possible sur ces petites bêtes très complètes !

Ces composants sont étudiés dans les années universitaires à partir du M1, ici à Rennes 1, cependant je n'ai aucunes envie d'attendre pour assouvir ma curiosité !

Pourquoi ce microcontrôleur et pas un autre ?[edit]

Comme je ne connais, le jour ou j'ai écris ces lignes, que très peu de choses sur les µContrôleurs, je ne suis pas encore en mesure de pouvoir satisfaire pleinement cette réponse, je reviendrai probablement plus tard pour donner plus d'informations. Cela dis, le facteur principal de mon choix est très simple, le petit oiseau m'ayant vanté les mérites de ces composants est un adepte des PICs. Il y a également le fait que je ne voulais pas de circuit d'alimentation sur ma carte pour plus de simplicité et je voulais pouvoir programmer facilement n'importe ou. Vous en conviendrez, quoi de mieux que l'USB pour ces deux facteurs. Le PIC 18F2550 en est pourvu et il servira je puis vous l'assurer !

Quelles fonctionnalités seront accessibles grâce à cette carte ?[edit]

Comme je l'ai dis, il serait dommage de ne se contenter que de quelques fonctionnalités alors qu'avec quelques efforts on peut étudier la quasi totalité de celles ci. C'est dans cette optique que cette carte voit le jour.

Les fonctionnalités du µContrôleurs sont nombreuses, mais il serait trop couteux et pas forcément plus utile de toutes les rendre accessibles directement sur la carte.

Je me suis donc décidé à créer une carte de test rendant directement accessible les fonctionnalités suivantes ( à noter que la plupart des broches seront reliées à des connecteurs pour une utilisation extérieur ) :

  • Plusieurs entrées/sorties numériques, dont une câblée directement sur une LED et deux autres sur des interrupteurs tactiles, une autre reliée à une broche du port d'interruption.
  • Plusieurs entrées analogiques, dont une directement câblée sur un potentiomètre
  • Une entrée numérique Capture
  • Une sortie numérique PWM câblée sur une LED
  • Le bus I2C sera activement utilisé
  • Et beaucoup d'autres fonctionnalités rajouter par des composants reliés au bus I2C tel que :
    • Horloge Temps réelle
    • CNA ( Convertisseur Numérique Analogique)
    • Extenseur 16 bits, il permet d'acquérir 16 entrées/sorties numériques supplémentaires, très pratique. Un sera dédié au pilotage de 2 afficheurs 7 segment et l'autre simplement mis à disposition pour des usages extérieurs à la carte, comme un bus parallèle par exemple
    • Un capteur de température
    • Une eeprom 256k


Les fonctionnalités qui ne seront pas utilisée directement par la carte seront toutefois utilisables depuis des montages extérieurs, tel que :


  • Le bus SPI, en renonçant a l'utilisation simultané du bus I2C ( éventuellement, il me faut d'abord vérifier que les résistances de pull-up ne gènes pas le fonctionnement du bus SPI )
  • Le bus UART
  • Un CNA est connecté au bus I2C dont la sortie est reliée à un bornier. L'on pourra y connecter un circuit amplificateur par exemple pour l'utilisation d'une enceinte. En créant un signal analogique grâce au CNA il sera possible de créer un petit morceau de musique par exemple
  • Les I/O du deuxième extenseur 16 bits dont j'ai parlé précédemment

Conception[edit]

Les Ports[edit]

Je me dois, avant toutes choses, de vous faire part d'une particularité essentielle des PICs ( peut être est-ce la même chose pour les autres type de µContrôleurs ) qui est : la possibilité d'attribuer, logiciellement, la fonction à utilisée pour chaque broche. Par exemple la broche 1 peut être utilisé pour /MCLR, VPP ou RE3, mais seulement une des trois, et ce, pour toute la durée de l'alimentation du PIC. Lors de la programmation du PIC il nous faudra donc définir quelle fonction chaque broche devra remplir. Nous en reparlons plus longuement dans le chapitre dédié.

Un port est un groupe de broche. Le port A du 18F2550 par exemple, regroupe les broches de 2, 3, 4, 5, 6, 7, 10.

Pour plus d"informations, la documentation sera fournie en annexe.


Étude des broches[edit]

Diagramme des ports.jpg

Broche ( fonction utilisée ) :

  • /MCLR : entrée active au niveau bas. Cette entrée ne sera pas utilisée manuellement, elle sera néanmoins utile à l'outil de programmation du PIC, c'est une entrée pouvant être configurée sur une fonction de remise à zéro, un RESET
  • AN0 : entrée analogique
  • AN1 : entrée analogique
  • AN2 : entrée analogique
  • RA3 : Entrée/sortie numérique
  • RA4 : Entée/sortie numérique
  • RA5 : Entrée/sortie numérique
  • VSS : Broche commune, la masse;
  • OSC1 : première broche reliée au quartz servant au µContrôleur à fabriquer sa fréquence de fonctionnement
  • OSC2 : deuxième broche liée au quartz
  • RC0 : Entrée/sortie numérique
  • CCP2 : Entrée spécifique appelée Capture ( entrée capturant la valeur d'un timer interne au PIC à chaque front montant/descendant du signal envoyé qui lui est envoyé, on peut s'en servir pour mesure la période d'un signal par exemple )
  • CCP1 : Sortie spécifique appelée PWM ( modulation à largeur d'impulsion, sert à créer un signal période de puissance moyenne définie )
  • Vusb : Broche à un condensateur de stabilisation pour la tension du port USB
  • D- : Point froid du bus USB
  • D+ : Point chaud du bus USB
  • TX : Broche de Transmission du bus UART
  • RX : Broche de Réception du bus UART
  • VSS : Broche commune, la masse
  • VDD : alimentation, 5 V
  • SDA : Broche de donnée du bus I2C
  • SCL : Broche de synchronisation du bus I2C
  • RB2 : Entrée/sortie numérique
  • RB3 : Entrée/sortie numérique
  • RB4 : Entrée/sortie numérique
  • PGM : Broche de programmation, data prog
  • PGC : Broche de programmation, clock prog
  • PGD : Broche de programmation, debug prog


Pour connaitre les autres fonctions de chaque port, qui ne seront pas utilisés directement sur la carte, je vous invite à lire la documentation du PIC 18F2550 que je place dans le chapitre Annexe.

Gestion des entrées/sorties :[edit]

  • /MCLR : Entrée numérique RESET, utilisée par le programmateur de PIC, relié à un bornier
  • AN0 : entrée analogique 0, câblée directement sur un potentiomètre
  • AN1 : entrée analogique 1, reliée à un bornier
  • AN2 : entrée analogique 2, idem
  • RA3 : entrée numérique 3, câblée à un bouton poussoir et une résistance de pull-down.
  • RA4 : Entrée numérique 4, reliée à un bornier
  • RA5 : Entrée numérique 5, idem
  • VSS : reliée à la masse, directement au connecteur USB
  • OSC1 : relié au quartz du µContrôleur
  • OSC2 : idem
  • RC0 : Sortie numérique 6, câblée directement à une LED
  • CCP2 : Entrée analogique Capture, reliée à un connecteur
  • CCP1 : Sortie numérique PWM, câblée à une LED et également reliée à un connecteur
  • Vusb : câblée directement à un condensateur
  • D- : Point froid du bus USB, câblé directement au connecteur USB
  • D+ : Point chaud du bus USB, idem
  • TX : Broche de Transmission du bus UART, reliée à un connecteur
  • RX : Broche de Réception du bus UART, idem
  • VSS : reliée à la masse, directement au connecteur USB
  • VDD : reliée à l'alimentation, idem
  • SDA : Broche de donnée du bus I2C, reliée à un bornier et également à plusieurs composants présent sur la carte
  • SCL : Broche de synchronisation du bus I2C, idem
  • RB2 : Entrée numérique du port gérant les interruptions, câblée directement en sortie d'un des composants de la carte connecté sur le bus I2C ( capteur de température, DS1621S+ )
  • RB3 : Entrée numérique du port gérant les interruptions, reliée à un connecteur
  • RB4 : Entrée numérique du port gérant les interruptions, reliée à un BP, celui - ci aura d'ailleurs un rôle crucial, retenez le !
  • PGM : broche de programmation, relié à un connecteur
  • PGC : idem
  • PGD : idem

En utilisant les ports de cette façon, il est donc, sans compter la programmation du pic, ce qui viendra dans quelques chapitres, facile de pouvoir tester une entrée/sortie numérique ou une entrée analogique. Que ce soit grâce à la led, bouton poussoir ou encore la led en fonction de la position du potentiomètre au lieu de l'interrupteur.

Vous l'aurez compris, si l'on peut piloter une sortie numérique en fonction d'autres entrée numérique ou analogique, alors on peut le faire pour n'importe quelle autre sortie numérique. Inutile donc d'en disposer en quantité directement câblés sur la carte. C'est la raison pour laquelle les autres entrées/sorties sont reliées à des connecteurs, elles serviront à être connectées selon votre souhait ( et surtout votre responsabilité en cas de dégradation de la carte !!! ) à des montages extérieurs.

Les Bus[edit]

Pour commencer ce chapitre j'aimerais de nouveau préciser que seul le bus I2C sera utilisé en interne. Les autres bus, bien qu'étant reliés à des connecteurs et donc utilisables via des montages externes ( encore à vérifier pour le SPI ), ne seront pas vu sur ce wiki ou du moins pas tant que je n'aurai pas étudié et expérimenté toutes les fonctions internes de la carte.

Je vais cependant vous donner quelques informations liées aux divers bus ci dessous.


UART[edit]

Le Bus UART est un bus asynchrone, ce qui signifie qu'aucune horloge n'est présente pour synchroniser les échanges. Les informations sont envoyées et reçues sur deux fils. La vitesse de transmission est sensiblement plus élevée que le bus I2C, mais l'UART ne permet pas la communication vers plusieurs composants.

Il a néanmoins l'avantage de ne nëcesshtmr que 2 fils, est relativement facile à mettre en place, pour communiquer directement entre deux µContrôleur par exemple.

https://fr.wikipedia.org/wiki/UART

SPI[edit]

Le Bus SPI est beaucoup plus rapide que le bus UART, il est synchrone et fonctionne sur un protocole de communication maître à esclaves. Il nécessite cependant plus de travail à mettre en place et plus de fils. Il en faut 3 de base pour un bus SPI et un supplémentaire par esclave. Donc 4 fils pour un esclave, 5 pour 2 esclaves, 6 pour 3 esclaves....

https://fr.wikipedia.org/wiki/Serial_Peripheral_Interface


USB[edit]

Le bus USB est un bus très connu, pourtant complexe et je trouve difficilement accessible. Il permet la connexion d'un périphérique à un autre sans avoir besoin de redémarrer aucun des deux. Je ne peux pour l'instant vraiment rien dire de plus par moi même. C'est une des fonctionnalités que je m'efforcerai d'étudier grâce à cette carte !

Cependant le bus USB jouera un rôle crucial. Il permettra l'alimentation de la carte simplement en la connectant à n'importe quel ordinateur. Il servira également à programmer le pic facilement sans matériel supplémentaire.

https://fr.wikipedia.org/wiki/Universal_Serial_Bus

Le bus de programmation[edit]

Le bus de programmation présent sur cette carte est liée spécifiquement aux PIC. Il faut savoir que, bien que le bus USB servira a programmer le PIC, celui ci ne pourra pas accomplir ce rôle lors de la première mise en marche du PIC. En effet, aucun programme n'est inscris dans sa mémoire, il ne sait donc pas encore comment utiliser l'USB. Je vois déjà la rage dans votre regard : "Tu nous avais dis qu'on pourrait programmer n'importe ou et n'importe quand cette carte simplement en la connectant à notre ordinateur !"

Je n'ai pas mentis mais il faut, pour la première programmation, utiliser un kit de programmation spécifique. On déposera dans la mémoire du PIC un code qui s'appelle un "bootloader" dont le rôle est de "débloquer" certaines fonctions du PIC tel que l'USB. Une fois ce programme déposé dans la mémoire, on pourra alors toujours se servir de l'USB pour reprogrammer notre PIC.

Il y aura de plus amples détails dans le chapitre dédiés aux expérimentations.

Le bus I2C[edit]

Principe de fonctionnement[edit]

le bus I2C est un bus à utilisation "domestique", on l'utilise généralement lorsque l'on n'a pas besoin d'une grande vitesse de transmission de données. Il peut tourner dans les 100kb/s.

C'est un bus série et synchrone, il utilise seulement deux lignes de transmission :

  • SCL : c'est la ligne de synchronisation ( l'horloge )
  • SDA : ligne de données

L'I2C fonctionne en maître-esclave, c'est à dire que seul le composant dit "maître" peut initier une conversation sur le bus, les esclaves répondent ou non en fonction de la demande du maître. La ligne SDA est donc bidirectionnelle.

Sur ce bus, chaque composant à une adresse unique, de cette façon, ils peuvent savoir à qui communiquer spécifiquement.

Les lignes SCL et SDA sont communes à tous les composants reliés au bus, il faut également une masse commune ainsi qu'une résistance de pull-up sur ces deux lignes.

Les divers composants connectés au bus[edit]

Histoire de bien... TRES bien comprendre un bus autant utilisé, j'ai implanter plusieurs composants discutant en I2C sur cette carte. Je vous en fais la liste avec une description succincte ci dessous :

  • MCP23017-S/SO x 2 : Expander ( Extenseur ) I/O 16bits. Ce composants dispose de 16 entrées/sorties numériques. Toutes utilisables, du moment qu'on sache discuter avec lui, via l'I2C. Très utile non ?! De pouvoir disposer de beaucoup plus d'E/S qu'il n'y en a sur le µContrôleur. ! ( les E/S du premier expander serviront d'ailleurs à piloter deux 7 segments )
  • DS1621S+ : capteur de température avec seuil de déclenchement. Par exemple, en le programmant, toujours via l'I2C, l'on peut fixer un seuil à une température donnée. Si le capteur voit que la température est supérieur au seuil par exemple, il décide de mettre sa sortie à l'état haut. ( la sortie de ce composant est reliée à RB2, une entrée numérique du port gérant les interruptions )
  • 24FC256-I/SN : EEPROM 256k, c'est une mémoire non volatile réinscriptible, la coupure du courant ne fera pas perdre les données écrites dans cette mémoire.
  • DS1307Z+ : Horloge temps réel ( ou RTC, Reel Time Clock). Grâce à une pile et une eeprom interne, l'horloge continue de fonctionner même sans connecter la carte ni l'alimenter. Ce composants permet d'avoir heure et date par exemple, sans avoir à la reconfigurer à chaque coupure de l'alimentation.
  • MCP475A0T-E/CH : CNA ( convertisseur numérique analogique ) 12 bits. Permet de créer un signal analogique à partir de données numériques. Pourrait servir à créer de la musique par exemple. Cependant il faut un montage extérieur pour visualiser et/ou tester ce composant. Un haut parleur aurait été trop volumineux pour la carte. Un simple fil pour néanmoins servir à relier la sortie du CNA à une entrée analogique de la carte pour par exemple visualiser le signal en numérique. Le serpent qui se mord la queue certes, mais ce serait tout de même intéressant.

L'électronique nécessaire au bon fonctionnement de la carte[edit]

Les condensateurs de découplages[edit]

Les condensateurs, bien que leur fonctionnement reste toujours le même, peuvent néanmoins accomplir des rôles très différents.

Leur capacité, sans jeux de mots, à stocker l'énergie en fonction du temps et d'autres paramètres, en font des composants capable de jouer le rôle de petit réservoir d'énergie. Un condensateur de découplage met justement à profit cette énergie accumulée.

Pour comprendre le rôle du condensateur de découplage, il faut faut savoir qu'un composant numérique consomme de l'énergie en fonction de son activité. S'il travail beaucoup, il consommera d'autant plus. Le condensateur de découplage lui sert de réservoir. Lorsque le composants numérique aura des pointes de consommation, il tirera son énergie du condensateur de découplage, celui ci se videra en conséquence puis se rechargera "à son rythme".

Imaginez maintenant qu'il n'y ait pas de condensateur de découplage. La soudaine demande d'énergie du composant numérique se répercutera directement sur l'alimentation, créant ainsi des perturbations sur celle ci, la fatiguant et engendrant éventuellement un mauvais fonctionnement des autres composants.

C'est le rôle du condensateur de découplage. Fournir les pics d'énergie nécessaire aux composants pour ne pas perturber l'alimentation et assurer le bon fonctionnement de l'ensemble du montage.

En règle général, on prend 100uF en début de circuit entre l'alimentation et la masse et 100nF pour chaque composants numériques et on place ce condensateur au plus proche du composant, entre le port d'alimentation et la masse.

Les quartz et leurs condensateurs associés[edit]

Un quartz est un dipôle composé, comme son nom l'indique, d'un quartz. Un petit cristal taillé spécifiquement et qui vibrera lorsqu'une tension lui sera fournie. Il lui faut deux condensateurs pour fonctionner correctement.

Honnêtement, pour l'instant, ma connaissance de ce composant est ridicule, je ne pourrai donc pas vous en dire davantage.,

Les résistances de pull-up/pull-down[edit]

Lorsqu'une entrée d'un composant numérique n'est connectée à rien, elle est dite flottante. Certaines entrées, si c'est spécifié sur la documentation du composant, peuvent restées flottantes. Mais, pour la grande majorité, il faut connecté les entrées sur un potentiel donné. Sans cela, l'entrée du composant pourrait recevoir des tensions via des ondes électromagnétiques par exemple et cela pourrait perturber le fonctionnement souhaité.

Les résistances de pull-up sont des résistances qui permettent fixer une tension égale à l'alimentation sur laquelle elles sont placées. Ont les prends de forte valeur pour avoir un courant très petit et ainsi ne pas avoir, ou peu, de chute de tension. Donc cette résistance fixera l'entrée à l'état haut.

La résistance de pull-down fait exactement l'inverse. On fixe une tension nulle, donc un état bas, sur l'entrée. Elle est connectée entre l'entrée et la masse.

On parle de pull-up et pull-down pour des résistances de tirages. On tire un potentiel grâce à cette résistance.

Le bootloader[edit]

J'ai confié ce travail au gros phenix. Voici son explication :

Microchip a bien compris que l'USB c'est assez galère. Ceux qui connaissent un peu le protocole seront de mon avis! C'est pourquoi, dans les mla (Microchip Libraries for Applications) on trouve ce genre de code tout fait. Pour ceux qui vont fouiller un peu, j'ai utilisé celle ci : mla/v2016_04_27/apps/usb/device/bootloaders/firmware/pic18_non_j/pic18f4550.X

Le .X du dossier signifie que c'est un projet MplabX. Il suffit de l'ouvrir et de modifier le PIC utilisé. Si vous avez de la chance, ça compile sans soucis. Évidement, ce serait trop simple si c'était le cas... Notre 18f2550 est censé être pris en charge mais il a fallu faire quelques petits ajout à la main, mais le projet est prévu pour!

Avant de continuer, on va rapidement revoir ce qu'est un bootloader:

Intéret et premier problème[edit]

Se séparer de la sonde de programmation (qui coûte cher).

Le problème c'est qu'elle semble être le seul moyen de programmer le PIC. C'est effectivement le cas car le PIC arrive vide du fabriquant. Il faut donc avoir une sonde à portée de main au moins une fois afin de charger le bootloader.

Le bootloader va donc permettre de se séparer de la sonde et de pouvoir programmer depuis le port USB. Oui, c'est effectivement le cas car le PIC arrive vide du fabriquant.

Un bootloader?[edit]

Quand on parle de bootloader, on parle d'un micro-code qui se trouve en général au tout début de la mémoire du système. Il permet de programmer le composant en utilisant les composants du composant. En clair, il permet l'auto-programmation!

Il existe différents types de bootloader : - USB (le plus connu, le notre) - I2C - CAN - Infrarouge - ... En clair, tout ce qui transporte des données peut être utlisé pour faire un bootloader.

Afin de ne pas trop rentrer dans les détails du fonctionnement d'un PIC, contentez vous d'admettre que le PIC commence par éxecuter ce qui se trouve dans la première case de sa mémoire (case 0). Le bootloader est appelé quand le PIC appelle la case 0. Il démarre donc en premier.

Tout comme le Terminator, le bootloader ne peut pas s'auto-terminer. Il restera donc toujours au début de la mémoire et sera toujours éxecuté à la mise sous tension.

Boot order[edit]

  1. Mise sous tension du PIC
  2. Le bootloader est appelé
  3. Bouton poussoir enfoncé?
    1. Si oui
      1. Le bootloader attend qu'un nouveau programme soit envoyé par l'USB
      2. Le bootloader écrit le nouveau programme dans la mémoire
      3. Un reset est requis
    2. Si non
      1. Le programme utilisateur démarre normalement

Le bluff du bootloader[edit]

Son petit jeu est de faire croire au programme de l'utilisateur qu'il n'est pas là. C'est pourquoi il transfère le vecteur de reset et le(s) vecteur d'interruptions plus loin dans la mémoire. C'est fait par un fichier en assembleur. (file: vectorremap.asm)

Les modifications du bootloader de Microchip[edit]

  • Les adresses des vecteurs d'interruptions. (file: bootpic18nonj.h)
  • Les emplacements de la LED et du bouton. (file: hardwareprofile.h)

Microchip ne peut pas deviner où sera le bouton et la LED qui vont servir au bootloader...

  • Les bits de configurations. (file: main.c)

Ils ne peuvent pas non plus deviner comment on a fait pour obtenir la fréquence pouvant faire fonctionner l'USB. (ici: 96MHz)

Réalisation[edit]

Schéma structurel[edit]

Pour ce qui est du logiciel utilisé, il s'agit de DesignSpark. Pourquoi ce soft ? Parcequ'il me plait, simplement. Il est, je trouve, intuitif, rapide à prendre en main, il a tout autant de fonctions que les autres logiciels du même domaine. Les atouts majeurs qui m'ont confortés dans ce choix sont par exemple l'utilitaire de création de schématique/footprint/composant. Il y a aussi la possibilité de pouvoir éditer des classes de net et attribuer des couleurs à celles-ci, la lisibilité s'en voit grandement accrue.

Je vous invite à télécharger les fichiers du projet DesignSpark, ils vous sont fournis en Annexe. Un logiciel de plus maitrisé ne fera de mal à personne après tout !


Schematic img.jpg


Routage[edit]

CarteTestuC img.jpg

Gravure / Perçage[edit]

La gravure et le perçage ont été effectués par une machine portant le joli nom de LPKF ! Elle nécessite des fichiers aux extensions portants son nom ou des fichier Gerber. Design Spark remplit encore son rôle parfaitement puisque le soft permet d'exporter des fichiers .lpkf.

Il nous "suffit" donc de fournir à la machine ces fichiers et elle gravera et percera notre carte selon le routage que l'on à effectué.

Le résultat est vraiment de très bonne qualité. Je ne sais pas encore moi même configurer et utiliser le soft de cette machine mais le petit oiseau m'a aidé pour cette tâche. Il faut d'abord configurer la machine et étalonner les forêts dont nous avons besoin. Pour cette carte, le plus petit forêt utilisé est le 0.2mm. Ce qui explique mon choix d'espacement de 0.3mm sur Design Spark, 0.1mm de marge pour être sûr que les pistes ne se touchent pas. Un mystère de moins n'est-ce pas ?!

Vous avez donc fait le lien entre la méthode de gravure, les contraintes liées à cette méthode et donc les contraintes répercutées sur le routage. Il faut donc avant de router, connaitre toute la chaîne de fabrication pour palier aux problèmes futur et ainsi gagner du temps.

J'ai malheureusement complètement oublié de prendre une photo de ma carte fraichement usinée, cela dis, je tâcherai de prendre une photo d'une autre carte sortie de la lpkf, pour vous montrer le résultat de son travail.


File:Exemple.jpg

Soudure[edit]

Pour ce qui est de la soudure, pas de machines, tout à la main !

J'avoue avoir été plus que dubitatif devant cette tâche, souder des composants cms, donc franchement minuscule, sur des pistes toutes aussi petites. Mais puisque d'autres y arrivent, pourquoi pas moi après tout !

He bien figurez vous que, comme plusieurs personnes me l'ont dis, ce n'est pas si difficile qu'il n'y parait et je les rejoins aujourd'hui sur ce point.

Il s'agit avant tout de techniques, rapidement assimilables, qui nécessites surtout.... de la patience ! Et un peu d'adresse.

En fait, dès les premières soudures une chose, pourtant évidente, nous viens à l'esprit. Une carte que l'on veut souder facilement et efficacement nécessite d'avoir été pointilleux sur le routage. On se rend compte qu'une grande partie de la fabrication de la carte est liée au routage. Du plan de masse, pour économiser du temps de gravure et de la simplicité de routage, des pistes bien espacées, des composants bien espacés également entre eux et entre les pistes au via suffisamment grand pour permettre une bonne soudure.

Je vous dirai donc : prenez le temps de bien router, vous serez d'autant plus satisfait et aurez bien moins d'erreurs !


Soudure img 50%.jpg

Tests et correction des erreurs[edit]

Voila, j'ai ma carte gravée, percée, soudée, quasiment tous les composants, il me manque juste mon potentiomètre.


Carte pre test 50%.jpg


Bien, maintenant, il faut prouver qu'elle est fonctionnelle, qu'il n'y a pas d'erreurs et dans le cas échéant, les corriger.

Et je vous prie de croire que des erreurs, il y en a eu !

Je vais donc vous présenter toutes celles qui ont été détectées et corrigées. Bien sur ces corrections ont été apportées dans les fichiers Design Spark que je vous ai fournis. C'est simplement à but instructif, montrer quel genre d'erreur peut survenir dans la conception et la fabrication d'une carte imprimée.

  • Erreurs de documentations :
    • Sur le connecteur U17, A0 et A7 inversés
    • Sur le connecteur U8, AN1 et AN2 inversés
  • Erreur de schéma :
    • Oublie d'une résistance de tirage au VCC, sur le net I/O.1
  • Erreurs de routage :
    • Quartz XTAL2, mauvais footprint qui a rendu l'espace entre les condensateurs C4 et C3 trop faible, soudure d'une patte débordant sur le GND ainsi qu'une erreur de routage sous le composants. Les pattes du quartz rentrant sous le composants sur une certaine longueur il a fallut isoler grâce a du ruban adhésif les pattes sous le composant pour éviter qu'elles n'entrent en contact avec le plan de masse.
    • Connecteur USB, mauvais routage des pattes, il fallu isoler une partie du plan de masse pour relié la patte 4 au D-, la patte 2 au GND et la 3 au D+. Il a donc également fallu sectionné les pistes qui étaient reliées au D- vers la patte 2 et la piste reliée au D+ à la patte 3.
    • Le CI MCP4725, je l'ai détruit à la soudure à cause d'une mauvaise manipulation, je suis resté trop longtemps avec le fer sur les pattes, difficulté de soudure
    • Les trois leds, inversion d'anode/cathode
    • Un via sur SDA qui était une soudure sèche, c'est à dire que le via n'était pas correctement soudé, il n'y avait pas de liaison électrique entre le top et le bottom ( ce qui a donné du fil à retordre a mon petit oiseau s'acharnant a valider toutes les fonctions de la carte ! )
    • Porte pile, footprint incorrect, il m'a fallu percer un peu à l'aveugle pour poser le composant et le souder
    • Boutons poussoirs, même problème, le footprint fournit était incorrect, j'ai du souder des fils pour les rendre opérationnels
    • Plusieurs via étaient beaucoup trop proche de certains composants, ils ne m'ont pas posés de problèmes, par chance, mais c'est une erreur à ne pas commettre, elle peut couter cher !


Et voila la carte après la série de tests et de corrections :


Carte finale 50%.jpg

Expérimentations[edit]

Pour chaque expérimentation que je ferai, je donnerai en fin de partie le code source ou/et fichiers/données utilisées. Je m'efforcerai d'être le plus clair possible, en donnant une problématique, un but, en début de partie et le reste sera de trouver une solution et vous l'expliquer au mieux

Pour comprendre les expérimentations que je ferai il vous faut impérativement connaitre au moins les bases du langage C. Je n'expliquerai pas en détail ce qui sera présent dans le code et qui appartient à ce langage car il y a déjà de très bon cours la dessus. Je vous invite donc à aller sur ce site : OpenclassRoom( anciennement Le site du Zero ) et étudier les 2 premier chapitres !

Maintenant que vous êtes parez pour coder comme des gros celtes, on peu y aller !

Annexe[edit]

Documentation[edit]

Les fichiers Design Spark que je vous ai fournis contiennent toutes les références des composants utilisés. A noter que les références données sont celles du site Radiospare via lequel je me suis procuré tous les composants. Vous n'avez donc aucunes recherches à faire, allez sur le site de Radiospare, tapez la référence.

Pour ce qui est des documentations des circuits intégrés tel que le pic, je vous les fournis toutes également avec les fichiers projet.

Fichiers projets DesignSpark[edit]