Cum funcționează un cip de control de rețea? ENC28J60 Conectați microcontrolerul la rețeaua Ethernet. Cerințe de putere și mediu

După cum a arătat practica, tunerele de uz casnic prin satelit utilizate de operatorii de cablu trebuie adesea să fie repornite din cauza pierderii periodice de sunet sau imagine. Acest lucru este cauzat de diverși factori: nivelul neuniform al semnalului de la convector, supraîncălzirea receptorului sau uscarea electroliților. Puteți menține personalul de serviciu pentru schimbarea promptă, dar atunci când acest lucru nu este viabil din punct de vedere economic, dispozitivul descris vă va ajuta. În principiu, utilizarea dispozitivului dezvoltat nu se limitează la acest domeniu de activitate.

Scurt:
Scop. Vă permite să controlați pornirea și oprirea sarcinilor conectate la relee controlate printr-o rețea locală (sau Internet).
Dispozitiv.În principiu, dispozitivul constă din trei module: un modul Ethernet, un modul de microcontroler și un modul de control al sarcinii.
Modulul Ethernet este asamblat pe un microcip de la Microchip ENC28J60 și este mai indicat să-l iei gata, de exemplu aici: http://www.aliexpress.com/wholesale?SearchText=enc28j60. Am folosit un cip Atmega32 ca microcontroler. Modulul de control conține comutatoare cu tranzistori care pornesc releele corespunzătoare. Fiecare releu pornește sau oprește alimentarea către consumatorul care are nevoie de el.
Principiul de funcționare. Principiul de funcționare al dispozitivului este ușor de înțeles din schema circuitului:

Pentru utilizarea interactivă a sistemului este furnizată o interfață web, prin logare în care operatorul activează sau dezactivează portul corespunzător (vezi figura). Designul și firmware-ul prevăd utilizarea a 20 de porturi de ieșire: PA0...PA7, PC0...PC7, PD4...PD7. Cu toate acestea, dacă se dorește, numărul de ieșiri poate fi crescut la 80 de bucăți - pentru aceasta trebuie să utilizați decodoare (de exemplu K155ID3) și să rescrieți JavaScript pentru panoul web, astfel încât ieșirile MK să genereze cuvinte de control (0x0...0xF). Această abordare va complica oarecum circuitul dispozitivului și va fi nevoie să reporniți tunerele „unul câte unul”. Este mult mai potrivit să folosiți mai multe dispozitive descrise sub diferite adrese IP.

Firmware pentru microcontroler. Pentru a flash Atmega32 am folosit un programator „4 fire” pentru portul COM și software. Am făcut flash-ul pe un computer vechi care rulează Windows XP. Nu l-am încercat pe sisteme de operare moderne din cauza lipsei COM. firmware.

De asemenea, trebuie să instalați siguranțele ca în imagine.

Codurile sursă de firmware cu comentarii pot fi descărcate. Există un Makefile care funcționează în folderul sursă. Pentru a compila proiectul am folosit gratuit . Pentru a face acest lucru, deschideți linia de comandă, accesați folderul cu proiectul și tastați „make”. Ca rezultat al muncii compilatorului, în folder vor apărea mai multe fișiere intermediare de legătură și un fișier firmware HEX.

Pentru a curăța rezultatul compilatorului, scrieți „make clean” pe linia de comandă.

Dacă tăiați sursele, acordați atenție două funcții:

Fill_tcp_data_p(buf,plen,PSTR("șirul trecut la pachet")); char stroka = "șirul trecut la pachet"; fill_tcp_data(buf,plen,strok);

Folosim prima funcție în care este clar necesar să trecem un șir (text static). Pe al doilea îl folosim cu variabile șir.
Din fisier ip_arp_udp_tcp.c:

Uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s) ( char c; // completați datele tcp la poziția poziției // // fără opțiuni, datele pornesc după suma de control + încă 2 octeți (urgent ptr) în timp ce ((c = pgm_read_byte(progmem_s++))) ( buf=c; pos++; ) return(pos); ) ... uint16_t fill_tcp_data(uint8_t *buf,uint16_t pos, const char *s) ( return(fill_tcp_data_len(buf,pos) ,(uint8_t*)s,strlen(s))); )

Copii colectate:

Demonstrație de lucru:

Firmware-ul microcontrolerului prevede modificarea adresei IP (implicit 192.168.1.99) și a domeniului JavaScript. Deci, mergi la: 192.168.1.99/?i=91 va schimba adresa dispozitivului in 192.168.1.91 dupa o repornire (folositi foarte atent si numai cand este absolut necesar, pentru a nu pierde dispozitivul!!! :)). Domeniul scriptului se modifică astfel: 192.168.1.99/?d=mydomain.com, adică scriptul tău va fi încărcat de la adresa: mydomain.com/eth/script.js. Vă rugăm să rețineți că directorul eth de pe server ar trebui să conțină .

