- Što je lupanje bitova?
- Kada koristiti Bit Banging
- Algoritam za serijsku komunikaciju putem razbijanja bitova
- Bit udaranje preko SPI
- Primjer lupanja bitova: SPI komunikacija u Arduinu
- Mane bitovanja
- UART putem udaranja bitova u Arduinu
Komunikacijska sučelja jedan su od čimbenika koji se uzimaju u obzir pri odabiru mikrokontrolera koji će se koristiti za projekt. Dizajner osigurava da odabrani mikrokontroler ima sva sučelja potrebna za komunikaciju sa svim ostalim komponentama koje će se koristiti za proizvod. Postojanje nekih od ovih sučelja poput SPI i I2C na mikrokontroleru nepromjenjivo povećava troškove takvih mikrokontrolera, a ovisno o proračunu posebnosti, željeni mikrokontroler može učiniti nedostupnim. U situacijama poput ovih ulaze tehnike poput Bit Banginga.
Što je lupanje bitova?
Lupanje bitova tehnika je za serijsku komunikaciju u kojoj se cjelokupnim komunikacijskim procesom upravlja putem softvera umjesto namjenskog hardvera. Za prijenos podataka, tehnika uključuje upotrebu softvera za kodiranje podataka u signale i impulse koji se koriste za manipulaciju stanjem I / O pina mikrokontrolera koji služi kao Tx pin za slanje podataka na ciljni uređaj. Za primanje podataka, tehnika uključuje uzorkovanje stanja Rx pina nakon određenih intervala, što je određeno brzinom prijenosa komunikacije. Softver postavlja sve parametre potrebne za postizanje ove komunikacije, uključujući sinkronizaciju, vrijeme, razine itd., O čemu obično odlučuje namjenski hardver kada se ne koristi lupanje bitova.

Kada koristiti Bit Banging
Bit-Banging se obično koristi u situacijama kada mikrokontroler s potrebnim sučeljem nije dostupan ili kada je prelazak na mikrokontroler s potrebnim sučeljem možda preskup. Stoga pruža jeftin način omogućavanja istom uređaju komunikacije pomoću nekoliko protokola. Mikrokontroler koji je prethodno bio omogućen samo za UART komunikaciju, može biti opremljen za komunikaciju pomoću SPI i 12C putem udaranja bitova.
Algoritam za serijsku komunikaciju putem razbijanja bitova
Iako se kod za provođenje udaranja bitova može razlikovati kod različitih mikrokontrolera, a može se razlikovati i za različite serijske protokole, ali postupak / algoritam za implementaciju udaranja bitova jednak je na svim platformama.
Za slanje podataka koristi se, na primjer, pseudo-kod ispod;
- Početak
- Pošaljite početni bit
- Pričekajte da se vrijeme podudara sa brzinom prijenosa prijemnika
- Pošaljite bit podataka
- Pričekajte da trajanje ponovo odgovara brzini prijenosa prijemnika
- Provjerite jesu li poslani svi podatkovni bitovi. Ako ne, idite na 4. Ako da, prijeđite na 7
- Pošaljite zaustavni bit
- Stop
Prijem podataka obično je malo složeniji, obično se prekid koristi da bi se utvrdilo kada su podaci dostupni na pin-u prijemnika. To pomaže osigurati da mikrokontroler ne troši previše procesorske snage. Iako određene implementacije koriste bilo koji od I / O pinova mikrokontrolera, ali šanse za buku i pogreške, ako se vjerojatno ne rješavaju, veće su. U nastavku je objašnjen algoritam za primanje podataka pomoću prekida.
- Početak
- Omogući prekid na Rx pinu
- Kada se aktivira prekid, nabavite početni bit
- Pričekajte vrijeme prema brzini prijenosa
- Pročitajte Rx pin
- Ponavljajte od 4 do primanja svih podataka
- Pričekajte vrijeme prema brzini prijenosa
- Provjerite ima li zaustavnog bita
- Stop
Bit udaranje preko SPI
Kao što je gore spomenuto, udaranje bitova za različite protokole djeluje različito i stoga je važno pročitati svaki protokol, razumjeti kadriranje i taktiranje podataka prije pokušaja implementacije. Uzimajući za primjer način SPI 1, osnovna vrijednost sata je uvijek 0, a podaci se uvijek šalju ili primaju na rastućem rubu sata. Dijagram vremena za komunikacijski protokol SPI Mode 1 prikazan je u nastavku.

