<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mluo</id>
		<title>Wiki de Projets IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mluo"/>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Mluo"/>
		<updated>2026-05-14T05:10:59Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:OrdonnanceurPrincipal.zip&amp;diff=42719</id>
		<title>Fichier:OrdonnanceurPrincipal.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:OrdonnanceurPrincipal.zip&amp;diff=42719"/>
				<updated>2017-05-19T18:01:26Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : a téléversé une nouvelle version de « Fichier:OrdonnanceurPrincipal.zip »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42718</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42718"/>
				<updated>2017-05-19T17:59:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
J'ai continué de développer les tâches sous FreeRTOS. &lt;br /&gt;
&lt;br /&gt;
D'abord, j'ai écrit les tâches pour faire clignoter deux LEDs à 1Hz et 2Hz. Ces tâches sont appelées &amp;lt;code&amp;gt;vTaskLED1&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskLED2&amp;lt;/code&amp;gt; et réalisent les deux fréquences. Ces tâches ne sont pas très compliqué. Les LEDs sont connectées au port D, donc, dans le début du programme, j'initialise le port D. Dans les fonctions &amp;lt;code&amp;gt;vTaskLED&amp;lt;/code&amp;gt;, je dois d'abord attendre une période de temps (pour les différentes fréquences, la période de temps est différente). Pour cela j'utilise, par exemple,  &amp;lt;code&amp;gt;vTaskDelay( 1000 /portTICK_PERIOD_MS)&amp;lt;/code&amp;gt;. Et puis, je modifie la valeur du port D, par exemple avec &amp;lt;code&amp;gt;PORTD ^=(1&amp;lt;&amp;lt;2)&amp;lt;/code&amp;gt;, pour faire changer l'état de la LED une fois.&lt;br /&gt;
&lt;br /&gt;
L'encadrant a accepté que ce travail continue avec FreeRTOS. Une première version des tâches de gestion des paquets Ethernet est écrite mais elle ne correspondait pas au sujet. Il est demandé de transformer ces tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lecture des paquets Ethernet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;. Je définis un tableau &amp;lt;code&amp;gt;uint8_t packetReceived[ETH_RCPT]&amp;lt;/code&amp;gt; pour stocker le paquet. Ce paquet comprend, l'adresse de destination (6 octets), l'adresse source (6 octets), le type de paquet (2 octets) et les données (3 octets pour note application). Les données comportent 3 octets pour contrôler 3 LEDs simples, les 3 LEDs simples constituent une LED multicouleurs.&lt;br /&gt;
&lt;br /&gt;
Je fais une boucle recevoir tous les octets du paquet. Je dois premièrement vérifier si un paquet Ethernet est arrivé. Après, j'utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis stocker les valeurs dans le tableau.&lt;br /&gt;
Après avoir stocké toutes les données dans le tableau, je vérifie le type de paquet. Si le type est correct, je vérifie les 3 dernièrs octets du tableau pour savoir comment mettre les LEDs correspondantes.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthReadData(void* pvParameters){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   int nb_ethernet = 0;&lt;br /&gt;
   unsigned char packetReceived[ETH_RCPT];&lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
    &lt;br /&gt;
   while(1){ &lt;br /&gt;
     while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
     nb_ethernet = enc28j60PacketReceive(); //Cheack if there is data in eth device&lt;br /&gt;
     xSemaphoreGive( spiMutex );&lt;br /&gt;
     if(nb_ethernet==0){ vTaskDelay( 5 / portTICK_PERIOD_MS ); continue; }&lt;br /&gt;
     if(nb_ethernet==64){&lt;br /&gt;
        int i;&lt;br /&gt;
        for(i=0;i&amp;lt;ETH_RCPT;i++){	&lt;br /&gt;
          while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
          packetReceived[i] = enc28j60ByteRead();&lt;br /&gt;
          xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
 &lt;br /&gt;
        /* Test sur l'adresse Ethernet source (fait par chip ENC28j60) */&lt;br /&gt;
 &lt;br /&gt;
        if(packetReceived[13]==type[0] &amp;amp;&amp;amp; packetReceived[12]==type[1]){/* Test sur le type de paquet Ethernet */&lt;br /&gt;
          if(packetReceived[14]!=0) PORTD |= (1&amp;lt;&amp;lt;5); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;5);&lt;br /&gt;
          if(packetReceived[15]!=0) PORTD |= (1&amp;lt;&amp;lt;6); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;6); &lt;br /&gt;
          if(packetReceived[16]!=0) PORTD |= (1&amp;lt;&amp;lt;7); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
          }	&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
    enc28j60FreeMemory();&lt;br /&gt;
    xSemaphoreGive( spiMutex );&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, j'ai codé la tâche pour envoyer un paquet Ethernet. Pour savoir quand l'envoyer, j'ai ajouté des boutons. J'ai premièrement écrit la fonction &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, pour savoir si un bouton est appuyé ou pas. Et puis, j'ai écrit une fonction &amp;lt;code&amp;gt;bouton_com&amp;lt;/code&amp;gt; pour tester si un bouton change d'état. &lt;br /&gt;
&lt;br /&gt;
La fonction de la tâche s'appelle &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai définit un tableau &amp;lt;code&amp;gt;packetToSend&amp;lt;/code&amp;gt;. Chaque fois, je vérifie l'état des boutons. Si cet état change, on prépare un paquet Ethernet à envoyer. J'utilise la fonction &amp;lt;code&amp;gt;enc28j60InitializeSend&amp;lt;/code&amp;gt; pour initialiser l'envoi. Et puis, j'utilise des &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans le paquet Ethernet. Ces valeurs sont les adresses de destination et de source, le type Ethernet et l'état des boutons.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 #define bouton(num) (((PINC &amp;amp; (1&amp;lt;&amp;lt;num))==0)?0:1)&lt;br /&gt;
&lt;br /&gt;
 int bouton_com(int num){&lt;br /&gt;
    int state=bouton(num);&lt;br /&gt;
    if(state!=laststate[num]){&lt;br /&gt;
      laststate[num]=state;&lt;br /&gt;
      return 1;&lt;br /&gt;
      }&lt;br /&gt;
    else return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthSendData( void * pvParameters ){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   unsigned char packetToSend[ETH_SEND]; &lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
   for( ;; ){&lt;br /&gt;
     if(bouton_com(0) || bouton_com(1)){&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60InitializeSend(); &lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        int size=0;&lt;br /&gt;
        memcpy(packetToSend+size,broadcast,sizeof(broadcast));&lt;br /&gt;
        size += sizeof(broadcast);&lt;br /&gt;
        memcpy(packetToSend+size,mac,sizeof(mac));&lt;br /&gt;
        size += sizeof(mac);&lt;br /&gt;
        memcpy(packetToSend+size,type,sizeof(type));&lt;br /&gt;
        size += sizeof(type);&lt;br /&gt;
        memcpy(packetToSend+size,laststate,sizeof(laststate));&lt;br /&gt;
        for(int j=0;j&amp;lt;ETH_SEND;j++) {&lt;br /&gt;
            while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
            enc28j60WriteByteSend(packetToSend[j]);&lt;br /&gt;
            xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60FinalizeSend();&lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        }		&lt;br /&gt;
       }        &lt;br /&gt;
    vTaskDelay( 50 / portTICK_PERIOD_MS );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme avec un montage à base de breadboard. Le montage comporte un Arduino Uno, un breakout ENC28J60 de JeeLabs et deux breadboards pour les LEDs et les boutons. Le programme marche ! Voici la photo du montage.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Montage de test]]&lt;br /&gt;
&lt;br /&gt;
Pour changer la couleur de la LEDs RGB on peut utiliser la commande ci-dessous (la LED passe au blanc).&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;00 10 10 10 10 10 00 01 02 03 04 05 11 11 01 01 01&amp;quot; | ./ether -s&lt;br /&gt;
&lt;br /&gt;
La commabnde &amp;lt;code&amp;gt;ether&amp;lt;/code&amp;gt; est celle utilisée en TP IMA4.&lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie FTDI est soudée par la suite. Elle fonctionne comme le montre les test ci-dessous qui télécharge un programme utilisant les LEDs sur la carte.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|programme téléversé par le FTDI]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent une par une]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie alimentation 5V et 3.3V fonctionne aussi comme le prouve les LEDs blanche (Vin), bleue (5V) et verte (3.3V).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation 5V]] &lt;br /&gt;
[[Fichier:1182172060.jpg|300px|thumb|right|avec alimentations 5V et 3.3V]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
Les 5 tâches demandées sont fonctionnelles sur la maquette avec Arduino. Elles tournent dans l'ordonnanceur FreeRTOS. La carte n'a pas pu être testée complétement mais les parties alimentations, FTDI et micro-contrôleur sont opérationnelles : un programme de test des 4 LEDs connectées à l'ATMega328p a pu être téléversé avec l'IDE Arduino comme montré.&lt;br /&gt;
&lt;br /&gt;
Il reste à tester la partie Ethernet de la carte.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42717</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42717"/>
				<updated>2017-05-19T17:55:04Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
J'ai continué de développer les tâches sous FreeRTOS. &lt;br /&gt;
&lt;br /&gt;
D'abord, j'ai écrit les tâches pour faire clignoter deux LEDs à 1Hz et 2Hz. Ces tâches sont appelées &amp;lt;code&amp;gt;vTaskLED1&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskLED2&amp;lt;/code&amp;gt; et réalisent les deux fréquences. Ces tâches ne sont pas très compliqué. Les LEDs sont connectées au port D, donc, dans le début du programme, j'initialise le port D. Dans les fonctions &amp;lt;code&amp;gt;vTaskLED&amp;lt;/code&amp;gt;, je dois d'abord attendre une période de temps (pour les différentes fréquences, la période de temps est différente). Pour cela j'utilise, par exemple,  &amp;lt;code&amp;gt;vTaskDelay( 1000 /portTICK_PERIOD_MS)&amp;lt;/code&amp;gt;. Et puis, je modifie la valeur du port D, par exemple avec &amp;lt;code&amp;gt;PORTD ^=(1&amp;lt;&amp;lt;2)&amp;lt;/code&amp;gt;, pour faire changer l'état de la LED une fois.&lt;br /&gt;
&lt;br /&gt;
L'encadrant a accepté que ce travail continue avec FreeRTOS. Une première version des tâches de gestion des paquets Ethernet est écrite mais elle ne correspondait pas au sujet. Il est demandé de transformer ces tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lecture des paquets Ethernet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;. Je définis un tableau &amp;lt;code&amp;gt;uint8_t packetReceived[ETH_RCPT]&amp;lt;/code&amp;gt; pour stocker le paquet. Ce paquet comprend, l'adresse de destination (6 octets), l'adresse source (6 octets), le type de paquet (2 octets) et les données (3 octets pour note application). Les données comportent 3 octets pour contrôler 3 LEDs simples, les 3 LEDs simples constituent une LED multicouleurs.&lt;br /&gt;
&lt;br /&gt;
Je fais une boucle recevoir tous les octets du paquet. Je dois premièrement vérifier si un paquet Ethernet est arrivé. Après, j'utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis stocker les valeurs dans le tableau.&lt;br /&gt;
Après avoir stocké toutes les données dans le tableau, je vérifie le type de paquet. Si le type est correct, je vérifie les 3 dernièrs octets du tableau pour savoir comment mettre les LEDs correspondantes.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthReadData(void* pvParameters){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   int nb_ethernet = 0;&lt;br /&gt;
   unsigned char packetReceived[ETH_RCPT];&lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
    &lt;br /&gt;
   while(1){ &lt;br /&gt;
     while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
     nb_ethernet = enc28j60PacketReceive(); //Cheack if there is data in eth device&lt;br /&gt;
     xSemaphoreGive( spiMutex );&lt;br /&gt;
     if(nb_ethernet==0){ vTaskDelay( 5 / portTICK_PERIOD_MS ); continue; }&lt;br /&gt;
     if(nb_ethernet==64){&lt;br /&gt;
        int i;&lt;br /&gt;
        for(i=0;i&amp;lt;ETH_RCPT;i++){	&lt;br /&gt;
          while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
          packetReceived[i] = enc28j60ByteRead();&lt;br /&gt;
          xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
 &lt;br /&gt;
        /* Test sur l'adresse Ethernet source (fait par chip ENC28j60) */&lt;br /&gt;
 &lt;br /&gt;
        if(packetReceived[13]==type[0] &amp;amp;&amp;amp; packetReceived[12]==type[1]){/* Test sur le type de paquet Ethernet */&lt;br /&gt;
          if(packetReceived[14]!=0) PORTD |= (1&amp;lt;&amp;lt;5); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;5);&lt;br /&gt;
          if(packetReceived[15]!=0) PORTD |= (1&amp;lt;&amp;lt;6); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;6); &lt;br /&gt;
          if(packetReceived[16]!=0) PORTD |= (1&amp;lt;&amp;lt;7); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
          }	&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
    enc28j60FreeMemory();&lt;br /&gt;
    xSemaphoreGive( spiMutex );&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, j'ai codé la tâche pour envoyer un paquet Ethernet. Pour savoir quand l'envoyer, j'ai ajouté des boutons. J'ai premièrement écrit la fonction &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, pour savoir si un bouton est appuyé ou pas. Et puis, j'ai écrit une fonction &amp;lt;code&amp;gt;bouton_com&amp;lt;/code&amp;gt; pour tester si un bouton change d'état. &lt;br /&gt;
&lt;br /&gt;
La fonction de la tâche s'appelle &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai définit un tableau &amp;lt;code&amp;gt;packetToSend&amp;lt;/code&amp;gt;. Chaque fois, je vérifie l'état des boutons. Si cet état change, on prépare un paquet Ethernet à envoyer. J'utilise la fonction &amp;lt;code&amp;gt;enc28j60InitializeSend&amp;lt;/code&amp;gt; pour initialiser l'envoi. Et puis, j'utilise des &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans le paquet Ethernet. Ces valeurs sont les adresses de destination et de source, le type Ethernet et l'état des boutons.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 #define bouton(num) (((PINC &amp;amp; (1&amp;lt;&amp;lt;num))==0)?0:1)&lt;br /&gt;
&lt;br /&gt;
 int bouton_com(int num){&lt;br /&gt;
    int state=bouton(num);&lt;br /&gt;
    if(state!=laststate[num]){&lt;br /&gt;
      laststate[num]=state;&lt;br /&gt;
      return 1;&lt;br /&gt;
      }&lt;br /&gt;
    else return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthSendData( void * pvParameters ){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   unsigned char packetToSend[ETH_SEND]; &lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
   for( ;; ){&lt;br /&gt;
     if(bouton_com(0) || bouton_com(1)){&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60InitializeSend(); &lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        int size=0;&lt;br /&gt;
        memcpy(packetToSend+size,broadcast,sizeof(broadcast));&lt;br /&gt;
        size += sizeof(broadcast);&lt;br /&gt;
        memcpy(packetToSend+size,mac,sizeof(mac));&lt;br /&gt;
        size += sizeof(mac);&lt;br /&gt;
        memcpy(packetToSend+size,type,sizeof(type));&lt;br /&gt;
        size += sizeof(type);&lt;br /&gt;
        memcpy(packetToSend+size,laststate,sizeof(laststate));&lt;br /&gt;
        for(int j=0;j&amp;lt;ETH_SEND;j++) {&lt;br /&gt;
            while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
            enc28j60WriteByteSend(packetToSend[j]);&lt;br /&gt;
            xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60FinalizeSend();&lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        }		&lt;br /&gt;
       }        &lt;br /&gt;
    vTaskDelay( 50 / portTICK_PERIOD_MS );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme avec un montage à base de breadboard. Le montage comporte un Arduino Uno, un breakout ENC28J60 de JeeLabs et deux breadboards pour les LEDs et les boutons. Le programme marche ! Voici la photo du montage.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Montage de test]]&lt;br /&gt;
&lt;br /&gt;
Pour changer la couleur de la LEDs RGB on peut utiliser la commande ci-dessous (la LED passe au blanc).&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;00 10 10 10 10 10 00 01 02 03 04 05 11 11 01 01 01&amp;quot; | ./ether -s&lt;br /&gt;
&lt;br /&gt;
La commabnde &amp;lt;code&amp;gt;ether&amp;lt;/code&amp;gt; est celle utilisée en TP IMA4.&lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie FTDI est soudée par la suite. Elle fonctionne comme le montre les test ci-dessous qui télécharge un programme utilisant les LEDs sur la carte.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|programme téléversé par le FTDI]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent une par une]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie alimentation 5V et 3.3V fonctionne aussi comme le prouve les LEDs blanche (Vin), bleue (5V) et verte (3.3V).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation 5V]] &lt;br /&gt;
[[Fichier:1182172060.jpg|300px|thumb|right|avec alimentations 5V et 3.3V]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:1182172060.jpg&amp;diff=42716</id>
		<title>Fichier:1182172060.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:1182172060.jpg&amp;diff=42716"/>
				<updated>2017-05-19T17:54:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42715</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42715"/>
				<updated>2017-05-19T17:50:28Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
J'ai continué de développer les tâches sous FreeRTOS. &lt;br /&gt;
&lt;br /&gt;
D'abord, j'ai écrit les tâches pour faire clignoter deux LEDs à 1Hz et 2Hz. Ces tâches sont appelées &amp;lt;code&amp;gt;vTaskLED1&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskLED2&amp;lt;/code&amp;gt; et réalisent les deux fréquences. Ces tâches ne sont pas très compliqué. Les LEDs sont connectées au port D, donc, dans le début du programme, j'initialise le port D. Dans les fonctions &amp;lt;code&amp;gt;vTaskLED&amp;lt;/code&amp;gt;, je dois d'abord attendre une période de temps (pour les différentes fréquences, la période de temps est différente). Pour cela j'utilise, par exemple,  &amp;lt;code&amp;gt;vTaskDelay( 1000 /portTICK_PERIOD_MS)&amp;lt;/code&amp;gt;. Et puis, je modifie la valeur du port D, par exemple avec &amp;lt;code&amp;gt;PORTD ^=(1&amp;lt;&amp;lt;2)&amp;lt;/code&amp;gt;, pour faire changer l'état de la LED une fois.&lt;br /&gt;
&lt;br /&gt;
L'encadrant a accepté que ce travail continue avec FreeRTOS. Une première version des tâches de gestion des paquets Ethernet est écrite mais elle ne correspondait pas au sujet. Il est demandé de transformer ces tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lecture des paquets Ethernet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;. Je définis un tableau &amp;lt;code&amp;gt;uint8_t packetReceived[ETH_RCPT]&amp;lt;/code&amp;gt; pour stocker le paquet. Ce paquet comprend, l'adresse de destination (6 octets), l'adresse source (6 octets), le type de paquet (2 octets) et les données (3 octets pour note application). Les données comportent 3 octets pour contrôler 3 LEDs simples, les 3 LEDs simples constituent une LED multicouleurs.&lt;br /&gt;
&lt;br /&gt;
Je fais une boucle recevoir tous les octets du paquet. Je dois premièrement vérifier si un paquet Ethernet est arrivé. Après, j'utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis stocker les valeurs dans le tableau.&lt;br /&gt;
Après avoir stocké toutes les données dans le tableau, je vérifie le type de paquet. Si le type est correct, je vérifie les 3 dernièrs octets du tableau pour savoir comment mettre les LEDs correspondantes.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthReadData(void* pvParameters){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   int nb_ethernet = 0;&lt;br /&gt;
   unsigned char packetReceived[ETH_RCPT];&lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
    &lt;br /&gt;
   while(1){ &lt;br /&gt;
     while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
     nb_ethernet = enc28j60PacketReceive(); //Cheack if there is data in eth device&lt;br /&gt;
     xSemaphoreGive( spiMutex );&lt;br /&gt;
     if(nb_ethernet==0){ vTaskDelay( 5 / portTICK_PERIOD_MS ); continue; }&lt;br /&gt;
     if(nb_ethernet==64){&lt;br /&gt;
        int i;&lt;br /&gt;
        for(i=0;i&amp;lt;ETH_RCPT;i++){	&lt;br /&gt;
          while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
          packetReceived[i] = enc28j60ByteRead();&lt;br /&gt;
          xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
 &lt;br /&gt;
        /* Test sur l'adresse Ethernet source (fait par chip ENC28j60) */&lt;br /&gt;
 &lt;br /&gt;
        if(packetReceived[13]==type[0] &amp;amp;&amp;amp; packetReceived[12]==type[1]){/* Test sur le type de paquet Ethernet */&lt;br /&gt;
          if(packetReceived[14]!=0) PORTD |= (1&amp;lt;&amp;lt;5); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;5);&lt;br /&gt;
          if(packetReceived[15]!=0) PORTD |= (1&amp;lt;&amp;lt;6); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;6); &lt;br /&gt;
          if(packetReceived[16]!=0) PORTD |= (1&amp;lt;&amp;lt;7); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
          }	&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
    enc28j60FreeMemory();&lt;br /&gt;
    xSemaphoreGive( spiMutex );&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, j'ai codé la tâche pour envoyer un paquet Ethernet. Pour savoir quand l'envoyer, j'ai ajouté des boutons. J'ai premièrement écrit la fonction &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, pour savoir si un bouton est appuyé ou pas. Et puis, j'ai écrit une fonction &amp;lt;code&amp;gt;bouton_com&amp;lt;/code&amp;gt; pour tester si un bouton change d'état. &lt;br /&gt;
&lt;br /&gt;
La fonction de la tâche s'appelle &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai définit un tableau &amp;lt;code&amp;gt;packetToSend&amp;lt;/code&amp;gt;. Chaque fois, je vérifie l'état des boutons. Si cet état change, on prépare un paquet Ethernet à envoyer. J'utilise la fonction &amp;lt;code&amp;gt;enc28j60InitializeSend&amp;lt;/code&amp;gt; pour initialiser l'envoi. Et puis, j'utilise des &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans le paquet Ethernet. Ces valeurs sont les adresses de destination et de source, le type Ethernet et l'état des boutons.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 #define bouton(num) (((PINC &amp;amp; (1&amp;lt;&amp;lt;num))==0)?0:1)&lt;br /&gt;
&lt;br /&gt;
 int bouton_com(int num){&lt;br /&gt;
    int state=bouton(num);&lt;br /&gt;
    if(state!=laststate[num]){&lt;br /&gt;
      laststate[num]=state;&lt;br /&gt;
      return 1;&lt;br /&gt;
      }&lt;br /&gt;
    else return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthSendData( void * pvParameters ){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   unsigned char packetToSend[ETH_SEND]; &lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
   for( ;; ){&lt;br /&gt;
     if(bouton_com(0) || bouton_com(1)){&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60InitializeSend(); &lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        int size=0;&lt;br /&gt;
        memcpy(packetToSend+size,broadcast,sizeof(broadcast));&lt;br /&gt;
        size += sizeof(broadcast);&lt;br /&gt;
        memcpy(packetToSend+size,mac,sizeof(mac));&lt;br /&gt;
        size += sizeof(mac);&lt;br /&gt;
        memcpy(packetToSend+size,type,sizeof(type));&lt;br /&gt;
        size += sizeof(type);&lt;br /&gt;
        memcpy(packetToSend+size,laststate,sizeof(laststate));&lt;br /&gt;
        for(int j=0;j&amp;lt;ETH_SEND;j++) {&lt;br /&gt;
            while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
            enc28j60WriteByteSend(packetToSend[j]);&lt;br /&gt;
            xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60FinalizeSend();&lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        }		&lt;br /&gt;
       }        &lt;br /&gt;
    vTaskDelay( 50 / portTICK_PERIOD_MS );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme avec un montage à base de breadboard. Le montage comporte un Arduino Uno, un breakout ENC28J60 de JeeLabs et deux breadboards pour les LEDs et les boutons. Le programme marche ! Voici la photo du montage.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Montage de test]]&lt;br /&gt;
&lt;br /&gt;
Pour changer la couleur de la LEDs RGB on peut utiliser la commande ci-dessous (la LED passe au blanc).&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;00 10 10 10 10 10 00 01 02 03 04 05 11 11 01 01 01&amp;quot; | ./ether -s&lt;br /&gt;
&lt;br /&gt;
La commabnde &amp;lt;code&amp;gt;ether&amp;lt;/code&amp;gt; est celle utilisée en TP IMA4.&lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie FTDI est soudée par la suite. Elle fonctionne comme le montre les test ci-dessous qui télécharge un programme utilisant les LEDs sur la carte.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|programme téléversé par le FTDI]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent une par une]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie alimentation 5V et 3.3V fonctionne aussi comme le prouve les LEDs blanche (Vin), bleue (5V) et verte (3.3V).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation 5V]] &lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|right|avec alimentations 5V et 3.3V]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42714</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42714"/>
				<updated>2017-05-19T17:49:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