Deschideți script.js și modificați descrierile porturilor pentru a se potrivi nevoilor dvs.:

Var name = "Gestionare port:"; // titlu // sub numele porturilor (poate fi înlocuit cu ceva semnificativ) var title = ["PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6" , " PA7", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PD4", "PD5", "PD6", " PD7" ];

De exemplu, am asta:

Var name = "Curcubeu, 75 de grade"; // titlu // sub numele porturilor (poate fi înlocuit cu ceva semnificativ) var title = ["Iluzie rusă", "24 techno", "Estate", "Healthy TV", "Retro", "Drive", „Phoenix +cinema”, „Copii”, „Vânătoare și pescuit”, „Europa Plus”, „Sony Entertaiment”, „Sony Sci-Fi”, „Multimania”, „National Geographic”, „NST”, „nefolosit” , „nu este folosit”, „nu este folosit”, „nu este folosit”, „SERVER WWW”];

Pentru alimentare se poate folosi un încărcător de telefon mobil (tensiune de ieșire aproximativ 7 volți). În modul standby, consumul de curent este de aproximativ 120 mA. Când un releu este pornit, consumul de curent crește la 180 mA. Trebuie avut în vedere faptul că, dacă este nevoie să activați toate releele în același timp (opriți toate receptoarele), atunci sursa de alimentare trebuie să aibă deja puterea corespunzătoare (cel puțin 1,5 A).

Articolul prezentat este doar o demonstrație a dispozitivului. În versiunea comercială, direcția acestei dezvoltări a fost extinsă semnificativ - până la 150 de porturi, trei senzori de temperatură etc., totul depinde de comandă. (Un alt exemplu pentru 40 de porturi:)

Din punct de vedere structural, dispozitivul poate fi plasat în carcasa unui comutator vechi într-un rack de telecomunicații de 19 inchi. Deoarece un astfel de comutator nu era la îndemână, am comandat această cutie de la sistemul de distribuție a intrărilor cu fibră optică de la Serviciul Mobil (cost 290 mii fără TVA):

Placă de circuit imprimat pentru modul.

Schema de conectare a modulului la microcontroler.

Controler și placă de circuit imprimat magistrală ISA.

Inițial am vrut să fac posibilă introducerea unei plăci de rețea într-un conector ISA, apoi am decupat conectorul și am lipit pur și simplu modulul în această placă. Desigur, o poți face pe conectori, va fi și mai bine.

Aspectul modulului.

Manager de gestionare a modulelor Ethernet.

Când lucrați cu managerul, apăsați START și în fereastra de comandă schimbați numărul de la 0 la 9. Observați răspunsul modulului la comenzi.

Acest manager este Genadiya. Aici introducem adresa IP, apăsăm butonul Connect și folosim butoanele On/Off pentru a controla LED-urile de pe modul.


Iata rezultatul ascultarii protocolului la schimbul managerului cu dispozitivul.

ProtocolARP

Protocolul de rezoluție a adresei

Cerere de la comandant

0x0000 FF FF FF FF FF FF 00 0D-61 21 FF 96 08 06 00 01 ÿÿÿÿÿÿ..a!ÿ–....

0x0010 08 00 06 04 00 01 00 0D-61 21 FF 96 C0 A8 00 05 ........a!ÿ–À¨..

0x0020 00 00 00 00 00 00 C0 A8-00 19 ......ˬ...

Ethernet II

FF FF FF FF FF FF – MAC de destinație - adresa MAC a destinatarului.

08 06 – Ethertype 0x0806 - (2054) – ARP.

ARP

00 01 – Hardware 0x0001 (1) - Ethernet.

08 00 – Protocol 0x0800 (2048) – IP.

06 – Lungimea adresei hardware 0x06 (6).

04 – Lungimea adresei de protocol 0x04 (4).

00 01 – Operațiunea 0x0001 (1) – Solicitare ARP.

00 0D-61 21 FF 96 – Adresa MAC a expeditorului - adresa MAC a expeditorului.