Da bi se to primijenilo, može se koristiti sljedeći algoritam;
- Početak
- Postavite SS pin nisko za početak komunikacije
- Postavite pin za Master Out Slave In (MOSI) na prvi bit podataka koji će se poslati
- Postavite pin na satu (SCK) na visoki nivo, tako da master prenosi podatke, a prima slave
- Pročitajte stanje Master in Slave Out (MISO) da biste primili prvi bit podataka od slave
- Postavite SCK na Nisko, tako da se podaci mogu slati na sljedećem rastućem rubu
- Idite na 2 dok se ne prenesu svi bitovi podataka.
- Postavite SS pin visoko da zaustavi prijenos.
- Stop
Primjer lupanja bitova: SPI komunikacija u Arduinu
Kao primjer, primijenimo algoritam za SPI komunikaciju putem bitovanja u Arduinu kako bismo pokazali kako se podaci mogu bitovati preko SPI-a pomoću donjeg koda.
Započinjemo s proglašenjem pribadača Arduino koje će se koristiti.
const int SSPin = 11; const int SCKPin = 10; const int MISOPin = 9; const int MOSIPin = 8; bajt sendData = 64; // Vrijednost koju treba poslati bajt slaveData = 0; // za pohranu vrijednosti koju je poslao slave
Dalje, prelazimo na funkciju void setup () gdje se deklarira stanje pinova. Samo je pin u Master in Slave out (MISO) proglašen ulazom jer je to jedini pin koji prima podatke. Svi ostali pinovi su deklarirani kao izlaz. Nakon proglašenja načina pinova, SS pin postavlja se na HIGH. Razlog tome je osiguravanje postupka bez pogrešaka i komunikacija započinje tek kad je postavljena na nisku razinu.
void setup () { pinMode (MISOPin, INPUT); pinMode (SSPin, IZLAZ); pinMode (SCKPin, IZLAZ); pinMode (MOSIPin, IZLAZ); digitalWrite (SSPin, HIGH); }
Dalje započinjemo petlju za slanje podataka. Imajte na umu da će ova petlja neprestano slati podatke.
Mi smo pokrenuli petlju pisanjem SS pin niska, inicirati početak komunikacije i poziv na bitbangdata funkcija koja razbija unaprijed definiranih podataka u bitovima i pošaljite. Nakon toga zapisujemo SS pin HIGH kako bismo označili kraj prijenosa podataka.
void loop () { digitalWrite (SSPin, LOW); // SS niski slaveData = bitBangData (sendData); // prijenos podataka digitalWrite (SSPin, HIGH); // SS ponovo visok }
Bitbangdata () funkcija je napisano u nastavku. Funkcija uzima podatke koji se šalju, raščlanjuje ih na bitove i šalje ih prevlačenjem koda za prijenos kao što je naznačeno u koraku 7 algoritma.
byte bitBangData (byte _send) // Ova funkcija prenosi podatke putem bitbanginga { byte _receive = 0; for (int i = 0; i <8; i ++) // 8 bitova u bajtu { digitalWrite (MOSIPin, bitRead (_send, i)); // Postavljanje MOSI digitalWrite (SCKPin, HIGH); // SCK high bitWrite (_receive, i, digitalRead (MISOPin)); // Snimanje MISO digitalWrite (SCKPin, LOW); // SCK nizak } return _receive; // Vratimo primljene podatke }
Mane bitovanja
Međutim, usvajanje udaranja bitova trebalo bi biti dobro osmišljena odluka jer postoji nekoliko nedostataka udaranja bitova zbog kojih nije pouzdan za primjenu u određenim rješenjima. Lupanje bitova povećava snagu koju mikrokontroler troši zbog velike procesorske snage koju proces troši. U usporedbi s namjenskim hardverom, više se komunikacijskih pogrešaka poput kvarova i nervoze događa kada se koristi udaranje bitova, posebno kada mikrokontroler istovremeno s ostalim zadacima provodi podatkovnu komunikaciju. Komunikacija putem udaranja bitova događa se djelićem brzine kojom se događa kada se koristi namjenski hardver. To bi moglo biti važno u određenim aplikacijama i možda bi udaranje bitova moglo biti "ne baš dobar" izbor.
Bit udaranje koristi se za sve vrste serijskih komunikacija, uključujući; RS-232, Asinkrona serijska komunikacija, UART, SPI i I2C.
UART putem udaranja bitova u Arduinu
Jedna od popularnih implementacija udaranja bitova je serijska biblioteka Arduino Software Serial koja omogućava Arduinu komunikaciju putem UART-a bez korištenja namjenskih hardverskih UART pinova (D0 i D1). To daje veliku fleksibilnost jer korisnici mogu povezati onoliko serijskih uređaja koliko može podržati broj pinova na Arduino ploči.

