Ny rehetra momba ny bus bus Arduino I2C

Aotobisy Arduino I2C

Con Arduino dia afaka mamorona tetikasa marobe araka ny hitanao raha mamaky Hwlibre ianao, fandaharana ny microcontroller amin'ny fomba tsotra. Saingy eo amin'ireo fifandraisana an-tariby sy nomerika an'ity tabilao fikirakirana maimaimpoana ity dia misy ny sasany izay mbola tsy fantatry ny vao manomboka, toy ny tena mety ho an'ny fifandraisana PWM, ny SPI, ny pin RX ary ny TX amin'ny seranan-tsambo serial, na ny bus I2C anao. Noho izany, amin'ity fidirana ity dia afaka mahafantatra farafaharatsiny izay rehetra ilainao amin'ny I2C ianao.

Con ny bus I2C Azonao atao ny mampifandray sy mampiasa fitaovana hafa ankolafy maro izay manana an'ity karazana protokoloka ity hifandraisana amin'ny solaitrabe Arduino. Eo anelanelan'izy ireo, azonao atao ny mampifandray ny haingam-pandeha, ny fampisehoana, ny kaontera, ny kompas ary ireo faritra maro hafa mifangaro noho io famoronana Philips io.

Inona ny I2C?

I2C dia manondro ny Circuit Inter-Integated, izany hoe boriborintany iraisana. Izy io dia fiara fitateram-pifandraisana serial izay novolavolaina tamin'ny taona 1982 avy amin'ny orinasa Philips Semiconductors, izay NXP Semiconductors taorian'ny fanesorana ity faritra ity Tamin'ny voalohany dia noforonina ho an'ny fahitalavitra an'ity marika ity izy ireo, mba hifandraisana amin'ny chip amin'ny fomba tsotra. Fa nanomboka ny taona 1990 ny I2C dia niely ary ampiasain'ny mpanamboatra maro.

Ampiasaina am-polony am-polony izao ho an'ny asa maro. Atmel, mpamorona ny microcontrollers ho an'ny arduino boards, dia nanolotra ny anarana TWI (Two Wired Interface) noho ny antony fahazoan-dàlana, na dia mitovy amin'ny I2C aza izy io. Saingy tamin'ny 2006, tapitra ny patanty tany am-boalohany ary tsy iharan'ny zon'ny mpamorona intsony, noho izany dia nampiasaina indray ny teny I2C (ny logo ihany no miaro hatrany, fa ny fampiharana azy na ny fampiasana azy io dia tsy ferana).

Antsipirian'ny teknika momba ny bus I2C

Bisy I2C

El Nanjary fenitry ny indostria ny bus I2C, ary nampihatra izany i Arduino ho an'ny fifandraisana amin'ireo peripheraly izay mila izany. Mila andalana roa na tariby roa fotsiny izy io amin'ny asany, ny iray ho an'ny famantaranandro (CLK) ary ny iray handefasana angona serial (SDA). Tombony io raha ampitahaina amin'ny fifandraisana hafa raha ampitahaina amin'ny bus SPI, na dia somary sarotra aza ny fandehany noho ny faribolana fanampiny ilaina.

Ao amin'ity bus ity ny fitaovana tsirairay mifandray aminy dia manana adiresy nampiasaina hidirana tsirairay amin'ireo fitaovana ireo. Ity adiresy ity dia raikitra amin'ny alàlan'ny fitaovana, manova ny bika farany 3 amin'ny alàlan'ny jumpers na switch DIP, na dia azo atao koa amin'ny alàlan'ny rindrambaiko. Ny fitaovana tsirairay dia hanana adiresy tokana, na dia maro amin'izy ireo aza dia mety hanana adiresy mitovy ary mety ilaina ny mampiasa bus faharoa mba hisorohana ny fifanolanana na hanovana azy raha azo atao.

Ankoatr'izay, ny bus I2C dia manana Architecture karazana Master-Slave, izany hoe mpanompo andevo. Midika izany fa rehefa manomboka ny fifandraisana amin'ny alàlan'ny fitaovana maoderina dia ho afaka handefa na handray angona avy amin'ireo andevo izy. Tsy ho afaka hanomboka ny serasera ny andevo, ny tompony ihany no mahavita azy, ary tsy afaka mifampiresaka mivantana koa ireo andevo raha tsy miditra an-tsehatry ny tompony.

Raha manana ianao mpampianatra maromaro ao anaty bisy, iray ihany no afaka miasa ho mpampianatra miaraka. Saingy tsy mendrika izany, satria ny fanovana ny mpampianatra dia mitaky be pitsiny, noho izany dia tsy matetika.

Tadidio fa ny master manome ny famantaranandro famantaranandro mba hampifanaraka ny fitaovana rehetra amin'ny bus. Izay dia manafoana ny filàn'ny andevo tsirairay hanana famantaranandrony manokana.

Ny protokolan'ny bus I2C koa dia mahatsinjo mialoha ny fampiasana resistor-penintona amin'ny tsipika fanovozan-tsivana (Vcc), na dia tsy ampiasaina amin'ny Arduino matetika aza ireo mpanohitra ireo misintona satria tranomboky fandaharana satria i Wire dia mampihetsika ny ao anaty miaraka amin'ny sanda 20-30 k. Mety ho malefaka loatra izany amin'ny tetikasa sasany, noho izany dia hiadana kokoa ny fiakaran'ny mari-pamantarana, noho izany dia azo ampiasaina ny hafainganam-pandeha ambany sy ny halaviran'ny fifandraisana fohy kokoa. Mba hanitsiana anao dia mety mila mametraka mpanohitra misintona ivelany ianao avy amin'ny 1k ka hatramin'ny 4k7.