C0 A8 00 05 – Adresa IP a expeditorului – adresa IP a expeditorului.

00 00 00 00 00 00 – Adresă MAC țintă – adresa MAC a destinatarului (toate).

C0 A8-00 19 – Adresă IP țintă – adresa IP destinatarului.

ProtocolIP/ ICMP.

Protocolul de management al controlului internetului

Cerere de la comandant

0x0000 00 22 3A 6F 47 B9 00 0D-61 21 FF 96 08 00 45 00 ":oG¹..a!ÿ–..E.

0x0010 00 3C 19 E0 00 00 80 01 -9F 72 C0 A8 00 05 C0 A8 .<.à..€.ŸrÀ¨..À¨

0x0020 00 19 08 00 D2 5A 03 00 -78 01 61 62 63 64 65 66 ....ÒZ..x.abcdef

0x0030 ghijklmnopqrstuv

Răspuns de la sclav

0x0000 00 0D 61 21 FF 96 00 22-3A 6F 47 B9 08 00 45 00 ..a!ÿ–.":oG¹..E.

0x0010 00 3C 19 DD 00 00 80 01 -9F 75 C0 A8 00 19 C0 A8 .<.Ý..€.ŸuÀ¨..À¨

0x0020 00 05 00 00 DB 5A 03 00 -77 01 61 62 63 64 65 66 ....ÛZ..w.abcdef

0x0030 67 68 69 6A 6B 6C 6D 6E-6F 70 71 72 73 74 75 76 ghijklmnopqrstuv

0x0040 77 61 62 63 64 65 66 67-68 69 wabcdefghi

Ethernet II

00 0D-61 21 FF 96 – Sursă MAC - adresa MAC a expeditorului.

08 00 – Ethertype 0x0800 = IP.

IP

45 – Versiunea IP „4” și „5” – Lungimea antetului = 20 octeți.

00 – Tipul serviciului

00 3C – Lungime totală 0x021 = 33

19 E0 – Id (numărul pachetului)

00 00 – Offset flagmant = 0.

80 – Time to Live (TTL) = 128.

01 – Protocol (ICMP)

9F 72 – Sumă de control.

C0 A8 00 05 – IP expeditor.

C0 A8 00 19 – IP destinatar.

ICMP

08 – Tip 0x08 (8) Eco. (0)- Ecou răspuns.

00 – Cod 0x00 (0).

D2 5A – Sumă de control 0xD25A (53850) corectă.

03 00 – Identificator 0x0300 (768).

78 01 – Numărul secvenței 0x7801 (30721).

ProtocolIP/UDP

Protocolul de datagramă utilizator

0x0000 00 C9 3A 6F 47 B9 00 0D-61 21 FF 96 08 00 45 00 .É:oG¹..a!ÿ–..E.

0x0010 00 21 30 E0 00 00 80 11 -88 7D C0 A8 00 05 C0 A8 .!0à..€.ˆ)À¨..À¨

0x0020 00 19 17 D8 00 6F 00 0D -C3 75 2A 54 41 54 37 ...Ø.o..Ãu*TAT7

Ethernet II

00 C9 3A 6F 47 B9 – Destination MAC - destinatar adresa MAC.

00 0D-61 21 FF 96 – Sursă MAC - adresa MAC a expeditorului.

Să presupunem că trebuie să creăm un dispozitiv care se poate conecta la o rețea Ethernet. Există destul de multe opțiuni, dar toate pot fi împărțite în 3 tipuri.

Un convertor RS-232-Ethernet, de obicei un port COM virtual care convertește un flux de date RS-232 în pachete IP la un capăt și un dispozitiv care primește și decodifică aceste pachete și le trimite controlerului sub formă de RS-232 la celălalt capăt. Un exemplu de astfel de dispozitiv: Tibbo EM100. Avantajele acestei soluții sunt ușurința de programare. Nu este nevoie să se aprofundeze în complexitatea protocoalelor; dispozitivul conectat poate să nu știe deloc că datele nu sunt primite direct de la portul serial, ci, de exemplu, de pe Internet. Această soluție are și dezavantaje - nu va fi posibilă utilizarea protocoalelor de nivel superior, precum SNMP, HTTP și altele, de exemplu. poți uita de interfața WEB, de exemplu.

Un dispozitiv avansat, o „cutie neagră”, care are propriul procesor, memorie, stivă de protocoale, procesează singur pachetele Ethernet și trimite din nou RS-232 sau SPI. Exemple de astfel de soluții: Lantronix XPort, care este un server integrat complet, ultra-compact, puțin mai mare decât un conector RG-45:

