Komunikimi serial midis dy bordeve Arduino (pjesa 1)
Arduino ka mënyra të ndryshme komunikimi përmes portës seriale. Të shohim konceptet pas këtij mekanizmi.
Le të fillojmë me këtë artikull një seri mësimesh të shkurtra mbi përdorimin e protokollit të komunikimit serial Arduino. Do të shohim komunikimin me dy tela, përdorimin e protokollit RS232, lidhjen me boost dhe në fund do të paraqesim shënime shpjeguese për komunikimin përmes BlueTooth.
Komunikimi serial dhe paralel
Në elektronikë ne në thelb mund të transmetojmë informacionin tonë në dy mënyra: në grupe bitesh ose t’i dërgojmë ato një nga një me të njëjtën orë CPU. Vetëkuptohet që transmetimi paralel i të dhënave duket më efikas, pasi më shumë informacion transmetohet për cikël orësh. Megjithatë, transmetimi serial është shumë më i thjeshtë për t’u zbatuar, më pak i ndjeshëm ndaj zhurmës elektrike dhe në përgjithësi nuk kërkon karakteristika të veçanta kontrolli.
Sinjalet e të dhënave dhe menaxhimi i një porti seriale kontrollohen nga UART (transmetuesi Universal Asynchronous Receiver), një çip i pranishëm në Arduino-n tonë.
Në kundërshtim me besimin popullor, UART mund të përdoret edhe pa portën serike RS232, siç do ta shohim në shembullin vijues.
Komunikimi përmes drejtimit UART
Siç nënkupton edhe emri, një UART përfaqëson një sistem transmetues që ju lejon të dërgoni të dhëna nga një kartë në tjetrën. Truku i vetëm është vendosja e të dy pllakave në një terren të përbashkët, në mënyrë që sinjalet e LARTË dhe të ULËT të jenë në përputhje me njëri-tjetrin.
Në shembujt tanë, UART do të përdorë ASCII për të transmetuar informacion: ai do të transformojë kodet e dërguara duke i serializuar ato në sekuenca bitash. Le të shohim një shembull.
Duhet të transmetojmë shkronjën ‘A’: siç e dimë, kodi ASCII i A është 65, dhe vlera e tij binare korrespondon me 01000001. Kodi ASCII ofron kodim 7 bit, kështu që (për të mos humbur saktësinë) do të na duhet të transmetoni ‘1000001’. Numri më pas do të futet brenda një zarfi që ofron një bit fillestar, një bit të mundshëm të barazisë, një ose dy bit ndalimi. Le të shohim se si funksionon.
Protokolli i komunikimit
Niveli logjik i sinjalit është LARTË, në nivelin logjik 1, dhe do të vendoset në LOW (niveli logjik 0) nga biti START. në këtë pikë pjesët e karakterit tonë ‘A’ do të transmetohen, nga biti më pak i rëndësishëm (LSB) në bitin më domethënës (MSB). Në fund të transmetimit, mund të shtohet i ashtuquajturi bit i paritetit, për të siguruar siguri minimale në saktësinë e të dhënave të transmetuara. Së fundi, për të deklaruar se bitet që do të transmetohen kanë përfunduar, dërgohen një (ose dy) bit ndalimi.
Nëse shpjegimi ngatërroi idetë tuaja, mos u shqetësoni: Arduino ka një bibliotekë të shkëlqyer për menaxhimin e komunikimeve seriale në një mënyrë transparente për përdoruesin përfundimtar.
Arduino: lidhjet seriale
Megjithatë, përpara se të futemi në kod, ne ende duhet të përcaktojmë disa informacione të nevojshme. Ne pamë në ilustrimin e hapjes se është e nevojshme të lidhni kunjat GND të dy pllakave që do të lidhen së bashku, më pas lidhni kunjin e transmisionit (TX) të njërës me pinin marrës (RX) të tjetrit. Konfigurimi i “trenit të biteve” do të lejojë komunikim dydrejtues, ose full-duplex, ndërmjet burimit dhe marrësit, falë karakteristikave të brendshme të UART. Por cilat janë “nivelet e tensionit” të mbështetur nga Arduino? Me fjalë të tjera, si do të jemi në gjendje të dallojmë një sinjal MARK nga një sinjal SPACE, një nivel të lartë nga një nivel i ulët?
Siç e dimë, logjika dixhitale Arduino UNO siguron komunikim TTL me nivele të tensionit midis 0 dhe + 5 V. Fatkeqësisht kjo nuk është gjithmonë e vërtetë për kartat e tjera, të cilat mund të funksionojnë për shembull midis 0V dhe + 3.3V. Arduino do të jetë në gjendje të marrë në mënyrë të sigurt një zhvendosje të impulseve nga një sistem që punon në 3.3V (më i lartë se 2V minimale e nevojshme për t’u njohur si LARTË nga Arduino), por do të jetë e nevojshme t’i kushtohet vëmendje maksimale kur transmetoni të dhëna në një marrës që punon në + 3.3V. Për të parandaluar dëmtimin e pariparueshëm të këtij sistemi nga tensioni i tepërt, duhet të sigurohet një ndarës i tensionit.
Dhe tani pak Kod
Për shembullin e parë, ne do të krijojmë një kornizë të dobishme për të përshkruar sistemin tonë të pritjes: ne i lidhim kunjat si në figurën hapëse (dhe të raportuar në komentin fillestar të burimit). Përcaktojmë formatin e të dhënave që do të transmetohen (byte), më pas inicializojmë serialin dhe lexojmë të dhënat nëse janë transmetuar.
Në artikujt e ardhshëm do të analizojmë një sistem të plotë, harduer dhe softuer, për transmetimin dhe marrjen e të dhënave përmes një lidhjeje seriale.