I2C - pripojeni 3V cidla k 5V procesoru

Fanda Kopriva info na elektronikavyvoj.cz
Neděle Červenec 15 15:38:11 CEST 2012


Dne 15.7.2012 13:03, Pavel Kutina napsal(a):
> Zdravim,
>
> hraju si tu s PIC (PIC 18F2620, napajeni 5V) a snazim se k nemu 
> pripojit tlakove cidlo BMP085 pres SW I2C (20kHz hodiny). Ale jak, 
> kdyz Bosch u toho BMP uvadi, ze napeti na zadnem vyvodu nesmi 
> prekrocit 3.6V? Samozrejme mam vyresene napajeni (LE33), ale jak dal?
>
> Hodiny (SCL) se jeste daji vydelit odporovym delicem, ty jsou 
> jednosmerne a generuje je ten PIC, ale co ta obousmerna data (SDA)? 
> Pokud nedelam chybu v uvaze, taky mi tam staci delic? Pokud mi tecou 
> data od procesoru, tak delic vydeli urovne, pokud data generuje cidlo, 
> tak se delic napajeny stredem prakticky neuplatni. Nerad bych to cidlo 
> usmazil, tak se radeji ptam na overeni.
>
> Rad bych co nejjednodussi reseni, na desce nemam zrovna mista na 
> rozdavani.
>
> Diky za kazdou dobrou radu.
>
> Pavel Kutina
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Dobry den
protoze I2c by mela byt otevreny kolektor a dva odpory v radu kOhmu do 
+napajeni,
tak by melo stacit dat treba modre ledky z SDA a SCL do zeme a tim 
omezit napeti okolo 3V.
Obcas toto reseni pouziju .Ale nevim jiste jak u PIC.

Softwarove procedury pro I2C jsou velmi jednoduche a myslim ,ze i mnohem 
jednodussi nez vyuzit
na to hardware procesoru .Moje jsou v pascalu ale to asi 
nevadi.Procedury neresi podrzeni hodin od
cidla ,ale v praxi jsem to videl jenom jednou a neni problem to doplnit.

kombinaci s SPI  si netroufam narychlo posoudit.
   Fanda

var
covys,pwod:byte;
ackn,ackp:boolean;

sda1 pin pro sda;
scl1 pin pro scl;

procedure tim4us;   {jenom delay pro dodrzeni rychlosti zbernice}
var dd:byte;
begin
dd:= 0;repeat inc(dd); until dd>5;
end;

procedure byti2c;     {vyslani 1 bytu z pwod a prijem potvrzeni do ackn}
begin
for covys:=0 to 7 do begin
     if pwod>127 then sda1:=true else 
sda1:=false;tim4us;scl1:=true;pwod:=pwod*2;scl1:=false;
                      end;
sda1:=true;tim4us;scl1:=true;tim4us;ackn:=sda1;scl1:=false;
end;

procedure ibyti2c;     {prijem 1 bytu do pwod a vyslani potvrzeni s ackp}
begin
tim4us;sda1:=true;tim4us;
for covys:=0 to 7 do begin
scl1:=true;pwod:=pwod*2;if sda1 then inc(pwod);scl1:=false;
                      end;
sda1:=ackp;tim4us;scl1:=true;tim4us;scl1:=false;

end;

procedure starti2c;
begin tim4us;sda1:=false;tim4us;scl1:=false;tim4us;end;

procedure stopi2c;
begin tim4us;sda1:=false;tim4us;scl1:=true;tim4us;sda1:=true;tim4us;end;

procedure MGset;  {nastaveni parametru     zapis do i2c}
begin
starti2c;pwod:=$3c;byti2c;pwod:=0;byti2c;
pwod:=$0c;byti2c;  {datarate MG  7.5Hz}
pwod:=$20;byti2c;  {_+1.3 Gaus}
pwod:=$00;byti2c;  {0 cont 1 single}
stopi2c;
end;


procedure MGread;       {cti vysledek us/5.8 = mm    cteni z i2c}
begin
starti2c;pwod:=$3c;byti2c;pwod:=3;byti2c;stopi2c;tim4us;
starti2c;pwod:=$3d;byti2c;ackp:=false;
ibyti2c;unw1:=pwod;unw1:=unw1*256;ibyti2c;unw1:=unw1+pwod;MosaX:=unw1;
ibyti2c;unw1:=pwod;unw1:=unw1*256;ibyti2c;unw1:=unw1+pwod;MosaZ:=unw1;
ibyti2c;unw1:=pwod;unw1:=unw1*256;ackp:=true;ibyti2c;unw1:=unw1+pwod;MosaY:=unw1;
stopi2c;
end


Další informace o konferenci Hw-list