Cipul WIZNET W5100 și Arduino Ethernet Shield pe baza acestuia:

Aici dezvoltatorul are mai multă libertate, de exemplu, puteți rula un server WEB sau Telnet pe acest controler și puteți controla dispozitivul încorporat prin intermediul acestora. Dezavantajele includ flexibilitatea redusă (puteți folosi doar acele protocoale specificate de dezvoltatori) și costul ridicat, depășind adesea costul dispozitivului gestionat.

Preluați controlul conectând un driver de nivel fizic (PHY) la controlerul dvs. preferat, cum ar fi cipul ENC28J60 10 Base-T sau cipul 10/100 Base-T ENC624J600 de la aceeași companie Microchip, sau luați un controler din familia PIC18FXXJXX cu integrat. -în PHY și implementați în mod programatic toate protocoalele necesare. Puteți scrie singur o stivă de protocol (nu este o sarcină foarte trivială) sau puteți utiliza o stivă gata făcută (există o selecție destul de mare de stive TCP pentru microcontrolere de la diverși producători de diferite grade de libertate și calitate). Acest articol va oferi o scurtă prezentare a stivei TCP a Microchip, destinată utilizării pe microcontrolere de la această companie.

Deci, calea este clară, este timpul să decideți asupra instrumentelor.

Noi vom avea nevoie:

Unul dintre controlerele suportate de această stivă. Dacă folosim un cip PHY extern, atunci aproape orice MCU fabricat de Microchip, din familiile PIC18 (8 biți), PIC24 (16 biți) și PIC32 (32 biți). Dacă vrem să ne lipsim de un PHY extern, luăm ceva din familia PIC18F67J60.

Stiva de microcip TCP/IP. Stiva face parte din Bibliotecile de aplicații Microcip (denumite în continuare MAL). Biblioteca este gratuită, acceptă o gamă destul de largă de controlere Microchip și, pe lângă stiva TCP, conține și o stivă USB, o bibliotecă pentru lucrul cu ecrane tactile, smart carduri etc. Cea mai recentă versiune a bibliotecii poate fi descărcată.

Mediu de dezvoltare. Free MPLab 8 (puțin învechit, dar dovedit de-a lungul anilor) sau MPLab-X (lansat din stadiul Beta în urmă cu câteva luni, bazat pe Netbeans, un mediu de dezvoltare promițător, dar încă nu foarte stabil).

Compilator. C18, C30 și C32 sunt acceptate oficial. O versiune de încercare de 60 de zile poate fi descărcată de pe site. După 60 de zile, versiunea de încercare rămâne funcțională, dar dezactivează modul de optimizare și, prin urmare, codul poate necesita mai mult spațiu ROM.

Programator și (sau) depanator în circuit. Recomand ICD3 sau PICKIT3 (ICD2 funcționează și el, dar nu este acceptat de mediul Mplab-X și este mai lent).

În loc să-ți lipizi placa, poți folosi unul dintre numeroasele kituri de depanare produse de Microchip (care sunt bune pentru toată lumea, cu excepția prețului lor și a dificultății de cumpărare în Rusia):

  • PIC18 Explorer cu placă fiică PICTail
  • Explorer 16 cu placă fiică PICTail+
  • Kit de pornire PIC32 cu placă de expansiune IO și PICTail+ (în acest caz, nu veți avea nevoie de un depanator extern, deoarece este deja încorporat în setul de pornire PIC32)

Există soluții alternative de la Olimex (ENC28J60-H) și Triton (TRT-Ethernet).

Dacă decidem să ne facem propriul tablou imediat:

Poate fi folosit ca controler cu PHY încorporat (PIC18F87J60)

Sau un controler cu un PHY extern (ENC28J60) conectat prin magistrala SPI (de exemplu, ENC28J60):

Din cablarea externă aveți nevoie doar de un transformator (de exemplu, PULSE H1012), un conector RJ-45 (există conectori RJ-45 cu transformator încorporat și LED-uri) și o duzină de rezistențe. Pentru a tacta controlerul, este necesar un cuarț de 25 MHz (în acest caz, frecvența internă a MK poate fi crescută la 40 MHz folosind PLL).
Vă rugăm să rețineți că controlerul extern PHY ENC624J600 conține deja o adresă MAC de firmware, în timp ce ENC28J60 și PIC18F87J60 nu și trebuie fie să utilizați un cip achiziționat care conține MAC, fie să îl instalați programatic.