J'ai continué de développer les tâches sous FreeRTOS. &lt;br /&gt;
&lt;br /&gt;
D'abord, j'ai écrit les tâches pour faire clignoter deux LEDs à 1Hz et 2Hz. Ces tâches sont appelées &amp;lt;code&amp;gt;vTaskLED1&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskLED2&amp;lt;/code&amp;gt; et réalisent les deux fréquences. Ces tâches ne sont pas très compliqué. Les LEDs sont connectées au port D, donc, dans le début du programme, j'initialise le port D. Dans les fonctions &amp;lt;code&amp;gt;vTaskLED&amp;lt;/code&amp;gt;, je dois d'abord attendre une période de temps (pour les différentes fréquences, la période de temps est différente). Pour cela j'utilise, par exemple,  &amp;lt;code&amp;gt;vTaskDelay( 1000 /portTICK_PERIOD_MS)&amp;lt;/code&amp;gt;. Et puis, je modifie la valeur du port D, par exemple avec &amp;lt;code&amp;gt;PORTD ^=(1&amp;lt;&amp;lt;2)&amp;lt;/code&amp;gt;, pour faire changer l'état de la LED une fois.&lt;br /&gt;
&lt;br /&gt;
L'encadrant a accepté que ce travail continue avec FreeRTOS. Une première version des tâches de gestion des paquets Ethernet est écrite mais elle ne correspondait pas au sujet. Il est demandé de transformer ces tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lecture des paquets Ethernet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;. Je définis un tableau &amp;lt;code&amp;gt;uint8_t packetReceived[ETH_RCPT]&amp;lt;/code&amp;gt; pour stocker le paquet. Ce paquet comprend, l'adresse de destination (6 octets), l'adresse source (6 octets), le type de paquet (2 octets) et les données (3 octets pour note application). Les données comportent 3 octets pour contrôler 3 LEDs simples, les 3 LEDs simples constituent une LED multicouleurs.&lt;br /&gt;
&lt;br /&gt;
Je fais une boucle recevoir tous les octets du paquet. Je dois premièrement vérifier si un paquet Ethernet est arrivé. Après, j'utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis stocker les valeurs dans le tableau.&lt;br /&gt;
Après avoir stocké toutes les données dans le tableau, je vérifie le type de paquet. Si le type est correct, je vérifie les 3 dernièrs octets du tableau pour savoir comment mettre les LEDs correspondantes.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthReadData(void* pvParameters){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   int nb_ethernet = 0;&lt;br /&gt;
   unsigned char packetReceived[ETH_RCPT];&lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
    &lt;br /&gt;
   while(1){ &lt;br /&gt;
     while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
     nb_ethernet = enc28j60PacketReceive(); //Cheack if there is data in eth device&lt;br /&gt;
     xSemaphoreGive( spiMutex );&lt;br /&gt;
     if(nb_ethernet==0){ vTaskDelay( 5 / portTICK_PERIOD_MS ); continue; }&lt;br /&gt;
     if(nb_ethernet==64){&lt;br /&gt;
        int i;&lt;br /&gt;
        for(i=0;i&amp;lt;ETH_RCPT;i++){	&lt;br /&gt;
          while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
          packetReceived[i] = enc28j60ByteRead();&lt;br /&gt;
          xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
 &lt;br /&gt;
        /* Test sur l'adresse Ethernet source (fait par chip ENC28j60) */&lt;br /&gt;
 &lt;br /&gt;
        if(packetReceived[13]==type[0] &amp;amp;&amp;amp; packetReceived[12]==type[1]){/* Test sur le type de paquet Ethernet */&lt;br /&gt;
          if(packetReceived[14]!=0) PORTD |= (1&amp;lt;&amp;lt;5); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;5);&lt;br /&gt;
          if(packetReceived[15]!=0) PORTD |= (1&amp;lt;&amp;lt;6); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;6); &lt;br /&gt;
          if(packetReceived[16]!=0) PORTD |= (1&amp;lt;&amp;lt;7); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
          }	&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
    enc28j60FreeMemory();&lt;br /&gt;
    xSemaphoreGive( spiMutex );&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, j'ai codé la tâche pour envoyer un paquet Ethernet. Pour savoir quand l'envoyer, j'ai ajouté des boutons. J'ai premièrement écrit la fonction &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, pour savoir si un bouton est appuyé ou pas. Et puis, j'ai écrit une fonction &amp;lt;code&amp;gt;bouton_com&amp;lt;/code&amp;gt; pour tester si un bouton change d'état. &lt;br /&gt;
&lt;br /&gt;
La fonction de la tâche s'appelle &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai définit un tableau &amp;lt;code&amp;gt;packetToSend&amp;lt;/code&amp;gt;. Chaque fois, je vérifie l'état des boutons. Si cet état change, on prépare un paquet Ethernet à envoyer. J'utilise la fonction &amp;lt;code&amp;gt;enc28j60InitializeSend&amp;lt;/code&amp;gt; pour initialiser l'envoi. Et puis, j'utilise des &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans le paquet Ethernet. Ces valeurs sont les adresses de destination et de source, le type Ethernet et l'état des boutons.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 #define bouton(num) (((PINC &amp;amp; (1&amp;lt;&amp;lt;num))==0)?0:1)&lt;br /&gt;
&lt;br /&gt;
 int bouton_com(int num){&lt;br /&gt;
    int state=bouton(num);&lt;br /&gt;
    if(state!=laststate[num]){&lt;br /&gt;
      laststate[num]=state;&lt;br /&gt;
      return 1;&lt;br /&gt;
      }&lt;br /&gt;
    else return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthSendData( void * pvParameters ){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   unsigned char packetToSend[ETH_SEND]; &lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
   for( ;; ){&lt;br /&gt;
     if(bouton_com(0) || bouton_com(1)){&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60InitializeSend(); &lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        int size=0;&lt;br /&gt;
        memcpy(packetToSend+size,broadcast,sizeof(broadcast));&lt;br /&gt;
        size += sizeof(broadcast);&lt;br /&gt;
        memcpy(packetToSend+size,mac,sizeof(mac));&lt;br /&gt;
        size += sizeof(mac);&lt;br /&gt;
        memcpy(packetToSend+size,type,sizeof(type));&lt;br /&gt;
        size += sizeof(type);&lt;br /&gt;
        memcpy(packetToSend+size,laststate,sizeof(laststate));&lt;br /&gt;
        for(int j=0;j&amp;lt;ETH_SEND;j++) {&lt;br /&gt;
            while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
            enc28j60WriteByteSend(packetToSend[j]);&lt;br /&gt;
            xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60FinalizeSend();&lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        }		&lt;br /&gt;
       }        &lt;br /&gt;
    vTaskDelay( 50 / portTICK_PERIOD_MS );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme avec un montage à base de breadboard. Le montage comporte un Arduino Uno, un breakout ENC28J60 de JeeLabs et deux breadboards pour les LEDs et les boutons. Le programme marche ! Voici la photo du montage.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Montage de test]]&lt;br /&gt;
&lt;br /&gt;
Pour changer la couleur de la LEDs RGB on peut utiliser la commande ci-dessous (la LED passe au blanc).&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;00 10 10 10 10 10 00 01 02 03 04 05 11 11 01 01 01&amp;quot; | ./ether -s&lt;br /&gt;
&lt;br /&gt;
La commabnde &amp;lt;code&amp;gt;ether&amp;lt;/code&amp;gt; est celle utilisée en TP IMA4.&lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
La partie FTDI est soudée par la suite. Elle fonctionne comme le montre les test ci-dessous qui télécharge un programme utilisant les LEDs sur la carte.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|programme téléversé par le FTDI]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent une par une]]&lt;br /&gt;
&lt;br /&gt;
La partie alimentation 5V et 3.3V fonctionne aussi comme le prouve les LEDs blanche (Vin), bleue (5V) et orange (3.3V).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation 5V]] &lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|right|avec alimentations 5V et 3.3V]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42712</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42712"/>
				<updated>2017-05-19T17:41:01Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
