Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Následující verze | Předchozí verze | ||
2015:enc28j60 [2016/01/15 18:09] Martin Štěpnička vytvořeno |
2015:enc28j60 [2016/01/16 02:41] (aktuální) Martin Štěpnička [Zdrojový kód] |
||
---|---|---|---|
Řádek 7: | Řádek 7: | ||
===== Použitý hardware ===== | ===== Použitý hardware ===== | ||
- | Projekt je navržen na vývojové desce FRDM-KL25Z od společnosti Freescale. Tato vývojová deska má na sobě již implementovanou RGB LED diodu, která bude v projektu použita. Ethernetový řadič ENC28J60 je použitý v podobě kitu určeného pro Arduino a již obsahuje všechny podpůrné součástky. Zároveň má na hřebínek vyvedeny komunikační piny. Obvod komunikuje pomocí sběrnice SPI. Celé zapojení tedy spočívá pouze v propojení SPI komunikačních pinů. KL25Z má implementovány dvě SPI sběrnice (SPI_0, SPI_1). Je použita SPI_0 s piny které zobrazuje obrázek 1. s menší obměnou u SCK pinu. Je totiž společný pro modrou diodu, která slouží jako signalizace komunikace. Tím by byla modrá dioda blokována, a proto je použit pin PTC5. Všechny použite piny na vývojové desce shrnuje následující tabulka. | + | Projekt je navržen na vývojové desce FRDM-KL25Z od společnosti Freescale. Tato vývojová deska má na sobě již implementovanou RGB LED diodu, která bude v projektu použita. Ethernetový řadič ENC28J60 je použitý v podobě kitu určeného pro Arduino a již obsahuje všechny podpůrné součástky. Zároveň má na hřebínek vyvedeny komunikační piny. Obvod komunikuje pomocí sběrnice SPI. Celé zapojení tedy spočívá pouze v propojení SPI komunikačních pinů. KL25Z má implementovány dvě SPI sběrnice (SPI_0, SPI_1). Je použita SPI_0 s piny které zobrazuje obrázek 1 s menší obměnou u SCK pinu. Je totiž společný pro modrou diodu, která slouží jako signalizace komunikace. Tím by byla modrá dioda blokována, a proto je použit pin PTC5. Všechny použite piny na vývojové desce shrnuje následující tabulka. |
- | {{:2015:enc28j60:dig.png? | Pinout vývojové desky FDRM-KL25Z}} | + | {{:2015:enc28j60:dig.png?492x349 | Pinout vývojové desky FDRM-KL25Z}} |
obr.1 Pinout vývojové desky FDRM-KL25Z | obr.1 Pinout vývojové desky FDRM-KL25Z | ||
- | |||
- | {{:2015:enc28j60:enc28j60.jpg? | 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 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í. P | + | 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 66: | Řá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 73: | Řá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 107: | Řá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 130: | Řá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 171: | Řádek 178: | ||
{ | { | ||
client.write((uint8_t*)"> ", 2); | client.write((uint8_t*)"> ", 2); | ||
- | } | + | } |
- | | + | |
} | } | ||
client.stop(); | client.stop(); | ||
Řádek 189: | Řá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. |