De asemenea, în această etapă, trebuie să decideți unde vor fi stocate fișierele pentru serverul WEB și mib-urile SNMP. Există mai multe opțiuni: fie direct în memoria programului controlerului (și cu o dimensiune medie a stivei cu un set de module necesare de ~33kb și un controler cu un ROM intern de 128kb, vom obține ~95kb de spațiu pentru fișiere), fie utilizați un cip EEPROM extern (stiva acceptă 25LC1024), FLASH (serie SST25), card SD sau chiar disc USB (veți avea nevoie de un PIC32 cu USB la bord).

Deci, ne-am hotărât asupra hardware-ului, acum să vedem ce ne poate oferi această bibliotecă?

Functionalitate suportata:

Protocoale: ARP, IP, ICMP, UDP, TCP, DHCP, SNMP, SMTP, HTTP, FTP, TFTP
Suport TCP și UDP
Suport SSL
Suport NetBIOS
Suport DNS

Teanc de protocoale acceptate:

Există surse ale unui server http care acceptă solicitări GET și POST, autentificare SSL și compresie GZIP, client și server ICMP, client și server SNMP (versiunile 1, 2 și 3, inclusiv SNMP TRAP), bridge software TCP2UART, server TELNET, DynDNS client, DNS, DHCP și multe altele.

Cu toate acestea, stiva nu ocupă multă memorie. Astfel, un proiect real care contine un server WEB, client DHCP si DNS, bridge Ethernet─Serial bridge, server TFTP si SNMP, client SMTP va necesita aproximativ 33 kilobytes de memorie de program (ROM) si 2 kilobytes de memorie de date (RAM), in timp ce dimensiunea tipică a memoriei PIC18F67J60 este de 128KB.

Performanța stivei:


După cum puteți vedea, vitezele nu sunt uimitoare, dar nu uitați că găzduirea Facebook pe un astfel de dispozitiv este puțin probabil să apară nimănui. Și o pagină de 30 kB cu AJAX și câteva imagini mici se vor încărca în mai puțin de o secundă (prin o rețea locală).
Distribuția MAL conține o serie de exemple, dintre care cele mai interesante sunt:

TCPIP Internet Bootloader App - un exemplu care implementează actualizarea firmware-ului controlerului folosind protocolul TFTP.
Aplicația TCPIP Internet Radio - redă un flux mp3 de pe un site specificat (se folosește un cip de decodor mp3 extern).
Aplicația TCPIP WebVend – un emulator de automat cu o interfață Web (este demonstrată funcționarea GET\POST, solicitările Ajax)

Punerea cap la cap a proiectului

Toate acestea sunt interesante, dar este timpul să vă construiți propria aplicație. Să fie acesta un exemplu de „Aplicație Demo” (din directorul Microchip Solutions v2011-12-05\TCPIP\Demo App). Mergem la acest folder și vedem o grămadă de fișiere „cis”, amestecate cu fișiere de proiect din MPLAB (*.mcp, *.mcw). Căutăm un fișier de proiect potrivit pentru placa noastră de depanare. Să spunem, dacă placa noastră se numește „Ethernet Starter Kit”, deschideți proiectul C32-PIC32_ETH_SK_ETH795. Dacă placa este personalizată, puteți crea un proiect de la zero sau puteți deschide cel mai asemănător proiect și îl puteți modifica pentru dvs. De exemplu, dacă placa are un PIC18F67J60 cu PHY încorporat, luați proiectul C18-PICDN2_ETH97 și modificați-l cu un fișier. Modificarea este după cum urmează: Accesați Proiect->Opțiuni de construcție->Proiect->C18 și schimbați C18-PICDN2_ETH97 în „TABLA_TAU”:

Creăm fișierul HWP YOUR_BOARD.h pe baza celui mai asemănător. Acest fișier conține numere de porturi pentru modulele care folosesc orice periferice. Să presupunem că modulul SPI_EEPROM.c preia de acolo numele porturilor SPI pentru schimbul de date cu un EEPROM extern:

#define EEPROM_CS_TRIS (TRISCbits.TRISC0)
#define EEPROM_CS_IO (LATCbits.LATC0)
#define EEPROM_SCK_TRIS (TRISCbits.TRISC3)
#define EEPROM_SDI_TRIS (TRISCbits.TRISC4)
#define EEPROM_SDO_TRIS (TRISCbits.TRISC5)