Signal

I2C famantarana

 

La sehatry ny fifandraisana ny famantarana famantarana bus I2C dia misy ny bits na ny fanjakana (ireo izay ampiasaina amin'ny Arduino, satria ny fenitra I2C dia mamela ny hafa):

  • 8 bitika, 7 amin'izy ireo adiresy ny fitaovana andevo izay tianao hidirana handefasana na handraisana angona avy aminy. Miaraka amin'ny sombintsombiny 7, hatramin'ny 128 ny adiresy samihafa azo foronina, noho izany dia fitaovana 128 no azo idirana amin'ny fomba teôria, saingy 112 ihany no azo idirana, satria 16 no natokana hampiasa manokana. Ary ny sombiny fanampiny izay manondro raha tianao mandefa na mandray fampahalalana momba ny fitaovana andevo.
  • Misy koa bitika fanamarinana, raha tsy mihetsika dia tsy mitombina ny fifandraisana.
  • Avy eo ny data bytes fa te handefa na handray ny andevo izy ireo. Ny byte tsirairay, araka ny fantatrao, dia 8-bits. Mariho fa isaky ny angona 8-na 1 byte nalefa na voaray dia takiana fanamafisana 18 fanampiny, adiresy, sns., Izay midika fa voafetra be ny hafaingan'ny fiara fitateram-bahoaka.
  • Farany farany fankatoavana ny comunication.

Ho fanampin'izay, ny faharetan'ny famantaranandro ho an'ny ny famindrana dia 100 Mhz toy ny mahazatra, na dia misy maody haingana kokoa amin'ny 400 Mhz aza.

Tombony sy fatiantoka amin'ny bus I2C

ny tombony Izy ireo dia:

  • tsotra amin'ny alàlan'ny tsipika roa fotsiny.
  • Manana izany rafitra hahafantarana raha tonga ny famantarana raha ampitahaina amin'ny protokolan'ny serasera hafa.

ny fatiantoka Izy ireo dia:

  • hafainganam-pandeha fandefasana somary ambany.
  • Tsy duplex feno izy io, izany hoe tsy afaka mandefa sy mandray miaraka ianao.
  • Tsy mampiasa fitoviana na karazana mekanisma fanamarinana hafa hahafantarana raha marina ny sombin-tahiry voaray.

 

 

I2C amin'ny Arduino

Aotobisy Arduino I2C

En Arduino, miankina amin'ny maodely, miovaova ny tsimatra izay azo ampiasaina amin'ny fampiasana ity bus I2C ity. Ohatra:

  • Arduino UNO, Nano, MiniPro: A4 dia ampiasaina amin'ny SDA (data) ary A5 ho an'ny SCK (famantaranandro).
  • Arduino Mega: pin 20 ho an'ny SDA ary 21 ho an'ny SCK.

Aza hadino fa mila mampiasa azy io ianao ampiasao ny tranomboky Wire.h ho an'ny kaody Arduino IDE anao, na dia misy hafa toa azy aza I2C y I2Cdevlib. Azonao atao ny mamaky ny antontan-taratasin'ireo tranomboky ireo na ireo lahatsoratray momba ireo tetik'asa mahaliana anao hahazoana kaody momba ny fomba handrafetana izany.

Ahoana no hahalalana ny adiresin'ny fitaovana hampiasana azy amin'ny I2C?

Fampitandremana farany fotsiny, ary izany dia rehefa mividy IC amin'ny mpanamboatra eoropeanina, japoney na amerikanina ianao manondro ny lalana izay tokony ampiasainao amin'ny fitaovana. Etsy ankilany, ny sinoa indraindray tsy manome an-tsipiriany azy na tsy marina izany, ka tsy mandeha izy. Izany dia azo hamahana mora foana amin'ny scanner adiresy hahafantaranao izay lalana tokony horesahinao amin'ny sary.

La vondrom-piarahamonina arduino dia namorona an'ity kaody hanaraha-maso ny adiresy sy hahafantarana azy Amin'ny fomba tsotra. Na dia asehoko anao eto aza ny kaody:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


Ny atin'ny lahatsoratra dia manaraka ny fitsipiky ny etika fanonta. Raha hitatitra tsindry diso eto.

Aoka ho voalohany ny fanehoan-kevitra

Avelao ny hevitrao

Ny adiresy email dia tsy ho namoaka. Mitaky saha dia marika amin'ny *

*

*

  1. Tompon'andraikitra amin'ny data: Miguel Ángel Gatón
  2. Tanjon'ny angona: Control SPAM, fitantanana hevitra.
  3. Legitimation: Ny fanekenao
  4. Fifandraisana momba ny angona: Tsy hampitaina amin'ny antoko fahatelo ny angona raha tsy amin'ny adidy ara-dalàna.
  5. Fitehirizana angona: Database nomen'ny Occentus Networks (EU)
  6. Zo: Amin'ny fotoana rehetra, azonao atao ny mametra, mamerina ary mamafa ny mombamomba anao.