Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2015:enc28j60

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2015:enc28j60 [2016/01/15 20:05]
Martin Štěpnička [Použitý hardware]
2015:enc28j60 [2016/01/16 02:41] (aktuální)
Martin Štěpnička [Zdrojový kód]
Řádek 14: Řádek 14:
 {{:​2015:​enc28j60:​enc28j60.jpg?​275x169 | Arduino kit ENC28J60}} {{:​2015:​enc28j60:​enc28j60.jpg?​275x169 | Arduino kit ENC28J60}}
    obr.2 Arduino kit ENC28J60 ​   ​    obr.2 Arduino kit ENC28J60 ​   ​
 +== Tabulka zapojení pinů ==
  
 +^ FDRM-KL25Z ^ ENC28J60 ^ 
 +| PTD3       | MISO     |
 +| PTD2       | MOSI     |
 +| PTC5       | SCK      |
 +| PTD0       | CS       |
 +| 3V3        | VCC      |
 +| GND        | GND      |
 ===== Použitý software ​ ===== ===== Použitý software ​ =====
-Řídicí program je vytvářen ​a kompilován ve webovém vývojovém prostředí mbed.org . Tento výběr byl učiněn kvůli absenci nutnosti instalace prostředí na PC a s tím možné komplikace. Dále tak bylo proto, že prostředí má velikou podporu komunity a mnoho knihoven. Jednou z nich je právě ​použita ​knihovna UIPEthernet. Jejím použitím je zajištěna komunikace ​s modulem ENC28J60 a odpadá zdlouhavá a pracná činnost na tvorbě knihovny vlastní.+Řídicí program je psán a kompilován ve webovém vývojovém prostředí mbed.org . Tento výběr byl učiněn kvůli absenci nutnosti instalace ​nějakého ​prostředí na PC a s tím spojené ​možné komplikace. Dále tak bylo proto, že prostředí má velikou podporu komunity a mnoho knihoven. Jednou z nich je právě knihovna ​[[https://​developer.mbed.org/​users/​hudakz/​code/​UIPEthernet/​|UIPEthernet]]. Jejím použitím je zajištěna komunikace s modulem ENC28J60 a odpadá zdlouhavá a pracná činnost na tvorbě knihovny vlastní.
  
  
-{{:​2015:​enc28j60:​zapojeni.jpg?​ | Zapojení}}+{{:​2015:​enc28j60:​zapojeni.jpg?​362x272 ​| Zapojení}}
    obr.3 Zapojení ​      obr.3 Zapojení ​  
  
 ===== Popis funkce ===== ===== Popis funkce =====
-Po zapnutí dojde k inicializaci kitu ENC28J60 a program otevře server který čeká na 23 portu (telnet) na spojení. ​+Po zapnutí dojde k inicializaci kitu ENC28J60 a program otevře server který čeká na 23 portu (telnet) na spojení. Pokud dojde k připojení klienta, server odešle uvítací zprávu a čeká na příkazy. Možné příkazy jsou následovné:​
-Pokud dojde k připojení klienta, server odešle uvítací zprávu a čeká na příkazy. Možné příkazy jsou následovné:​ +
-help - zobrazí nápovědu +
-color RRGGBB - rozsvítí RGB diodu barvou odpovídající HTML barevnému kódu (jednotlivé intenzity barev jsou 8bitové v hexa) +
-stop - zhasne RGB diodu +
-exit - ukončí spojení a čeká na dalšího klienta+
  
 +  * **help** - zobrazí nápovědu
 +  * **color** RRGGBB - rozsvítí RGB diodu barvou odpovídající HEXa barevnému kódu (jednotlivé intenzity barev jsou 8bitové)
 +  * **stop** - zhasne RGB diodu
 +  * **exit** - ukončí spojení a čeká na dalšího klienta
 +
 +V programu je možné definicí preprocesorové proměnné //#DHCP// přepínat mezi IP adresou statickou nebo IP adresou získávanou z DHCP serveru.
 ===== Demonstrace ===== ===== Demonstrace =====
 Následující video ukazuje funkčnost projektu. Jsou použity dvě náhodně vygenerované barvy pro ověření správného zobrazení: Následující video ukazuje funkčnost projektu. Jsou použity dvě náhodně vygenerované barvy pro ověření správného zobrazení:
Řádek 65: Řádek 74:
 #endif #endif
    
-//​prototypes+//​prototypes ​and global variables
 void print_line(string text); void print_line(string text);
 +EthernetClient client;
    
 //MAC address //MAC address
Řádek 72: Řádek 82:
 const uint16_t ​ MY_PORT = 23; const uint16_t ​ MY_PORT = 23;
 EthernetServer ​ server = EthernetServer(MY_PORT);​ EthernetServer ​ server = EthernetServer(MY_PORT);​
-EthernetClient client; 
  
 int main(void) int main(void)
Řádek 106: Řádek 115:
         uint8_t size;         uint8_t size;
         char buffer[256];​         char buffer[256];​
-        char color[2]; 
         ​         ​
         if (client = server.available())         if (client = server.available())
Řádek 129: Řádek 137:
                     //color setting ​                   ​                     //color setting ​                   ​
                     if (strncmp(buffer,​ "​color",​5) == 0)                     if (strncmp(buffer,​ "​color",​5) == 0)
-                    {  +                    {                     ​ 
-                     +                        char color[2]; ​   ​ 
-                        uint8_t ​red,​green,​blue+                        uint8_t ​col                                            
-                        sprintf(color,​ "​%c%c",​buffer[6],​buffer[7]); ​                    ​ +                        ​ 
-                        sscanf(color,​ "​%x",​ &red); +                        sprintf(color,​ "​%c%c",​buffer[6],​buffer[7]); ​//get HEX char                    ​ 
-                        sprintf(color,​ "​%u", ​red); +                        sscanf(color,​ "​%x",​ &col);  
-                        rled = (float)(~atoi(color) & 0xff)/255;+                        sprintf(color,​ "​%u", ​col); // convert to DEC number 
 +                        rled = (float)(~atoi(color) & 0xff)/​255; ​// inverse number, set value to PWM between 0-1
                         ​                         ​
                         sprintf(color,​ "​%c%c",​buffer[8],​buffer[9]); ​                                             sprintf(color,​ "​%c%c",​buffer[8],​buffer[9]); ​                    
-                        sscanf(color,​ "​%x",​ &green); +                        sscanf(color,​ "​%x",​ &col); 
-                        sprintf(color,​ "​%u", ​green);+                        sprintf(color,​ "​%u", ​col);
                         gled = (float)(~atoi(color) & 0xff)/​255;  ​                         gled = (float)(~atoi(color) & 0xff)/​255;  ​
                                                                                            
                         sprintf(color,​ "​%c%c",​buffer[10],​buffer[11]); ​                                             sprintf(color,​ "​%c%c",​buffer[10],​buffer[11]); ​                    
-                        sscanf(color,​ "​%x",​ &blue); +                        sscanf(color,​ "​%x",​ &col); 
-                        sprintf(color,​ "​%u", ​blue);+                        sprintf(color,​ "​%u", ​col);
                         bled = (float)(~atoi(color) & 0xff)/​255; ​                                             bled = (float)(~atoi(color) & 0xff)/​255; ​                    
- 
                     }                     }
                     //turning off all LEDs                     //turning off all LEDs
Řádek 170: Řádek 178:
                     {                                    {               
                         client.write((uint8_t*)">​ ", 2);                         client.write((uint8_t*)">​ ", 2);
-                    }                                                         +                    }                                                          
-                    ​+
                  }                  }
                  ​client.stop();​                  ​client.stop();​