Dacă porturile sunt diferite în planul nostru de utilizator, eliminăm discrepanța.
Această complexitate excesivă a proiectelor demonstrative este asociată cu dorința companiei producătoare de a se asigura că exemplul poate fi rulat pe un număr maxim posibil de hardware diferit. În viitor, atunci când vă scrieți proiectul „de la zero”, toate acestea pot fi curățate și veți obține o structură simplă și de înțeles.
Al doilea fișier interesant este TCPConfig.h, care, în funcție de tipul de placă de depanare selectat, apelează un fișier cu parametrii de protocol IP. Pentru o placă personalizată cu PIC18F87J60, acest fișier se va numi TCPIP ETH97.h
Activează și dezactivează diverse module de stivă.

/* Selectarea modulului la nivel de aplicație
* Anulați comentariile sau comentați următoarele rânduri pentru a activa sau
* a dezactivat următoarele module de aplicație de nivel înalt.
*/

#define STACK_USE_UART // Demo aplicație folosind UART pentru afișarea adresei IP și configurarea stivei
#define STACK_USE_UART2TCP_BRIDGE // Exemplu de aplicație UART către TCP Bridge
//#definiți STACK_USE_IP_GLEANING

Selectați tipul de memorie externă pentru stocarea fișierelor:
#define MPFS_USE_EEPROM
//#definiți MPFS_USE_SPI_FLASH

Adresa IP implicită este setată:
#define MY_DEFAULT_IP_ADDR_BYTE1

Dimensiunea tamponului poate fi ajustată și multe altele. De asemenea, nu puteți edita acest fișier manual, dar utilizați expertul care vine cu stiva:

Deci, vom presupune că porturile și parametrii TCP sunt configurați, adresa IP este setată și începem compilarea. Dacă totul a mers bine, primim firmware-ul și îl flash în MK, cu un depanator sau programator. Lansăm, verificăm ping-ul la adresa specificată în fișierul TCPIP ETH97.h. Dacă nu există ping, verificați dacă LED-ul Link este aprins și dacă placa a primit o altă adresă IP prin DHCP. Pentru a verifica, puteți dezactiva modul de obținere automată a unei adrese IP comentând rândurile #define STACK_USE_DHCP_CLIENT și #define STACK_USE_IP_GLEANING. După ce am primit în sfârșit un ping, încercăm să introducem adresa forumului în browser. Vedem eroarea 404, pagina nu a fost găsită.
Desigur, încă nu am încărcat niciun fișier pe serverul nostru WEB. Corectăm acest defect. Pentru a face acest lucru avem nevoie de utilitarul Microchip MPFS generator.

Utilitarul convertește folderul specificat cu fișiere într-un fișier imagine potrivit pentru încărcare pe serverul încorporat. Ca Director sursă, ea trebuie să specifice directorul cu fișierele de descărcat. Formatul depinde de locul unde vom stoca aceste fișiere. Dacă am specificat ROM-ul intern al controlerului ca loc pentru stocarea fișierelor, specificăm formatul de imagine C18/C32, iar fișierul de ieșire este MPFSImg2.c, în interiorul căruia va fi declarată o gamă largă de date binare. Acest fișier trebuie adăugat la proiect și recompilat.
Dacă se folosește un cip extern FLASH sau EEPROM pentru a stoca fișiere, selectați formatul de imagine BIN. Descărcăm fișierul MPFSImg2.bin rezultat fie prin formularul de descărcare de pe server, fie activând opțiunea corespunzătoare în generatorul MPFS. Descărcați, reîmprospătați pagina, bucurați-vă!

Câteva cuvinte despre cum funcționează

Textul static este scos direct în fișierul HTML.
Pentru a afișa o variabilă dinamică pe pagina web a serverului, trebuie doar să o includeți cu tilde, sub forma ~variable~, iar în codul fișierului CustomHTPPApp.c creați o funcție ca HTTPPrint_variable()

Variabilele în Ajax sunt create într-un mod similar, doar variabila dinamică este creată într-un fișier XML separat, sub forma:
~var1~, iar in codul paginii HTML functia de actualizare a acestora se numeste: document.getElementById("var1").innerHTML = getXMLValue(xmlData, "var1");

Stiva nu folosește niciun sistem de operare și funcționează pe principiul multitasking-ului cooperativ (cu toate acestea, dacă doriți, puteți instala și un sistem de operare, vezi AN1264). Arata cam asa:
În main() există o buclă fără sfârșit din care sunt apelate funcțiile care servesc stivei (StackTask și StackApplications) și funcțiile utilizator (în acest exemplu este user_task(), dar poate fi orice).

