- Ano ang Bit Banging?
- Kailan gagamitin ang Bit Banging
- Algorithm para sa Serial Communication sa pamamagitan ng Bit Banging
- Bit Banging over SPI
- Halimbawa ng Bit Banging: Komunikasyon sa SPI sa Arduino
- Mga disadvantages ng Bit Banging
- UART sa pamamagitan ng Bit banging sa Arduino
Ang Mga Interface ng Komunikasyon ay isa sa mga kadahilanan na isinasaalang-alang kapag pumipili ng isang microcontroller na gagamitin para sa isang proyekto. Tinitiyak ng taga-disenyo na ang napili ng microcontroller ay mayroong lahat ng mga interface na kinakailangan upang makipag-usap sa lahat ng iba pang mga sangkap na gagamitin para sa produkto. Ang pagkakaroon ng ilan sa mga interface na tulad ng SPI at I2C sa microcontroller ay palaging nagdaragdag ng gastos ng mga naturang microcontroller, at depende sa badyet ng BOM maaari itong gawing hindi kayang bayaran ang isang ninanais na microcontroller. Sa mga sitwasyong tulad nito ang mga diskarteng tulad ng Bit Banging ay pumasok upang maglaro.
Ano ang Bit Banging?
Ang bit banging ay isang pamamaraan para sa serial na komunikasyon kung saan ang buong proseso ng komunikasyon ay hinahawakan sa pamamagitan ng software sa halip na nakatuon na hardware. Upang maipadala ang data, nagsasangkot ang pamamaraan ng paggamit ng software upang ma-encode ang data sa mga signal at pulso na ginagamit upang manipulahin ang estado ng isang I / O pin ng isang microcontroller na nagsisilbing Tx pin upang magpadala ng data sa target na aparato. Upang makatanggap ng data, ang pamamaraan ay nagsasangkot ng pag-sample ng estado ng Rx pin pagkatapos ng ilang mga agwat na natutukoy ng rate ng baud sa komunikasyon. Itinatakda ng software ang lahat ng kinakailangang parameter upang makamit ang komunikasyon na ito kasama ang pagsabay, tiyempo, mga antas atbp, na karaniwang napagpasyahan ng nakatuon na hardware kapag hindi ginagamit ang pag-bang.
Kailan gagamitin ang Bit Banging
Karaniwang ginagamit ang Bit-Banging sa mga sitwasyon kung saan ang isang microcontroller na may kinakailangang interface ay hindi magagamit o kapag ang paglipat sa isang microcontroller na may kinakailangang interface ay maaaring masyadong mahal. Sa gayon ay nagbibigay ito ng isang murang paraan ng pagpapagana ng parehong aparato upang makipag-usap gamit ang maraming mga protokol. Ang isang microcontroller na dating pinagana para sa komunikasyon lamang sa UART, ay maaaring ma-gamit upang makipag-usap gamit ang SPI at 12C sa pamamagitan ng bit banging.
Algorithm para sa Serial Communication sa pamamagitan ng Bit Banging
Habang ang code upang magpatupad ng bit banging ay maaaring magkakaiba sa magkakaibang mga microcontroller at maaari ding mag-iba para sa iba't ibang mga serial protokol, ngunit ang pamamaraan / algorithm para sa pagpapatupad ng bit banging ay pareho sa lahat ng mga platform.
Upang magpadala ng data halimbawa ang pseudo-code sa ibaba ay ginagamit;
- Magsimula
- Magpadala ng panimula bit
- Maghintay para sa tiyempo upang tumutugma sa baud rate ng tatanggap
- Magpadala ng data ng kaunti
- Maghintay para sa tagal upang muling tumutugma sa baud rate ng tatanggap
- Suriin kung naipadala na ang lahat ng mga data bit. Kung hindi, pumunta sa 4. Kung oo, goto 7
- Magpadala ng hintuan ng kaunti
- Tigilan mo na
Ang pagtanggap ng data ay may kaugaliang maging mas kumplikado, karaniwang ginagamit ang isang nakakagambala upang matukoy kung kailan magagamit ang data sa pin ng tatanggap. Tinutulungan nitong matiyak na ang microcontroller ay hindi nag-aaksaya ng sobrang lakas sa pagpoproseso. Bagaman ang ilang mga pagpapatupad ay gumagamit ng alinman sa mga microcontroller I / O na pin ngunit ang mga pagkakataong magkaroon ng ingay at error, kung hindi marahil hawakan, ay mas mataas. Ang algorithm upang makatanggap ng data gamit ang mga nakakagambala ay ipinaliwanag sa ibaba.
- Magsimula
- Paganahin ang makagambala sa Rx pin
- Kapag nag-trigger ang pagkagambala, kumuha ng pagsisimula ng kaunti
- Maghintay para sa tiyempo ayon sa rate ng baud
- Basahin ang Rx pin
- Ulitin mula 4 hanggang sa natanggap ang lahat ng data
- Maghintay para sa tiyempo ayon sa rate ng baud
- Suriin para sa stop bit
- Tigilan mo na
Bit Banging over SPI
Tulad ng nabanggit sa itaas, ang bit banging para sa iba't ibang mga protocol ay gumagana nang iba at sa gayon mahalaga na basahin ang tungkol sa bawat protocol, upang maunawaan ang pag-frame ng data at pag-orasan bago subukang ipatupad. Ang pagkuha ng SPI mode 1 bilang isang halimbawa, ang batayang halaga ng orasan ay palaging 0 at ang data ay laging ipinapadala o natanggap sa tumataas na gilid ng orasan. Ang diagram ng tiyempo para sa SPI Mode 1 na komunikasyon na proteksyon ay ipinakita sa ibaba.
Upang maipatupad ito, maaaring magamit ang sumusunod na algorithm;
- Magsimula
- Itakda ang SS pin mababa upang simulan ang komunikasyon
- Itakda ang pin para sa Master Out Slave In (MOSI) sa unang piraso ng data na ipapadala
- Itakda ang orasan ng pin (SCK) nang mataas kaya ang data ay naililipat ng master at natanggap ng alipin
- Basahin ang estado ng Master in Slave Out (MISO) upang matanggap ang unang piraso ng data mula sa alipin
- Itakda ang SCK Mababang, kaya maaaring maipadala ang data sa susunod na tumataas na gilid
- Pumunta sa 2 hanggang sa maipadala ang lahat ng mga data bit.
- Itakda ang SS pin Mataas upang ihinto ang paghahatid.
- Tigilan mo na
Halimbawa ng Bit Banging: Komunikasyon sa SPI sa Arduino
Bilang isang halimbawa, ipatupad natin ang algorithm para sa komunikasyon ng SPI sa pamamagitan ng pag-bang sa Arduino upang maipakita kung paano maaaring ma-bit-bit ang data sa SPI gamit ang code sa ibaba.
Nagsisimula kami sa pamamagitan ng pagdedeklara ng mga pin ng Arduino na gagamitin.
const int SSPin = 11; const int SCKPin = 10; const int MISOPin = 9; const int MOSIPin = 8; byte sendData = 64; // Value na ipapadala ng byte slaveData = 0; // para sa pagtatago ng halagang ipinadala ng alipin
Susunod, lumilipat kami sa function na void setup () kung saan idineklara ang estado ng mga pin. Ang pin na Master in Slave out (MISO) lamang ang idineklara bilang isang input dahil ito lamang ang pin na tumatanggap ng data. Ang lahat ng iba pang mga pin ay idineklarang output. Matapos ideklara ang mga mode ng pin, ang SS pin ay nakatakda sa TAAS. Ang dahilan dito ay upang matiyak na ang proseso ay walang error at nagsisimula lamang ang komunikasyon kapag nakatakda ito sa mababa.
void setup () { pinMode (MISOPin, INPUT); pinMode (SSPin, OUTPUT); pinMode (SCKPin, OUTPUT); pinMode (MOSIPin, OUTPUT); digitalWrite (SSPin, TAAS); }
Susunod, sinisimulan namin ang loop upang magpadala ng data. Tandaan na ang loop na ito ay patuloy na magpapadala ng data nang paulit-ulit.
Sinimulan namin ang loop sa pamamagitan ng pagsulat ng SS pin mababa, upang simulan ang simula ng komunikasyon, at tumawag sa pagpapaandar ng bitbangdata na pumipinsala sa paunang natukoy na data sa mga piraso at ipadala. Sa tapos na ito, nagsusulat kami ng SS pin HIGH upang ipahiwatig ang pagtatapos ng paghahatid ng data.
void loop () { digitalWrite (SSPin, LOW); // SS low slaveData = bitBangData (sendData); // data transmission digitalWrite (SSPin, HIGH); // SS mataas ulit }
Ang bitbangdata () function na ay nakasulat sa ibaba. Ang pagpapaandar ay tumatagal ng data upang maipadala at pinaghiwalay ito sa mga piraso at ipinapadala sa pamamagitan ng pag-loop sa code para sa paghahatid tulad ng ipinahiwatig sa hakbang 7 ng algorithm.
byte bitBangData (byte _send) // Ang pagpapaandar na ito ay nagpapadala ng data sa pamamagitan ng bitbanging { byte _receive = 0; para sa (int i = 0; i <8; i ++) // 8 bits sa isang byte { digitalWrite (MOSIPin, bitRead (_send, i)); // Itakda ang MOSI digitalWrite (SCKPin, TAAS); // SCK mataas na bitWrite (_receive, i, digitalRead (MISOPin)); // Capture MISO digitalWrite (SCKPin, LOW); // SCK mababa } bumalik _receive; // Ibalik ang natanggap na data }
Mga disadvantages ng Bit Banging
Ang pag-aampon ng bit banging ay dapat na isang mahusay na naisip na desisyon dahil maraming mga downsides sa bit banging na maaaring gawin itong hindi maaasahan para sa pagpapatupad sa ilang mga solusyon. Ang bit banging ay nagdaragdag ng kuryente na natupok ng microcontroller dahil sa mataas na kapangyarihan sa pagproseso na natupok ng proseso. Kung ikukumpara sa nakatuon na hardware, maraming mga error sa komunikasyon tulad ng mga glitches at jitters ang nagaganap kapag ginamit ang bit banging lalo na kapag ang data na komunikasyon ay ginagawa ng microcontroller nang sabay sa iba pang mga gawain. Ang komunikasyon sa pamamagitan ng pag-bang ng kaunti ay nangyayari sa isang maliit na bahagi ng bilis ng kung saan ito nangyayari kapag ginamit ang dedikadong hardware. Maaari itong maging mahalaga sa ilang mga application at maaaring gumawa ng bit banging isang "hindi napakahusay" na pagpipilian.
Ginagamit ang bit banging para sa lahat ng uri ng mga serial na komunikasyon kabilang ang; Ang RS-232, Asynchronous Serial Communication, UART, SPI, at I2C.
UART sa pamamagitan ng Bit banging sa Arduino
Ang isa sa mga tanyag na pagpapatupad ng bit banging ay ang Arduino Software Serial library na nagbibigay-daan sa Arduino na makipag-usap sa paglipas ng UART nang hindi ginagamit ang nakatuon na mga pin ng UART na hardware (D0 at D1). Nagbibigay ito ng maraming kakayahang umangkop dahil ang mga gumagamit ay maaaring kumonekta ng maraming mga serial device dahil ang bilang ng mga pin sa Arduino board ay maaaring suportahan.