Codarea Manchester
Cuprins
I. Introducere 1. Prezentarea temei de proiectare 2. Oportunitatea soluţiei de implementare alese II. Consideraţii teoretice 1. Principii generale de codare/decodare 2. Coduri de linii 3. Codarea Manchester III. Realizarea proiectului 1. Proiectarea hardware 2. Proiectarea software 3. Rezultate experimentale 4. Concluzii IV. Calcule economic Anexe Programele
Bibliografie
2
I. Introducere:
1. Prezentarea temei de proiectare Se cere: Să se proiecteze un codor şi un decodor Manchester care comunică prin unde radio iar datele să fie trimise de la calculator. Prin comunicaţii de date se înţelege transferul de informaţie între o sursă şi un destinatar printr-un canal de comunicatii. Sursa (emitatorul) este cea care transmite informaţiile, iar destinatarul (receptorul) este cel care primeşte informaţia. Datele sunt trasmise de catre un calculator emitatorului si implicit receptorului. Pentru a trasminte datele este nevoie de implementarea unui mediu de transmitere a datelor dintre calculator si codor/decoder. Datele sunt memorate de un microprocesor care sunt condate in cod Manchester pentru a ajuta dupa, la trasmitere. Noile date sunt trimise prin intermediul unui transmitator prin antena catre antena receptorului. Datele codate sunt trimise mai departe in microprocesorul de semnal pentru a fi prelucrat si transformat in date initiale, de inaintea codarii. Microprocesorul se ocupa cu codarea/ decodarea datelor dar si cu transmiterea lor si receptionrea lor cat mai corecta. Datele sunt trasmise de la calculator in semnal binar avand 2 nivele de “0” si de ”1” logic. Datorita celor 2 niveluri de frecventa pentru transmiterea datelor este nevoie de un limbaj pentru ca emitator si receptorul sa lucreze in comutatie. Datele primite de la calculator nu pot fi trasmise direct datorita existentei altor unde electromagnetice in mediu care pot perturba comunicarea. O simpla perturabatie poate face ca receptorul sa inteleaga ca emitatorul a transmis. De aceea este nevoie de un marker care sa atentioneze receptorul de transmisiunea unei secvente de date. Pentru a face transmisiunea este nevoie de un limbaj de transmitere codat. Codarea Manchester este una din cele mai cunoscute medii de transmisiune a datelor prin unde radio pentru ca ofera posibilitatea sa transmita un impuls atat la nivelui “0” cat si la nivelui “1”. Astfel se incearca evitarea erorilor la receptia. La emitator codarea Manchester este realizata de un microprocesor care pregateste semnalui pentru transmitere. La receptie datele sunt memorate de catre microprocesoru de semnal si transformat in codul initial si afisat pe o succesiune de leduri. 3
Existenta perturbatiilor in canalui de transmisiune poate afecata drastic datele transmise. Se doreste gasirea unei solutii de implementare pentru evitarea acestor perturbatii. Una dintre aceste solutii reprezinta transmiterea unui cod initial pentru a face “atent” receptorul urmat de datele care se doresc a fi transmise.
2. Oportunitatea soluţiei de implementare alese Implementarea alesa este prezentata pe scurt in urmatoarea schema:
Microprocesorul ales este PIC16F877A. Acesta are rolul de a transforma datele care trebuiesc trimise in cod Manchester Suportul pentru transmiterea informaţiei, adica linia de transmisie este aerul. Informatiile sunt transmise prin unde electromagnetice. Pentru a putea realiza controlul liniei de transmisie trebuie conceput un sistem care să poată să facă distincţia dintre controlul informaţiei şi mesajul informaţional, chiar şi atunci când ambele tipuri de date sunt trimise simultan pe aceeaşi linie. Mai mult, trebuie implementate proceduri explicite de control care să fie agreate atât de către emitator cât şi de receptor. Deaceea am ales microcontrolerul PIC16F877A. Acesta are rolul de a transforma datele care trebuiesc trimise in cod Manchester si nu doar atat. Microprocesorul este programat pentru a transmite datele in aer si de ajunge la receptor. Am creat diferite proceduri prin programarea microprocesorului pentru a mentine o transmisiune cat mai corecta a datelor. Cu ajutorul unui programator Pic Start Plus am introdus un bootloader in microprocesorul PIC16F877. Bootloader este un programator care ma ajuta sa programez cu usurinta direct de la un pc microprocesorul. Legatura dintre calculator si PIC16F877 este facut printr-o interfata seriala RS232 a calculatorului. Insa pentru a face legatura este nevoie de Max232 care face conversia de la RS232 la TTL, semnal apoi ultilizat de microprocesor. Convertorul Max232 face legatura dintre nivelul de la portul serial, CMOS de 0…12V la nivelul TTL de 0…5V. Dupa ce s-a stabili legatura intre interfata seriala de la pc RS232 - Max232 – Pic16F877 se poate trimite direct de la calculator programul care este implementat in memoria microprocesorului care contine rutinele de
4
codare a datelor si de transmisie. Pentru a introduce un program in microprocesor se foloseste un program de la Microchip, firma producatoare, numit Bootloader, care trimite in cateva milisecunde, zeci de comenzi cu o viteza de 19200 de baud. Bitii sunt codati ca semnale electrice. Cel mai simplu mod de a coda bitii ar fi utilizarea a 0V (volti) pentru a reprezenta un "zero" logic si +5V pentru a reprezenta un "unu" logic. Cu toate acestea pentru a izola mai bine semnalul electric de zgomot este utilizata o metoda mai complexa si anume codarea Manchester. In aceasta codare "1" este codat ca o tranzitie a semnalului electric de-la-mic-la-mare, iar "0" ca o tranzitie de-lamare-la-mic. Zgomotul electric poate avea multe cauze ca de exemplu EMI (interferenta electromagnetica) si RFI (interferenta cu undele radio), iar acestea sunt generate de dispozitivele elecrice din apropiere ca aerul conditionat sau computerele. Microprocesorul PIC16F877 transforma semnalui primit in semnal Manchester, acesta fiind mai sigur de transmis prin unde radio. Folosirea dateleor de timp cod Manchester ajuta la transmiterea cat mai ferita de mediul perturbator. Datele cand sunt primite in microprocesor sunt trasmise intr-o interfata de afisare prin leduri care arata atat mesajul intial cat si mesajul codat. Succesiunea de biti este trimisa catre transmitator urmand o serie de rutine programate in microprocesor. Implementarea programului din microprocesor prevede si transmiterea succesiunii de biti cu un marker pentru a fi indentificat de receptor. Apoi receptorul primeste informatia si o trimite la PIC16F877 care verifica de fiecare data daca datele sunt corecte. Daca datele sunt corecte, le decodifica si transmite tot printr-o succesiune de leduri mesajul initial trimis de codor. Atat codorul cat si decodorul pot fi programate de la calculator prin interfata seriala facand astfel o solutie ieftina de programare care nu necesita programator, acestea avand preturi neaccesibile publicului larg.
II. Consideraţii teoretice 1. Principii generale de codare/decodare
5
Într-o transmisiune de date, informaţia transmisă poate fi de origine analogică sau numerică. Un semnal este considerat numeric (digital) dacă el este discretizat în timp şi în amplitudine, ceea ce înseamnă că amplitudinea sa poate lua doar anumite valori, care rămân constante pe intervale bine precizate de timp (respectiv pe intervalul corespunzător duratei unui simbol). Pentru semnalele analogice, amplitudinea acestora variază de o manieră continuă în timp. O informaţie analogică poate fi convertită în numeric, de exemplu semnalele video sau audio. De asemenea şi procesul invers este posibil, respectiv conversia din numeric în analogic. Transmiterea datelor în retelele locale se face fie în banda de baza (transmisiune digitala, prin impulsuri de curent constant), fie prin modularea unui purtator (transmisiune analogica). În cazul în care pe acelasi suport fizic se creeaza mai multe canale de transmisiune, folosind purtatori de frecvente diferite, transmisiunea se mai numeste în banda larga (broadband), prin analogie cu canalele de banda larga obtinute în sistemele de transmisiuni telefonice folosind multiplexarea cu diviziune în frecventa. Transmisiunea în banda larga ofera posibilitatea transmiterii simultane, pe acelasi support fizic, si a altor semnale, reprezentând voce sau imagini. Pentru a asigura transmisia informatiei de la emitator la receptor, aceasta trebuie codificata pe un semnal purtator, in asa fel incat sa se asigure compatibilitatea cu canalul de comunicatie si o cat mai buna imunitate la perturbatii. 1.1. Controlul accesului la mediul de transmisiune În retelele în care suportul de transmisiune este folosit în comun de catre sistemele conectate în retea este necesar un mecanism care sa permita distribuirea capacitatii de transmisiune a acestui suport între sistemele interconectate, astfel ca: - fiecarui sistem sa-i revina o parte din aceasta capacitate de transmisiune; - fiecare sistem sa aiba acces la suportul de transmisiune într-un interval de timp rezonabil; - pierderile din capacitatea de transmisiune datorita acestui mecanism sa fie minime. Tehnicile de acces, foarte diferite, pot fi clasificate astfel: În tehnicile de acces cu alocare statica capacitatea de transmisiune a suportului este repartizata sistemelor din retea fie prin diviziune în frecventa (FDM –Frequency Division Multiplexing), fie prin diviziune în timp (TDM –Time Division Multiplexing). Aceste tehnici prezinta dezavantajul unei eficiente scazute în utilizarea capacitatii de transmisiune si, în plus, al unui cost ridicat (FDM) sau al unei întârzieri mari în transmiterea mesajelor (TDM). În tehnicile de acces prin alocare dinamica suportul de comunicatie este alocat doar utilizatorilor care au nevoie. Apare deci o dificultate legata de posibilitatea de cunoastere a necesitatilor utilizatorilor. În tehnicile cu acces aleatoriu fiecare sistem poate încerca sa transmita, deci sa ocupe suportul de transmisiune, în orice moment, însa va transmite numai dupa ce a “ascultat “ suportul si a constatat ca acesta este liber.
6
1.2. Canale de comunicatie Semnalul de la ieşirea unui codor sursă este cel mai adesea o tensiune electrică u(t) care ia numai două valori, U0 pentru „0“ logic şi U1 pentru „1“ logic, fiind constantă pe intervale elementare de timp de Tb secunde (durata unui bit de informaţie). Un şir de biţi este arătat ilustrativ în figură 1.2.
Fig. 1.2. Sir de biti transmisi serial
Dacă vrem să transmitem la distanţă un asemenea semnal, trebuie să utilizăm un canal de comunicaţie. Putem clasifica în mai multe moduri canalele de comunicaţie, dar cel mai firesc este să facem o primă deosebire între canalele cu fir şi canalele fără fir. Canalele cu fir sunt realizate cu cabluri metalice şi cu cabluri optice. Canalele fără fir utilizează în general undele radio emise în spaţiul liber cu ajutorul unei antene, dar submarinele pot transmite şi recepţiona acustic informaţie pe distanţe relativ scurte utilizând unde generate în apa mărilor şi a oceanelor. În teoria modernă a prelucrării semnalelor, drept canale de comunicaţie pot fi caracterizate şi mediile de memorare a datelor ca banda magnetică, discurile (inclusiv dischetele) magnetice şi discurile optice (discurile compacte denumite abreviat CD). a). Canale metalice Există două tipuri de canale realizate cu ajutorul unor cabluri de cupru: perechi torsadate şi cabluri coaxiale. O pereche de fire torsadate este constituită din două sârme subţiri de cupru, îmbrăcate într-un material izolator (plastic) şi răsucite prin procesul de fabricaţie în
7
scopul de a elimina diafonia (transmiterea prin inducţie electromagnetică a semnalului de pe o pereche pe alta din acelaşi cablu). Banda de frecvenţe a unei perechi de fire torsadate este de doar câteva sute de kilohertzi (kHz), mai mult decât suficient însă pentru necesităţile primei aplicaţii, aceea de a realiza cu ea linia de abonat. Linia de abonat conectează un abonat cu centrala telefonică de care aparţine, iar principala ei aplicaţie, şi multă vreme singura, este de a transmite semnale vocale. Un semnal vocal are un spectru de frecvenţe ce se întinde de la câteva zeci de Hz la circa 20 kHz. Prin filtrare, acest semnal este limitat la banda 3003400 Hz, fără ca urechea să perceapă această reducere. Recent, capacitatea de informaţie a liniei de abonat a fost exploatată intensiv, prin aplicarea unor tehnici cunoscute sub denumirea generală de linie digitală de abonat (în engleză, DSL: Digital Subscriber Line). Aceasta permite includerea unui abonat telefonic într-o reţea digitală cu integrarea serviciilor (în engleză, ISDN: Integrated Services Digital Network) sau cone tarea directă la Internet. Cablul coaxial are o construcţie asimetrică, fiind compus dintr-un fir metalic central şi o cămaşă metalică cilindrică izolate între ele printr-o masă plastică. Are o lărgime de bandă de câţiva megahertzi (MHz) şi este utilizat pentru televiziunea prin cablu şi pentru interconectarea calculatoarelor personale în reţele locale. b). Canale cu fibră optică Fibra optică are o lărgime de bandă considerabil mai mare (de ordinul gigahertzilor), iar prin tehnica multiplexării în lungimea de undă, capacitatea de informaţie a unui canal optic devine impresionantă, ajungând să se măsoare în terabiţi pe secundă. Numeroşi operatori de telecomunicaţii din ţara noastră, în frunte cu Romtelecom, şi-au construit partea interurbană a reţelelor cu cable optice. Este prevăzut ca, prin extinderea fibrei optice până la abonat acasă, serviciile oferite să se diversifice spectaculos. Într-un sistem de comunicaţie cu fibră optică, informaţia se transmite variind intensitatea sursei de lumină, ce poate fi o diodă fotoemisivă (LED) sau un laser, cu semnalul de mesaj. Lumina se propagă prin fibră ca o undă şi este amplificată de-a lungul căii de transmisie în echipamente numite repetoare pentru a compensa atenuarea semnalului. La recepţie, intensitatea luminii este detectată de o fotodiodă, a cărei ieşire este un semnal electric ce variază direct proporţional cu puterea luminii incidente. c). Canale electromagnetice fără fir Undele electromagnetice au un spectru foarte larg, ce se întinde de la circa 10 kHz până dincolo de 100 GHz. Proprietăţile de propagare variază însă considerabil cu lungimea de undă, ceea ce face ca spectrul radio să fie împărţit în numeroase subbenzi, cu utilizări specifice. O posibilă clasificare este următoarea: • Frecvenţe foarte joase (10 km – 100 km) • Frecvenţe joase (1 km – 10 km) • Frecvenţe medii (100 m – 1 km) • Frecvenţe înalte (10 m – 100 m) • Frecvenţe foarte înalte (1 m – 10 m) • Frecvenţe ultraînalte (10 cm – 1 m) • Frecvenţe superînalte (1 cm – 10 cm)
8
• Unde milimetrice (sub 1 cm). În continuare, găsim lumina propriu-zisă (infraroşu, spectru vizibil, ultraviolet). În sistemele de comunicaţie radio, energia electromagnetică este cuplată la mediul de propagare printr-o antenă ce serveşte drept radiator. d). Canale acustice subacvatice Undele electromagnetice nu se propagă pe distanţe lungi sub apă decât la frecvenţe extrem de joase, frecvenţe la care transmisia semnalelor este costisitoare. De aceea, în ultimele decenii, a fost intens studiat canalul acustic subacvatic, foarte util pentru a asigura comunicaţia submersibilelor (submarine, batiscafe). După cum se vede, sortimentul de medii de propagare putând servi drept canale de transmisiune nu este foarte diversificat: cablurile metalice, fibra optică şi undele radio. Apa mărilor şi a oceanelor permite doar o aplicaţie particulară destul de limitată. Mai mult decât atât, aceste medii fizice, pe lângă caracteristicile utile scopului, au şi imperfecţiuni ce se traduc în mod natural în erori de transmisie. Sarcina proiectantului este de a concepe sisteme de comunicaţie incluzând, în afara canalului de propagare propriu-zis, şi alte blocuri funcţionale, astfel încât ansamblul să satisfacă cerinţele practice.
Codorul şi decodorul canal au două funcţii ce se separă în mod natural: cea de a pregăti şirul simbolurilor de transmis astfel încât semnalul aplicat la intrarea canalului să fie compatibil cu caracteristicile acestuia, şi cea de a realiza un control al erorilor, combătând astfel efectele zgomotului şi ale altor perturbaţii şi imperfecţiuni. Adaptarea semnalului de emisie la caracteristicile mediului de propagare se reflectă în două metode: prima, mai simplă şi mai puţin costisitoare, se numeşte translaţie de date sau codare de linie şi nu este universal aplicabilă; cea de a doua se bazează pe teoria modulaţiei.
2. Coduri de linie
În interiorul unui echipament, pe distanţe în general mai mici de un metru, semnalele digitale se transmit între diversele subansamble în formatul impus de circuitele integrate utilizate. De exemplu, în cazul circuitelor integrate CMOS, tensiunea U0 este practic 0 V, iar tensiunea U1 este practic egală cu tensiunea pozitivă de alimentare. Presupunând că simbolurile 0 şi 1 sunt emise cu egală probabilitate, un astfel de semnal are o tensiune medie de proximativ U1 / 2 ce fluctuează însă în funcţie de structura datelor: pentru un lung şir de acelaşi simbol, fie el 0 sau 1, semnalul are aparenţa unei tensiuni continue de 0 V, respectiv U1 V.
9
Echipamentele se conectează la canalele de transmisiune prin interfeţe cu separare galvanică. Aceasta se poate realiza şi cu un condensator, dar de regulă se utilizează un transformator zis separator, având raportul de transformare 1:1. Drept urmare, componenta de current continuu (cc) şi chiar cea de joasă frecvenţă a semnalului de emisie nu trec în canal, rezultând o distorsiune inacceptabilă. Iată de ce codurile de linie trebuie să aibă o componentă de cc egală cu zero. Intervalele elementare de timp de durată Tb , unde indicele b este iniţiala de la bit, sunt date de un ceas electronic, numit generator de tact. Un generator de tact este un circuit electronic ce include un cristal de cuarţ; pe baza efectului piezoelectric, acesta oscilează pe o anumită frecvenţă mai mare de câteva zeci de kHz, perioada de oscilaţie fiind foarte stabilă în timp. Semnalul de tact, obţinut din semnalul generat de oscilatorul cu cuarţ prin divizare de frecvenţă cu ajutorul unui numărător electronic, este periodic, cu o perioadă egală cu Tb . Tranziţiile din semnalul de date – trecerea din 0 în 1 şi cea din 1 în 0 – coincid cu unul din fronturile pulsurilor de tact, celălalt front marcând mijlocul bitului. Dacă semnalul de date este realizat cu ajutorul unui semnal de tact, transmisiunea se numeşte sincronă. Transmisiunile digitale moderne sunt de regulă sincrone, făcându-se la viteze ridicate. Unele transmisiuni digitale de joasă viteză, de exemplu cele telegrafice, sunt asincrone, căci nu se bazează pe un semnal de tact, intervalele elementare de timp fiind obţinute prin alte mijloace. Un prim exemplu de codare ce permite semnalului x(t) să treacă prin transformatorul separator este codul bipolar, definit astfel:
Datele se pot codifica prin mai multe metode. Acestea se pot imparti in: Pentru reprezentare internă avem: codul binar care contine numere naturale in baza 2 si codul Gray numere tot in baza 2 dar numerele sunt in acea ordine care elimina comutarea mai multor cifre odata. Un cod Gray de ordin n este un sir care contine toate numerele de la 0 la 2n-1, astfel incat orice doua numere consecutive din sir sa difere in reprezentarea lor binara prin exact un bit. Fiecare numar nou este format din cel anterior prin modificarea celui mai putin semnificativ bit, astfel incat numarul sa nu mai fi fost adaugat inainte la sir Pentru transmisiune se pot intalni: codul morse care numai este utilzat in zilele noastre, codurile CCITT nr2, nr3 ,BCD , BCD extins(EBCDIC) si Ascii.Codul CCITT
10
mai este numti si codul baudat si este utilizat pentru transmisiile telegrafice cu viteze mici pe reţelele telegrafice comutate având 5 biţi/caracter (32-combinaţii). Codul BCD permite obţinerea a 64 combinaţii de cod distincte pentru reprezentarea informaţiei vehiculate pe canal şi a fost utilizat în sistemele de calcul de generaţia a 2-a. Codul EBCDIC constituie o extindre a codului BCR neavând control al parităţii, oferind 256 de combinaţii. Codul ASCII numit şi codul CCITT NR.5, ofera 128 combinatii prin reprezentarea cu 7 biţi/caracter. Pentru afişare avem codul binar, octal, hexazecimal si BCD (Binary Coded Decimal = Zecimal Codat Binar)
2.1. Transmisia datelor in banda de bază 2.1.1. Transmisia asincronă si sincronă. Transmisia unui semnal se poate realiza direct în banda sa de bază, dacă se introduce pe canal semnalul nemodificat, cu spectrul său original, asa cum este obsinut de la traductorul care preia informatia din mediul real si o transformă în semnal (senzori pentru diferite mărimi fizice, microfoane pentru semnal audio, camere de luat vederi pentru semnale video). Transmisia în banda de bază nu utilizează modularea pe purtătoare a semnalului util, care ar rezulta în modificarea spectrului de frecvente initial, prin translare. Acest mod de transimisie a informatiei are avantajul simplitătii, deoarece semnalele nu sunt prelucrate suplimentar, dar are si o serie de dezavantaje. Banda relativă de frecventă este largă (banda relativă = banda semnalului raportată la frecventa medie) si poate fi usor influentată de perturbatii cu diverse frecvente. Semnalele nu pot fi transmise în banda de bază la distante mari datorită imunitătii scăzute la perturbatii ce apar cu precădere în zona inferioară a spectrului. Sistemele de transmisie a datelor care nu folosesc procedee de modulare/demodulare, utilizând direct forma de undă numerică (semnalul dreptunghiular) asociat secventei de date, se numesc sisteme de transmisie a datelor în banda de bază, deoarece banda de frecvente a semnalului nu este translată în jurul unei frecvente superioare si conrine inclusiv componenta continuă (frecventa zero). Transmisia digitală în banda de bază înseamnă, în general, transmiterea directă pe canal a semnalului dreptunghiular cu două nivele de tensiune sau curent corespunzătoare valorilor logice de “0” si “1”. Deoarece transmisia datelor are loc în mod serial, echipamentul receptor va primi doar două nivele de tensiune care se succed în timp, din care acesta trebuie să discrimineze începutul si sfârsitul fiecărei celule de bit (sincronizarea pe bit), dar si împachetarea globală a sirului de date în caractere si blocuri de date (sincronizarea pe caracter si pe cadru). Sincronizarea receptorului cu emitătorul poate fi realizată în două moduri, în functie de relatia dintre ceasul transmitătorului si cel al receptorului. 11
În cazul transmisiei asincrone, cele două ceasuri sunt semnale independente. Fiecare caracter este tratat independent si receptorul va trebui resincronizat la începutul acestuia. Receptorul reporneste practic ceasul de sondare a bitilor la începutul fiecărui caracter, odată cu detectia unui front negativ de “START” pe linia de comunicaŃie, ca în figura 2.1. Acest mod de transmisie se utilizează mai mult în situaŃiile când datele transferate sunt generate la intervale aleatoare de timp.
Fig. 2.1. Formatul caracterelor în cazul transmisiei asincrone. În cazul transmisiei sincrone, ceasul receptorului este în strânsă relatie de fază cu cel al transmitătorului. Pe linie se transmite un cadru în mod continuu, fără pauze între caractere, fiind necesară doar păstrarea dependentei ceasurilor la începutul fecărui caracter (fig. 2.2.). Practic se transmite efectiv ceasul pe altă linie distinctă de linia datelor sau se utilizează un procedeu de înglobare a informatiei de ceas în semnalul de date (folosind un anumit cod de linie) si extragerea acesteia la receptor. Modul de transmisie sincronă se utilizează pentru blocuri mari de date care sunt disponibile într-un flux sustinut continuu.
Fig. 2.2. Succesiunea caracterelor în cazul transmisiei sincrone.
2.1.2. Sincronizarea la transmisia asincronă. Transmisia asincronă se foloseste în general în situatiile când data transferată este generată la intervale aleatoare, linia fiind inactivă perioade lungi si nedeterminate de timp.
12
Fiecare caracter este încadrat între un bit de ”START” si 1, ½ , sau 2 biti de “STOP”. Bitii de “START” si cei de “STOP” au polaritate diferită, pentru asigurarea a cel putin unei tranzitii 0→1→0 între două caractere succesive care sosesc fără întârziere între ele. Prima tranzitie 1→0 după perioada de inactivitate a liniei este utilizată de receptor pentru a determina momentele de timp în care se preiau esantioanele de bit. Practic, se porneste receptia unui caracter pe frontal negativ al bitului de “START”. Sincronizarea pe bit se realizează prin determinarea cât mai precisă a tranzitiei de “START”. Ceasul receptorului trebuie să aibă perioada de cel putin 16 ori mai mică decât durata de transmisie a unui bit, pentru a minimiza eroarea de detectie a începutului de caracter, eroare ce apare datorită asincronismului între tranzitiile de pe linia de recepŃie si tranzitiile tactului receptorului. Pentru exemplificarea acestei erori, în figura 2.3. s-a considerat o perioadă a ceasului de numai 4 ori mai mică decât durata de transmisie a unui bit. Sincronizarea pe caracter, adică determinarea începutului si sfârsitului caracterului, se realizează prin simpla numărare a bitilor veniti pe linie, cu verificarea corectitudinii bitilor finali de “STOP” care trebuie sa aibă valoarea logică “1”. Acest lucru este posibil deoarece numărul de biti pe caracter este stabilit la configurarea transmitătorului si receptorului, reprezentând o caracteristică a transmisiei. Sincronizarea pe cadru (bloc de caractere) se realizează în mod distinct, în functie de informatia transmisă, adică sir de coduri ASCII (text) sau date binare. Dacă mesajul transmis este format din caractere ASCII, pentru delimitarea începutului si sfârsitului fiecărui cadru se folosesc 2 caractere speciale, cu codurile aflate în afara setului tipăribil de caractere ASCII: o STX = 02H = ”Start of TeXt”; o ETX = 03H = ”End of TeXt”. Dacă informatia transmisă este binară pură, se mai defineste încă un caracter special ASCII de control (DLE), cadrul fiind delimitat de secventa DLE, STX→DLE, ETX: o DLE = 10H = ”Data Link Escape”. În situatia când un octet de date din cadrul binar transmis are chiar valoarea numerică a codului DLE, acesta va fi dublat la emitător, urmând ca la receptie să se elimine câte unul din doi octeti consecutivi cu valoarea DLE.
13
Fig. 2.3. Apariţia şi propagarea erorii de detecţie a începutului de caracter.
2.1.3. Coduri de linie la transmisia sincronă. La transmisia în banda de bază, modul de asociere dintre semnalul dreptunghiular digital transmis pe linie si fluxul binar de date conduce la diverse metode de codificare în tensiune saucurent, numite coduri de linie sau coduri de transmisie: a) Coduri de linie fără întoarcere la zero (NRZ).
Fig. 2.4. Semnalele codurilor de linie NRZ. Se asociază valorilor logice “0” si “1” două niveluri distincte de tensiune sau de current care vor fi transmise efectiv pe linie. Dacă unul din niveluri este zero, atunci semnalul se numeste unipolar sau simplu curent. Dacă cele două niveluri asociate 14
valorilor logice sunt simetrice faŃă de zero (unul pozitiv, iar celălalt negativ), semnalul se numeste bipolar sau dublu curent. Prin astfel de asocieri directe se obtin coduri de linie fără întoarcere la zero (NRZ = “Non Return to Zero”), care nu sunt altceva decât semnale obisnuite din circuitele electronice digitale. Denumirea rezidă în faptul că un astfel de semnal nu revine singur la nivelul zero după sfârsitul fiecărei durate de bit. Bitii consecutivi care au aceeasi valoare logică vor mentine constant nivelul de tensiune sau curent pe linia de transmisie (fig. 2.4.). Din acest motiv, semnalul obtinut prin codificarea NRZ va prezenta întotdeauna o componentă continuă dependentă de secventa datelor binare, care trebuie reconstituită la receptie (dezavantaj). Semnalul fără întoarcere la zero este cel mai simplu cod de linie si nu include nici un fel de informatie suplimentară cu privire la momentele de sondare a bitilor (ceasul transmisiei seriale). Este important de retinut că semnalul NRZ-bipolar poate fi obtinut din cel NRZ-unipolar si invers, prin adăugarea unei valori continue de tensiune sau de curent care deplasează forma de undă în sus sau în jos pe axa verticală. b) Coduri de linie cu întoarcere la zero (RZ). În acest caz se include o informatie suplimentară despre ceasul transmisiei, prin întoarcerea la zero a tensiunii după o semiperioadă de ceas (la jumătatea duratei unui bit). Codul de linie RZ-unipolar include pulsuri pozitive de ceas pentru biti de “1”, iar în cazul bitilor de “0” aceste pulsuri lipsesc complet. La codul de linie RZ-bipolar, pentru codificarea bitilor de “0” se inlclud în semnal pulsuri negative de ceas (fig. 2.5.).
Fig. 2.5. Înglobarea ceasului în semnalul de date la codurile de linie RZ. Se poate observa că formele unipolară si bipolară ale codului cu întoarcere la zero sunt complet distincte si nu diferă între ele doar printr-un decalaj pe axa verticală, ca la codul NRZ. Deoarece sirurile lungi de biŃi similari sunt codificate prin pulsuri de ceas cu aceeasi polaritate, si acest semnal va conŃine o componentă continuă dependentă de secvenŃa datelor. Semnalul RZ-bipolar are dezavantajul că necesită 2 praguri de decizie pentru discriminarea a 3 nivele distincte de tensiune, dar recuperarea ceasului de bit la receptie
15
este aproape directă, deoarece atât sirurile lungi de “0” cât si cele de biti “1” au pulsuri de ceas înglobate. c) Codul de linie AMI (Alternate Mark Inversion). Codul de linie AMI este oarecum similar codului RZ-unipolar, cu deosebirea că pentru reprezentarea bitilor de “1” se utilizează acum pulsuri de ceas alternante, atât pozitive cât si negative, eliminându-se astfel componenta continuă dependentă de secventa datelor. Dacă pentru ultimul bit de “1” s-a folosit un puls de o anumită polaritate, pentru următorul se va folosi un puls de ceas cu polaritate opusă. Pentru bitii de “0” nu se includ pulsuri de ceas, semnalul rămânând la nivelul zero, ca si la codul RZunipolar (figura 2.6.). Deoarece sirurile lungi de “0” nu contin pulsuri de ceas înglobate, circuitele de extragerea ceasului la recepŃie nu se pot sincroniza în cazul unor siruri lungi de biti zero. Pentru eliminarea acestui neajuns, se utilizează frecvent în practică o serie de variante AMI modificate prin adăugarea unor pulsuri alternante suplimentare care nu respectă regula de codificare, în cazul sirurilor lungi de biti zero.
Fig. 2.6. Pulsurile alternante de ceas pe biti “1” logic la semnalul AMI. d) Codul de linie bifazic standard (Manchester). Pentru eliminarea componentei continue dependente de secventa datelor simultan cu înglobarea tranzitiilor de ceas la toate valorile logice ale semnalului de date, s-au conceput coduri de linie bifazice, adică cu codificarea bitilor prin tranzitii (alternarea fazei), în loc de pulsuri. Codurile bifazice pot fi atât bipolare cât si unipolare, diferenta dintre ele fiind decalajul fată de zero cu o valoare constantă. În cazul codului de linie bifazic standard, numit si Manchester, la mijlocul duratei de bit se transmite câte o tranzitie în semnalul de linie: - pentru bit “1” de date tranzitie pozitivă (0 ↑1); - pentru bit “0” de date tranzitie negativă (1 ↓0). În cazul sirurilor de biti identici, este necesară o tranzitie suplimentară, care asigură revenirea semnalului la nivelul corespunzător si posibilitatea unei noi tranzitii de acelasi tip (fig. 2.7.). Se observă astfel că semnalul include o informatie suplimentară despre tactul de sondare al bitilor de date, adică o tranzitie la mijlocul fiecărui bit transmis, care poate fi utilizată pentru refacerea ceasului la receptie.
16
Fig. 2.7. Codificarea bitilor de date prin tranzitii de ceas la semnalul Manchester. Semnalul Manchester poate fi considerat modulatie digitală de fază a semnalului de ceas (purtătoare rectangulară) cu semnalul de date, deoarece fiecare bit “1” schimbă faza semnalului de ceas, pe când un bit “0” o lasă nemodificată. e) Codurile bifazice Mark si Space. Aceste coduri de linie se obtin tot prin codificarea bitilor de date cu tranzitii de ceas, dar păstrând întotdeauna o tranzitie la începutul fiecărei perioade de bit. În cazul codului bifazic Mark, are loc o tranzitie suplimentară numai la mijlocul bitului de “1”, iar în cazul codului bifazic Space numai la mijlocul bitului de “0”.
Fig. 2.8. Includerea ceasului la codurile de linie bifazice Mark si Space. Semnalul bifazic Mark sau Space poate fi considerat modulatie digitală de frecventă a semnalului de ceas (purtătoare rectangulară) cu semnalul de date, deoarece pentru o valoare logică se transmite pe linie o frecventă egală cu frecventa ceasului, iar pentru cealaltă se transmite o frecventă de 2 ori mai mică.
2.2 Codarea informatiei Codarea informaţiei cuprinde un grup de tehnici legate de modul de transmitere fizică a biţilor informaţionali.
17
În tehnologia informaţiei trebuie să existe o corespondenţă între nivelele logice şi caracteristicile fizice ale mediului de transmisie. Pe măsură ce cantitatea de informaţie creşte şi rata de transfer, iar la nivelului receptorului pot să apară noi probleme în ceea ce priveşte integritatea datelor. De-a lungl timpului s-au dezvoltat mai multe metode care să rezolve acestă problemă, unele mai adecvate decât altele. Codarea liniară reprezintă metoda uzuală pe care o vom folosi şi noi pentru a reprezenta informaţia digitală. Aceasta foloseşte un şablon format din biţi informaţionali „0” şi „1” pentru a codifica diferite nivele de tensiune sau curent. Soluţiile practice ce au fost analizate pentru a stabili alegerea modulelor decomunicaţii pentru robotul mobil sunt următoarele: • Codare unipolară • Codare polară • Codare bipolară 2.2.1 Codarea unipolară Este caracterizată de prezenţa a două nivele de tensiune, dintre care una este 0V. Datorită prezenţei unei stări logice caracterizate de nivelul de tendiune 0V, acest tip de codare se mai numeşte şi întoarcere la zero sau în engleză return to zero (RTZ). Un exemplu comun de codare unipolară este reprezentat de nivelele de tensiune care se găsesc în cadrul calculatoarelor şi a circuitelor logice digitale. Dacă folosim componente fabricate în tehnologie TTL, atunci aceste nivele de tensiune vor fi 0V pentru 0 logic şi 5V pentru 1 logic (fig 2.2.1.1)
Fig 2.2.1.1 Acest tip de codare funcţioneză foarte bine acolo unde datele sunt transmise la distanţe mici şi nu este indicat pentru distanţe lungi. Pentru medii de transport ghidate prezenţa capacităţilor parazite este critică. Codarea unipolară mai are un neajuns, şi anume cel legat de sincronizarea dintre transmiţător şi receptor. Ceasul receptorului urmăreşte permanent transmisia şi se sincronizează în funcţie de schimbările de nivel de tensine care apar. Din acest motiv, dacă pentru un interval de timp mai lung sau transmis numai biţi 1 sau numai biţi 0, ceasul nu mai are cum să realizeze sincronizarea, putând astfel pot să apară defazaje.
18
Fig 2.2.1.2 2.2.2 Codarea polară Este o codificare a datelor în jurul tensiunii de 0V. Un exemplu de codare este reprezentat de interfaţa serială standard RS-232D. În acest caz semnalul nu se întoarce niciodată la zero. El este fie o tensiune negativă fie o tensiune pozitivă. Acest 13 tip de codificare este numită şi „non return to zero” şi este cea mai simplă modalitate de a elimina influenţele zgomotelor magnetice.
Fig 2.2.2.1 Şi în cazul de faţă pericolul perturbator al zgomotului magnetic există, dar se observă o îmbunătăţire substanţială faţă de cazul codării unipolare. Acest tip de transmisie are şi avantajul că reduce la jumătate cantitatea de energie folosită pentru transmiterea informaţiei în comparaţie cu codarea unipolară. Şi în cazul de faţă rămân valabile problemele legate de sincronizarea transmisiei.
2.2.3 Codarea bipolară Această codare prezintă trei nivele de tensiune. Zero logic este reprezentat de un nivel de tensiune de 0V, iar 1 logic este reprezentat de nivele alternante de polaritate ale tensiunii. Prin această alternare a polarităţii tensiunii se obţine şi o reducere mai bună a zgomotului magnetic. Sincronizarea dintre ceasurile emiţătorului şi receptorului este şi ea îmbunătăţită substanţial, cu excepţia cazului în care există un şir lung de biţi 0.
19
Fig 2.2.31. Secvenţă de biţi
3. Codarea Manchester 3.1 Codarea Manchester Un alt cod de linie foarte cunoscut este codul Manchester. În această metodă de semnalizare, ilustrată în figura 3.1, simbolul 1 este reprezentat printr-un puls pozitiv de amplitudine A urmat de un puls negativ de amplitudine –A, ambele pulsuri având o lăţime de o jumătate de bit. Pentru simbolul 0, polarităţile acestor două pulsuri sunt inversate. Codul Manchester suprimă componenta de cc şi are componente de joasă frecvenţă relative nesemnificative, indiferent de proprietăţile statistice ale semnalului. Această proprietate deosebit de utilă în anumite aplicaţii este obţinută însă cu preţul dublării benzii de frecvenţe necesare pentru transmisie, ca o consecinţă directă a înjumătăţirii intervalului de timp elementar de la Tb la Tb / 2 dupa cum arata in figura 3.1. In schema de codare Manchester, un bit unu este codificat printr-o tranzitie de la nivel high la nivel low, iar un bit cu valoarea zero logic este codat ca o tranzitie de la low la high. Tranzitiile semnificative au loc la mijlocul timpului de bit. Asta inseamna ca pentru a transmite doi biti consecutivi cu aceeasi valoare, e nevoie ca semnalul sa aiba o tranzitie suplimentara la inceputul timpului de bit.
Fig.3.1. Exemplu de codare Manchester. Ideea care stă la baza codării Manchester este aceea de a determina o tranziţie pentru semnalul emis, tranziţie care să apară la mijlocul perioadei de bit. Astfel, un „1”
20
este reprezentat printr-o tranziţe de la nivelul +V la nivelul –V, în timp ce unei tranziţii de la nivelul –V la nivelul +V îi corespunde un „0”. Este evident că în acest fel se asigură sincronizarea între emiţător şi receptor, chiar şi în cazul transmisiei unor secvenţe lungi de „0” sau „1”. Mai mult decât atât, întrucât simbolurile binare sunt reprezentate prin tranziţii şi nu prin nivele constante (stări) ca la codajul de tip NRZ, scade drastic probabilitatea apariţiei unor erori cauzate de mediul de transmisie. Un zgomot care afectează semnalul poate modifica nivelele transmise, dar este puţin probabil că el va duce la inversarea tranziţiei sau la lipsa ei, conducând astfel la erori la recepţie. Dezavantajul codării Manchester constă în faptul că, pentru a transmite cu un anumit debit binar, este nevoie de o bandă de frecvenţe disponibilă dublă faţă de cea pe care am utiliza-o în cazul altor tipuri de codare (de exemplu pentru a transmite cu un debit de 10Mbps avem nevoie de o lăţime de bandă de 10MHz). Acest inconvenient face codarea Manchester dificil de utilizat pentru debite ridicate. La o privire mai atenta se observa ca semnalul codat Manchester este de fapt un SAU EXCLUSIV intre negatul unui clock care defineste timpul de bit si o secventa de date NRZ.(vezi figura 3.2)
Fig. 3.2. Logica de generare a unei secvenţe codate Manchester Definim rata de codare drept raportul dintre lungimea mesajului şi lungimea cuvântului de cod. Codul Manchester are rata 1:2. Definim disparitatea d(Ci) a unui cuvânt de cod Ci drept diferenţa dintre numărul de 1 şi numărul de 0 din Ci . Codul Manchester este un exemplu de cod de linie cu disparitate zero, căci cele două cuvinte de cod sunt 01 şi 10. Un asemenea cod este echilibrat din punctul de vedere al curentului continuu. În general, pentru a avea disparitate zero, trebuie ca lungimea cuvintelor de cod să fie un număr par 2n, astfel încât un cuvânt de cod să aibă n de 1 şi n de 0. În acest caz, 2n vectori binari de disparitate zero din care să selectăm un număr de cuvinte de n
avem
cod exprimabil ca o putere a lui 2, fie 2k , astfel încât cuvinte binare de k biţi să fie codate în cuvinte de cod de 2n biţi. Pentru n = 2, din totalul de 22n = 24 = 16 cuvinte binare de 4 4
biţi, numai = 6 dintre ele au disparitate 0 şi anume: 2
0011 0101 0110 1001 1010 1100.
21
Selectând patru dintre acestea, obţinem un cod de rată 2:4, echivalent ca rată de codare cu codul Manchester. Într-adevăr, dacă selectăm cele patru cuvinte de cod 0101 0110 1001 1010, obţinem perfectul echivalent al codului Manchester. Pentru a realiza o rată de codare mai mare, putem adăuga la cele şase cuvinte de cod de disparitate zero încă două cuvinte de disparitate +1 şi –1, pentru a ajunge la un set de 8, care este o putere de 2. În felul acesta, presupunând că cele opt cuvinte binare de intrare au aceeaşi probabilitate, cuvintele de cod de disparitate +1 şi –1 vor apărea la fel de frecvent, păstrându-se echilibrul de cc. Se cunosc şi alte coduri de linie mai elaborate, dar studiul lor depăşeşte cadrul acestui curs introductiv. Codul Manchester presupune existenţa unei transmisii la mijlocul fiecărui bit. Transmisia la mijlocul bitului serveşte atât pentru realizarea sincronizării între emiţător şi receptor, cât şi ca mecanism informaţional: o tranziţie de la low la high reprezintă un 1 logic, iar o tranziţie de la high la low reprezintă un 0(fig 3.3)
Fig 3.3. Reprezentarea codului Manchester Folosind acest tip de codare se elimină componentele perturbatoare şi există mereu o tranziţie care să realizeze sincronizarea între ceasurile emiţătorului şi receptorului. Mai are avantajul că nu necesită o bandă de transmisie mare în comparaţie cu celelalte tipuri de codificări. Codificarea Manchester solicită două tipuri de frecvenţe: o frecvenţă de bază şi două frecvenţe purtătoare de acelaşi tip. Celelalte tipuri de codificări au nevoie de o bandă cupinsă între 0 Hz şi frecvenţa maximă de transfer. Codul Manchester posedă şi posibilitatea de detecţie a erorilor în timpul transmisie. Astfel, pentru fiecare periodă de timp alocată unui bit se aşteaptă sosirea unui bit. Absenţa transmisiei va indica prezenţa unei erori. Acest cod este cunosctu datorita gamei largi de utilizare. Codarea Manchester prezinta un interes deosebit pentru ca este folosita de retelele Ethernet (IEEE 802.3) dar si diferitelor tipuri de cabluri ca 10Base5, 10Base2, 10BaseT, 10 BaseFL.
• Codarea Manchester diferenţială Acest tip de codare defineste bitul de zero ca o tranzitie low-high sau high- low la inceputul timpului de bit (in functie de starea anterioara a liniei) iar bitul unu logic ca 22
absenta a unei tranzitii la inceputul timpului de bit. In cazul unor secvente de biti succesivi cu valoarea unu logic, se adauga o tranzitie la mijlocul timpului de bit, in asa fel incat sa existe cel putin o tranzitie pe fiecare timp de bit. (fig 3.4)
Fig. 3.4 Exemplu de codare Manchester diferential La baza codării Manchester diferenţiale stă prezenţa sau absenţa unei tranziţii la începutul intervalului de tact. Astfel, un bit de „1” este reprezentat prin lipsa unei tranziţii, în timp ce fiecare bit de „0” este semnificat prin prezenţa unei tranziţii. Codarea Manchester diferential e folosita in retelele IEEE 802.5 (token ring), dar este putin raspandita in prezent.
III. Realizarea proiectului
1. Proiectarea hardware Microprocesorul PIC16F877A a fost ales din mai multe considerente: - numarul iesirilor digitale sa fie mare; am folost 10 leduri si 2 butoane - usurinta cu care se poate programa acest microprocesor direct de la calculator prin interfata seriala in cazul meu - este uzual pentru diferite aplicatii - datorita existentei mai multor semnale de ceas Existenta mai multor semnale de ceas ofera posibilitatea codarii Manchester pentru acest tip de codare are nevoie de 2 clock-uri. Calculul rezistetei R se tine seama in primul rand de curentul pe care il da microprocesorul pe pinii de iesire. Pe fiecare pin de iesire al microprocesorul exista un curent de 10mA si o tensiune de 2V. Astfel putem calcula valoare rezistei pentru un led.
23
Fig. 3.1.1. In figura 3.1.1. avem un led si o rezistenta legate la microprocesor. R se calculeaza asttfel: R=
Vcc −Uled If
R=
5V − 2V 10 mA
R = 300 Ohm , se alege R=330Ohm
Comunicarea Rs232 - microprocesor se face prin integratul MAX232. Conexiunea dintre cele 2 circuite codor/decodor se face prin unde electromagnetice la o frecventa de 433,9 Mhz. Trasmitatorul ales este AM-RT5-433. Datele de intrare pot fi trimise intre 50Hz si 4kHz. Microprocesorul trimite date la o frecventa de 500Hz care pinul de intrare al transmitatorului. Receptorul se numeste AM-HRR6-433.
2. Proiectarea software Pentru a programa microprocesorul PIC16F877A am ales sa utilizez programul Bootloader de la Microchip. Acesta ma ajuta sa programez prin interfata seriala direct fara sa folosesc un programator. Costul un programator este destul de ridicat de aceea am evitat cumpararea lui folosind ca programator calculatorul. Programatorul PicStartPlus este legat la calculator prin seriala RS232. Cu ajutoru programului Mplab 6.4 am trimis in microprocesor fisierul HEX, bootloader special pentru PIC16F877A. Viteza utilizate pentru trasmiterii datelor a fost de 9600kbps. Am facut diferite modificari al timpului de scriere dupa cum umeaza: Oscil=HS , Watchdog=OFF, PowerUp=OFF, Brown OUT=OFF, LVP=ON. Bootloaderul asociat microprocesorului este un fisier denumit astfel 61619 - bootldr-v26-16F876-77-16Mhz-19200bps.hex care imi ofera posibilitate ca programul introdus de mine prin seriala sa fie transmis la o viteza de 19200bps si merge foarte bine si la o frecventa de 8Mhz. Cu COMTESTER am trimis prin Interfata seriala RS232 un caracter. Caracterul este scris in memoria microprocesorului si dupa este codat in cod Manchester. Programul 24
prezinta diferite optiuni care faciliteaza utilizarea lui cat mai corecta. Viteza de transmitere poate fi selectata din interiorul programului si tot odata poate realiza transforamarea unui caracter din cod ascii in cod hexazecimal. Astfel este introdus in program un carcater si programul trimite pe seriala mesajul codat binar.
Bootloaderul instalat in microprocesor cu ajutoru PicStartPlus ofera posibilitatea transmiterii direct prin interfata seriala a linilor de comanda. MikroPascal are posibilitatea creerii mai multor tipuri de fisiere prin butonul BUILD aceasta putand fi folosite de diferite dispozitive. Unul din fisiere create este fisierul HEX care reprezinta pasii pe care trebuie sa-i urmeze microprocesorul. Fisierul HEX este transmis in microprocesor de la calculator prin RS232 cu ajutorul unui program care scrie direct in memoria microprocesorului programul.
25
In Bootloaderul de la Microchip intalnim un program cu interfata grafica care ajuta la scrierea in memoria microprocesorului ai linilor de comanda. Programul prezinta o interfata usoare prin care se poate selecta programul care trebuie introdus si alege viteza de scriere in memoria RAM al microprocesorului. La apasarea butonului WRITE se doreste scrierea programului in memoria picului. Insa programul anterior scris in memorie ruleaza continuu neavand posibilitatea introducerea unui nou program. Astfel am implementat un buton care ajuta la resetarea microprocesorului. Resetul dureaza 2 secunde, timp suficient ca PIC16F877A sa poate rescrie noul program. Dupa apasarea butonul Write, pentru a scrie programul respectiv este nevoie de apasarea butonului de reset pentru a avea loc scria acestuia. Limbajul de programare utilizat a fost MikroPascal care ma ajutat sa programez mult mai usor microprocesorul. MikroPascal poate salva programul compilat in diferite formate. Formatul cel care ma intereseaza este cel HEX, pentru ca este singurul care poate fi scris in PIC16F877A S-a pornit softul PICbootPLUS.exe in care s-a incarcat si sa trimis manchester_tx.hex si manchester_rx.hex.
26
Am facut doua programe unul pentru transmitator si unul pentru receptor care ulterior au fost introduse in memoria microprocesorului. Programele sunt atasate in anexa proiectului. Program Transmitere (TX)
27
Start
Iniţializare
Afişare iniţial Codare: Daca k=0 atunci Codat.l=10 Daca k=1 atunci Codat.l=01 PortB=Codat Procedura transmitere octeţi: - 3 octeţi de 1 - octet început de mesaj - octet de adresa - octet cu valoarea care este codata - octet sfarşit de mesaj
Iniţializare USART
Repetă: Dacă PORTD=0 atunci citeşte ce vine se primeşte pe seriala şi afişează Iniţial=caracter Afişare LSB şi MSB codate Manchester
Stop
28
Programul manchester_tx a fost facut in MikroPascal. Conţine 3 proceduri una de afisare, a doua de afisare a mesajului codat si a treia de transmitere. Procedura de afisare a variabilei „intial” are drept scop afisarea pe cele 8 leduri de pe PORTB a mesajului inainte de codare, asa cum este primit de pe seriala sau direct din memoria microprocesorului. Microprocesorul a fost programat sa codeze carecterul „A” pe 8 biti insa prin apasare unui comutator poate primi alt caracter direct de la calculator cu COMTESTER care v-a inlocui caracterul initial. Carcaterul primit ultima oara va fi trimis mai departe pentru codare si mai departe la transmitere. Procedura de codare face codare manchester. Daca avem un bit de informatie de 1 va fi inlocuit de 01 iar daca bitul primit este 0 va fi inlocuit cu 10. Procedura de transmitere are implementat un cod initial care sa fie sincronizat cu receptorul. Codul de sincronizare contine o insiruire de octeti: 3 octeti care contin numarul 1 in cod binar (00000001), un octet de inceput al mesajului (0Ah), doi octeti unul de comanda si unul cu valoare si un octet de final (0Eh). Octetul de final arata cand mesajul complet a fost transmis. Daca este trimis doar o parte din seria de octeti receptorul stie ca nu trebuie sa ia in cosiderare si implicit nu trebuie sa codez inca mesajul ca nu a fost trimis corect. Functia USART face posibila schimbarea caracterului pentru codare. Daca nici un caracter nou nu exista, este transmit direct din soft, caracterul A afisat pe 8 biti. Programul principal imparte mesajul de codat in LSB si MSB pe 4 biti, urmand ca dupa sa fie codat Manchester si trimis in trasmitator. Tot in programul exista o serie de linii de comanda care aprind ledurile pentru afisarea mesajului transmis inainte si dupa codare.
29
30
Start
Stop
31
3. Rezultate experimentale 4. Concluzii
IV. Calcule economic 4.1 Generalitati Costul de productie este o categorie economica legata de existenta productiei de marfuri, de procesul de formare a valorii si de preturi. Calculul economic reprezinta un calcul amanuntit al costului de productie al aparatului respectiv. In sfera productiei materiale, costul de productie este forma banesca a unui continut ce reprezinta consumul de mijloace materiale si forta de munca, necesare pentru producerea si desfacerea bunurilor materiale. El include tot ceea ce inseamna cheltuiala de productie suportata de
intreprinzator pentru producerea si desfacerea bunului
respectiv. Intre costul de productie si pretul de vanzare exista deosebiri atat cantitative cat si calitative. Astfel pretul este mai mare decat costul de productie incluzand in plus si
32
profitul. Deosebirea calitativa este ca, in timp ce pretul asigura mijloacele necesare productiei largite, costul de productie asigura doar recuperarea cheltuielilor de productie. Potrivit legislatiei in vigoare, in tara noastra costul de productie este impartit in urmatoarele grupe de cheltuieli: - cheltuieli materiale(materii prime, energie, materiale si combustibili) Cmp - cheltuieli directe cu munca vie(retributii directe platite muncitorilor, impozit pe fondul de retributii directe Ifr, contributii pentru asigurari sociale Cas) Cdmv = Rd + Ifr + Cas ; - contributii la fondul de cercetari stiintifice; - impozite(pe cladiri); - fond pentru ajutor de somaj, alte cheltuieli ; Elementele componente ale costului de productie se modifica de la o perioada de timp la alta sub influenta factorilor externi si interni. Marimea costului de productie exprima toate cheltuielile cu mijloacele de productie si plata salariilor, cheltuieli ce se efectueaza pentru producerea si desfacerea bunurilor de materiale. Reducerea costului de productie inseamna micsorarea cheltuielilor pe unitatea de produs si este o necesitate obiectiva impusa de cresterea rentabilitatii, sporirea profitului si a productivitatii muncii. Reducerea costului de productie atrage dupa sine cresterea calitatii produsului, realizarea unor specializari suplimentare. Diminuarea costului de productie se poate face pe mai multe cai: - prin reducerea costului materialelor; - prin utilizarea eficienta a capitalului fix; - prin cresterea productivitatii muncii; - prin reducerea cheltuielilor administrativ – gospodaresti; La efectuarea calculului economic se poate tine cont si de o serie de costuri, cum ar fi: - costul fix se refera la cheltuieli independente de volumul productiei(chirii, amortizarea masinilor, a cladirilor, etc); - costul variabil se modifica odata cu modificarea volumului de productie;
33
- costul marginal exprima sporul de cheltuieli necesare pentru obtinerea unei unitati suplimentare de produs; - costul cercetarii stiintifice este dat de cheltuielile pentru cercetarea propriu-zisa si pentru aplicarea in practica a rezultatelor activitatii de cercetare-proiectare in vederea realizarii prototipului; - costul tehnologic se caracterizeaza prin individualizarea cheltuielilor directe si a unei parti insemnate din cheltuielile indirecte, in special cu intretinerea si folosirea utilajelor; Procesul de formare al costului de productie este dat de nivelul sectiei, de cheltuielile directe la care
se adauga cheltuielile cu intretinerea si functionarea
utilajelor(CIFU), cheltuieli generale ale sectiei cu munca vie(CMDV), care sunt necesare in scopul asigurarii necesitatilor de iluminare si incalzire, etc. Cd – reprezinta cheltuieli directe la care se adauga cheltuielile necesare pentru materii si materiale si
cheltuieli directe cu munca vie, din care se scade costul
materialelor refolosibile si recuperabile(C). Cd = Cmp + Cadm – C, unde : Cmp – cheltuieli directe cu materii prime si materiale; Valoarea aparatului se calculeaza cu relatia urmatoare : I = Pa + Cm + Pc + Ct unde: I = investitia Pa = pretul aparatului Cm = cheltuieli de montaj(asamblare) Ct = cheltuieli pentru transport 4.2 Determinarea pretului de cost In pretul aparatului intra: pretul pentru circuite integrate, pentru componente pasive, pentru cablajul imprimat, cheltuieli pentru carcasa, cheltuieli pentru probe, etc. Pentru aceasta se utilizeaza urmatorul tabel : Nr. crt.
Nume produs
Nr. bucati
Pret produs/buc
Total
34
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 25 26 27 28 Total
PIC 16F877A MAX232 Led Buton Comutator Serial Port (RS232) Cuartz 8MHz Antena 433 Rezistor 1KΩ Condensator 1μF Condensator 33pF AM-RT5-433 AM-HRR6-433 Soclu CI DIP40 Soclu CI DIP16 Placa de achizitie Sacaz Solutie clorura ferica Solutie soda Burghiu 0,7mm
2 2 24 2 2 2 2 2 24 8 4 1 1 2 2 1 25g 300g 100g 2
37 7 3 0.5 0.5 2 2 28 0,2 0,5 0,3 36 36 1 0,75 5 1 3 2 1
74 14 7,2 1 1 4 4 56 4,8 4 1,2 36 35 2 1,5 5 1 3 2 2 258
Determinarea cheltuielor pentru realizarea montajului: 1. Manopera Manopera se calculeaza ca fiind suma dintre manopera de executie si cea de proiectare: M = ME +MP M E = 6 % * valoarea componentelor = 6%*258 = 15,5RON M P = 3 RON/h * 8h * 10zile = 240 RON
M = 15,5 + 240 = 255,5 RON 2. Contributia pentru ajutorul de somaj reprezinta 7 % din manopera: CAS = 7 % * M = 7% * 255,5 = 17,8 RON 3. Contributia la asigurarile sociale de sanatate reprezinta 5,5%*5,2*0,85=11,5% din manopera: CASS = 11,5 % * M = 11,5% * 246,8 = 28 RON
35
Astfel se obtine pretul total Pt1: Pt1=Mat+M+CAS+CASS=258+255,5+17,8+28=588RON Cheltuieli indirecte : Cheltuielile indirecte reprezinta 17% din Pt1: Ci=17%*Pt1=17%588=100 RON Profitul: Profitul se calculeaza ca reprezentand 5% din Pt1 la care s-au adaugat cheltuielile indirecte Ci : Pr=5%*(Pt1+Ci)=5%*(100*591)=34RON Pretul total 2, Pt2 se obtine astfel: pret total 1 + cheltuieli indirecte + profit: Pt2=Pt1+Ci+Pr=588+100+34=722RON Valoarea pe taxa adaugata, T.V.A. reprezinta 19% din pretul total 2: T.V.A.=19%*Pt2=19%*726=138RON Pretul total obtinut reprezinta pretul total 2 la care s-a adaugat T.V.A.-ul : Pt=Pt2+T.V.A.=722+138=860RON In final produsul finit va avea pretul de 860 RON. Aceasta valoare scade daca se realizeaza mai multe unitati.
36
Anexe: Transmiţător schema
37
Transmiţător cablaj(footprint):
38
Receptor schema:
39
Receptor cablaj(footprint):
40
41
Programele: Transmiter program manchester_tx; var comanda,caracter,initial, codat,i,j,k,l,read_error : byte; const RX_PIN = 7; //pinul 7 PORTC TX_PIN = 6; //pinul 6 PORTC BAUD_RATE = 9600; //rata de baud pentru port serial procedure afisare_initial; begin PORTB:=initial; end;
//aprinde ledurile de la PORTB
procedure afisare_codat; //afiseaza codarea Manchester a variabilei "initial" de tip byte begin for k:=0 to 3 do begin if initial.k=0 then begin l:=k*2; codat.l:=0; l:=l+1; codat.l:=1; end; if initial.k=1 then begin l:=k*2; codat.l:=1; l:=l+1; codat.l:=0; end; end; PORTB:=codat; //aprinde ledurile end; procedure transmitere; begin //aici se transmite un mesaj // formatul mesajului este 111A23E // - trei octeti de 1 (pentru sincronizare) // - A = $0A (inceput mesaj) // -2 = comanda (adresa) 42
// -3 = valoarea // -E = $0E (sfarsit de mesaj) Man_send ($01); Delay_ms(100); // receptorul are timp sa prelucreze Man_send ($01); Delay_ms(100); Man_send ($01); Delay_ms(100); Man_send ($0A); Delay_ms(100); Man_send (comanda); Delay_ms(100); Man_send (initial); Delay_ms(100); //Man_send (comanda and initial); Man_send($0E); Delay_ms(100); end; begin INTCON.GIE := 0; // dezactivează intreruperile T1CON:=0; // dezactivează timerul CCP1CON:=0; // dezactivează comparatorul Man_Send_Config(PORTD,0); // funcţie care pregateşte PIC+ul pentru a trimite semnal. TRISB:=0; // se defineste portulB ca port de iesiri TRISD.2:=1; // pinul 2 de la portD este intrare TRISC.0:=0; TRISC.1:=0; TRISD.0:=0; // test leduri PORTB:=255; // se aprind toate ledurile PORTC.0:=1; PORTC.1:=1; Delay_ms(5000); PORTB:=0; PORTC.0:=0; PORTC.1:=0; Delay_ms(1000); // portul serial Soft_Uart_init(PORTC, RX_PIN, TX_PIN, BAUD_RATE, FALSE);
// initialozeaza modulul Soft_UART
43
caracter:=$41; // caracterul "A" while TRUE do begin i := 1; // setează i la zero while TRUE do begin //afisarea caracterului necodat if PORTD.2=0 then //comutator in pozitia 2- spre conector RS232 - citeste seriala begin caracter := Soft_Uart_Read(read_error); // citeşte date receptate. Soft_Uart_Write(caracter); // trimite datele inapoi prin UART. end; initial:=caracter; afisare_initial; PORTC.0:=1; PORTC.1:=1; delay_ms(3000); //afisarea LSB a caracterului codat initial:=caracter and $0F; afisare_codat; PORTC.0:=1; PORTC.1:=0; comanda:=$0C; transmitere; delay_ms(2000); //afisarea MSB a caracterului codat initial:=caracter and $F0; initial:=initial shr 4; afisare_codat; PORTC.0:=0; PORTC.1:=1; comanda:=$0D; transmitere; delay_ms(2000); Delay_ms(90); // 90 mili secunde întarziere end; end; end.
Receiver:
44
program manchester_rx; var control,comanda,initial,initial_LSB,initial_MSB, codat,i,j,k,l,m : byte; var complete_LSB, complete_MSB:byte; var ErrorCount, temp : byte; error : byte; procedure afisare_initial; begin PORTB:=initial; PORTC.0:=1; PORTC.1:=0; end; procedure afisare_codat; begin for k:=0 to 3 do begin if initial.k=0 then begin l:=k*2; codat.l:=0; l:=l+1; codat.l:=1; end; if initial.k=1 then begin l:=k*2; codat.l:=1; l:=l+1; codat.l:=0; end; end; PORTB:=codat; PORTC.0:=0; PORTC.1:=1; end; begin INTCON.GIE := 0; TRISB:=0; TRISD.2:=1; TRISC.0:=0; TRISC.1:=0; TRISD.1:=1;
// disable interrupts
45
ErrorCount := 0; PORTB:=255; Delay_ms(2000); PORTB:=0; Delay_ms(1000); ErrorCount := 0; ADCON1 := 0x0F; // toţi pinii ai PORTA,PORTB sunt digitali Man_Receive_Config(PORTD, 1); // configurează şi sincronizează ce se recepteză while TRUE do // sfaşit buclă begin while TRUE do // wait for the start marker begin temp := Man_Receive(error); if (temp = 0x0E) then break; if (error <> 0) then break; // sfârşeste bucla pentru a nu infinită end; m:=0; initial:=0; initial_LSB:=0; initial_MSB:=0; complete_LSB:=0; complete_MSB:=0; repeat begin temp := Man_Receive(error); // asteapta biţii if (error <> 0) then //daca avem eroare la receptie begin //daca avem eroare de receptie PORTB:=255; //aprinde ledurile delay_ms(300); PORTB:=0; Delay_ms(300); PORTB:=$FF; delay_ms(300); PORTB:=0; delay_ms(300); ErrorCount:= ErrorCount + 1; // incrementează ErrorCount cu unu if (ErrorCount > 20) then begin temp := Man_Synchro(); ErrorCount := 0; // reseteaza ErrorCount la zero end; end
46
else begin if TRUE then //aici se memoreaza caracterul receptionat // formatul mesajului este 111A23E // - trei byte de 1 (pentru sincronizare) // - A = $0A (inceput mesaj) // -2 = comanda (adresa) // -3 = valoarea // -E = $0E (sfarsit de mesaj) begin if m=6 then begin //control:=temp; if temp <> $0E then begin //in cazul in care mesajul nu se termina corect //adica nu s-a receptionat caracterul $0E PORTB:=$FF; delay_ms(300); PORTB:=0; Delay_ms(300); PORTB:=$FF; delay_ms(300); PORTB:=0; delay_ms(300); m:=0; end else //daca se receptioneaza caracterul $0E - sfarsit mesaj begin if (complete_LSB and complete_MSB) then begin initial:=initial_MSB shl 4; initial:=initial and $F0; initial_LSB:=initial_LSB and $0F; initial:=initial or initial_LSB; delay_ms(2000); afisare_initial; delay_ms(1000); PORTB:=0; delay_ms(1000); afisare_initial; delay_ms(1000); PORTB:=0; m:=0;
47
end; end; end; if m=5 then begin if comanda=$0C then begin initial_LSB:=temp; //LSB complete_LSB:=1; m:=6; end; if comanda=$0D then begin initial_MSB:=temp; //MSB complete_MSB:=1; m:=6; end; if (comanda<>$0C)and (comanda<>$0D) then m:=0; end; if m=4 then begin comanda:=temp; // comanda (adresa) m:=5; end; if m=3 then begin if temp=$0A then m:=4; //inceput mesaj if temp<>$0A then m:=0; end; if ((temp=$01) and (m<3)) then m:=m+1; //se receptioneaza de 3 ori cifra 1 if ((temp<>$01) and (m<3)) then m:=0; //daca nu se receptioneaza de 3 ori //valoarea 1 consecutiv atunci se reia end; Delay_ms(25); end; end; until (temp = 0x0F); end;
// 25 ms delay // repeata pana cand semnalul este primit
end.
48
Bibliografie: http://comunicatii.referate.bubble.ro/ http://www.comm.pub.ro/curs/cic/curs_ro.htm http://hermes.etc.upt.ro/teaching/cd/L4_cd.pdf http://old.ace.tuiasi.ro/ro/academice/curricula/programe/ingineri/aut/Lab-2_08.pdf http://tet.pub.ro/mat/an2/tic_curs/TIC_cap_4.pdf
49