Sterownik NetIO
Tak jak pisaliśmy w poprzedniej części: "Historia jednej płytki (cz. 1)", elementem pośredniczącym pomiędzy adapterem EMS a Ethernet'em będzie prosty kontroler firmy Pollin o nazwie AVR NetIO (link tutaj)Sterownik AVR-NET-IO firmy Pollin |
Oszczędność kosztów energii można uzyskać poprzez bezpośrednie zasilanie 5V/1A na złącze "J6" NET-IO. Ten sposób zasilania, potwierdzony doświadczeniami autora, pozwala również zasilić płytę adaptera (poprzez 10-pinowe złącze).
Oprogramowanie Ethersex
Tak, Wasze skojarzenia są prawidłowe. Zwłaszcza że logo "Ethersex" nie wymaga żadnego dodatkowego komentarza....Chodzi oczywiście o niezwykle prostą w konfiguracji platformę, która nawet osobom nie będącym biegłymi w programowaniu mikrokontrolerów pozwala samodzielnie zbudowanie działającego i kompletnego oprogramowania.
Pobranie pakietu Ethersex możliwe jest poprzez stronę GitHub: https://github.com/ethersex/ethersex/. W Ethersex Wiki można znaleźć wyczerpujące instrukcje instalacji i konfiguracji, tak więc nie będziemy się tutaj na ten temat rozpisywać. Natomiast niejaki Danny Baumann (zwany "Danny") dodatkowo zintegrował w Ethersex "układ ramkowania EMS", więc nasza instalacja staje się jeszcze prostsza. Dziękujemy Danny!
Po ściągnięciu plików i rozpakowaniu (tak! na serwerze Lunux'owym!), możemy przystąpić do wyboru konfiguracji. Uruchamiamy terminal, przechodzimy do katalogu, w którym rozpakowaliśmy Ethersex i wpisujemy polecenie "make menuconfig" a następnie zaznaczamy opcje jak poniżej:
General setup ---> (AVR) Target Architecture (ATmega644P) Target MCU (16000000) MCU frequency (NetIO) Hardware / Periphery Class [*] Status LEDs ---> [*] Status LED (Transmitted) [*] EMS TX [*] Status LED (Received) [*] EMS RX OK [*] Status LED (Error) [*] EMS RX Failure [*] VFS (Virtual File System) support ---> [*] VFS file inlining ---> [*] Inline IO [*] Inline ADC [*] Inline OneWire [*] Support Inline SVG
Network --->; Host Name: "EMS" (500) Network Buffer Size [*] Ethernet (ENC28J60) support ---> MAC address: "the MAC address from the label of the ATmega32 Enter" --- Static IPv4 configuration - IP address: "192.168.xxx.xxx" - Netmask: "255.255.255.0" [*] TCP support [*] ICMP support
I / O ---> (Simple) I / O abstraction model (Port I / O) [*] Onewire support ---> [*] Onewire device detection support
Protocols ---> [*] ECMD (Ethersex Command) support ---> [*] TCP / Telnet (2701) TCP port [*] EMS Support ---> (64) EMS Buffer Length (7950) EMS TCP port [*] Statistics ECMD
Applications ---> [*] System clock support ---> [*] Date and Time support TimeZone ---> (60) Local time offset to UTC (minutes) --- Daylight saving (60) Time offset (minutes ) --- Begin of daylight saving (3) Month (1-12) (5) Week (1-5) (0) Day of week (0-6) (2) Hour (0-23) --- End of daylight saving (10) Month (1-12) (5) Week (1-5) (0) Day of week (0-6) (3) Hour (0-23) [*] HTTP server ---> (80) HTTP port (default 80) (8000) HTTP alternative port (default 8000)
AVRDUDE configuration ---> If you work with AVRDUDE: Select your programmer. The fuses are assigned as follows: (e7) Fuse Low byte (FLB) (dc) Fuse High byte (FHB) (ff) Extended Fuse byte (EFB)
Po dokonaniu konfiguracji polecenie "make show-config" powinno zwrócić następujące informacje:
MCU: atmega644p Hardware: netio These modules are currently enabled: ====================================== * ADC * ADC_INLINE * CLOCK * CLOCK_CPU * CLOCK_DATETIME * ECMD_PARSER * ECMD_TCP * EMS * ENC28J60 * ETHERNET * HTTPD * HTTP_FAVICON * I2C_MASTER * I2C_PCF8574X * ICMP * IPV4 * IRMP * NET * NTP * ONEWIRE * ONEWIRE_DETECT * ONEWIRE_DETECT_ECMD * ONEWIRE_INLINE * PORTIO_SIMPLE * STATUSLED_EMS_RX_FAIL * STATUSLED_EMS_RX_OK * STATUSLED_EMS_TX * STATUSLED_ERROR * STATUSLED_RX * STATUSLED_TX * TCP * UDP * UIP * UPTIME * VFS * VFS_INLINE * VFS_INLINE_INLINESVG * VFS_IO_INLINE * WHM
Oczywiście moduły takie jak: przetwornik analagowo-cyfrowy (ADC), mini serwer webowy (HTTPD), interface OneWire czy VFS są niezależne od oprogramowania EMS i mogą być w miarę potrzeb i życzeń włączane lub wyłączane.
Ostatecznie, zanim skompilujemy przygotowaną konfigiracę potrzebne są jeszcze zmiany w pliku"./pinning/hardware/netio.m4":
ifdef (`conf_ONEWIRE ',` dnl / * OneWire port range * / ONEWIRE_PORT_RANGE (PD5, PD5) ') dnl ifdef (`conf_EMS ',` pin (EMS_UART_TX, PD3) ') ifdef (`conf_STATUSLED_EMS_TX ',` pin (STATUSLED_EMS_TX, PD4, OUTPUT) ') ifdef (`conf_STATUSLED_EMS_RX_OK ',` pin (STATUSLED_EMS_RX_OK, PD6, OUTPUT) ') ifdef (`conf_STATUSLED_EMS_RX_FAIL ',` pin (STATUSLED_EMS_RX_FAIL, PB0, OUTPUT) ')
Przypisanie portów w ATmega644P jest teraz następujące:
PD2 = RX PD3 = TX PD4 = LED TX PD5 = 1-Wire PD6 = LED RX OK PD7 = n/c PB0 = RX LED FAIL
Teraz już tylko pozostaje nam polecenie "make" i powiniśmy otrzymać plik typu .hex: "ethersex.hex", który możemy wprogramować do naszej ATmegi644P.
WAŻNE!
Podczas programowania ATmegi należy pamiętać o poprawnym ustawieniu "fuse-bitów". Muszą mieć one następujące wartości:Fuse Low byte (FLB) = e7, Fuse High byte (FHB) = dc, Extended Fuse byte (EFB) = ff
W moim przypadku złe ustawienie fuse-bitów spowodowało taktowanie ATmegi zegarem dzielonym 8x, więc działał, ale nie nadążał czytać telegramów EMS .
Hexfile
Jeśli nie chemy, nie umiemy lub nie możemy wykonać powyższych kroków, można skorzystać z gotowego pliku, który znajduje się tutaj.Uwaga! w powyższym skompilowanym pliku adres IP ustawiony jest na:
192.168.0.0
, a MAC na FF: FF: FF: FF: FF: FF
(broadcast).Należy to odpowiednio zmienić! W Net-IO jest to możliwe poprzez przeglądarkę w następujący sposób:
http://192.168.0.0/ecmd?mac "nowy MAC"
(wpisujemy bez "". MAC swojego Net-IO można znaleźć na etykiecie naklejonej na ATmega32)http://192.168.0.0/ecmd?ip "nowe IP"
(wpisujemy IP bez "").
"... /ecmd?help"
wyświetla wszystkie dostępne polecenia, a bardziej szczegółowo można zapoznać się z nim tutaj.Co dalej?
W części 3 opiszemy, jak skonfigurować nasze Raspberry Pi, aby zbierało i prezentowało dane z EMS-Net-IO Adaptera.Ogromne podziękowania dla Ingo Fischer - powyższy tekst powstał na bazie jego opracowania znalezionego pod adresem:
aktualizacja 2016-06-01: http://emswiki.thefischer.net/doku.php
Brak komentarzy:
Prześlij komentarz