Conectivitatea la Internet sau Ethernet
Cuprins
Introducere………………………………………………………………………………………
Cap.1 Aplicabilitate…………………………………………………………………………
1.1 Sistem pentru interogare util studenților…………………………………
1.2 Alte aplicații……………………………………………………………………….
Cap.2 Realizarea conectivitãtii Ethernet……………………………………………..
2.1 Ethernet-ul………………………………………………………………………….
2.2 Modelul TCP/IP………………………………………………………………….
2.3 Modulul NM7010A…………………………………………………………….
2.3.1 Realizarea conectivitatii Ethernet prin UDP………………………
2.3.1.1 Inițializare modul………………………………………………………….
2.3.1.2 Verificarea prin ARP și ICMP…………………………………….
2.3.1.3 Transmisia datelor …………………………………………………….
2.3.1.4 Recepția datelor
Cap.3 Comunicația serialã
3.1 Comunicatia seriala asincrona (UART) PIC – PC
3.1.2 Interfata pentru comunicatia PIC – PC – Tiny Bootloader
3.2 Comunicatia serială sincronă
3.2.1 Magistrala I2C
3.2.1.1 Comunicația PIC si memoria EEPROM 24AA512
3.2.1.2 Comunicația PIC si NM7010A
3.2.1.3 Comunicația PIC și alt device extern sitemului
Cap.4 Rutinele de manevrare a fișierelor .txt
4.1. Navigare pe text
4.2. Hiperlink
Cap.5 Realizarea plăcii
5.1 Schema electrica
5.2 Realizarea cablajului
Cap.6 Cost
Anexa 1
1.1 navig_link.c
1.2 Ethernet.c
1.3 18f252modificat.lkr
Anexa 2
2.1 PIC18f252
2.2 NM7010A
2.3 W3100
2.4 EEPROM 24AA512
2.5 MAX 232N
Bibliografie
Lucrare incompleta
=== 1 aplicabilitate ===
Cap. 1 Aplicabilitate
Datoritã posibilitatii conectãrii la Ethernet si lucrul cu texte, inclusiv posibilitatea folosirii hiperlink-urilor, proiectul de fatã poate fi folosit într-o arie largă de domenii și intrebuințãri. Nu are nevoie de conectarea la un server HTTP; serverul este un PC pe care se află fișiere cu extensia .txt care vor fi folosite pentru vizualizarea pe un LCD. Consola primește textul pe care trebuie să-l afișeze, pe acest text se poate naviga in direcțiile sus,jos,stânga, dreapta. Textul conține link-uri spre alte fișiere aflate pe server. Prin apasarea unui buton special pentru link utilizatorul poate vizualiza text-ul dorit.
Softul pentru consolă conține și opțiunea ca în cazul în care de la server se dorește monotorizarea transferului de către un operator, serverul să aibă un LCD pe care apare link-ul fișierului cerut. Dacă acesta nu poate fi cuprins în dimensiunea LCD-ului se poate naviga în direcția stânga-dreapta cu ajutorul a două taste pentru citirea link-ului; operatorul trimite spre consolă fișierul solicitat numai dacă este de acord cu acest transfer. Mai jos se prezintă o aplicație detaliată în care se poate folosi acest sistem și pe scurt alte câteva exemple.
1.1 Sistem pentru interogare util studenților
S-a imaginat o soluție practică și ușor manevrabilă pentru studenții, dar și vizitatorii unei facultăți pentru aflarea informațiilor despre acea facultate, despre studenți sau cadre didactice. Sistemul se montează chiar la intrarea în clădire și este prezentat în figura 1.1.
Figura 1.1 Conectarea consolei la sistemul de afișare/scriere și server
Sistemul de afișare și scriere conține un LCD-monocrom cu dimensiunea 40×40 și o tastatură care e suficient să conțină cinci taste.
navigare în sus;
navigare în jos;
navigare la dreapta;
navigare la stânga;
alegere link;
Pentru exemplificare presupunem că vrem să aflăm situația școlară a studentei Agap Adelina, la discipliciplina Tehnici de Multiplexare (TM) pe anul universitar 4.
Inițial pe LCD este afișată pagina principală (figura 1.2), care pe server are denumirea „home.txt”.
Figura 1.2 Afișarea paginii principale
Conținutul fișierului “home.txt” pe server este:
Textul care va apare pe consolă aferent acestui fișier este:
De aici se poate alege link-ul dorit respectând următoarea regulă: se apasă pe tasta specială de link când linia de text care conține link-ul se poziționează pe prima linie a LCD-ului. O linie care are link este marcată pe prima coloană a LCD-ului cu caracterul ‘*’, acesta va lipsi dacă pe acea linie nu există link. Fișierul spre care se face link este nu este vizibil utilizatorului.
Pe textul prezentat se face navigarea sus, jos, stânga, dreapta și alegerea link-ului.
Pentru aflarea situațiilor școlare trebuie să navigăm în jos:
Tasta apasată Ce apare pe LCD:
În momentul acesta putem apăsa pe tasta de link.
Tasta apasată Server-ul întoarce fișierul “studenti.txt”care pe consola are forma:
Vrem să aflăm situația școlară pe anul universitar 2005-2006, deci apasăm tasta JOS
Din aceasta poziție apăsăm tasta de link și serverul v-a întoarce fișerul:
Pe LCD vom vizualiza fereastra:
Studenta Agap Adelina se află pe prima poziție în fișier.De data aceasta navigăm în dreapta pâna când vom ajunge în dreptul examenului dorit:
T.M.- examen cu 5 credite – nota 9.
Dacă vrem să aflăm celălalte note e de ajuns să navigăm stânga- dreapta. Dacă vrem să ne întoarcem la pagina predentă apăsăm pe tasta “în jos” pâna când ajungem la ultima linie care conține link-ul spre pagina de start.
1.2 Alte aplicații
Alte aplicatii in care poate fi utilizata consola de interfata cu utilizatorul pentru navigare folosind hiperlink-uri cu conectare la Ethernet sunt:
Sistem de control/sigurantã – poate fi montatã la intrarea unor institutii; cel care vrea sa intre are posibilitatea de a selecta de la consolã numele, departamentul la care lucrează si postul pe care îl deține. Hiperlink-urile accesate ii pot furniza noutatile zilei din cadrul companiei, eventual programul propus pe ziua respectiva. Acest sistem poate fi si unul de sigurantã intrucât persoanei care acceseaza consola i se poate face accesul in cladire numai dupa introducerea unor date personale sau a unui cod unic.
Sistem de transfer date securizate – in diferite birouri intr-o companie pot fi instalate astfel de console. Toate fisierele se afla la un calculator central, de la console se poate face o cerere de trimitere a unui fisier prin accesarea link-ului corespunzator acelui fisier. Aceste fisiere pot fi de tip secret si pot fi numai citite de catre angajati, de aceea nu se trimit direct de la calculatorul central cãtre alt calculator, astfel se elimina posibilitatea de a fi copiat.
Agenda – pagina principala contine data si orele principale ale zilei respective, la fiecare orã daca exista vreun eveniment acesta va fi marcat prin indicarea unui link, dupã accesarea lui apar detalii despre acel eveniment (tipul de eveniment, persoanele cu care trebuie facut contactul si alte eventuale informatii).
Sistem pentru indrumarea in efectuarea unor lucrãri, procese – poate fi montat intr-o fabricã, uzinã unde procesul la care se lucreazã cere multã precizie, unde o eventualã gresealã ar putea insemna pierdere materialã sau chiar umanã, muncitorii au pe LCD pasii pe care trebuie sa-i respecte pentru efectuarea acestei lucrãri, la fiecare pas al procesului descris existã câte un link pe care muncitorii il pot accesa in cazul in care sunt neclaritãti pentru prevenirea greselilor.
Sistem pentru informare turisti – poate fi montat in hoteluri sau muzee; vizitatorul poate accesa de la consolã detalii despre ce anume vizualizeaza in acel moment (un tablou, o sculptura), limba in care doreste sã vizualize informatiile, poate accesa stiri meteo, sau date istorice despre orasul sau cladirea hotelului/ muzeului in care se aflã.
=== 2 Realizarea conectivitatii Ethernet1 ===
Cap.2 Realizarea conectivitãtii Ethernet
2.1. Ethernet
Ethernet-ul este alegerea pentru conectarea calculatoare sau device-uri care au această facilitate. Dacă Internetul este o rețea extinsă cu multe echipamente folosite pentru interconectare (rutere, switch-uri,hub-uri) și cei care se conectează la rețea depend de un server (provider-ul de Internet), Ethernet-ul reprezintă un LAN (Local Area Conection), adică o rețea locală, nu are nevoie de multe resurse ca Internetul și teoretic comunicația se face peer-to-peer (pereche la pereche). Practic, pentru a se face o analogie cu Internet-ul, PC-ul care face cererea este client iar cel care răspunde este server. În figura 3.1 este prezenat un mod de conectare prin Ethernet – conctarea mai multor calculatoare in tipologia stea printr-un hub sau switch și acestea sunt legate la un swich terminal numit backbone switch care se poate lega de exepmplu la un router. Acest exemplu poate fi aplicat în cazul unei clădiri unde se dorește realizarea unei rețele proprii.
Figura 3.1 Conectarea într-un LAN
Solutiile LAN actuale se realizeazã cu arhitecturi hub si switching-hub si cu protocol Ethernet 10Base-T si 100Base-T. În aceste arhitecturi, toate echipamentele din clãdire vor fi conectate în stea către un hub sau switch, legãturile fiind fãcute la o singurã camerã, sau un loc central în clãdire unde se vor pune aceste echipamente de rețea.
Sitemul prezenat în această lucrare folosește tipologia backbone – se folosește o singură magistrala de interconectare (figura 3.2) fiind numai doua echipamete conectate prin Ehernet. Serverul este PC-ul iar clientul este sistemul realizat în acest proiect.
Figura 3.2 Conectarea consolei la Ethernet
3.2. Modelul TCP/IP
Protocoalele sunt seturi de reguli pe care toate companiile si toate produsele software trebuie sǎ le respecte, pentru ca produsele lor sǎ fie compatibile între ele. Un protocol definește felul cum programele comunicǎ între ele. Un protocol de asemenea definește felul cum fiecare parte a pachetului are grijǎ de transferal de informație. un protocol este un set scris de directive care definește felul în care douǎ aplicații sau mașini pot comunica între ele, fiecare conformându-se cu aceleași standarde.
Modelul TCP/IP a fost creat de US DoD (US Department of Defence – Ministerul Apărării Naționale al Statelor Unite) din necesitatea unei rețele care ar putea supraviețui în orice condiții. DoD dorea ca, atâta timp cât funcționau mașina sursă și mașina destinație, conexiunile să rămână intacte, chiar dacă o parte din mașini sau din liniile de transmisie erau brusc scoase din funcțiune. Era nevoie de o arhitectură flexibilă, deoarece se aveau în vedere aplicații cu cerințe divergente, mergând de la transferul de fișiere până la transmiterea vorbirii în timp real.
Aceste cerințe au condus la alegerea a patru niveluri pentru modelul TCP/IP: Aplicație, Transport, Rețea (sau Internet) și Acces la Rețea.
Figura 3.3 Modelul TCP/IP
1. Nivelul Aplicație
Nu este identic cu cel din modelul ISO-OSI. Acesta include ultimele trei niveluri superioare din stiva OSI. Acestea au fost comasate pentru a putea fi tratate la un loc toate problemele legate de protocoale de nivel înalt, fie ele de reprezentare, codificare sau control al dialogului. El conține toate protocoalele de nivel înalt. Primele protocoale de acest gen includeau terminalul virtual (TELNET), transfer de fișiere (FTP) și poșta electronică (SMTP).
Pe parcursul anilor la aceste protocoale s-au adăugat multe altele, așa cum sunt: DNS (Domain Name Service), NNTP, HTTP, multe altele.
2. Nivelul Transport
Este identic cu cel din modelul OSI, ocupându-se cu probleme legate de siguranță, control al fluxului și corecție de erori. El este proiectat astfel încât să permită conversații între entitățile pereche din gazdele sursă, respectiv, destinație. În acest sens au fost definite două protocoale capăt-la-capăt.
Primul din ele, TCP (Trasmission Control Protocol). El este un protocol sigur orientat pe conexiune care permite ca un flux de octeți trimiși de pe o mașină să ajungă fără erori pe orice altă mașină din inter-rețea. Acest protocol fragmentează fluxul de octeți în mesaje discrete și pasează fiecare mesaj nivelului internet. TCP tratează totodată controlul fluxului pentru a se asigura că un emițător rapid nu inundă un receptor lent cu mai multe mesaje decât poate acesta să prelucreze.
Al doilea protocol din acest nivel, UDP (User Datagram Protocol), este un protocol nesigur, fără conexiuni, destinat aplicațiilor care doresc să utilizeze propria lor secvențiere și control al fluxului. Protocolul UDP este de asemenea mult folosit pentru interogări rapide întrebare-răspuns, client-server și pentru aplicații în care comunicarea promptă este mai importatntă decât comunicarea cu acuratețe, așa cum sunt aplicațiile de transmisie a vorbirii și a imaginilor video.
Nivelul Rețea (Internet)
Scopul nivelului este de a asigura transmiterea pachetelor de la orice sursă din rețea și livrarea lor către o destinație independent de calea și rețelele pe care le-a străbătut pentru a ajunge acolo. Determinarea drumului optim și comutarea pachetelor au loc la acest nivel.
Nivelul Internet definește oficial un format de pachet și un protocol numit IP (Internet Protocol). Sarcina nivelului Internet este să livreze pachete IP către destinație. Problemele majore se referă la dirijarea pachetelor și evitarea congestiei. În consecință este rezonabil să presupunem că nivelul Internet din TCP/IP funcționează asemnător cu nivelul rețea din OSI.
4. Nivelul Acces la rețea
Se ocupă cu toate problemele legate de transmiterea efectivă a unui pachet IP pe o legătură fizică, incluzând și aspectele legate de tehnologii și de medii de transmisie, adică nivelurile OSI Legătură de date și Fizic.
Modelul de referință TCP/IP nu spune mare lucru despre ce se întâmplă acolo, însă menționează că gazda trebuie să se lege la rețea, pentru a putea trimite pachete IP, folosind un anumit protocol. Acest protocol nu este definit și variază de la gazdă la gazdă și de la rețea la rețea.
2.3. Modulul NM7010A
Modulul NM7010A produs de firma koreanã WIZnet este o interfata de retea care da posibilitatea conectãrii la Internet sau Ethernet a sistemelor cu microprocesoare. Acest modul include chipul W3100 , Ethernet PHY (RTL8201BL) și conectorul MAG-JACK (RJ45). Modulul este potrivit pentru aplicațiile care implica conctivitatea la Internet.
Se poate folosi in aplicatii pentru echipamente cu acces de la distanțã , realizarea unei rețele locale in industrie, dispozitive medicale, cititor de carduri si date.
Avantajul pe care il da sistemului descris in acestă lucrare este conectivitatea la Ethernet prin folosirea numai a cinci pini de la microcontroller-ul folosit – PIC18f252:
doi pini pentru conectarea la magistrala I2C, doi pini pentru RESET și un pin pentru întreruperi. Singurul dezavantaj ar fi viteza scăzută de transfer de date între PIC și modul față de o comunicație paralelă unde se folosesc mai mai mulți pini. În proiectarea acestui sistem s-a decis că este mai importantă dimensiunea plăcii și resursele necesare, viteza de comunicație oferită de magistrala I2C la o fecvență de 400Khz fiind suficientă pentru aplicațiile in care va fi folosit.
Figura 3.4 Modulul NM7010A
Caracteristicile modulului:
Suportă 10/100 Base TX;
Suportă comnicațiile half/full duplex;
Operează la tensiunea de intrare de 3.3V cu 5V tolerantã la poturile de intare si ieșire;
Are leduri ca indicatori de stare a rețelei;
Suportă protocoalele Internet : TCP, IP ver.4, UDP, ICMP,ARP, DLC si MAC;
Poate avea 4 conecțiuni independente simultan;
Suportă interfața cu microcontrollere Intel sau Motorola prin magistrala I2C, prin moduri clocked, non-clocked sau clock extern;
Conectarea modulului pe placa se face ușor prin 2 header-e cu cate 28 de pini din care 15 pini pot fi folosiți pentru adresare, 8 pentru date si 4 pentru semnale de control intre microconroller si chipul W3100A
autodetectarea 10/100Base-T Ethernet cu half/full duplex;
masoara numai 25mm x 52mm;
Interfață
Ethernet
Figura 3.5 Diagrama bloc a NM7010A
Componentele modulului sunt:
Ethernet PHY (Phisical Layer) – este un circuit integrat care fuctioneaza la nivelul fizic OSI. In acest caz este folosit integratul RTL80201BL – folosit ca adaptor pentru intefata cu reteaua.
Chipul W3100A – este de asemenea fabricat de firma WIZnet. Conține protocoalele TCP, UDP, IP, ARP, ICMP, DLC și MAC ceea ce inseamnã ca poate rãspunde la cererea unui sistem care se dorește sã foloseascã conectivitatea la Ethernet sau Internet.
3.6 Diagrama bloc W3100
Stiva de protocoale implementatã in W3100:
MAC (Media Acces Control) este un subnivel al nivelului al doilea OSI (Open Systems Interconnection) -Data Link. Acest subnivel se ocupa de adresarea si accesul canalului pe care se va face comunicația. Ralizeazã mecanismul de adresare dupa numarul unic numit MAC. Acesta corespunde numai unui singur device dintr-o rețea si identificarea lui intr-o comunicatie se poate face ușor prin aceasta adresa unicã.
DLC (Data Link Control) este un serviciu oferit de nivelul Data Link al modelului OSI ce consta intr-un set de reguli pentru transmiterea datelor intre nodurile retelei.
IP (Internet Protocol) face parte din nivelul Data Link, identifica si alocã adresele IP ale membrilor retelei.
ARP (Address Resolutin Protocol) este o metoda prin care se gasește adresa fizicã a gazdei.
ICMP (Internet Control Message Protocol) este folosit pentru semnalizarea și diagnosticarea problemelor din rețea. Aceste mesaje sunt incapsulate in interiorul pachetelor IP. Atunci când se dã comanda PING se trimit mesaje ICMP de tip cerere in ecou cãtre calculatorul țintã și așteaptã de la acesta mesaje ICMP de tip rãspuns in ecou. Daca acesta nu este primit inseamnã cã este ceva in neregulã cu starea conexiunii. ICMP se ocupa implicit de timpul de viata al pachetului – un contor care numara cate salturi a facut pachetul (salt=trecerea dintr-un nod in altul), valoarea maxima fiind 255. Cand un pachet are valoarea contorului 0 (adica a petrecut cam mult timp pe drum), acesta este distrus iar hostul sursa este avertizat de pierderea datelor.
TCP (Trasmission Control Protocol) este protocolul de Transport orientat de conexiuni descris in modelul TCP/IP.
UDP (User Datagram Protocol) este protocolul de Transport neorientat pe conexiune descris de asemenea in modelul TCP/IP.
Interfata MCU (MicroController Unit) este interfata cu microcontroller-ul si consta in semnalele descrise in figura…
Din aceste semnale pentru conectivitatea Ethernet a consolei s-au folosit semnalele:
Mode0, Mode1, Mode2 – semnale bidirectionale prin care microcontroller-ul selecteaza modul de operare cu W3100 (modul I2C, de test, cu clock extern, cu clock intern); in cazul nostru selectam modul I2C.
/INT – semnal de ieșire pentru intreruperi, este singurul semnal prin care W3100 comandă PIC-ul; este folosit de exemplu atunci când modulul primește date din Ethernet in buffer-ul său RX și semnalizează primirea de noi date către PIC.
ADDR (14:8) – semnale de intrare prin care PIC-ul face adresarea modulului.
SCL – linia de ceas a magistralei I2C comandată de PIC pentru sincronizarea comunicației. Frecvența cu care se face comunicația este stabilită in programul din anexa… cu valoarea 400Khz.
SDA – linia de date a magistralei I2C , este bidirecțională folosită pentru scrierea și citirea de date de la PIC la W3100.
RESET – semnal de reset comandat de PIC, activ pe 0 logic.
Interfața MII (Media Independent Interface) se ocupă de conexiunea fizică pentru Ethernet. De aici se stabileste standardul folosit 10BaseT sau 100BaseT, în cazul de față se folosește 100BaseT ceea ce înseamnă că vom avea o rată de transfer de 100Mb/s și cablu UTP crossover.
Figura 3.7 Cablu UTP crossover
DPRAM (Dual Ported Random Access Memory) este o memorie RAM care permite multiple operați de scriere sau citire în același timp, are două porturi separate de citire si scriere, fiecare fiind controlat de care o adresa proprie deci se comporta ca doua memorii paralele individuale.
MAG JACK conține intrarea pentru conectorul RJ45 si are integrat transformatorul de linie care pe placa de rețea a calculatorului este un integrat separat. RJ45 este tipul de conector folosit pentru legatura intre modulul NM7010A și PC.
Figura 3.8 Conectorul RJ45
2.3.1 Realizarea conectivitatii Ethernet prin UDP
Setările din interiorul chipului W3100 se fac prin intermediul PIC-ului: – primește pe serială (UART) programul care trebuie sa-l ruleze și care constă în setări de regiștri ai W3100A. Setările se fac prin scrieri successive pe seriala I2C către adresa device-ului care este 0X00h și implicit către adresele regiștrilor care vrem să-i setăm . Pentru aceste setări trebuie să cunoaștem configurația memoriei chip-ului W3100A.
Figura 3.9 Memoria internă a W3100
Memoria internă este organizată astfel:
0X0000…0X00FF: spațiu pentru regiștri de control;
0X0100…0X01FF: spațiu pentru regiștri shadow;
0X2000…0X3FFF: spațiu nefolosit;
0X4000…0X5FFF: Buffer-ul pentru trimis date (TX);
0X6000…0X7FFF: Buffer-ul pentru date primite (RX) ;
Datele primite de modul din Ethernet sunt stocate in buffer-ul RX și PIC-ul poate doar să-l citească, iar datele care trebuiesc trimise spre Ethernet sunt trimise de PIC în buffer-ul TX de unde nu se poate executa citirea.
UDP, spre deosebire de TCP, nu asigura control de erori si nici de flux, ceea ce il face mai rapid decit TCP, si este folosit in unele aplicatii unde respectarea stricta a secventei pachetelor si a corectitudinii acestora nu este necesara. In practica orice implementare TCP/IP care nu este exclusiv pentru rutare este de preferat sa se foloseaca UDP care este in esență o interfața de aplicație către IP , nu adaugă nici un fel de siguranță, control al transmisiei. Folosește portul drept multiplexor/demultiplexor pentru trimiterea sau primirea dategramelor. Datagrama este unitatea de informație ce se transmite prin UDP. Cum se vede in figura, datagrama are un antet de 8 octeti.
Figura 3.11 Structura unei datagrame
TLEN cu lungimea de 2 octeți contine lungimea datagramei (antet și date);
SIP cu lunigimea de 4 octeți coține adresa IP a sursei;
Sport are lungimea de 2 octeți, coține portul sursei;
UDP data este informația propriuzisă, nu are o dimensiune stabilită
Antetul (TLEN, SIP, Sport) este folosit pentru detecția eventualelor erori. La recepție știm de la cine am primit datagrama uitându-ne în SIP și Sport iar cu ajutorul lui TLEN cu dimensiunea UDP data, dacă nu sunt egale înseamnă că s-au pierdut din date și cel care a primit poate să mai facă o cerere către IP-ul și portul sursă.
2.3.1.1 Inițializare modul
În primul rând tebuie să ne asiguram daca pinul de intreruperi de la modul
spre PIC este setat ca intrare in PIC:
Comanda TRISBbits.TRISB0 = 1 setează pinul RB0 al PIC-ului ca fiind intrare pentru semnalul de intreruperi dat de modul de la pin-ul /INT (JP1:2).
PIC-ul are două semnale de RESET către modul și trebuie sa ne asigurăm că am setat pinii PIC-ului care i-am stabilit pentru cele 2 semnale ca fiind ieșiri:
TRISA = 0; s-a setat tot portul A ca fiind ieșire pentru că doi pini (RA2 și RA3 îi folosim pentru RESET, respectiv /RESET) iar ceilalți trei pini ai portului nu sunt folosiți.
Ambele semnale de RESET sunt active pe 0logic, deci trebuie să le dăm valoarea:
PORTAbits.RA2=1;
PORTAbits.RA3=1;
pentru a nu ține modulul în starea de RESET.
Al doilea pas este realizarea setărilor de inițializare a chipului W3100.
Etapele de inițializare sunt descrise in figura, funcția de inițializare void initNet(void) este in anexa 1.2.
Aceste inițializari le face PIC-ul prin scrierea unor regiștri speciali după cum urmează:
Setarea Gateway, SubnetMask, adresa MAC pentru NM7010A și adresa IP
Vom scrie următorii regiștrii:
Spațiul memorie ocupat de acești regiștrii fiind continuu s- a ales scrierea o singura data de la adresa de inceput a primului registru pâna la adresa de sfarsit a ultimului registru adica incepande de la 0X80 pana la 0X91. Acest spațiu este ocupat de 18 octeți, de aceea s-a construit un vector ce conține pe fiecare pozitie valorea de inițializare dorita pentru fiecare registru. Vectorul este :
network[18]={10,40,13,1,255,255,0,0,0X00,0X50,0XFC,0X8C,0XA4,0X3D,10,40,13,14}.
Trebuiesc făcute și setări asupra buffer-elor de recepție și transmisie date. Modulul poate comunica independent și in același timp pe patru canale; pentru fiecare canal trebuie setate dimensiunile buffer-ului RX și TX.
a) b) c)
Figura 3.10 Configurarea memoriei RX sau TX în funcție de canalele folosite
a) 2KB alocați ficărui canal; b) 1KB,1KB,2KB,4KB alocați canalui CH0,CH1,CH2,respectiv CH3; c) toți cei 8KB alocați canalului CH0
Figura 3.11 Registrul RMSR respectiv TMSR
Pentru buffer-ul RX aceste setări se fac prin setarea registrului RMSR (Rx data Memory Size Register), iar pentru buffer-ul TX cu ajutorul registrului TMSR (Tx data Memory Size Register)
Pentru configurațiile din figura 3.10 valorile regiștrilor trebuie să fie:
a) RMSR/TMSR<=0X55
b) RMSR/TMSR <=0X90
c) RMSR/TMSR<= 0X03
In anexa 1.2 functia cu care se seteaza acesti registri este:
scrie_str (0x00,0x95,rx_tx_mem_size,2);
RMSR și TMSR sunt la adrese succesive: 0X0095 și 0X0096, de aceea s-a scris vectorul de 2 caractere: rx_tx_mem_size[2]={0x03,0x03} începâmd de la adresa 0X0095 pentru setarea buffer-elor pe câte 8 KB, pe un singur canal CH0 (ca în figura 3.10 c)) .
Stabilim adresa IP a destinației prin setarea registruluiDIR (Destination IP Address Register) de la adresa 0X00A8 pe 4 octeți
scrie_str (0x00,0xA8,dest_ip,4);
Am stabilit adresa destinației (adică a PC-ului server) în vectorul dest_ip[4] = {10,40,13,11}.
Stabilim portul destinație prin scrierea registrului DPR (Destination Port Register) pe 2 octeți de la adresa 0X00AC prin funcția:
scrie_str (0x00,0xAC,dest_port,2); unde dest_port[2] = {0X27,0X0F} adică s-a ales portul 9999.
Se seteaza portul prin registrul SPR (Source Port Register) aflat la adresa 0X00AE. S-a ales același port ca cel pentru destinație 9999.
sursa scrie_str (0x00,0xAE,dest_port,2);
Alegem protocolul de transport care vrem sa-l folosim, TCP sau UDP prin setarea CO_SOPR (Socket Option/Protocol Register of Channel 0). Se află la adresa 0X00A1 și daca dorim o comunicatie TCP trebuie setat 0X01 iar pentru UDP 0X02.
Alegem UDP: scrie_str (0x00,0xA1,set,1); unde set este 0X02.
Se inițializeaza sistemul cu valorile de mai sus dând comanda sys_init prin scrierea registrului de la adresa 0X0000, C0_CR (Channel 0 Command Register)
scrie_str (0x00,0x00,set,1); unde set este 0X01;
Figura 3.12 Registul C0_CR
Tot la registrul C0_CR se dă comanda sock_init prin comanda
scrie_str (0x00,0x00,set,1); unde set este 0X02.
2.3.1.2 Verificarea prin ARP și ICMP
După ce s-au făcut aceste inițializările pentu W3100 verificăm dacă putem obține o conexiune de la PC către Modul prin ICMP.
ARP (Address Resolution Protocol). Fiecare adaptor ethernet este produs cu o adresa fizica inscrisa in cadrul hardware'ului sau, numita Media Access Contro–aka MAC address. Fiecare producator are grija ca aceasta adresa de 6bytes sa fie unica si Ethernet se baseaza pe unicitatea acestor identificatori pentru a livra fiecare mesaj. In momentul in care un device incearca sa trimita ceva catre un alt device din retea prin Ethernet, in primul rand trebuie sa determine adresa MAC a tintei. Aceste mapari IP-to-MAC sunt derivate dintr-un cache ARP aflat in cadrul fiecarui device. Daca adresa IP nu apare in cache-ul device-ului, acesta nu poate trimite un mesaj catre "tinta" sa. El trebuie mai intai sa facă broadcast o cerere ARP in subnetul local, host-ul cu IP-ul respectiv va trimite un ARP reply ca raspuns al broadcastului, permitzand in acest fel device-ul care vrea sa trimita mesajul sa updateze cache'ul si sa inceapa trimiterea efectiva a mesajului. În figura 3.13 se observă că în urma folosirii softului Ethreal, s-au captat 2 pachete ARP. În figura 3.14 este ilustrată pe poziția 1 și 2 conținutul pachetelor.
Prima dată sursa cu MAC-ul 00:19:5b:b9:3d:5e cu IP-ul 10.40.13.11 , adică PC-ul trimite un mesaj broadcast: cine are adresa IP 10.40.13.14? Urmează răspunsul: 10.40.13.14 a fost identificat cu MAC-ul 00:50:fc:8c:a4:3d.
ICMP (Internet Control Message Protocol) este un protocol din suita TCP/IP care folosește la semnalizarea și diagnosticarea problemelor din rețea. Probabil cel mai utilizat program care se bazează pe ICMP este ping. Trimite mesaje ICMP de tip echo request către calculatorul țintă și așteaptă de la acesta mesaje ICMP de tip echo reply. Dacă acestea nu sunt primite, se poate presupune că ceva este în neregulă cu conexiunea dintre cele două calculatoare.
Toate pachetele IP și datagramele au un câmp special numit TTL (Time To Live). Acest câmp este decrementat de fiecare dată când trece printr-un router. Pentru a evita buclele de routare, în momentul în care câmpul TTL ajunge la zero pachetul nu este trimis mai departe. În această situație, router-ul care a decrementat câmpul TTL la zero trimite către calculatorul-origine al pachetului un mesaj ICMP de tip time exceeded. În cazul sistemului de față, TTL are valoarea 64 pentru că conexiunea este directă, nu se face prin intermediul altor echipamente de rețea și timpul de răspuns al modulului este mai mică de 1ms.
Figura 3.12 Răspunsul modului la Ping
Figura 3.13 Captarea pachetelor ICMPși ARP prin Ethreal
Figura 3.14 Structura pachetelot ARP și ICMP
2.3.1.3 Transmisia datelor
După efectuarea inițializărilor asupra modulului putem să trmite date de la modul la server. PIC-ul trimite prin I2C datele în buffer-ul TX. Funcția de trimitere date este trimitData(char info[]) din anexa 1.2, unde parametrul info[ ] este un vector ce conține datele trimise spre Ethernet. În cazul sistemului nostru, acesta va trimite link-urile de la consolă la server.
Figura 3.15 Modul de transmisie
Calculam lungimea datelor ce le trimitem in TX și stabilim valorile pentru pointerii C0_TW_PR(Tx Write Pointer Register of Channel x) și CO_TA_PR(Tx Ack Pointer Register of Channel x). Inițial acești pointeri sunt egali. Când se primesc date de la PIC pentru transmisia Ethernet , C0_TW_PR crește cu dimensiunea datelor.
Figura 3.16 Funcția TrimitData (link )
În figura 3.16 este prezentată organigrama funcției TrimitData(link).
se calculeaza lungimea link-ului (size);
se setează pointerii: C0_TW_PR =size și CO_TA_PR=0; C0_TW_PR este de la adresa 0X0040 pe 4 octeți și CO_TA_PR de la 0X0044 tot pe 4 octeți. S-a format vectorul info_start[8]= {0,0,0,size,0,0,0,0};
trimitem la TX datele de dimensiunea size , scriem de la începutul buffer-ului TX la adresa 0X40000 vectorul info de dimensiunea size;
dăm comanda send prin seatrea registrului CO_CR (figura 3.12) cu valoarea 0X20.
După comanda send pointerul C0_TA_PR crește odata cu trimiterea datelor spre Ethernet, la finalul transmisiei având și el valoarea size (figura 3.15).
La o noua transmisie se apelează din nou funcția TrimitData(info) pointerii se reinițializează după descrierea de mai sus.
2.3.1.4 Recepția datelor
Figura 3.18 Funcția receveidRX
=== 3 comunicatia seriala ===
Cap.3 Comunicația serială
Utilizarea unei magistrale seriale reduce semnificativ costurile de cablaj, si timpul de realizare a unor prototipuri. Este solutia ideala pentru realizarea unor sisteme incapsulate bazate pe microcontroloare.
Dezavantajul utilizarii unei astfel de magistrale este reducerea semnificativa a vitezei de comunicatie intre componentele sistemului. Acest dezavantaj este diminuat in cazul microcontroloarelor la care majoritatea componentelor sunt in acelasi circuit integrat ( unitate centrala, memorie ROM, memorie RAM, porturi de intrare/iesire, etc.) si numai anumite componente specifice aplicatiei (ex : convertoare) trebuie sa comunice pe magistrala seriala.
Transmisia datelor se face bit cu bit. Datele transmise fiind organizate in octeti (cate 8 biti), trebuie serializate la transmisie și deserializate la recepție intrucat in transmisia serialã informatia este trimisa bit dupa bit. Pentru aceasta, la transmisie se utilizează un registru paralel-serie iar la recepție un registru serie-paralel. Registrul paralel-serie este utilizat pentru transformarea unei date de 8 biți intr-un sir de biți. Registrul serie-paralel este utilizat pentru transformarea unui sir de 8 biți intr-un octet.
Comunicația seriala utilizează două metode:
asincrona : se transfera cate un octet
sincrona: se transfera blocuri de octeți (caractere)
3.1. Comunicatia seriala asincrona (UART) PIC – PC
In modul Asincron, emitatorul nu trimite un tact deodata cu datele, ci insereaza un pseudo-impuls de tact, cunoscut ca Bit de Start, in fata fiecarui octet transmis. Comunicația asincrona este frecvent utilizata pentru transmisia orientată pe caracter;
comunicația sincrona este utilizata pentru transmisia orientata pe blocuri de date.
Pentru conectarea PIC-ului 18f252 cu calculatorul s-a folosit modul asincron si anume standardul RS232, des intâlnit mai ales in conexiunile unui calculator cu alte periferice.
Deci avem o comunicatie full duplex (figura 3.1), adică transmisia datelor se face în ambele direcții:
o linie de receptie date de la calculator la PIC
o linie de transmisie date de la calculator la PIC
Linia de masã este folosită pentru eliminarea eventualelor perturbații ce pot apare pe liniile RX și TX.
Figura 3.1 Comunicatia full duplex
Conectarea PIC-ului 18f252 la PC se poate face pe unul din porturile PC-ului (COM1, COM2, etc.). PIC 18f252 are doi pini pe portul C numiți Tx (pin17) și Rx(pin18) specializati pentru transmitere respective receptie date pe UART(Receptie si Transmisie Universala in mod Asincron). Acești pini sunt compatibili TTL, prin urmare este nevoie de un circuit de adaptare pentru conversia nivelelor de semnal TTL de la PIC cu semnalele de tip CMOS de la PC. Pentru această adaptare s-a utilizat circuitul integrat MAX232N.
Modul in care un octet furnizat de catre utilizator este trimis pe linia TX, respectiv receptionat pe linia RX este invizibil utilizatorului. Aceste operatiuni sunt executate la nivel hardware de portul serial implementat cu circuitul UART. Toate calculatoarele ofera porturi seriale pentru conectare de modem sau alte echipamente UART. Acest circuit face legatura intre magistrala de date paralela, din interiorul calculatorului, si linia seriala din exterior. Pe lânga liniile de date si control, circuitul ofera si linii de semnalizare a erorilor de cadrare, depasire, paritate si semnale de intrerupere pentru a anunta procesorul de sosirea unei date. Porturile seriale pot fi configurate la nivel utilizator prin interfete grafice oferite de sistemul de operare, care permit stabilirea parametrilor unei comunicatii seriale: viteza de lucru, numarul de biti de date, tipul de paritate, modul de control al fluxului de date.
Pentru fiecare caracter ASCII avem o transmisie independenta, cu adaugarea bitilor de Start, Stop si Paritate. Viteza de lucru se stabileste manual la inceputul transmisiei. Pentru informatia de faza, receptorul trebuie sa detecteze inceputul bitului de Start. Pentru ca aceasta metoda sa functioneze, trebuie sa existe, o perioada de repaus intre caractere, realizata cu bitul de Stop.
Datele sunt transmise sub formatul:
Figura 3.2 Fomatul datelor
Incomunicația asincrona fiecare caracter este încadrat intre biți de start și biți de stop. De fapt totdeauna se folosește un bit de start (0 logic) și de obicei un bit de stop (1 logic).În figura 3.2 este reprezentat modul de transmisie al unui octet.
Presupunem că se transmite caracterul ‘A’ al cărui cod binar este 0100 0001. Se observa ca transmisia biților se face în ordinea: START(0) ,D0(1), D1(0)… D7(0), STOP(1).
Se transmite mai întâi bitul cel mai puțin semnificativ al octetului (LSB – D0). Se observa ca de fapt pentru transmisia unui caracter se utilizează 10 biți. Sunt și alte posibilități de transmisie. De exemplu se poate prevede un bit suplimentar care sa reprezinte paritatea octetului. Scopul acestui bit suplimentar este verificarea păstrării
integrității datelor. De aceea, programatorul trebuie sa cunoască datele de catalog ale portului serial și modul lui de programare.
Rata de transfer reprezintă numărul maxim de biți ce pot fi transmiși intr-o secunda.
Este data în bps (bites per second). Alt termen des utilizat pentru bps este baud rate. Cei doi termeni nu sunt identici. Termenul baud rate este preluat din terminologia modemurilor unde este definit ca numărul de schimbări pe secunda ale unui semnal. Sunt situații când o singura modificare a semnalului conduce la transferul mai multor biți de date. Totuși și dacă nu se utilizează modemul se pot utiliza ambii termeni. Rata de transfer depinde de portul de comunicație al sistemului. De exemplu, pentru PC-urile mai vechi rata de transfer de date este 100… 9600 bps. Noile PC-uri suporta o rata maximă de transfer de 115.2 Kbps.
In anexa 1.1 este prezentată inițializarea comunicației pe seriala UART între PIC și PC cu funcția OpenUSART . Aceasta se gasește în librăria usart.h al compilatorului C18 din Mplab IDE (programatorul folosit pentru realizarea soft-ului implementat în PIC) OpenUSART are parametrii:
USART_TX_INT_OFF – întreruperi dezactivate pentru transmisia (TX);
USART_RX_INT_ON – întreruperi activate pentru recepție (RX);
USART_ASYNCH_MODE – selecția modului asincron (UART);
USART_EIGHT_BIT – comunicație pe opt biți;
USART_CONT_RX – recepție continuă;
USART_BRGH_HIGH, 10 – comunicație de mare viteză cu rata de transfer 115200 care se calculează după formula Fosc / (16*(spbrg+1)) unde Fosc este frecvența de lucru a PIC-ului dată de cuațul de 20 MHz.
3.2.1 Interfata pentru comunicatia PIC – PC Tiny Bootloader
Interfata folosita pentru realizarea proiectului de fatã este Tiny Bootloader realizat de asistentul inginer Claudiu Chiculița. Tiny Bootloader este un program ce trebuie scris in memoria flash a PIC-ului cu un programator extern. Dupa realizarea acestei operatiuni se poate trimite pe seriala programul dorit a fi scris in PIC (trebuie sa aibe extensia .hex)
Figura 3.3 Interfata Tiny Bootloader
Tiny Bootloader ofera o interfața cu utilizatorul de la care se fac setările:
– se alege fișierul .hex pe care dorim să-l încărcăm în PIC (se dorește încărcarea fișierului link.hex care se află în directorul Prog_link);
– se alege rata de transfer, lucrăm cu 115200 bps;
– se alege portul de la PC la care este conectată seriala, în cayul PC-ului cu care s-a lucrat este COM4;
– butonul de scriere a programului în PIC;
– butonul de verificare PIC.
Figura 3.4 Scrierea si citirea pe serială
În figura 3.4 este aratat modul de trimitere și primire a datelor din această interfață. S-a scris în fereastra de lângă butonul de SEND ce anume vrem să trimitem PIC-ului, apăsăm butonul și în fereastra de mai jos apar datele trimise de PIC PC-ului în urma executării fișierului link.hex.
3.2 Comunicatia serială sincronă
In modul Sincron, caracterele sunt transmise rapid, unul dupa altul, fara biti de Start si de Stop. Pentru sincronizare, mesajul transmis este precedat de caractere speciale de sincronizare, detectabile de circuistica receptorului. Acestea sunt transmise incontinuu si cand nu sunt date de transmis. Sincronizarea se face deci cu ajutorul unei linii specializate pentru sincronizare pe care se trimit impulsuri care indica inceputul si sfarsitul transmisiei unui octet (figura 3.5)
Figura 3.5Comunicația serială sincronă
3.2.1. Magistrala I2C
A fost introdusă de Philips și este destinată legării într-un sistem a microcontrolerelor. Magistrala I2C (Inter Integrated Circuits) este o magistrală de cost redus, ușor de implementat și de viteză moderată: până la 100 kilobiți pe secundă pentru bus standard și până la 400 kilobiți pe secundă pentru specificații extinse. Folosește doar două linii (figura 3.6):
SDL(serial data line) – linia serială de date
SCL (serial clock line) – linia serială de ceas sau tact, care indică date valide pe bus.
În sistemul nostru cel care inițiază transferurile de date (scriere sau citire) este PIC- ul , deci va fi numit slave iar celălalte device+uri cu care comunică prin I2C se vor numi slave ( modulul NM7010A, memoria EEPROM 24AA512 sau alt dispozitiv extern sistemului întrucât avem un conector special pentru I2C pe placă în cazul în care dorim o comunicație I2C cu alt dispozitiv decât cele deja montate în sistem).
Figura 3.6 Conectarea device-urilor la liniile SDA și SCL
Caracteristici principale:
transfer serial sincron cu viteza maximă 100 kbps (400 kbps la specificațiile extinse);
magistrală multiplu-master și arbitrare cu prioritate fixă;
toate dispozitivele sunt legate la ambele linii ale magistralei (SDL și SCL)
liniile SDL și SCL sunt "trase" la +5V prin rezistoare (surse de curent la specificațiile extinse) "trage sus"
adrese pe 7 biți pentru dispozitivele cuplate la magistrală
numărul maxim de dispozitive este limitat nu de numărul de biți de adresă ci de capacitatea parazită maximă pe linie de 400 pF
Fiecare nod al rețelei este conectat la ambele linii seriale. Unele noduri pot fi master de magistrală, iar magistrala permite mai mult decât un master.
Aspecte funcționale:
biții de date / adrese se transmit serial, în octeți succesivi, pe SDL începând cu MSB – cel mai semnificativ bit al octetului.
biții pe SDL se modifică de către master doar pentru SCL = low (jos). Receptorul citește SDL pentru starea SCL = high (sus).
Masterul este dispozitivul care poate iniția un transfer și poate genera semnal de ceas pe SCL.
După fiecare 8 biți transmiși pe SDL urmează un semnal (eveniment) de ACKNOWLEDGE (confirmare). Pentru a confirma recepția corectă, prin ACK, receptorul trage SDL jos pe timpul celui de-al noualea impuls de ceas.
Oricare receptor poate trage, dacă este nevoie, SCL jos (eveniment de WAIT) pentru a întârzia un octet de date care urmează unui octet ce a sosit la aceeași adresă.
Masterul este responsabil pentru generarea semnalului de ceas pe SCL, iar sclavul poate prelungii perioada JOS a ceasului (nu și pe cea SUS) atât cât este necesar.
Magistrala I2C este proiectată ca magistrală multimaster – oricare dintre mai multe dispozitive poate funcționa ca master la momente diferite de timp. Ca urmare, nu există un master global care să genereze semnalul de ceas, ci fiecare master controlează atât SCL cât și SDL atunci când transmitedate.
Când magistrala este liberă, atât SCL cât și SDL sunt în stare SUS.
Dacă două dispozitive încearcă să controleze aceeași linie (SDL sau SCL) fiecare din cei doi masteri trebuie să asculte magistrala în timpul transmisiei pentru a fi sigur că nu interferează cu alt mesaj – dacă dispozitivul receptionează o valoare diferită față de cea pe care încearcă să o transmită, atunci el știe că se interferează cu un alt mesaj.
Fiecărui dispozitiv I2C i se alocă o adresă. Adresele dispozitivelor sunt determinate de proiectantul sistemului, de obicei ca parte a programului driver pentru I2C. Adresele nu trebuie să se repete la două dispozitive din sistem. O adresă de dispozitiv are 7 biți conform standardului I2C (figura 3.7).
Figura 3.7 Adresarea pe I2C
O tranzacție de magistrală constă dintr-o serie de octeți transmiși: o adresă și apoi unul sau mai mulți octeți de date. Când un master vrea să transmită date la un slave, el transmite adresa slave-ului, urmată de date. Pentru că un slave nu poate iniția un transfer masterul trebuie să transmită o cerere de citire cu adresa slave-ului și apoi să permită slave-ului să transmită date. De aceea o transmisie de adresă include adresa de 7 biți și 1 bit pentru direcție (cu valoare 0 pentru scriere de la master către slave și 1 pentru citire de la slave la master).
O tranzacție pe magistrală este inițiată printr-un semnal de start și terminată printr-un semnal de sfârșit / stop, după cum urmează:
Un start este semnalat prin lăsarea liniei SCL SUS și prin transmisia unei tranziții de la1 la 0 pe SDL
Un stop este semnalat menținând SCL SUS și prin transmisia unei tranziții de la 0 la 1 pe SDL.
Evenimentele de start și stop pot fi succesive la aceeași adresă. Un master poate scrie și apoi să citească (sau să citească și apoi să scrie) prin transmiterea unui start după transmisia datelor, urmat de o altă adresă de transmisie și apoi de alte date. Graful de tranziție al stărilor de bază pentru acțiunile masterului într-o tranzacție de magistrală sunt arătate în figura 3.8.
Figura 3.8 Graful stărilor pentru master
Formatul pentru câteva tranzacții complete de magistrală este aratat în figura 3.9. În primul exemplu, masterul scrie doi octeți la slave adresat. În al doilea, masterul cere o citire de la un slave. În a treia, masterul scrie un octet la sclave și apoi transmite un alt semnal de start pentru a iniția o citire de la slave.
Figura 3.9 Tranzacții master- slave
Transmisia începe atunci când SDL este tras jos în timp ce SCL ramâne sus. Dupa această condiție de start linia de ceas este trasă jos pentru a iniția transferul de date. Pentru fiecare bit linia de ceas trece sus, iar pe linia de date se transmite valoarea 1 sau 0. La sfârșitul fiecărei transmisii de 8 biți se transmite o confirmare (acknowledge), indiferent dacă a fost vorba de o adresă sau o dată. Pentru confirmare, transmițătorul nu mai trage jos SDL, permițând receptorului să tragă SDL la 0 dacă a primit corect octetul. După confirmare, SDL trece sus în timp ce SCL este sus, pentru a semnaliza condiția de stop.
Figura 3.10 Transmisia unui octet pe I2C
3.2.1.1 Comunicatia I2C intre PIC si memoria EEPROM 24AA512
Înainte de realizarea comunicației I2C intre PIC si modulul NM7010A au fost necesare efectuarea unor teste pentru o mai bună ințelegere a modului I2C. Astfel s-a folosit memoria EEPROM 24AA512 produsă de firma Microchip care un spațiu de memorie de 512kb.
Figura 3.11 I2C între NM7010A si EEPROM 24AA512
Adresarea memoriei se face pe 7 biti.Primii 4 biti au o valoare fixă (1010), aceștia se numesc cod de control. Prin intermediul pinilor de adresare A0,A1,A2 ai memoriei, numiti biți chip select avem libertatea de a seta adresa dorită având grijă ca în cayul in care mai sunt si alte dispoyitive conctate la magistrala I2C să alegem o altă adresă decât una deja existentã.În cazul nostru memoria este primul device care se conectează la magistrală și s-au setat pinii : A0 și A1 cu valoarea 0 prin punerea lor la masă și A2 cu valoarea 1 prin conectarea lui la alimentare, respectiv +5V. Ultimul bit de adresare indica operațiunea efectuată de master asupra slave-ului. Se numește bit de scriere sau citire. Astfel dacă PIC-ul citește din EEPROM acest bit va avea valoarea 1 iar dacă vrea să scrie, bitul va avea valoarea 0. Deci dacă avem o operație de scriere în memorie adresa EEPROM-ului va fi 0XA2h (1010.0010 în binar) iar dacă avem o operație de citire adresa va fi 0XA3 (1010.0011 în binar).
Fig.3.12 Configurația octetului de adresă
Adresarea unei locații de memorie se face pe 2 octeți, spațiul de memorie fiind cuprins intre 0X0000 și 0XFFFF. Cum se vede și in figura de mai jos , control byte este octetul cu care se adresează EEPROM-ul iar address high byte și address low byte sunt primul , respectiv al doilea octet care face adresarea locației de memorie.
Figura 3.13 Adresarea unei locații de memorie
Programul realizat in MPLAB C18 din anexa 1 realizeaza scrierea unui vector de 100 caractere ce conține cifre de la 0 la 99 de la prima adresă a memoriei (0X0000h) și citirea vectorului dar incepând de la adresa (0X0010h).
În prima fază se face inițierea magistrelei I2C prin comenzile:
OpenI2C(MASTER , SLEW_ON);
SSPADD = 12;
OpenI2C(MASTER , SLEW_ON) setează modul master pentru PIC și frecvența comunicației I2C la valoarea 400Khz;
SSPADD = 12 setează frecvențta de 400Khz luând în considerare frecvența de lucru a PIC-ului care este 20Mhz data de cuartz ;
Operația de scriere este descrisă de funcția WR_str (char B1,char B2, char a[ ], int n) realizată în Mplab C18 :
unde B1 este primul octet de adresare locație, B2 este cel de-al doilea , a[ ] este vectorul ce vrem sa-l scriem in memorie iar n reprezintă numărul de elemente al vectorului, cu alte cuvinte n reprezintă numărul de octeți din EEPROM ocupați prin scrierea vectorului a[ ]. Scrierea începe prin trimiterea unui bit de start cu valoarea 1, urmat de byte-ul de control (adresa memoriei ) cu ultimul bit setat pentru scriere adică 0, deci în cazul nostru vom trimite valoarea 0XA2h, urmează un bit de acknoledge cu valoarea 0. Urmează octeții de adresare a locației de memorie de unde dorim să înceapă scrierea urmați de câte un bit de acknoledge , dacă dorim să scriem de la prima adresăde memorie, aceștia au valoarea 0X00h. Începe scrierea vectorului de dimensiune fixată prin n, după fiecare octet scris punându-se câte un bit de ackenoledge.
Scrierea se încheie cu un bit de stop, având valoarea 1, prin care se semnalizeaza sfârșitul operației.
Figura 3.14. Operația de scriere date pe mai multi octeți
Operația de citire este descrisă de funcția RD_str (char B1,char B2, char get[ ], int n) realizată de asemenea in Mplab C18:
Ca și scrierea , citirea începe cu un bit de start urmat de adresa EEPROM-ului si adresa de unde vrem sa înceapă citirea. Vrem să citim de la adresa 0X0010h numai 10 caractere, deci B1 (primul octet de adresare locație de memorie ) va fi 0X00h iar B2 (al doilea octet de adresare locație de memorie) va avea valoarea 0X10h. Urmează un al doilea bit de start după care trimitem adresa EEPROM-ului dar cu ultimul bit setat cu valoarea 1 pentru a semnaliza operația de citire ,deci trimitem 0XA3h. Până în acest punct fiecare octet a fost precedat de câte un bit de acknoledge.
Acum începe citirea propriu-zisă a datelor, după fiecare octet citit se pune câte un bit de acknoledge, mai puțin după ultimul octet citit unde se pune un bit de Not Acknoledge, urmat de bit-ul de stop.Fiecare octet citit este pus in vectorul get[ ] cu dimensiunea n – câte caractere citim din EEPROM.
Figura 3.15 Operația de citire date
Dacă am incheiat operațiile de citire – scriere trebuie să încheiem comunicația prin comanda CloseI2C( ).
3.2.1.2 Comunicatia intre PIC si NM7010A
Comunicația modul NM7010A – microcontroller se poate face in 4 moduri. Selecția modului dorit se face prin setarea pinilor M1 și M2 conform anexei …… unde sunt prezentați pinii modulului. S-a ales modul I2C din motive de economisire a spațiului pe plăcuță dar și pentru numarul mic de pini folosiți la PIC – numai 2 (pentru linia SDA si SCL). Aceste 2 linii erau deja folosite pentru comunicația PIC – memorie EEPROM, deci magistrala I2C devine Master – Multislave.
Selecția modului I2C s-a făcut prin punerea ambilor pini M0 și M1 la alimentare +3.3V.
Trebuie stabilită adresa modulului prin legarea pinilor de adresă [A14-A8] conform anexei ……..Având grijă să nu alocăm aceiași adresă ca a memoriei EEPROM pentru a nu apare un conflict de adresare s-a ales adresa 0X00h. Deci toți pinii [A14-A8] se pun la masă.
Figura 3.16 I2C intre PIC- modul NM7010A
Operațiile de scriere, respectiv de citire sunt asemănătoare cu cele de la memoria EEPROM, singura diferență fiind adresa device-ului. Dacă memoria avea adresa 0XA2h, modulul are adresa 0X00h. Deci dacă PIC-ul comunică cu NM7010A trebuie sa folosească adresa 0X00h. În anexa 1.2 este prezent progamul in care se realizează comunicația I2C PIC-modul.
Operația de scriere se folosește pentru setarea regiștrilor chip-ului W3100A dar și pentru trimiterea datelor în buffer-ul TX al chipului, date ce vor fi trimise mai departe spre Ethernet. Pentru realizarea comunicației I2C cu modulul, trebuie mai întâi să setăm frecvența comunicației:
Ceea ce înseamnă că se deschide seriala I2C , PIC-ul este master și lucrează pe I2C la o frecvență de 400khz. SSPADD este un registru al PIC-ului responsabil cu stabilirea frecvenței pe I2C iar ca această frecvență să fie 400khz, conform specificațiilor PIC-ului, valoarea registrului SSPADD trebuie să fie 12.
Figura 3.17 Scrierea către W3100 prin I2C
Pentru exemplificare luăm din anexa 1.2 funcția cu ajutorul căreia s-au setat regiștrii de rețea: GAR, SMR, SHAR, SIPR (Gateway, SubMask, MAC Addr, IP Addr).
Acești regiștri ocupă un spațiu continuu de memorie începând cu adresa 0x0080 până la 0X0098. Deci vom forma un vector cu 18 elemente:
pe care îl vom scrie de la adresa 0X0080, având 18 octeți.
Apelăm funcția “scrie_str (char B1,char B2, char a[], int n)” care este la fel ca cea pentru scriere de la memoria EEPROM și unde B1 este 0X00, B2 este 0X80, vectorul a[ ] este network, iar dimensiunea vectorului n este 18.
Operația de citire este folosită pentru controlul regiștrilor dar mai ales pentru citirea datelor primite din Ethernet, date care se află in buffer-ul RX al W3100A.
Figura 3.18 Citirea de la W3100 prin I2C
Dacă dorim sa aflăm valoarea unui registru trebuie în primul rând să consultăm specificațiile W3100A pentru că nu toți regiștri pot fi citiți.
În anexa 1.2 este funcția de citire “citeste_str (char B1,char B2, char get[], int n)” care este la fel ca cea de citire din memoria EEPROM.
Cu ajutorul acesteia putem sa aflăm de exemplu valoarea registrului în care se află adresa IP a modulului, accesând in programul principal funcția:
ceea ce înseamnă că citirea începe de la adresa 0X0095, datele se pun în vectorul IP care are dimensiunea 4, exact cât ne trebuie pentru adresa IP care e pe 4 octeți.
3.2.1.3 Comunicația PIC și alt device extern sitemului
Figura 3.19 I2C între PIC și alt device
Din dorința de a face sistemul cât mai adaptabil nevoilor utilizatorilor s-a ales realizarea unui port special pentru I2C în montaj. Acest port poate fi folosit de orice device care se dorește să comunice cu sistemul și care bineînțeles să poată comunica prin I2C. Utilitatea acestui port poate fi legarea display-ului LCD pe I2C. Deci avem posibilitatea să alegem modul de conectare a LCD-ului la consolă : la portul pentru seriala UART sau la portul de I2C. Cel mai frecvent vom folosi legarea LCD-ului la UART, dar dacă dorim să facem o comunicație consolă – PC, seriala I2C nu poate fi o opțiune pentru aceasta, de aceea seriala UART o vom folosi pentru legarea sistem – PC, iar LCD-ul îl vom pune pe I2C.
=== 4 aplicatia pe pic ===
Cap.4 Rutinele de manevrare a fișierelor .txt
Rutinele de manevrare a fișierelor text au fost create în MPLAB IDE folosind copilatorul C18 varianta demo descărcată de pe siteul firmei Microchip. Este inclusă o librărie specială pentru PIC 18F252 – microcontroller-ul folosit în acest sistem.
Programul este prezentat în anexa 1.1 cu numele Navigare_hiperlink.c. În afară de librăria p18f252.h s-au mai inclus:
usart.h pentru comunicația serială;
delays.h conține funcții de întreruperi pentru PIC;
stdio.h, string.h, stdlib.h librării standard ale compilatorului C;
Pentru o bună adaptare a acestui soft la aplicațiile în care poate fi folosit s-au definit următoarele:
SEPARATOR ’$’ – caracterul separator de linie, textul este stocat în memoria PIC-ului în loc de new line caracterul ‘$’;
END ‘@’ – caracterul ce marchează sfârșitul fișierului, PIC-ul primește caracterele pe seriala I2C de la modul NM7010A până la întâlnirea caracterului ‘@’;
NL 75 – numărul de linii maxim de text aceptat de PIC;
DIM 1000 – numărul maxim de caractere acceptat de PIC;
LIN_DSP 4 – numărul de linii al display-ului LCD;
COL_DSP 40 – numărul de coloane al display-ului LCD;
SUS ‘w’ – tasta de navigare în direcția sus;
JOS ‘s’- tasta de navigare în direcția jos;
STANGA ‘a’- tasta de navigare în direcția stânga;
DREAPTA ‘d’- tasta de navigare în direcția dreapta;
LINK ‘1’ – tasta de alegere link;
Utilizatorul poate oricând schimba cele definite mai sus fără a aduce schimbări majore programului. NL și DIM au fost definite la valoarea maximă limitată de memoria internă a PIC-ului a cărei dimensiune este de 1,5 kB.
Datele sunt definite într-o secțiune specială pragma udata date_mari1, această secțiune este aferentă zonei de memorie din PIC de la adresa 0x016 la 0x4FF. Această zonă a fost creată prin modificarea fișierului 18f252.lkr inclus în pachetul MPLAB IDE. Nou fișier poartă numele de 18f252modificat.lkr și prezentat în anexa 1.3.
Se declară coordonatele inițiale ale ferestrei l=0, c=0 (linie și coloana curentă a ferestrei); car este varibila care definește tipul tastei de nagiare sau link.
Fișierul text este preluat de PIC din buffer-ul RX al W3100A prin comunicația I2C.
…………………………………………………………………………………………
Luăm exemplul de aplicație prezentat în capitolul 1 – sistem de interogare util studenților. Inițial în memoria PIC-ului se află conținutul fișierului prima_pg.txt fișier ce se află și pe server. Acest fișier este:
$~UNIVERSITATEA "Dunarea de Jos" Galati~$Facultatea IEE$–––––––––––––-$Bine ati venit in facultatea noastra!$Mod de utilizare a consolei<utilizare.txt>$Scurta carte de vizita<c_d_vizita.txt>$Admiterea 2007<admitere2007.txt>$Studentii si situatiile lor scolare<studenti.txt>$Cadre didactice<profesori.txt>$Utile<utile.txt>$@
Textul pe care se face navigarea va avea structura:
~UNIVERSITATEA "Dunarea de Jos" Galati~
Facultatea IEE
–––––––––––––-
Bine ati venit in facultatea noastra!
*Mod de utilizare a consolei
*Scurta carte de vizita
*Admiterea 2007
*Studentii si situatiile lor scolare
*Cadre didactice
*Utile
4.1. Navigare pe text
Figura 4.1 Functia principala
Figura4.2 Funcția fereastra (l,c)
Figura4.5 Functia citire ()
Figura4.6 Funcția getMaxLineDim2(l)
4.2. Hiperlink
figura 4.3 Functia are_link(l )
Figura 4.4 Functia get_link(l )
=== 5 realizare cablaj ===
Cap.5 Realizarea practică
5.1 Schema electrica
Pentru proiectarea schemei electrice s-a folosit softul de proiectare a cablajelor electrice Eagle. Întrucât în standardul librăriilor nu se găsesc componentele necesare realizării acestui montaj a fost necesar crearea unei noi librării care conține componentele:PIC18F252, NM7010A, EEPROM 24AA512.
Descrierea pinilor acestor componente se face in anexa 2.
Figura 5.1 Schema electrică
IC2 este EEPROM 24AA512 cu descrierea pinilor în anexa 2.4 . Pinii 1,2,3 sunt pini de selecție a adresei memoriei. Aceștia fac selecția biților b2,b1,b0 din octetul de adresă (b7…b0). Biții b7…b4 sunt 1010 iar bitul b0 este 0 sau 1 in funcție de operația de scriere sau citire.Pinul 1 si 2 este pus la masă iar pinul 3 la alimentare pentru a se obține adresa 1010.0010 (0XA2h). Pinul 5 este pentru linia de SDA iar pinul 6 pentru linia de SCL spre PIC.
IC3 este regulatorul de tensiune BAO331 cu intrarea de 5V și iesirea de 3.3V. Montajul este alimentat la 5V dar modulul are nevoie de alimentarea la 3.3V.
IC4JP1 și IC4JP2 sunt conectorii pentru modulul NM7010A cu descrierea pinilor in anexa 2.2. La IC4JP1- pinul 1 este alimentarea (3.3V); 2 este pentru comanada de întreruperi către PIC;6 este Reset pentru W3100- se leagă la pinul corespunzător la PIC având și o rezistență de pull down (R2=18k); pinii 7,9,10,11,12,14,15 sunt de adresare pentru modul. S-a ales adresa 0X00h, deci toți acești pini se pun la masă. Pinii 16…23 sunt pentru folosirea modului Bus, iar pentru folosirea modului I2C trebuiesc legați la masă.Pinul 24 este masa. Pinii 25,26,27 sunt pentru selecția modului I2C (25 si 25 la alimentare si 27 neconectat). La IC4JP2 – pinii 1,4,7,13,14,23 se leagă la masă; 2 este Reset-ul pentru RTL80201BL și se leagă la pinul corespunzător de la PIC având o reyistență de pull up (R20=18k). Pinii 6,8,10,11,12 sunt pentru legarea ledurilor de stare ai rețelei prin câte o rezistență(R1=R2=R3=R4=R5=820); pinul 24 este pentru alimentare iar 25 și 26 sunt pentru linia de SCL, respectiv SDA. W3100 – chip-ul integrat pe NM7010A are descrierea pinilor in anexa 2.3.
SV1 este conectorul folosit pentru conunicația I2C cu alt device extern sistemului. Pinul 1,2 sunt pentru SDA, respectiv SCL, 3 masă și 4 alimentare.
SV2 este conectorul folosit pentru conectarea la seriala UART – pinii 1 și 2 sunt neconectați, 3 și 4 sunt TX respectiv RX, 5 alimentarea 5V și 6 este masa.
SV3 este un conector care conține trei pinii prin care se face selecția tensiunii de alimentare 3.3V sau 5V cu un jumper.
PIC 18F252 cu descrierea pinilor in anexa 2.1 are: pinul 1 conectat la alimenare printr-o rezistență (R1=7.5k) și la butonul de reset pentru PIC; pinul 9 și 10 sunt pentru conectarea curțului care are o frecvență de 20Mhz, condensatoarele C3=C4=15pF. Pinul 21 este pentru linia de întreruperi de la modulul NM7010A; 14 și 15 sunt pentru liniile de SCL și SDA, amândouă au câte o rezistență de pull up de R40=R21=4.6k; 17 este pinul pentru linia de transmisie pe seriala iar 18 pentru recepție.
ALIM este conctorul de alimentare.Condensatorul C2= Alimentarea se face cu 5V de la terminalul USB al PC-ului.
Seriala UART este realizată separat. Pentru adaptarea nivelelor de semnal CMOS de la PC în TTL la PIC s-a folosit MAX232n(descrierea pinilor este în anexa 2.4).
Figura5.2 Schema electrică serialei UART
Standardul RS232 presupune un conector DB9, la care s-au legat doar 3 fire.
Figura 5.3 Conectorul DB9
– PIN2 (RX) : recepție date PIC;
– PIN3 (TX) : transmisie date PIC;
– PIN5 (gnd) : masa.
5.2 Realizarea cablajului
Soluția constructivă pentru realizarea practică a sistemului este cablajul imprimat.
După realizarea schemei electrice se folosește Eagle Layout pentru trasarea cablajului. Obținem traseele cablajului imprimate pe fața plăcii (figura 5.3), traseele imprimate pe spatele plăcii (figura 5.4) și amplasarea componentelor (figura 5.5).
Figura 5.3 traseele imprimate pe fața plăcii
Figura 5.4 traseele imprimate pe spatele plăcii
Figura 5.5 Amplasarea componentelor
Etapele pentru efectuarea cablajului sunt pe fiecare parte a plăcii:
desenul realizat se imprimă pe o foaie transparentă la scară 1:1;
se pregătește placuța dublu strat, tăindu-se la dimensiunea necesară (lungime 9cm si lațime 6cm), șlefuindu-se cu o bucată de șmirghel foarte fin;
în vederea curățării de oxizi și grăsimi se degresează placa prin spălarea acesteia cu detergent, după care se clătește bine cu apă, se usucă și se evită atingerea suprafaței care va fi imprimată;
se acoperă stratul de cupru cu spray cu vopsea fotosensibilă, cât mai uniform;
se lasă să se usuce vopseaua (15min la 70gradeC sau 24h la temperatura camerei și la întuneric), după care se pune țipla cu partea cu tuș peste placă și se expune la UV (2-3min);
developarea se realizează cu o soluție de sodă caustică (7g/litrul de apă); aceasta acționează asupra fotorezistorului, înlăturându-l rămânând doar traseele;
eventualele retușuri se fac cu un marker rezistent la apă;
se face corodarea cu clorură ferică (FeCl3 30%) ;
se îndepărtează stratului protector de fotorezist depus pe traseele circuitului imprimat;
efectuarea găurilor necesare montării componentelor;
se lipesc componentele cu cositor; acestea sunt verificate mai întâi să fie în bună stare de verificare; în cazul PIC-ului, memoriei EEPROM și al modulului NM7010A – acestea pot fi distruse din cauza șocului termic la lipire, se montează pe socluri care au fost fixate pe placă.
Montajul rezultat este prezentat în figura 5.5.
Figura 5.5 Montajul final
.
– conectorul de alimentare. Alimentarea se face de la PC de pe unul din porturile USB; pe placă vom aveam o tensiune de alimenare de 5V;
– butonul de reset pentru PIC;
jumper pentru alegerea alimentării pe placa la tensiunea 5V sau 3.3V, jumperul în poziția din figura 5.5 este poziționat pentru alimenatrea la 5V;
regulatorul de tensiune care are ca intrare tensiunea de alimentare 5V și ieșirea la 3.3V;
conectorul pentru seriala UART;
conector pentru seriala I2C pentru comunicația consolei cu alt dispozitiv extern;
PIC 18f252;
soclu pentru memoria I2C – 24AA512;
Modulul NM7010A;
Chipul W3100A;
Ledurile de stare ale rețelei.
=== Anexa 1 ===
Anexa 1
1.1 Navigare_hiperlink.c
#include <p18f252.h>
#include <usart.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <delays.h>
#define SEPARATOR ‚$’ //caracter care separa liniile
#define END ‚@’ //caracter care marcheaza sfarsitul fisierului
#define NewLine „/r/n” //caracter care trece pe linia urmatoare
#define NL 75 // numar de linii
#define DIM 1000 //nr maxim de caractere
#define LIN_DSP 4 //nr linii display LCD
#define COL_DSP 40 //nr coloane display LCD
#define SUS ‚w’ //navigare sus
#define JOS ‚s’ //navigare jos
#define STANGA ‚a’ //navigare stanga
#define DREAPTA ‚d’ //navigare dreapta
#define LINK ‚l’ //alegere link
#pragma udata date_mari1 //DATABANK NAME=big1 START=0x80 END=0x4FF
//SECTION NAME=date_mari1 RAM=big1
// modificare in Linker Script pt. Configurarea a 1151 B din memoria de 1536 B
static char a[DIM]; //vectorul in care se retine fisierul fara linkuri
int poz[NL]; //vector in care se retin pozitiile separatorilor de linie
int nr_lines = 0, maxc=0;//nr_lines = numarul total de linii; maxc = dimensiunea celeimai lungi linii
#pragma udata
/*
scrie un caracter pe seriala
*/
int scrie(char c){
while(BusyUSART());
putcUSART(c);
return 0;
}
/*
trimite pe seriala comanda „new line”
*/
int scrieln(void){
while(BusyUSART());
putcUSART(‚\r’);
while(BusyUSART());
putcUSART(‚\n’);
return 0;
}
/*
citeste un caracter de la seriala
*/
char citeste(void){
char c;
while (!DataRdyUSART());
c=getcUSART();
return c;
}
/*
functia verifica daca pe linia data ca parametru exista sau nu un link/////
*/
int are_link(int linie){
int i;
for (i=poz[linie];i<poz[linie+1];i++){
if (a[i]==’<’) return 1;
}
return 0;
}
/*afla dimiensiunea liniei
*/
int get_dimensiune(int linie){
int dim,j,poz_fin=0;
poz_fin = poz[linie+1];
if (are_link(linie))
for (j=poz[linie];j<poz[linie+1];j++)
if (a[j]==’<’)
poz_fin = j;
dim = poz_fin – poz[linie];
return dim;
}
/*
functia returneaza dimensiunea celei mai lungi linii
*/
int getMaxLineDim2(void){
int dif = 0, i,j,poz_fin=0;
for (i=0;i<nr_lines-1;i++) {
poz_fin=poz[i+1];
if (are_link(i)) {
for (j=poz[i];j<poz[i+1];j++){
if (a[j]==’<’)
poz_fin = j;
}
}
if (poz_fin – poz[i] > dif)
dif = poz_fin – poz[i];
}
return dif;
}
/*
extrage link-ul (numele cuprins intre ‚<’ si ‚>’) de pe linia data ca parametru
*/
void get_link(int linie){
int d=0,j,k;
char car;
do { //navigare stanga, dreapta, link
int i=0,aux=0,dim_link=0;
if (car==STANGA) {
d–;
if (d<0) d=0;
}
if (car==DREAPTA) {
d++;
}
for (i=poz[linie];i<poz[linie+1]-1;i++){
if (a[i]==’<’) {aux=1;i++;}
if (a[i]==’>’) {aux=0;i++;}
if (aux) {
if (dim_link>=COL_DSP) break;
if (a[i+d]==’>’) {d=d-1;break;car=0;}
scrie(a[i+d]);
dim_link++;
}
}
if (dim_link<=COL_DSP)
for (j=0;j<COL_DSP-dim_link;j++)
scrie(‚ ‚);
scrieln();
for (j=0;j<LIN_DSP-1;j++) {
for (k=0;k<COL_DSP;k++)
scrie(‚ ‚);
scrieln();
}
car = citeste();
}while (car!=LINK);
//scrieln();
}
/*
Functia citeste de la seriala continutul fisierului intr-un vector.
Fisierul contine caracter separator ce marcheaza delimitarea liniilor precum si
caracter distinctiv pentru linkuri.
*/
void citire(void)
{
int i = 0,j=0;
int p = -1,p2=-1;
int k=-1;
char c = 0;
int aux=0;
int counter=0;
c=citeste();
while (1) {
if (i>DIM) {
a[i-2] = SEPARATOR;
a[i-1] = END;
c = END;
}
else{
if (c==SEPARATOR) {
++nr_lines;
poz[++p] = i;
}
if (c==’<’) aux=1;
a[i] = c;i++;
if (c==’>’) aux=0;
}
if (c==END ) break;
c=citeste();
}
maxc = getMaxLineDim2();
}
/*
functie care afiseaza pe displayul LCD
accepta ca parametri pozitia informatiei afisate (linie, coloana)
*/
void fereastra(int l, int c)
{
int i, j,aux=0,lin_cu_link;
Delay10TCYx(100);
PIR1bits.RCIF = 0;//TXREG = NULL; // Write the data byte to the USART
for (i=0;i<LIN_DSP;i++){
if (are_link(l+i) && l+LIN_DSP+i<=nr_lines) {
scrie(‚*’);
}
else {
scrie(‚ ‚);
}
for (j=1;j<COL_DSP;j++){
char car;
//int dimensiune = poz[l+i+1]-poz[l+i];
int dimensiune = get_dimensiune(i+l);
if (a[poz[l+i]+c+j]==’<’) {
lin_cu_link = poz[l+i];
aux = 1;
}
if (dimensiune < c+j+1 || (aux == 1 && poz[l+i]==lin_cu_link)) {
scrie(‚ ‚);
}
else{
if (a[poz[l+i]+c+j]==SEPARATOR) {
++j;
}
if (dimensiune>c+j){
car = a[poz[l+i]+c+j];
if (l+LIN_DSP+i>nr_lines+LIN_DSP-2) car=’ ‚;
scrie(car);
}
}
if (a[poz[l+i]+c+j]==’>’) {
aux = 0;
}
}
scrieln();
}
}
/*
Reinitializeaza variabilele folosite
*/
void reinit_vars(void){
maxc=0;
*a=NULL;
*poz=NULL;
nr_lines=0;
}
/*
Functia principala, care ruleaza programul
*/
void main(void)
{
int l=0, c=0;
char car;
OpenUSART (USART_TX_INT_OFF & //se deschide seriala
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 10);
citire();
fereastra(l,c);
while (1) {//navigare sus, jos, stanga, dreapta, link
car = citeste();
if (car==STANGA) {Delay10TCYx(1000);
fereastra (l, (c >= 1 ? –c : c));
}
else if (car==DREAPTA) { Delay10TCYx(1000);
fereastra (l, (c < maxc – COL_DSP ? ++c : c));
}
else if (car==SUS) { Delay10TCYx(1000);
fereastra ((l > 0 ? –l : l), c);
}
else if (car==JOS) {Delay10TCYx(1000);
fereastra ((l < (nr_lines-2) ? ++l : l), c);
}
else if (car==LINK){Delay10TCYx(1000);
if (l >= 0 && l < nr_lines && are_link(l)) {
get_link(l);
reinit_vars();
citire();
l=0;c=0;
fereastra(l,c);
}
}
}
CloseUSART(); //inchidere seriala
}
1.2 Ethernet_UDP.c
#include <p18f252.h>
#include <i2c.h>
#include <usart.h>
#include <delays.h>
#include <string.h>
//#include "incerc_linkbun1.c"
//#define IP 86.105.184.226
//#define MAC 00.90.F5.37.CE.7A
//#define GATEWAY 86.105.184.193
//#define SM 255.255.255.224
char network[18]={10,40,13,1,255,255,0,0,0X00,0X50,0XFC,0X8C,0XA4,0X3D,10,40,13,14};
char dest_ip[4] = {10,40,13,11}, dest_port[2] = {0X27,0X0F},rx_tx_mem_size[2]={0x03,0x03};
void scrie_str (char B1,char B2, char a[], int n)
{int i;
IdleI2C();
StartI2C();
while ( SSPCON2bits.SEN );
WriteI2C(0X00 ); AckI2C();
IdleI2C();
WriteI2C(B1); AckI2C();
IdleI2C();
WriteI2C(B2);AckI2C();
for (i=0;i<n;i++)
{IdleI2C();
WriteI2C(a[i]); AckI2C();}
StopI2C();
Delay10TCYx(100);
}
void citeste_str (char B1,char B2, char get[], int n)
{int i;
IdleI2C();
RestartI2C();
while ( SSPCON2bits.RSEN );
WriteI2C(0X00 );AckI2C();
IdleI2C();
WriteI2C(B1);AckI2C();
IdleI2C();
WriteI2C(B2);AckI2C();
StopI2C();
Delay10TCYx(100);
IdleI2C();
RestartI2C();
while ( SSPCON2bits.RSEN );
WriteI2C(0X01 ); AckI2C();
//IdleI2C();
for (i=0;i<(n-1);i++)
{IdleI2C();
get[i]=ReadI2C();AckI2C();}
get[n-1]=ReadI2C();NotAckI2C();
while ( SSPCON2bits.ACKEN );
StopI2C();
Delay10TCYx(100);
}
void citeste_int (int B1,int B2, int get[], int n)
{int i;
IdleI2C();
RestartI2C();
while ( SSPCON2bits.RSEN );
WriteI2C(0X00 );AckI2C();
IdleI2C();
WriteI2C(B1);AckI2C();
IdleI2C();
WriteI2C(B2);AckI2C();
StopI2C();
Delay10TCYx(100);
IdleI2C();
RestartI2C();
while ( SSPCON2bits.RSEN );
WriteI2C(0X01 ); AckI2C();
//IdleI2C();
for (i=0;i<(n-1);i++)
{IdleI2C();
get[i]=ReadI2C();AckI2C();}
get[n-1]=ReadI2C();NotAckI2C();
while ( SSPCON2bits.ACKEN );
StopI2C();
Delay10TCYx(100);
}
void afiseaza_addr (char B1,char B2, int nr_bytes)
{
char a[100];
int i;
citeste_str(B1,B2,a,nr_bytes);
for (i=0;i<nr_bytes;i++)
{while(BusyUSART());
putcUSART(a[i]);
Delay10TCYx(100);
}
}
void afiseaza_str(char str[],int dim){
int i;
for (i=0;i<dim;i++)
{while(BusyUSART());
putcUSART(str[i]);
Delay10TCYx(100);}
}
void initPIC(void){
int i;
TRISA = 0;
TRISBbits.TRISB0 = 1;
Delay10TCYx(100);
PORTAbits.RA2=1;
PORTAbits.RA3=1;
Delay10TCYx(100);
OpenI2C(MASTER , SLEW_ON);
SSPADD = 12;
}
void initNet(void){
char set[1];
//set Network : GAR, SMR, SHAR, SIPR (Gateway, SubMask, MAC Addr, IP Addr) = 18 Bytes de la 0x80
scrie_str (0X00,0X80,network,18);
//set DIR: Destination IP = 0xA8 + 4 Bytes
scrie_str (0x00,0xA8,dest_ip,4);
//set DPR: Destination Port No. = 0xAC + 2 Bytes
scrie_str (0x00,0xAC,dest_port,2);
//set SPR: Source Port No. = 0xAE + 2 Bytes
scrie_str (0x00,0xAE,dest_port,2);
//set RMSR + TMSR: Rx + Tx Memory Sizes Reg. = 0x95, 0x96 (2 Bytes)
scrie_str (0x00,0x95,rx_tx_mem_size,2);
// set CO_SOPR ca UDP =0XA1
set[0] = 0x02;
scrie_str (0x00,0xA1,set,1);
//set C0_CR = 0x00
set[0]=0x01;//sys_init
scrie_str (0x00,0x00,set,1);
set[0]=0x02;//sock_init
scrie_str (0x00,0x00,set,1);
}
//***** transmite***********
void trimitData(char info[]){
char size = strlen(info);
char info_start[8]={0,0,0,size,0,0,0,0};
char set[1];
// set pointeri
scrie_str(0x00,0x40,info_start,8);
//Tx – date ce vor fi transmise de la 0x4000 –> 0x6000
scrie_str (0x40,0x00,info,size);
set[0]=0x20;//send
scrie_str (0x00,0x00,set,1);
}
int addr=0x6000;
//***** receptioneaza***********
void recieveData(void){
int j;
unsigned header[8];
int size;
citeste_int(addr/256,addr%256,header,8);
size = header[0]*256 + header[1];
for (j=0;j<size;j++){
char car[1];
if (j<8) j=8;
citeste_str(addr/256+j/256,addr%256+j%256,car,1);
afiseaza_str(car,1);
}
addr += size;
}
void citeste(void){
char set[1];
while (1){
char intrerupere[1]={0x01};
citeste_str(0x00,0x08,intrerupere,1);
if (intrerupere[0] == 0x11) {
recieveData();
set[0]=0x40;//receveid
scrie_str (0x00,0x00,set,1);
scrie_str(0x00,0x08,intrerupere,1);
}
Delay10TCYx(100);
}
}
void main ()
{
char info[50] = "b1.txt",info1[50] = "b1.txt";
int i;
initPIC();
initNet();
trimitData(info);
OpenUSART (USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 10);
citeste();
Delay10TCYx(100);
while ( SSPCON2bits.PEN );
CloseI2C();
CloseUSART();
while(1);
}
1.3 18f252modificat.lkr
FILES c018i.o
FILES clib.lib
FILES p18f252.lib
CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED
CODEPAGE NAME=page START=0x2A END=0x7FFF
CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED
CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED
ACCESSBANK NAME=accessram START=0x00 END=0x15
//DATABANK NAME=gpr0 START=0x80 END=0xFF
//DATABANK NAME=gpr1 START=0x100 END=0x1FF
//DATABANK NAME=gpr1 START=0x80 END=0x11F
DATABANK NAME=big1 START=0x16 END=0x4FF
//DATABANK NAME=gpr3 START=0x357 END=0x3FF
//DATABANK NAME=gpr4 START=0x400 END=0x4FF
DATABANK NAME=gpr5 START=0x500 END=0x5FF
ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED
//SECTION NAME=alte_date RAM=var
SECTION NAME=date_mari1 RAM=big1
STACK SIZE=0x100 RAM=gpr5
=== Anexa 2 ===
2.1 PIC 18f252
2.2 Modul NM7010A
2.3 W3100
2.3 Memoria 24AA512
2.4 MAX232N
Legendă:
I : Intrare
O : Ieșire
I/O : Bi-direcțional Intrare și ieșire
P : Alimentare
=== Final ===
1. Introducere
1. Introducere
…………….
2. Aplicabilitate
2.1.Sistem de interogare studenți
…………………………..
2.2. Alte aplicații
Datoritã posibilitatii conectãrii la Ethernet si lucrul cu texte, inclusiv posibilitatea folosirii hiperlink-urilor, proiectul de fatã poate fi folosit intr-o arie larga de domenii si intrebuintãri. Alte aplicatii in care poate fi utilizata consola de interfata cu utilizatorul pentru navigare folosind hiperlink-uri cu conectare la Ethernet sunt:
Sistem de control/sigurantã – poate fi montatã la intrarea unor institutii; cel care vrea sa intre are posibilitatea de a selecta de la consolã numele, departamentul la care lucreaza si postul pe care il detine. Hiperlink-urile accesate ii pot furniza noutatile zilei din cadrul companiei, eventual programul propus pe ziua respectiva. Acest sistem poate fi si unul de sigurantã intrucât persoanei care acceseaza consola i se poate face accesul in cladire numai dupa introducerea unor date personale sau a unui cod unic.
Sistem de transfer date securizate – in diferite birouri intr-o companie pot fi instalate astfel de console.Toate fisierele se afla la un calculator central, de la console se poate face o cerere de trimitere a unui fisier prin accesarea link-ului corespunzator acelui fisier. Aceste fisiere pot fi de tip secret si pot fi numai citite de catre angajati, de aceea nu se trimit direct de la calculatorul central cãtre alt calculator, astfel se elimina posibilitatea de a fi copiat.
Agenda – pagina principala contine data si orele principale ale zilei respective, la fiecare orã daca exista vreun eveniment acesta va fi marcat prin indicarea unui link, dupã accesarea lui apar detalii despre acel eveniment (tipul de eveniment, persoanele cu care trebuie facut contactul si alte eventuale informatii).
Sistem pentru indrumarea in efectuarea unor lucrãri, procese – poate fi montat intr-o fabricã, uzinã unde procesul la care se lucreazã cere multã precizie, unde eventualã gresealã ar putea insemna pierdere materialã sau chiar umanã, muncitorii au pe LCD pasii pe care trebuie sa-i respecte pentru efectuarea acestei lucrãri, la fiecare pas al procesului descris existã câte un link pe care muncitorii il pot accesa in cazul in care sunt neclaritãti pentru prevenirea greselilor.
Sistem pentru informare turisti – poate fi montat in hoteluri sau muzee; vizitatorul poate accesa de la consolã detalii despre ce anume vizualizeaza in acel moment (un tablou, o scluptura), limba in care doreste sã vizualize informatiile, poate accesa stiri meteo, sau date istorice despre orasul sau cladirea hotelului/ muzeului in care se aflã.
3. Realizarea conectivității Ethernet
3.1. Ethernet
3.2. Modelul TCP/IP
Protocoalele sunt seturi de reguli pe care toate companiile si toate produsele software trebuie sǎ le respecte, pentru ca produsele lor sǎ fie compatibile între ele. Un protocol definește felul cum programele comunicǎ între ele. Un protocol de asemenea definește felul cum fiecare parte a pachetului are grijǎ de transferal de informație. un protocol este un set scris de directive care definește felul în care douǎ aplicații sau mașini pot comunica între ele, fiecare conformându-se cu aceleași standarde.
Modelul TCP/IP a fost creat de US DoD (US Department of Defence – Ministerul Apărării Naționale al Statelor Unite) din necesitatea unei rețele care ar putea supraviețui în orice condiții. DoD dorea ca, atâta timp cât funcționau mașina sursă și mașina destinație, conexiunile să rămână intacte, chiar dacă o parte din mașini sau din liniile de transmisie erau brusc scoase din funcțiune. Era nevoie de o arhitectură flexibilă, deoarece se aveau în vedere aplicații cu cerințe divergente, mergând de la transferul de fișiere până la transmiterea vorbirii în timp real.
Aceste cerințe au condus la alegerea a patru niveluri pentru modelul TCP/IP: Aplicație, Transport, Rețea (sau Internet) și Acces la Rețea.
1. Nivelul Aplicație
Nu este identic cu cel din modelul ISO-OSI. Acesta include ultimele trei niveluri superioare din stiva OSI. Acestea au fost comasate pentru a putea fi tratate la un loc toate problemele legate de protocoale de nivel înalt, fie ele de reprezentare, codificare sau control al dialogului. El conține toate protocoalele de nivel înalt. Primele protocoale de acest gen includeau terminalul virtual (TELNET), transfer de fișiere (FTP) și poșta electronică (SMTP).
Pe parcursul anilor la aceste protocoale s-au adăugat multe altele, așa cum sunt: DNS (Domain Name Service), NNTP, HTTP, multe altele.
2. Nivelul Transport
Este identic cu cel din modelul OSI, ocupându-se cu probleme legate de siguranță, control al fluxului și corecție de erori. El este proiectat astfel încât să permită conversații între entitățile pereche din gazdele sursă, respectiv, destinație. În acest sens au fost definite două protocoale capăt-la-capăt.
Primul din ele, TCP (Trasmission Control Protocol). El este un protocol sigur orientat pe conexiune care permite ca un flux de octeți trimiși de pe o mașină să ajungă fără erori pe orice altă mașină din inter-rețea. Acest protocol fragmentează fluxul de octeți în mesaje discrete și pasează fiecare mesaj nivelului internet. TCP tratează totodată controlul fluxului pentru a se asigura că un emițător rapid nu inundă un receptor lent cu mai multe mesaje decât poate acesta să prelucreze.
Al doilea protocol din acest nivel, UDP (User Datagram Protocol), este un protocol nesigur, fără conexiuni, destinat aplicațiilor care doresc să utilizeze propria lor secvențiere și control al fluxului. Protocolul UDP este de asemenea mult folosit pentru interogări rapide întrebare-răspuns, client-server și pentru aplicații în care comunicarea promptă este mai importatntă decât comunicarea cu acuratețe, așa cum sunt aplicațiile de transmisie a vorbirii și a imaginilor video.
Nivelul Rețea (Internet)
Scopul nivelului este de a asigura transmiterea pachetelor de la orice sursă din rețea și livrarea lor către o destinație independent de calea și rețelele pe care le-a străbătut pentru a ajunge acolo. Determinarea drumului optim și comutarea pachetelor au loc la acest nivel.
Nivelul Internet definește oficial un format de pachet și un protocol numit IP (Internet Protocol). Sarcina nivelului Internet este să livreze pachete IP către destinație. Problemele majore se referă la dirijarea pachetelor și evitarea congestiei. În consecință este rezonabil să presupunem că nivelul Internet din TCP/IP funcționează asemnător cu nivelul rețea din OSI.
4. Nivelul Acces la rețea
Se ocupă cu toate problemele legate de transmiterea efectivă a unui pachet IP pe o legătură fizică, incluzând și aspectele legate de tehnologii și de medii de transmisie, adică nivelurile OSI Legătură de date și Fizic.
Modelul de referință TCP/IP nu spune mare lucru despre ce se întâmplă acolo, însă menționează că gazda trebuie să se lege la rețea, pentru a putea trimite pachete IP, folosind un anumit protocol. Acest protocol nu este definit și variază de la gazdă la gazdă și de la rețea la rețea.
3.3. Modulul NM7010A
……………………..
3.3.1. Realizarea conectivitatii Ethernet prin UDP a modulului NM7010A
………………….
4. Comunicatia serialã
Utilizarea unei magistrale seriale reduce semnificativ costurile de cablaj, si timpul de realizare a unor prototipuri. Este solutia ideala pentru realizarea unor sisteme incapsulate bazate pe microcontroloare. Dezavantajul utilizarii unei astfel de magistrale este reducerea semnificativa a vitezei de comunicatie intre componentele sistemului. Acest dezavantaj este diminuat in cazul microcontroloarelor la care majoritatea componentelor sunt in acelasi circuit integrat ( unitate centrala, memorie ROM, memorie RAM, porturi de intrare/iesire, etc.) si numai anumite componente specifice aplicatiei (ex : convertoare) trebuie sa comunice pe magistrala seriala.
Transmisia datelor se face bit cu bit. Datele transmise fiind organizate in octeti (cate 8 biti), trebuie serializate la transmisie și deserializate la recepție intrucat in transmisia serialã informatia este trimisa bit dupa bit. Pentru aceasta, la transmisie se utilizează un registru paralel-serie iar la recepție un registru serie-paralel. Registrul paralel-serie este utilizat pentru transformarea unei date de 8 biți intr-un sir de biți. Registrul serie-paralel este utilizat pentru transformarea unui sir de 8 biți intr-un octet.
Comunicația seriala utilizează două metode:
sincrona: se transfera blocuri de octeți (caractere)
asincrona : se transfera cate un octet
In modul Sincron, caracterele sunt transmise rapid, unul dupa altul, fara biti de Start si de Stop. Pentru sincronizare, mesajul transmis este precedat de caractere speciale de sincronizare, detectabile de circuistica receptorului. Acestea sunt transmise incontinuu si cand nu sunt date de transmis. Sincronizarea se face deci cu ajutorul unei linii specializate pentru sincronizare pe care se trimit impulsuri care indica inceputul si sfarsitul transmisiei unui octet.
In modul Asincron, emitatorul nu trimite un tact deodata cu datele, ci insereaza un pseudo-impuls de tact, cunoscut ca Bit de Start, in fata fiecarui octet transmis. Astfel, pentru fiecare caracter ASCII avem o transmisie independenta, cu adaugarea bitilor de Start, Stop si Paritate. Viteza de lucru se stabileste manual la inceputul transmisiei. Pentru informatia de faza, receptorul trebuie sa detecteze inceputul bitului de Start. Pentru ca aceasta metoda sa functioneze, trebuie sa existe, o perioada de liniste intre caractere, realizata cu bitul de Stop.
Datele sunt transmise sub formatul:
4.1. Comunicatia I2C
Pe magistrala I2C transmisia este seriala sincrona ; se utilizeaza un semnal separat de ceas alaturi de semnalul de date.
Pe magistrala se pot conecta module master ( care au drept de initiativa in transferul de date) si module slave (care pot fi interogate de modulele master). Un modul master poate sa initieze un transfer daca magistrala este libera. In figura … s-a reprezentat structura mesajelor de transmisie si receptie.
4.1.1. Comunicatia I2C intre PIC si memoria EEPROM 24AA512
…………………………
4.1.2. Comunicatia I2C intre PIC si NM7010A
……………………………….
4.1.2. Comunicația I2C intre consolă si un device extern
……………………
4.2. Comunicatia seriala asincrona (UART) PIC – PC
……………….
4.2.1. Standardul RS232
Pentru conectarea PIC-ului 18f252 cu calculatorul s-a folosit modul asincron si anume standardul RS232, des intâlnit mai ales in conexiunile unui calculator cu alte periferice.
Aceasta presupune un conector DB9, la care s-au legat doar 3 fire. Un bit de 1 logic este transmis ca aproximativ -9 volti, iar un bit de 0 logic ca +9V.
Figura Conectorul DB9: Configuratia pinilor
Semnalele din figura sunt:
Pin1: DCD (Data Carrier Detect) detectie purtatoare(intrare)
Pin2 : RD – receptie dae intrare
Pin3: TD – transmisie date (iesire)
Pin4: DTR(Data Terminal Ready) – terminal pregatit (iesire)
Pin5: GND -masa
Pin6: DSR (Data Send Ready) – modem pregatit (intrare)
Pin7: RTS (Request to Send) – cerere de emisie (iesire)
Pin8: CTS (Clear to Send) – gata de emisie (intrare)
Pin9: RI (Ring Indicator) – indicator de apel (intrare)
Dintre cei 9 pini s-au folosit : PIN2 (RD) , PIN3 (TD) si PIN5 (masa),
Deci avem o comunicatie full duplex, adica o transmisie datelor se face in ambele directii:
o linie de receptie date de la calculator la PIC
o linie de transmisie date de la calculator la PIC
Linia de masã este folositã pentru ………………
Figura: Comunicatia full duplex
Conectarea PIC-ului 18f252 la PC se poate face pe unul din porturile PC-ului (COM1, COM2, etc.). PIC 18f252 are doi pini pe portul C numiți Tx (pin17) și Rx(pin18) specializati pentru transmitere respective receptie date. Acești pini sunt compatibili TTL, prin urmare este nevoie de un circuit de adaptare pentru conversia nivelelor.
S-a utilizat circuitul MAX232N al firmei …..
Acest circuit convertește nivelele TTL în nivele RS232 și invers (figura )
Modul in care un octet furnizat de catre utilizator este trimis pe linia TX, respectiv receptionat pe linia RX este invizibil utilizatorului. Aceste operatiuni sunt executate la nivel hardware de portul serial implementat cu circuitul UART (Receptie si Transmisie Universala in mod Asincron). Toate calculatoarele ofera porturi seriale pentru conectare de modem sau alte echipamente UART. Acest circuit face legatura intre magistrala de date paralela, din interiorul calculatorului, si linia seriala din exterior. Pe lânga liniile de date si control, circuitul ofera si linii de semnalizare a erorilor de cadrare, depasire, paritate si semnale de intrerupere pentru a anunta procesorul de sosirea unei date. Porturile seriale pot fi configurate la nivel utilizator prin interfete grafice oferite de sistemul de operare, care permit stabilirea parametrilor unei comunicatii seriale: viteza de lucru, numarul de biti de date, tipul de paritate, modul de control al fluxului de date.
4.2.2 Interfata pentru comunicatia PIC – PC – Tiny Bootloader
Interfata folosita pentru realizarea proiectului de fatã este Tiny Bootloader realizat de ……….
Tiny Bootloader este un program ce trebuie scris in memoria flash a PIC-ului cu un programator extern. Dupa realizarea acestei operatiuni se poate trimite pe seriala programul dorit a fi scris in PIC (trebuie sa aibe extensia .hex) .
Figura: Interfata Tiny Bootloader
Tiny Bootloader ofera o interfata cu utilizatorul de la care se poate alege:
a.
b.
c.
5. Aplicatia care ruleazã pe PIC
5.1. Navigare pe text
…………..
5.2. Hiperlink
…………..
6. Realizarea practica
………..
6.1. Circuitele integrate folosite
6.1.1. NM7010A
6.1.2. W3100
6.1.3. PIC 18F252
6.1. Schema electrica
6.2. Realizarea cablajului
Introducere
Simțim nevoia tot mai mare de informație în toate domeniile noastre de interes. Dorim să avem informații tot mai multe și într-un timp tot mai scurt. Conectivitatea la Internet sau Ethernet ne oferă această facilitate. Toată lumea este împărțită în rețele și sub rețele de comunicații prin Internet, aceasta fiind o sursă de informare și un mijloc lejer de comunicare.
Pentru instituții, clădiri locuibile sau companii nevoia de comunicare între mai multe PC-uri, dispozitive poate fi satisfăcută de conectivitatea prin Ethernet, care este soluția optimă de alcătuire a unei rețele locale (LAN).
Sistemul prezentat în acest proiect răspunde nevoilor pentru informații din zilele noastre. Este un mijloc lejer și plăcut de a obține date de interes local pentru diverse instituții. Un alt avantaj este dimensiunea mică a sistemului (9/6 cm) și resursele scăzute de care are nevoie – alimentarea la 5V și folosirea unui cablu UTP crossover prin care să facă legătura cu un PC care joacă rolul de server.
În capitolul „Aplicabilitate” sunt prezentate câteva exemple de aplicații în care se poate folosi acest sistem, dar nu se limitează doar la acestea – aria de aplicabilitate fiind vastă putându-se imagina soluții diverse în funcție de domeniul în care vrem să aplicăm sistemul.
Mediul prin care se face comunicația sitem – server este Ethernet-ul. Posibilitatea conectării la Ethernet este oferită de modulul NM7010A produs de firma Wiznet. Modul de realizare a conectivității și setările pentru modul sunt prezentate în capitotul „Realizarea conectivității Ethernet”.
În interiorul sistemului se realizează comunicația de tip I2C între PIC18F252 și modulul NM7010A, memoria EEPROM 24AA512, exteriorul sistemului. Unul dintre obectivele proiectului fiind și dimensiunile reduse ale sistemului s-a ales comunicația de tip I2C din cauza numărului redus de linii (doar două). Alt tip de comunicație folosit este UART – serială asincronă stabilită de standardul RS232. Toate acestea sunt prezentate în capitolul „Comunicația serială”.
Fișierele text primite din Ethernet sunt prelucrate prin program de către PIC astfel încât consola ne dă posibilitatea să navigăm pe text în direcția dorită și să alegem un link, adică posibilitatea de alegere a informației dorite – aceasta fiind o utilitate importantă. Rutinele programului și modul de manevrare a fișierelor de tip text sunt prezentate în capitolul 4.
În capitolul următor este prezentată realizarea practică a sistemului – schema electrică și realizarea cablajului.
Ultimul capitol conține costul realizării consolei, de aici putem trage ultimele concluzii asupra avantajelor oferite de acest sistem, un raport bun preț – calitate.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Conectivitatea la Internet sau Ethernet (ID: 149322)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