Do
{
StackTask();
StackApplications();
sarcina_utilizator();
CLRWDT(); //Cronometru watchdog
)în timp ce(1);

În același timp, trebuie să încercați să vă asigurați că funcția de utilizator nu durează prea mult pentru a se executa. De exemplu, dacă o întârziere „prost” a formularului while(delay); atunci funcțiile stivei nu vor putea procesa pachetele Ethernet primite și în timpul acestei întârzieri, comunicarea cu dispozitivul se va pierde. Pentru a organiza diverse timeout-uri necesare pentru funcționarea normală a protocolului IP, stiva folosește un temporizator hardware al MK (timer0 sau timer1), care funcționează pe o întrerupere (funcția TickUpdate este apelată când timer-ul depășește).
Pe lângă implementarea unei interfețe WEB și trimiterea capcanelor SNMP, este destul de convenabil să utilizați Telnet pentru a scoate informații de depanare în loc de portul tradițional RS-232 în astfel de cazuri.

Concluzie

Subiectul Ethernet este foarte amplu și este imposibil să acoperiți totul într-un articol. Pentru cei interesați, vă sugerez să vă familiarizați cu site-ul

Când este utilizat ca dispozitiv de ascultare (de exemplu, în interior). O opțiune este să o conectați paralel cu plafoniera.

Pentru transmisie sunt utilizate modulația de frecvență și o frecvență purtătoare de 94 kHz. Dispozitivul este alimentat de la rețea. Excesul este stins de un condensator, iar tensiunea redusă este rectificată de o punte de diode. Acesta este apoi filtrat și limitat de dioda zener KS520 și folosit pentru alimentarea etajului de ieșire la VT1. Tensiunea eliminată de la dioda zener KS210 este folosită pentru a alimenta restul dispozitivului. Semnalul de joasă frecvență de la microfon este amplificat în cascadă la VT2 și alimentat la un generator de unde pătrate controlat de tensiune la DD1 (modulator FM). Frecvența inițială a generatorului este setată, în absența unui semnal de la microfon, la 94 kHz cu ajutorul unui rezistor de reglare.

Schema circuitului 1


Schema circuitului 2

Apoi, semnalul de la generator este furnizat etajului de ieșire la VT1. Circuitul colector include un transformator, a cărui înfășurare primară este reglată la frecvența purtătoare. Miezul și înfășurările transformatorului sunt izolate cu fluoroplastic sau ceva similar. Transformatorul de pe Sh-iron a funcționat foarte prost!

Configurarea se realizează folosind un IP în regiunea de 27 de volți, conectat cu un plus la punctul A din diagramă. Prin scurtcircuitarea bazei VT2, utilizați un rezistor de reglare pentru a seta frecvența generatorului la 94 kHz. Etapa de ieșire este reglată prin selectarea unui condensator în circuitul colector pentru a minimiza distorsiunea sinusoidală sau, dacă nu există osciloscop, pentru a maximiza semnalul pe înfășurarea secundară a transformatorului (NU TREGI LA A DOUA ARMONICĂ!).

RECEPTOR

Mi-a fost prea lene să inventez ceva, așa că a fost folosit un radio VHF auto convertit. Primul oscilator local cu stabilizare cu cuarț la 10,794(10,606) kHz. Cuarțul la 10800 a dus-o cu 6 kHz mai jos.Piezofiltrul standard cu o lățime de bandă de 300 kHz (unul mic cu trei picioare! :-)) a fost înlocuit cu un filtru de la postul de radio Len cu o lățime de bandă de 15 kHz pentru a suprima oglinda canal de recepție.În locul unui circuit de defazare, K174UR3 a folosit cuarț la o frecvență de 10700 kHz (deviație mai mică). UHF nu a fost folosit, iar semnalul către mixer a fost alimentat printr-un filtru trece-bandă cu două circuite la o frecvență de 94 kHz realizat pe inele cu date similare cu transformatorul transmițătorului.

Au fost testate bobine gata făcute pentru această frecvență de la r/receptoarele armatei r-155 (sau r-873). Acesta este cel care este utilizat în sintetizatoarele acestor receptoare într-unul dintre inelele PLL. Rezultatele au fost mai bune (cel mai probabil din cauza factorului de calitate mai mare).

