 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Pon Maj 02, 2011 3:49 pm Naslov sporočila: Level-shifter (translator) |
|
|
Pozdravljeni!
Ker imam na vezju kombinirano 3.3V (Bluetooth, nekaj senzorjev) in 5V periferijo (uC, senzorji), bom uporabil Level shifterje/translatorje za komunikacijo med njimi.
Našel sem ravno pravšnji dvosmerni I2C translator (1.8-3.6V<->1.8-5.5V) za I2C komunikacijo hitrosti <= 400kHz, kar je zame povsem OK.
Me pa zanima, če bi lahko tega uporabil tudi za serijsko (UART) komunikacijo baud hitrosti 19200 ali več (krasno bi bilo, če bi delalo tudi na baud 115200)?
Kolikor sem bral, so pri I2C open-drain izhodi/vhodi, čip lahko torej linijo potegne na 0, na 1 jo pa postavi pull-up (2.2k). Pri serijski komunikaciji pa nevem če bi se toel obneslo?
Hvala za odgovore!
Lep pozdrav
Bojan Potočnik |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - struževo
|
Objavljeno: Pon Maj 02, 2011 4:47 pm Naslov sporočila: |
|
|
Marsikateri proizvajalec ponuja level-translatorje. Ponavadi so v konfiguraciji 8x in, 8x, out, 4xin+4xout ali dvosmerni.
No, s temi dvosmernimi imam jaz zelo slabe izkušnje - oslilacije non stop. Ostali pa so ok.
Možnost pa imaš tudi poenostavitve.
Če imaš 3,3V izhod, ga lahko brez težav priključiš na 5V vhod. Bo delovalo.
Če imaš 5V izhod in bi ga rad priklopil na 3,3V logiko, poglej če obstaja "5V tolerant input".
Sicer lahko v serijo vežeš cca 300-600 ohm upor in se bo višek napetosti pokuril na tem uporu - tok bo tekel iz 5V izhoda, čez upor in čez zaščitno diodo na 3,3V vhodu v 3,3V napajalno linijo. Pri tej rešitvi moraš paziti, da je na 3,3V napajanju vedno dovolj tokovne porabe, kajti, če je porabe manj kot 6 mA (pri enem signalu in 300 ohm uporu), bo na 3,3V liniji previsoka napetost!
Zadnja rešitev ni ravno energetsko učinkovita, je pa preprosta in zasede malo prostora. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Pon Maj 02, 2011 5:22 pm Naslov sporočila: |
|
|
aly je napisal/a: |
Če imaš 3,3V izhod, ga lahko brez težav priključiš na 5V vhod. Bo delovalo. |
Aha, super. Torej pri UARTu je to enostavno, 3.3V_TXD vežem direkt na 5V_RXD.
Za obratno sem pa enkrat naredil napetostni delilnik:
5V_TXD --- 2.2k --- 3.3V_RXD --- 3.3k --- GND
nato sem zasledil da gre tudi:
5V_TXD --- 1k --- 3.3V_RXD --- 3.5V_zenerca --- GND
Glede porabe, na vezju imam 3.3V 3A regulator in 5V 3A regulator, sicer pa tudi ne vem, koliko kaj požere Bluetooth modul (nimam ga še). Na RXD pinu najverjetneje ne veliko. Raje ne bi kaj experimentiral, ker so stvari kar drage... Zato raje dam kakšno komponento več, da je stvar zanesljiva. Sicer pa je to itak samo na eni linji, namreč uC-FT232 (UART0) je itak oboje 5V, uC-Bluetooth (UART1) pa sta 5V-3.3V.
Pri I2C pa ne gre tako enostavno, če sta liniji dvosmerni. Sicer pa tudi drugega dela tvojega sporočila ne reazumem najbolje... To si mislil za I2C ali UART?
Gledal sem tale dokument na strani 10, pa se mi zdi malo čudna ta rešitev. Mislim, je precej enostavna (dva BSN20 N-Ch mosfeta, PDF na strani 13), če to res opravlja svojo nalogo, potem bi bilo super!
Namreč moje stanje pri I2C je takšno:
1x uC = 5V I2C
1x compass = 5V I2C
6x thermopile = 3.3V I2C |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - struževo
|
Objavljeno: Pon Maj 02, 2011 8:06 pm Naslov sporočila: |
|
|
Moj predlog je dokaj podoben tvoji rešitvi z uporovnim delilnikom.
Samo da imaš lahko na mestu "spodnjega" upora:
- upor
- zenerco
- zaščitno diodo (že v čipu) in 3V napajalno linijo
Vse troje bo delovalo. Le na to moraš paziti, pri povečevanju upornosti v delilniku se povečuje tudi RC konstanta, kar pomeni, da si z večjim uporom bolj omejen pri hitrosti signalov.
Glede I2C - s tem se nisem kaj dosti ukvarjal. Ampak načeloma, če nimaš velikih hitrosti, lahko pull-up upora zvežeš kar na 3,3V in je. Če pa 5V čipovje eksplicitno zahteva 5V na pull-up uporih, potem vzemi nek level translator. Tole s tranzistorji bi verjetno celo delovalo. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Pon Maj 02, 2011 8:48 pm Naslov sporočila: |
|
|
aly je napisal/a: |
Moj predlog je dokaj podoben tvoji rešitvi z uporovnim delilnikom.
Samo da imaš lahko na mestu "spodnjega" upora:
- upor
- zenerco
- zaščitno diodo (že v čipu) in 3V napajalno linijo
Vse troje bo delovalo. Le na to moraš paziti, pri povečevanju upornosti v delilniku se povečuje tudi RC konstanta, kar pomeni, da si z večjim uporom bolj omejen pri hitrosti signalov.
|
Hmm, krasno bi bilo, če bi lahko dosegel baud hitrost 115200. Bi to šlo z uporoma 1.2k in 1.8k?
Izračunal sem, da bi šlo tudi z uporoma 390R in 820R (v takem primeru bi skozi tekel stalni tok 4.3mA), 560R + 1k (3mA), 820R + 1.5k (2mA),...
aly je napisal/a: |
Glede I2C - s tem se nisem kaj dosti ukvarjal. Ampak načeloma, če nimaš velikih hitrosti, lahko pull-up upora zvežeš kar na 3,3V in je. Če pa 5V čipovje eksplicitno zahteva 5V na pull-up uporih, potem vzemi nek level translator. Tole s tranzistorji bi verjetno celo delovalo. |
Ko si rekel, da se dvosmerni translatorji izredno slabo obnesejo, si mislil točno tistega iz linka ali je tisti OK?
Če je tisti slab, bom verjetno kar z dvema mosfetoma naredil, kot v tistem dokumentu.
Na Skypu pa mi je JamesQ podal tudi možnost s serijskim uporom na obeh linijah (uC==5V_i2c==upora_na_obeh_linijah==6x_3.3V_i2c), v datasheetu od senzorjev sem prebral, da sta SCL in SDA open-drain s Sink current = 2mA. Če vzamemo, da mosfet predstavlja kratek stik, je torej R = U / I = 5V / 0,002A = 2.5k, pa raje vzamemo 2.7k/3.3k.
Bi šlo torej tako, da bi 5V I2C čip vezal direktno na 5V uC, za tem bi dal dva upora, to linijo za upori pa potem na 6 senzorjev (itak baje nikoli ne delata dva hkrati)? |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - struževo
|
Objavljeno: Pon Maj 02, 2011 9:44 pm Naslov sporočila: |
|
|
Za 115200 bi moralo biti tudi 2k in 3k v redu.
Za I2C:
Če daš v serijo nek upor, si naredil nekaj podobnega, kot sem jaz predlagal za push-pull vezavo. S tem da, če si narišeš nadomestno vezavo, ogotoviš, da ko hoče 3,3V device naredit 0 na liniji, 5V master ne vidi več čiste ničle ampak nekaj več:
+5V |------|pullup|---+----|serijski upor|-----|GND (open drain)
Tu, kjer je "+", master tipa povratno informacijo. Ki ne more biti nikoli 0.
Rajši uporabi 3,3V na pull-up uporih, pa je. Ali level translator, ki si ga omenjal zgoraj (jaz nimam izkušenj z njim, verjetno pa deluje po pričakovanjih). _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Pon Maj 02, 2011 10:19 pm Naslov sporočila: |
|
|
Aly, hvala za odgovore, zdaj razumem!
Naredil bom takole:
|5V_RXD|----|3.3V_TXD|
|5V_TXD|----|820R|----|3.3V_RXD|----|1.5k|----|GND| (teoretično je na 3.3V_RXD pinu 3.23V, skozi delilnik teče 2.07mA)
|3.3V|----|pullup_2.2k|----(|uC_SDA|----|compass_SDA|---- 6x|3.3V_SDA|)
|3.3V|----|pullup_2.2k|----(|uC_SCL|----|compass_SCL|---- 6x|3.3V_SCL|)
I = U / R = 3.3V / 2200ohm = 0.0015A = 1.5mA, kar je znotraj SDA/SCL Isink = 2mA |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 496 dni
Powered by phpBB © 2001, 2005 phpBB Group
|