Řádek 188: Řádek 195:
 } }
 </​code>​ </​code>​
- 
- 
 ===== Závěr ===== ===== Závěr =====
-Zadaní projektu bylo kompletně splněno a vše je funkční tak jak má být. Během řešení jsem neměl s ničím problém a na zadání jsem byl dostatečně připraven jak z předchozích zkušeností tak z předmětu MPOA. +Zadaní projektu bylo kompletně splněno a vše je funkční tak jak má být. Během řešení jsem neměl s ničím problém a na zadání jsem byl dostatečně připraven jak z předchozích zkušeností tak z předmětu MPOA. \\  
-Velikou výhodou bylo nalezení již hotové knihovny k řadiči ENC28J60. Bez toho bych byl nucen strávit několik dní studiem datasheetu k obvodu a následným experimentováním. Použití ​HTML hexa barevného kódu pro nastavování barvy mi přijde jako zajímavé řešení, kterým je ověřen ​celý rozsah možností RGB LED diody.+Velikou výhodou bylo nalezení již hotové knihovny k řadiči ENC28J60. Bez toho bych byl nucen strávit několik dní studiem datasheetu k obvodu a následným experimentováním. Použití ​HEXa barevného kódu pro nastavování barvy mi přijde jako zajímavé řešení, kterým je využit ​celý rozsah možností RGB LED diody.
2015/enc28j60.1452884730.txt.gz · Poslední úprava: 2016/01/15 20:05 autor: Martin Štěpnička