J'ai continué de développer les tâches sous FreeRTOS. &lt;br /&gt;
&lt;br /&gt;
D'abord, j'ai écrit les tâches pour faire clignoter deux LEDs à 1Hz et 2Hz. Ces tâches sont appelées &amp;lt;code&amp;gt;vTaskLED1&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskLED2&amp;lt;/code&amp;gt; et réalisent les deux fréquences. Ces tâches ne sont pas très compliqué. Les LEDs sont connectées au port D, donc, dans le début du programme, j'initialise le port D. Dans les fonctions &amp;lt;code&amp;gt;vTaskLED&amp;lt;/code&amp;gt;, je dois d'abord attendre une période de temps (pour les différentes fréquences, la période de temps est différente). Pour cela j'utilise, par exemple,  &amp;lt;code&amp;gt;vTaskDelay( 1000 /portTICK_PERIOD_MS)&amp;lt;/code&amp;gt;. Et puis, je modifie la valeur du port D, par exemple avec &amp;lt;code&amp;gt;PORTD ^=(1&amp;lt;&amp;lt;2)&amp;lt;/code&amp;gt;, pour faire changer l'état de la LED une fois.&lt;br /&gt;
&lt;br /&gt;
L'encadrant a accepté que ce travail continue avec FreeRTOS. Une première version des tâches de gestion des paquets Ethernet est écrite mais elle ne correspondait pas au sujet. Il est demandé de transformer ces tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lecture des paquets Ethernet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;. Je définis un tableau &amp;lt;code&amp;gt;uint8_t packetReceived[ETH_RCPT]&amp;lt;/code&amp;gt; pour stocker le paquet. Ce paquet comprend, l'adresse de destination (6 octets), l'adresse source (6 octets), le type de paquet (2 octets) et les données (3 octets pour note application). Les données comportent 3 octets pour contrôler 3 LEDs simples, les 3 LEDs simples constituent une LED multicouleurs.&lt;br /&gt;
&lt;br /&gt;
Je fais une boucle recevoir tous les octets du paquet. Je dois premièrement vérifier si un paquet Ethernet est arrivé. Après, j'utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis stocker les valeurs dans le tableau.&lt;br /&gt;
Après avoir stocké toutes les données dans le tableau, je vérifie le type de paquet. Si le type est correct, je vérifie les 3 dernièrs octets du tableau pour savoir comment mettre les LEDs correspondantes.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthReadData(void* pvParameters){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   int nb_ethernet = 0;&lt;br /&gt;
   unsigned char packetReceived[ETH_RCPT];&lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
    &lt;br /&gt;
   while(1){ &lt;br /&gt;
     while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
     nb_ethernet = enc28j60PacketReceive(); //Cheack if there is data in eth device&lt;br /&gt;
     xSemaphoreGive( spiMutex );&lt;br /&gt;
     if(nb_ethernet==0){ vTaskDelay( 5 / portTICK_PERIOD_MS ); continue; }&lt;br /&gt;
     if(nb_ethernet==64){&lt;br /&gt;
        int i;&lt;br /&gt;
        for(i=0;i&amp;lt;ETH_RCPT;i++){	&lt;br /&gt;
          while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
          packetReceived[i] = enc28j60ByteRead();&lt;br /&gt;
          xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
 &lt;br /&gt;
        /* Test sur l'adresse Ethernet source (fait par chip ENC28j60) */&lt;br /&gt;
 &lt;br /&gt;
        if(packetReceived[13]==type[0] &amp;amp;&amp;amp; packetReceived[12]==type[1]){/* Test sur le type de paquet Ethernet */&lt;br /&gt;
          if(packetReceived[14]!=0) PORTD |= (1&amp;lt;&amp;lt;5); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;5);&lt;br /&gt;
          if(packetReceived[15]!=0) PORTD |= (1&amp;lt;&amp;lt;6); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;6); &lt;br /&gt;
          if(packetReceived[16]!=0) PORTD |= (1&amp;lt;&amp;lt;7); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
          }	&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
    enc28j60FreeMemory();&lt;br /&gt;
    xSemaphoreGive( spiMutex );&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, j'ai codé la tâche pour envoyer un paquet Ethernet. Pour savoir quand l'envoyer, j'ai ajouté des boutons. J'ai premièrement écrit la fonction &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, pour savoir si un bouton est appuyé ou pas. Et puis, j'ai écrit une fonction &amp;lt;code&amp;gt;bouton_com&amp;lt;/code&amp;gt; pour tester si un bouton change d'état. &lt;br /&gt;
&lt;br /&gt;
La fonction de la tâche s'appelle &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai définit un tableau &amp;lt;code&amp;gt;packetToSend&amp;lt;/code&amp;gt;. Chaque fois, je vérifie l'état des boutons. Si cet état change, on prépare un paquet Ethernet à envoyer. J'utilise la fonction &amp;lt;code&amp;gt;enc28j60InitializeSend&amp;lt;/code&amp;gt; pour initialiser l'envoi. Et puis, j'utilise des &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans le paquet Ethernet. Ces valeurs sont les adresses de destination et de source, le type Ethernet et l'état des boutons.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 #define bouton(num) (((PINC &amp;amp; (1&amp;lt;&amp;lt;num))==0)?0:1)&lt;br /&gt;
&lt;br /&gt;
 int bouton_com(int num){&lt;br /&gt;
    int state=bouton(num);&lt;br /&gt;
    if(state!=laststate[num]){&lt;br /&gt;
      laststate[num]=state;&lt;br /&gt;
      return 1;&lt;br /&gt;
      }&lt;br /&gt;
    else return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthSendData( void * pvParameters ){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   unsigned char packetToSend[ETH_SEND]; &lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
   for( ;; ){&lt;br /&gt;
     if(bouton_com(0) || bouton_com(1)){&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60InitializeSend(); &lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        int size=0;&lt;br /&gt;
        memcpy(packetToSend+size,broadcast,sizeof(broadcast));&lt;br /&gt;
        size += sizeof(broadcast);&lt;br /&gt;
        memcpy(packetToSend+size,mac,sizeof(mac));&lt;br /&gt;
        size += sizeof(mac);&lt;br /&gt;
        memcpy(packetToSend+size,type,sizeof(type));&lt;br /&gt;
        size += sizeof(type);&lt;br /&gt;
        memcpy(packetToSend+size,laststate,sizeof(laststate));&lt;br /&gt;
        for(int j=0;j&amp;lt;ETH_SEND;j++) {&lt;br /&gt;
            while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
            enc28j60WriteByteSend(packetToSend[j]);&lt;br /&gt;
            xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
        while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
        enc28j60FinalizeSend();&lt;br /&gt;
        xSemaphoreGive( spiMutex );&lt;br /&gt;
        }		&lt;br /&gt;
       }        &lt;br /&gt;
    vTaskDelay( 50 / portTICK_PERIOD_MS );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42707</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42707"/>
				<updated>2017-05-19T17:34:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
J'ai continué de développer les tâches sous FreeRTOS. &lt;br /&gt;
&lt;br /&gt;
D'abord, j'ai écrit les tâches pour faire clignoter deux LEDs à 1Hz et 2Hz. Ces tâches sont appelées &amp;lt;code&amp;gt;vTaskLED1&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskLED2&amp;lt;/code&amp;gt; et réalisent les deux fréquences. Ces tâches ne sont pas très compliqué. Les LEDs sont connectées au port D, donc, dans le début du programme, j'initialise le port D. Dans les fonctions &amp;lt;code&amp;gt;vTaskLED&amp;lt;/code&amp;gt;, je dois d'abord attendre une période de temps (pour les différentes fréquences, la période de temps est différente). Pour cela j'utilise, par exemple,  &amp;lt;code&amp;gt;vTaskDelay( 1000 /portTICK_PERIOD_MS)&amp;lt;/code&amp;gt;. Et puis, je modifie la valeur du port D, par exemple avec &amp;lt;code&amp;gt;PORTD ^=(1&amp;lt;&amp;lt;2)&amp;lt;/code&amp;gt;, pour faire changer l'état de la LED une fois.&lt;br /&gt;
&lt;br /&gt;
L'encadrant a accepté que ce travail continue avec FreeRTOS. Une première version des tâches de gestion des paquets Ethernet est écrite mais elle ne correspondait pas au sujet. Il est demandé de transformer ces tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lecture des paquets Ethernet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;. Je définis un tableau &amp;lt;code&amp;gt;uint8_t packetReceived[ETH_RCPT]&amp;lt;/code&amp;gt; pour stocker le paquet. Ce paquet comprend, l'adresse de destination (6 octets), l'adresse source (6 octets), le type de paquet (2 octets) et les données (3 octets pour note application). Les données comportent 3 octets pour contrôler 3 LEDs simples, les 3 LEDs simples constituent une LED multicouleurs.&lt;br /&gt;
&lt;br /&gt;
Je fais une boucle recevoir tous les octets du paquet. Je dois premièrement vérifier si un paquet Ethernet est arrivé. Après, j'utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis stocker les valeurs dans le tableau.&lt;br /&gt;
Après avoir stocké toutes les données dans le tableau, je vérifie le type de paquet. Si le type est correct, je vérifie les 3 dernièrs octets du tableau pour savoir comment mettre les LEDs correspondantes.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
&lt;br /&gt;
 void vTaskEthReadData(void* pvParameters){&lt;br /&gt;
   (void)pvParameters;&lt;br /&gt;
   int nb_ethernet = 0;&lt;br /&gt;
   unsigned char packetReceived[ETH_RCPT];&lt;br /&gt;
   TickType_t xTicksToWait = 10;&lt;br /&gt;
    &lt;br /&gt;
   while(1){ &lt;br /&gt;
     while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
     nb_ethernet = enc28j60PacketReceive(); //Cheack if there is data in eth device&lt;br /&gt;
     xSemaphoreGive( spiMutex );&lt;br /&gt;
     if(nb_ethernet==0){ vTaskDelay( 5 / portTICK_PERIOD_MS ); continue; }&lt;br /&gt;
     if(nb_ethernet==64){&lt;br /&gt;
        int i;&lt;br /&gt;
        for(i=0;i&amp;lt;ETH_RCPT;i++){	&lt;br /&gt;
          while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
          packetReceived[i] = enc28j60ByteRead();&lt;br /&gt;
          xSemaphoreGive( spiMutex );&lt;br /&gt;
          }&lt;br /&gt;
 &lt;br /&gt;
        /* Test sur l'adresse Ethernet source (fait par chip ENC28j60) */&lt;br /&gt;
 &lt;br /&gt;
        if(packetReceived[13]==type[0] &amp;amp;&amp;amp; packetReceived[12]==type[1]){/* Test sur le type de paquet Ethernet */&lt;br /&gt;
          if(packetReceived[14]!=0) PORTD |= (1&amp;lt;&amp;lt;5); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;5);&lt;br /&gt;
          if(packetReceived[15]!=0) PORTD |= (1&amp;lt;&amp;lt;6); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;6); &lt;br /&gt;
          if(packetReceived[16]!=0) PORTD |= (1&amp;lt;&amp;lt;7); else PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;7);&lt;br /&gt;
          }	&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    while( xSemaphoreTake( spiMutex, xTicksToWait ) != pdTRUE ){  }&lt;br /&gt;
    enc28j60FreeMemory();&lt;br /&gt;
    xSemaphoreGive( spiMutex );&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42706</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42706"/>
				<updated>2017-05-19T17:32:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
J'ai continué de développer les tâches sous FreeRTOS. &lt;br /&gt;
&lt;br /&gt;
D'abord, j'ai écrit les tâches pour faire clignoter deux LEDs à 1Hz et 2Hz. Ces tâches sont appelées &amp;lt;code&amp;gt;vTaskLED1&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskLED2&amp;lt;/code&amp;gt; et réalisent les deux fréquences. Ces tâches ne sont pas très compliqué. Les LEDs sont connectées au port D, donc, dans le début du programme, j'initialise le port D. Dans les fonctions &amp;lt;code&amp;gt;vTaskLED&amp;lt;/code&amp;gt;, je dois d'abord attendre une période de temps (pour les différentes fréquences, la période de temps est différente). Pour cela j'utilise, par exemple,  &amp;lt;code&amp;gt;vTaskDelay( 1000 /portTICK_PERIOD_MS)&amp;lt;/code&amp;gt;. Et puis, je modifie la valeur du port D, par exemple avec &amp;lt;code&amp;gt;PORTD ^=(1&amp;lt;&amp;lt;2)&amp;lt;/code&amp;gt;, pour faire changer l'état de la LED une fois.&lt;br /&gt;
&lt;br /&gt;
L'encadrant a accepté que ce travail continue avec FreeRTOS. Une première version des tâches de gestion des paquets Ethernet est écrite mais elle ne correspondait pas au sujet. Il est demandé de transformer ces tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lecture des paquets Ethernet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;. Je définis un tableau &amp;lt;code&amp;gt;uint8_t packetReceived[ETH_RCPT]&amp;lt;/code&amp;gt; pour stocker le paquet. Ce paquet comprend, l'adresse de destination (6 octets), l'adresse source (6 octets), le type de paquet (2 octets) et les données (3 octets pour note application). Les données comportent 3 octets pour contrôler 3 LEDs simples, les 3 LEDs simples constituent une LED multicouleurs.&lt;br /&gt;
&lt;br /&gt;
Je fais une boucle recevoir tous les octets du paquet. Je dois premièrement vérifier si un paquet Ethernet est arrivé. Après, j'utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis stocker les valeurs dans le tableau.&lt;br /&gt;
Après avoir stocké toutes les données dans le tableau, je vérifie le type de paquet. Si le type est correct, je vérifie les 3 dernièrs octets du tableau pour savoir comment mettre les LEDs correspondantes.&lt;br /&gt;
&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|Programme lecture]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42705</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42705"/>
				<updated>2017-05-19T17:26:56Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
J'ai continué de développer les tâches sous FreeRTOS. &lt;br /&gt;
&lt;br /&gt;
D'abord, j'ai écrit les tâches pour faire clignoter deux LEDs à 1Hz et 2Hz. Ces tâches sont appelées &amp;lt;code&amp;gt;vTaskLED1&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskLED2&amp;lt;/code&amp;gt; et réalisent les deux fréquences. Ces tâches ne sont pas très compliqué. Les LEDs sont connectées au port D, donc, dans le début du programme, j'initialise le port D. Dans les fonctions &amp;lt;code&amp;gt;vTaskLED&amp;lt;/code&amp;gt;, je dois d'abord attendre une période de temps (pour les différentes fréquences, la période de temps est différente). Pour cela j'utilise, par exemple,  &amp;lt;code&amp;gt;vTaskDelay( 1000 /portTICK_PERIOD_MS)&amp;lt;/code&amp;gt;. Et puis, je modifie la valeur du port D, par exemple avec &amp;lt;code&amp;gt;PORTD ^=(1&amp;lt;&amp;lt;2)&amp;lt;/code&amp;gt;, pour faire changer l'état de la LED une fois.&lt;br /&gt;
&lt;br /&gt;
L'encadrant a accepté que ce travail continue avec FreeRTOS. Une première version des tâches de gestion des paquets Ethernet est écrite mais elle ne correspondait pas au sujet. Il est demandé de transformer ces tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42695</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42695"/>
				<updated>2017-05-19T17:18:41Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 4 &amp;amp; 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur. J'ai ensuite préféré utiliser FreeRTOS plutôt que l'ordonnanceur des professeurs pour les TPs de système.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42693</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42693"/>
				<updated>2017-05-19T17:17:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 4 &amp;amp; 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heights=200px&amp;gt;&lt;br /&gt;
Fichier:1.png|Schématique Arduino duemilanove&lt;br /&gt;
Fichier:2.png|Schématique LM1117IMPX-5&lt;br /&gt;
Fichier:3.png|Schématique LD1117AS-3.3&lt;br /&gt;
Fichier:4.png|Schématique ENC28J60&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42690</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42690"/>
				<updated>2017-05-19T17:15:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 4 &amp;amp; 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300px heights=300px&amp;gt;&lt;br /&gt;
Fichier:1.png|&lt;br /&gt;
Fichier:2.png|&lt;br /&gt;
Fichier:3.png|&lt;br /&gt;
Fichier:4.png|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42686</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42686"/>
				<updated>2017-05-19T17:02:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 4 &amp;amp; 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser une schématique de TaaraLabs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:2.png|300px|thumb|right|1]]&lt;br /&gt;
[[Fichier:3.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:4.png|200px|thumb|right|1]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42684</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42684"/>
				<updated>2017-05-19T17:01:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Choix du matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
&lt;br /&gt;
Voici reference designe:&lt;br /&gt;
[[Fichier:1.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:2.png|300px|thumb|right|1]]&lt;br /&gt;
[[Fichier:3.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:4.png|200px|thumb|right|1]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42683</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42683"/>
				<updated>2017-05-19T17:00:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Choix du matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Référence !! Description &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|Convertisseur de niveaux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|Contrôleur Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|Régulateur 5V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LD1117AS-3.3&lt;br /&gt;
|Régulateur 3,3V&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328p&lt;br /&gt;
|Microcontrôleur&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|FTDI USB/série&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|Diode&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LEDs, Résistances, Capacités (voir projet Fritzing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
&lt;br /&gt;
Voici reference designe:&lt;br /&gt;
[[Fichier:1.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:2.png|300px|thumb|right|1]]&lt;br /&gt;
[[Fichier:3.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:4.png|200px|thumb|right|1]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42682</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42682"/>
				<updated>2017-05-19T16:53:42Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 4 &amp;amp; 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
&lt;br /&gt;
Voici reference designe:&lt;br /&gt;
[[Fichier:1.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:2.png|300px|thumb|right|1]]&lt;br /&gt;
[[Fichier:3.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:4.png|200px|thumb|right|1]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42681</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42681"/>
				<updated>2017-05-19T16:53:09Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 4 &amp;amp; 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
&lt;br /&gt;
Voici reference designe:&lt;br /&gt;
[[Fichier:1.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:2.png|300px|thumb|right|1]]&lt;br /&gt;
[[Fichier:3.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:4.png|300px|thumb|right|1]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42680</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42680"/>
				<updated>2017-05-19T16:52:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 4 &amp;amp; 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
&lt;br /&gt;
Voici reference designe:&lt;br /&gt;
[[Fichier:1.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:2.png|300px|thumb|right|1]]&lt;br /&gt;
[[Fichier:3.png|300px|thumb|left|1]]&lt;br /&gt;
[[Fichier:4.png|300px|thumb|right|1]]&lt;br /&gt;
&lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:4.png&amp;diff=42677</id>
		<title>Fichier:4.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:4.png&amp;diff=42677"/>
				<updated>2017-05-19T16:49:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:3.png&amp;diff=42676</id>
		<title>Fichier:3.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:3.png&amp;diff=42676"/>
				<updated>2017-05-19T16:48:47Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : a téléversé une nouvelle version de « Fichier:3.png »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:1.png&amp;diff=42675</id>
		<title>Fichier:1.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:1.png&amp;diff=42675"/>
				<updated>2017-05-19T16:48:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : a téléversé une nouvelle version de « Fichier:1.png »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avec récupération des ombres&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:2.png&amp;diff=42674</id>
		<title>Fichier:2.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:2.png&amp;diff=42674"/>
				<updated>2017-05-19T16:48:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : a téléversé une nouvelle version de « Fichier:2.png »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sans récupération des ombres&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:1.png&amp;diff=42673</id>
		<title>Fichier:1.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:1.png&amp;diff=42673"/>
				<updated>2017-05-19T16:46:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : a téléversé une nouvelle version de « Fichier:1.png »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avec récupération des ombres&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42667</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42667"/>
				<updated>2017-05-19T16:34:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42666</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42666"/>
				<updated>2017-05-19T16:34:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|center|avec alimentation de pile]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42665</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42665"/>
				<updated>2017-05-19T16:33:32Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
[[Fichier:617541860.jpg|300px|thumb|left|capture d'écran]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:617541860.jpg&amp;diff=42664</id>
		<title>Fichier:617541860.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:617541860.jpg&amp;diff=42664"/>
				<updated>2017-05-19T16:32:10Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42663</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42663"/>
				<updated>2017-05-19T16:29:35Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 &amp;amp; 5===&lt;br /&gt;
&lt;br /&gt;
J'ai écrit un premier programme pour les tâches de LEDs mais il n'utilisait pas l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
J'ai aussi essayé de vérifier la carte mais il est difficile de trouver des references design pour les différents circuits de la carte. Ces circuits sont :&lt;br /&gt;
* LD1117AS 3.3V, un régulateur de tension 3,3V ;&lt;br /&gt;
* LM1117IMPX-5, un régulateur de tension 5V ;&lt;br /&gt;
* un microcontrôleur ATMega328p ;&lt;br /&gt;
* un contrôleur Ethernet ENC28J60 ;&lt;br /&gt;
* un convertisseur USB série FT232RL.&lt;br /&gt;
&lt;br /&gt;
J'ai trouvé les references design pour les deux régulateurs. Pour le FT232RL et le ATMega328p il est possible d'utiliser la schematique de l'Arduino duemilanove. Enfin pour le ENC28J60 on peut utiliser la schématique de la carte de JeeLabs.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42662</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42662"/>
				<updated>2017-05-19T16:23:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|500px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42661</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42661"/>
				<updated>2017-05-19T16:22:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|left|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|right|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42658</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42658"/>
				<updated>2017-05-19T16:03:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42657</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42657"/>
				<updated>2017-05-19T16:02:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Choix du matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42656</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42656"/>
				<updated>2017-05-19T16:01:37Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de &amp;lt;code&amp;gt;bouton&amp;lt;/code&amp;gt;, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt;. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42655</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42655"/>
				<updated>2017-05-19T16:00:26Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise &amp;lt;code&amp;gt;enc28j60ByteRead&amp;lt;/code&amp;gt; pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42654</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42654"/>
				<updated>2017-05-19T15:58:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|LEDs clignotent un par un]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42653</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42653"/>
				<updated>2017-05-19T15:56:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:1731258140.jpg|300px|thumb|right|capture d'écran]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:1731258140.jpg&amp;diff=42652</id>
		<title>Fichier:1731258140.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:1731258140.jpg&amp;diff=42652"/>
				<updated>2017-05-19T15:55:26Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42651</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42651"/>
				<updated>2017-05-19T15:53:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:shan.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Shan.png&amp;diff=42650</id>
		<title>Fichier:Shan.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Shan.png&amp;diff=42650"/>
				<updated>2017-05-19T15:52:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42648</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42648"/>
				<updated>2017-05-19T15:42:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadboard. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42647</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42647"/>
				<updated>2017-05-19T15:41:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42646</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42646"/>
				<updated>2017-05-19T15:40:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Choix du matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Enc28j60&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117IMPX-5&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|ATMEGA328 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|LM1117&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|FT232RL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Diode&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n&lt;br /&gt;
|LED, Resistance, Capacité&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42645</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42645"/>
				<updated>2017-05-19T15:36:02Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Choix du matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|TXB0104 &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42643</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42643"/>
				<updated>2017-05-19T15:35:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Choix du matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42641</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42641"/>
				<updated>2017-05-19T15:33:45Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Choix du matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Arduino&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42640</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42640"/>
				<updated>2017-05-19T15:32:37Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Choix du matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42638</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42638"/>
				<updated>2017-05-19T15:31:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Synthèse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42636</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42636"/>
				<updated>2017-05-19T15:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Synthèse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Effectué&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|A faire&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|A faire&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectuer une partie&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42634</id>
		<title>IMA4 2016/2017 EC1</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2016/2017_EC1&amp;diff=42634"/>
				<updated>2017-05-19T15:28:56Z</updated>
		
		<summary type="html">&lt;p&gt;Mluo : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du Projet===&lt;br /&gt;
&lt;br /&gt;
Le projet sera fait en utilisant un PC portable pour rendre compte de l'avancé de travail au travers d'un Wiki installé sur ce PC mais aussi pour développer le nouvel ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
La nouvelle plateforme sera réalisé sous la forme d'une carte électronique mais dans l'attente de la réalisation de la carte, un prototype à base d'arduino et de carte JeeLabs pourra être utilisé.&lt;br /&gt;
 &lt;br /&gt;
Pour être précis, le travail à réaliser est décrit ci-dessous.&lt;br /&gt;
&lt;br /&gt;
# Configurer le Wiki de type mediawiki présent sur PC portable, recopier le sujet du projet sur ce Wiki et préparer la structure de la page pour les futurs comptes-rendu.&lt;br /&gt;
# Router la carte électronique de la  plateforme en partant de la carte réalisée dans le projet IMA5 &amp;quot;P19 Relai Ethernet LoRa&amp;quot;. Prendre la version réalisée sous Frizing en retirant la Partie LoRa. Prenez soin d'ajouter quatre LEDs et quelques boutons commandées par le micro-contrôleur.&lt;br /&gt;
# Modifier l'ordonnanceur fourni pour utiliser le contrôleur Ethernet ENC28j60. Utilisez le bibliotheque ENC28j60 du projet IMA5 p19. L'ordonnanceur doit gérer les conflits sur le bus SPI. Les processus que l'ordonnanceur doit faire tourner sont:&lt;br /&gt;
## un processus pour faire clignoter une première LED à 1Hz.&lt;br /&gt;
## un processus pour faire clignoter une seconde LED à 2Hz.&lt;br /&gt;
## un processus pour envoyer des caractères sur le port série.&lt;br /&gt;
## un processus pour analyser les paquets Ethernet reçus et faire briller une LED multicouleur suivant les données du paquet Ethernet.&lt;br /&gt;
## un processus pour envoyer un paquet Ethernet à chaque fois que l'état d'un des deux boutons est modifié.&lt;br /&gt;
&lt;br /&gt;
====Objectif====&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Choix du matériel===&lt;br /&gt;
Arduino *1;&lt;br /&gt;
Enc28j60 *1;&lt;br /&gt;
LM1117IMPX-5 *1;&lt;br /&gt;
ATMEGA328 *1;&lt;br /&gt;
LM1117 *1;&lt;br /&gt;
TXB0104 *1;&lt;br /&gt;
FT232RL *1;&lt;br /&gt;
Diode *1;&lt;br /&gt;
LED, Resistance, Capacité&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantité !! Description !! Vendeur !! Fabricant !! Référence Fabricant !! URL &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Connecteur RJ45&lt;br /&gt;
| Gotronic&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avancée du projet==&lt;br /&gt;
&lt;br /&gt;
=== Synthèse ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot;| Tâche&lt;br /&gt;
|Etat&lt;br /&gt;
|Commentaire&lt;br /&gt;
|-&lt;br /&gt;
|Installation et configuration du Wiki&lt;br /&gt;
|Effectué&lt;br /&gt;
|Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Alimentation du Wiki&lt;br /&gt;
|En cours &lt;br /&gt;
|Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Routage de la carte électronique&lt;br /&gt;
|Première version terminée&lt;br /&gt;
|Ebauche par Manlu Luo, corrigé par Xavier Redon&lt;br /&gt;
|-&lt;br /&gt;
|Vérification de la carte électronique avant tirage&lt;br /&gt;
|Effectué&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Réalisation du prototype&lt;br /&gt;
|A faire&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|Réalisation de la carte électronique&lt;br /&gt;
|A faire&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Modification de la bibliothèque SPI&lt;br /&gt;
|modifié&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ecriture des nouvelles tâches&lt;br /&gt;
|Effectuer une partie&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Test de l'ordonnanceur&lt;br /&gt;
|Tester programmes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Semaine 1 ===&lt;br /&gt;
&lt;br /&gt;
J'ai configuré le Wiki de type mediaWiki présent sur le PC portable. Après avoir créé la page principale, j'ai écrit le cahier des charges et j'ai commencé le projet.&lt;br /&gt;
&lt;br /&gt;
J'ai lu le sujet du projet et analysé les étapes nécessaires pour réaliser le projet. J'ai essayé de concevoir la carte électronique sur Fritzing, mais je n'arrive pas à lancer le logiciel Fritzing.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Le logiciel Fritzing peut se lancer par le menu applications, sous-menu Développement.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2===&lt;br /&gt;
&lt;br /&gt;
J'ai modifié la carte électronique en me basant sur le projet IMA5 [[P19 Relai Ethernet Lora ]]. J'ai supprimé la partie LoRa et ajouté 4 LEDs sur des sorties du micro-contrôleur.&lt;br /&gt;
&lt;br /&gt;
j'ai commencé analysé le programme d'ordonnancement fournit et essayé comprendre le but de chaque fonction. Les fichiers du programme sont :&lt;br /&gt;
* iic.c, iic.h -&amp;gt; Bibliothèque I2C (inutile pour mon projet)&lt;br /&gt;
* iic_matrix.c, iic_matrix.h -&amp;gt; Bibliothèque pour les matrices I2C (inutile pour mon projet)&lt;br /&gt;
* scheduler.c, scheduler_private.h, scheduler_public.h -&amp;gt; Fichiers pour l'ordonnanceur lui-même, contient la fonction d'interruption ISR et la fonction d'ordonnancement scheduler() qui implante l'algorithme du tourniquet&lt;br /&gt;
* semaphore.c, semaphore.h -&amp;gt; Fichier pour les sémaphores permettant à plusieurs processus d'accéder proprement au port série et au bus SPI, ce  n'est pas fondamental dans mon projet&lt;br /&gt;
* serial.c, serial.h -&amp;gt; Fonction d'initialisation et d'envoi de caractère sur le port série, nécessaire pour mon projet.&lt;br /&gt;
* spi.c, spi.h -&amp;gt; Fonction de gestion du bus SPI, il y a qu'une fonction d'envoi de caractère sur le bus, il faut y ajouter les fonctions plus complexes utilisées pour l'ENC28J60&lt;br /&gt;
* spi_display.c, spi_display.h -&amp;gt; Fichier pour l'affichage sur l'afficheur 7 segments, inutile dans mon projet&lt;br /&gt;
* spi_matrix.c, spi_matrix.h -&amp;gt; Fichier pour l'affichage sur la matrice de LEDs, inutile dans mon projet&lt;br /&gt;
* tasks.c, tasks.h -&amp;gt; Fichier comportant tous les processus à lancer sous forme de fonctions, je doit supprimer les fonctions inutiles pour mon projet et ajouter les nouvelles&lt;br /&gt;
* timer.c, timer.h -&amp;gt; Fichier pour la configuration du minuteur, indispensable pour l'ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3===&lt;br /&gt;
&lt;br /&gt;
J'ai continué à modifier la carte électronique sur Fritzing. J'ai changé la position des LEDs et d'un grand nombre d'autres composants. En effet, après suppression de la partie LoRa, il fallait diminuer la surface de la carte.&lt;br /&gt;
&lt;br /&gt;
J'ai commencé à lire les programmes. J'ai compris les fichiers de gestion de la matrice de LEDs mais ces fichiers ne sont pas utiles pour le projet.&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas comment mettre mon fichier Fritzing sur ce Wiki.&lt;br /&gt;
&lt;br /&gt;
REX&amp;gt; Il faut se connecter et cliquer sur &amp;quot;Importer un fichier&amp;quot;. Il fallait aussi changer des éléments de configuration de mediawiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La schématique et le circuit sont visibles ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Ether4_schem.jpg|400px|thumb|center|schéma de théorie]]&lt;br /&gt;
[[Fichier:ether4_PCB.png|400px|thumb|center|PCB circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4===&lt;br /&gt;
j'ai fini la vérification de la carte et je pense il y a pas de problème de la carte maintenant parce que il a marché sur la simulation. Cette semaine,j'ai aussi fini une partie de programme. J'ai écrit le programme pour faire clignoter les LEDs.&lt;br /&gt;
&lt;br /&gt;
=== Semaine 5===&lt;br /&gt;
Je fait le reference designer cette semaine.&lt;br /&gt;
LD1117AS  3.3V&lt;br /&gt;
The LD1117A is a LOW DROP Voltage Regulator able to provide up to 1A of output current, available even in adjustable version.&lt;br /&gt;
&lt;br /&gt;
LM1117IMPX-5&lt;br /&gt;
This is a series of low dropout voltage regulators witha dropout of 1,2V at 800mA of load current. The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference assure output voltage accuracy to within 1%. &lt;br /&gt;
&lt;br /&gt;
ATMEGA328 &lt;br /&gt;
This package conforms to JEDEC reference MS-026,Variation ABA.Dimension D1 and E1 do not include mold protrusion. Allowable protrusion is 0.25mm per side. Dimensions D1 and E1 are maximum plastic body size dimensions including mold mismatch. Lead coplanarity is 0.10mm maximum. &lt;br /&gt;
&lt;br /&gt;
ENC28J60&lt;br /&gt;
The ENC28J60 is a stand-alone Ethenet controller with an industry standard Serial Peripheral Interface(SPI). It is designed to serve as an Ethernet network interface for any controller equipped with SPI.&lt;br /&gt;
  &lt;br /&gt;
=== semaine 6 ===&lt;br /&gt;
&lt;br /&gt;
Il est demandé de transformer les tâches &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; pour qu'elles aient le comportement attendu.&lt;br /&gt;
&lt;br /&gt;
La tâche &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt; ne doit accepter que des trames avec trois octets de données et utiliser ces octets pour l'état de la LED multicouleurs. De même la tâche &amp;lt;code&amp;gt;vTaskEthSendData&amp;lt;/code&amp;gt; doit envoyer un octet de donnée comportant l'état des boutons (uniquement quand un état change).&lt;br /&gt;
&lt;br /&gt;
On choisit 0x1111 comme type pour ces paquets Ethernet.&lt;br /&gt;
&lt;br /&gt;
Prenons quelques exemples :&lt;br /&gt;
&lt;br /&gt;
* un paquet Ethernet de 100 octets est reçu : il est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octets est reçu mais le type est 0x806, le paquet est supprimé&lt;br /&gt;
* un paquet Ethernet de 17 octet et de type 0x1111 est reçu, les octets 15, 16 et 17 sont examinés et la LED est mise dans l'état correspondant couleurs RGB de ces 3 octets.&lt;br /&gt;
* un bouton est appuyé, un paquet Ethernet de 15 octets est envoyé, l'adresse Ethernet destination est &amp;lt;code&amp;gt;ff:ff:ff:ff:ff:ff&amp;lt;/code&amp;gt; le type est 0x1111 et l'octet de donnée est tel que le bit correspondant au bouton est à 1.&lt;br /&gt;
&lt;br /&gt;
D'abord,je modifie la code de partie de clignoter deux LEDs à 1Hz et 2 Hz. Je crée la tache de vTaskLED1 et vTaskLED2 pour réaliser les deux fréquences. La tache pour clignoter n'est pas très compliqué. J'ai lié les LEDs dans la port D, donc, dans la début de programme, dans la fonction setup(), je initialise la port D. Dans la fonction vTaskLED, je doit premièrement attendre une période de temps, pour différent fréquence, la période de temps est différent. Je utilise vTaskDelay( 1000 /portTICK_PERIOD_MS). Et puis, je donne la valeur dans port D, PORTD ^=(1&amp;lt;&amp;lt;2), pour faire clignoter une fois. Pour éviter &amp;quot;warning&amp;quot; , j'ajout (void)pvParameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== semaine 7 ===&lt;br /&gt;
Pour la partie lire le paquet, j'écris la fonction  &amp;lt;code&amp;gt;vTaskEthReadData&amp;lt;/code&amp;gt;, je utilise pvParameters pour passer les paramètres. Je définit un tableau packetReceived[ETH_RCPT] pour garder la adresse de destination(6 otcs), la adresse de source(6 octs), la type de paquet(2 octs) et les données(3 octs). Les donées comporte 3 octs pour contrôler 3 LEDs simples, les 3 LEDs simples constituent un LED multicouleur.&lt;br /&gt;
Je fait un boucle pour faire le réception de paquet. Je doit premièrement vérifier s'il y a des données dans eth dispositif. Après, je utilise enc28j60ByteRead pour lire les données un octet par un octet et puis donner les valeurs dans la tableau.&lt;br /&gt;
Après avoir accepté tous les données dans la tableau, je vérifie le type de paquet. Si la type est correct, je vérifie le état de 3 dernières octets de la tableau pour contrôler si on doit allumer les LEDs correspondant.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:prolire.png|400px|thumb|center|soudage]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
Après, je fait la partie pour envoyer la paquet. Pour recevoir un signal de l'envoyer, je ajoute les boutons. Je premièrement écrit la fonction de bouton, bouton(num) pour valider si le bouton est appuyé ou pas. Et puis, je écrit une fonction de bouton_com pour tester s'il y a le montant ou descendant du bouton. &lt;br /&gt;
&lt;br /&gt;
Pour réaliser le but de envoyer paquet, j'écrit la fonction de vTaskEthSendData. J'ai un tableau packetToSend. Chaque fois, je vérifie le résultat de la bouton_com. Si l'état de bouton est changé, on commence l'envoyer. Je utilise enc28j60InitializeSend pour initialiser les préparation. Et puis, je utilise memcpy pour copier les valeurs dans un table vers un autre. Je copie les adresse de destination,de source et l'état de bouton vers un pointeur(un tableau) packetToSend.&lt;br /&gt;
Voici le programme:&lt;br /&gt;
[[Fichier:bouton.png|300px|thumb|center|programme de bouton]]&lt;br /&gt;
[[Fichier:send.png|400px|thumb|center|programme de envoyer]]&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
Après j'ai fini le programme, je teste le programme sur breadborad. Et le programme marche sur le breadboard, voici est la photo de breadboard.&lt;br /&gt;
[[Fichier:1195690904.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
&lt;br /&gt;
Après la conception de la dernière version du PCB, la carte est envoyée à la fabrication. Je peux ensuite souder les composants. Voici une photo de la carte soudée au four.&lt;br /&gt;
[[Fichier:1851020913.jpg|400px|thumb|center|Carte réalisée]] &lt;br /&gt;
Mais quand on essaye la carte, elle ne fonctionne pas. Pour corriger, on utilise une nouvelle carte avec juste la partie Microcontrôleur soudée. On essaye cette partie avec logiciel Arduino. Voici la capture d'écran montrant qu'il a été possible de transférer l'amorce sur le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Screenshot_2017-05-19_16-42-22.png|300px|thumb|left|capture d'écran]] &lt;br /&gt;
[[Fichier:949304235.jpg|400px|thumb|right|carte partiellement soudée avec un Arduino Uno comme programmateur]]&lt;br /&gt;
&lt;br /&gt;
=== Fichiers Rendus ===&lt;br /&gt;
Code:[[Fichier:OrdonnanceurPrincipal.zip]]&lt;/div&gt;</summary>
		<author><name>Mluo</name></author>	</entry>

	</feed>