Acest circuit a fost conceput inițial pentru comunicarea printr-o rețea radio. De aceea purtătoarea este de 94 kHz și se află între frecvențele programului al doilea (78 kHz) și al treilea (120 kHz). Adevărat, alimentarea cu energie a fost făcută separat, iar treapta de ieșire a transmițătorului a fost încărcată pe o înfășurare suplimentară a unui transformator standard de la radioul abonatului. Nu-mi amintesc câte ture sunt! Receptorul a fost conectat la înfășurarea secundară existentă. Apoi dorința de a inventa și de a îmbunătăți a dispărut.

ATENȚIE CU TRANSMITĂTORUL! PUTEREA FĂRĂ TRANSFORMATOR!

Ethernet („Ethernet”, „ethernet”, lat. „ether” - eter) este una dintre cele mai populare arhitecturi de rețea în prezent. Utilizează transmisia de date în bandă îngustă la o viteză de 10... 100 Mbit/s pe cabluri „computer” UTP/FTP. Topologia principală este o „stea” cu capacitatea de a casca rețeaua cu hub-uri. Distanța travelor individuale este de până la 100 m, numărul de noduri este de până la 1024.

Tehnologia Ethernet a fost dezvoltată în anii 1970 la centrul de cercetare PARC al Xerox. În 1980, a fost publicat primul standard oficial.

Astăzi sunt furnizate următoarele rate de transfer de date: 10 Mbit/s (Ethernet), 100 Mbit/s (Fast Ethernet), 1...100 Gbit/s (Gigabit Ethernet), în viitor 1 Tbit/s (Terabit Ethernet) ). Pentru a facilita navigarea, sunt introduse nume abreviate, de exemplu, 10BaseT, unde numărul „10” indică o rată de transfer de date de 10 Mbit/s, „Base” este un semnal nemodulat, T este două perechi răsucite într-un cablu . Pentru interfețele universale cu două viteze, se folosesc inscripții separate prin fracții, similare cu 10/100BASE-T.

Structura logică a semnalelor Ethernet este destul de complexă, așa că pentru a interfața un computer cu MK, de obicei instalează controlere tampon specializate, de exemplu, Microchip ENC28J60, Realtek RTL8019AS, Crystal Semiconductor CS8900A, Silicon Laboratories CP220x sau chiar un microansamblu WIZnet W5100 separat. Toate oferă împachetarea/despachetarea datelor la o viteză maximă de 10 Mbit/s, care este viteza de croazieră pentru MK de uz general. MK comunică cu controlerul Ethemet prin registre accesibile prin software care determină unul sau altul mod de operare.

La nivel fizic, un cablu de rețea standard cu patru fire este utilizat pentru a comunica cu computerul. Izolarea galvanică se realizează prin transformatoare de impuls și sunt adesea combinate cu un conector RJ-45 ecranat și două LED-uri (Fig. 4.16). Raportul de transformare la recepție este de obicei 1:1, la transmisie 1:1 sau 1:1,25. Circuitul GND este conectat la scutul metalic. Elementele R1…R4, C1 pot lipsi.

Orez. 4.16. Schema bloc transformator Ethemet cu conector XS1 RJ-45.

Pe baza combinației „MK + controler Ethernet” (Fig. 4.17, a...e), se realizează nu numai rețele locale, ci și servere web cu generatoare de pagini HTML. Acest lucru permite controlul de la distanță și monitorizarea stării senzorilor de oriunde din lume acoperite de Internet.

Orez. 4.17. Diagrame pentru conectarea unui computer printr-o interfață Ethernet la MK (început):

a) conectarea modulului Ethemet prin interfața SPI la MK;

b) MK are un controler Ethernet încorporat tactat la 25 MHz. Rezistoarele RI, R2 limiteaza curentul prin LED-urile situate in blocul transformatorului;

c) Controlerul Ethernet DD1 (Microcip) stochează date în cipul de memorie DS1\

Orez. 4.17. Scheme pentru conectarea unui computer printr-o interfață USB la MK (sfârșit):

d) MK și cipul de controler Ethernet DD2 (Microcip) sunt alimentate de la tensiuni diferite. Potrivirea nivelului nu este necesară pentru intrări, dar pentru ieșiri se face prin repetoare tampon incluse în cipul DD1. Nu există indicatori în blocul transformator L/, așa că sunt folosite LED-uri externe HL1, HL2\

e) similar cu Fig. 4.17, a, dar fără un cip de memorie extern.

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva