i2c

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2011. február 7. hétfő, 22:21

Egy tipp, ha hosszabb távra szeretnénk elvezetni I2C-s eszközeinket, mint például hőmérő IC.

Kép

Kipróbáltam, működik 30 méteren is! :D

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. február 7. hétfő, 22:26

2.7$/db :)
700 Ft-ért drága....
És ha a felhúzóellenállás 1k, és a I2C sebesség 50kHz? Az 10 m-t tud... 8O

Avatar
jsityu
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2010. december 4. szombat, 7:00

HozzászólásSzerző: jsityu » 2011. február 11. péntek, 23:44

Pont ma jutottam el odáig, hogy az LM76 hómérőm stabilan tudtam kezelni, kiolvasni, stb.
Gondoltam kipróbálom a valós környezetbe, ahova szántam, a már előre behúzott, kb 20m-es, 8 eres riasztó vezetéken.
Persze elsőre nem volt kapcsolat. Aztán kicseréltem az addig 10K-s felhúzó ellenállásokat 2K2-re, ráadásul ez a kontroller oldalán van és nem a végponti hőmérőnél (LM76), ahogy talán ajánlottabb. És hopp, tökéletesen működik :)
Szóval úgy tűnik hosszabb vezetéknél sincs gond I2C-vel.
De azért van nekem is kérdésem:
- ha már a kapcsolat, kommunikáció elindult, a hőmérő pontosságát ez befolyásolhatja, vagy ez lényegtelen. Vagy van kapcsolat és lekéri a helyes értéket, vagy nincs kapcsolat és kész..?
- mi a tapasztalat, hogy i2C-s hőmérő helyett termisztort használni AD konverter használatával? Lábszám nem probléma, elég lenne.

Amit tervezek, az egy fűtésvezérlés, ami helységenként hőmérsékletet mér és elektromos szelepekkel manipulálna és kazánt kapcsolgatna. Egyenlőre még ismerkedem az AVR programozással, de jól haladok. Csak amikor még a kivitelezés volt a lakásban, csak annyira tudtam előregondolni, hogy 2 eret terveztem használni 1-1 hőmérséklet lekérdező ponthoz vezetni. Nehezen, de meg tudnám oldani, hogy 4 ér is odamenjen az I2C miatt. Szóval mire érdemesebb rágyúrnom? termisztorra(AD converterrel), vagy I2C-re a vezetékezés nehézsége ellenére? És ha az utóbbi, akkor melyik IC-vel? LM76 elég pontos, kalibrálható, megbízható, hogy egy ilyen nagy pontosságú mérést igénylő rendszerben használható legyen?
Köszönöm okító hozzászólásokat előre is.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. február 12. szombat, 7:34

20 m táv???? Bátor....

DS1820 való ilyen helyre. A pontossága az I2C eszközöknekcsaplivaló (0.5 fok pontosság, 2 fok absz pontosság) A DS1820 1wire: 0.2 fok abs, 0.1 fok relativ pontossag.... Igy nem kell kalbralni!


Termisztor: még rosszabb, 20 méteren a Solti kossuth adót is leméred....

Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2011. február 12. szombat, 14:53

Szervusztok.

Ha már kipróbáltad az I2C-t ekkora távolságban és a komunkáció stabil, akkor javaslom a DS75, vagy DS7505-öt. Mindkettő rendelkezik termosztát funkcióval, ráadásul ennek kimenetével is. AVR-rel nagyon egyszerű programozni őket.

Javaslat: Szobába DS7505-öt tegyél a pontossága végett, de ahol nem fontos a tized fok pontosság, oda jó a DS75 is.

Vezetékelés:
- I2C - 4 szál vezeték, a többi a szenzoroktól elmehet (szivattyú, szelep vezérlés)
- 1-WIRE - A hossz miatt a parazita tápot szerintem felejtsd el, így marad 3 vezeték, de a többit - mivel nincs közvetlen kimenete a vezérlésnek, így az AVR-ről kell megoldanod, ami plusz láb.

Leprogramozás: Az I2C programozása egyszerűbb ráadásul kevesebb tárhelyet igényel.

Személy szerint sokféle szenzort kipróbáltam már, de I2C-t ekkora távra csak bufferolva próbáltam.

Ha I2C-vel nem megy a szerkezeted, akkor nem sokból áll átállni 1-WIRE kommunikációra!

Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

HozzászólásSzerző: szepnorbee » 2011. február 13. vasárnap, 9:48

Sziasztok! Adott lenne egy kódrészlet:

Kód: Egész kijelölése

'Karakterek kiírása i2c buszra
Sub Displaytxt()
Reset Portc.2                                               'pull mrq low
Waitus 2350                                                 '2350
Set Portc.2
Waitus 101                                                  ' 'let it got high again
I2cstart                                                    'start condition
Waitus 65                                                   '65
I2cwbyte &H94
Reset Portc.2
I2cwbyte &H01
I2cwbyte &H01
For C = 1 To 8
I2cwbyte Hex2s(c)
Next C
Set Portc.2
Waitus 250                                                  '250
I2cstop
Waitms 200
End Sub


Ez egy speciális i2c-ről vezérelt kijelző, aminek van egy plusz MQR lába is, amit vezérelni kell. Ő van a Portc.2-n. Ennek vezérlése miatt van a son waitus. A problémám az, hogy mint tudjuk ez a waitus utasítás nem túl pontos dolog, épp ezért a kijelző hol kiírja amit kérek, hol nem. Milyen pontosabb timer alapú időzítéssem tudnám helyettesíteni a waitus-eket? Gondolkodtam timer megszakításban, de sajnos még nem vágom, hogyan lehetne 3 különböző időzítést beállítani egy timerre. Adnátok valami tippet?

Szerk: Probléma megoldva, kellett a végére egy Waitms 200. Túl gyors volt a kiírási kérelem.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. február 13. vasárnap, 10:35

Ha ilyen pontos idozites kell: felejtos. a hiba masutt van....
Nem az hogy MINIMUM ennyi varakozas kell?

Amugy NOP: 1 utasitas 1 orajel kihagyasa. azt lehet megszamolni....

Avatar
jsityu
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2010. december 4. szombat, 7:00

HozzászólásSzerző: jsityu » 2011. február 13. vasárnap, 14:47

Bocs, hogy visszakanyarodom még az én témámra.
Az 1 wire számomra még ismeretlen és nem látok benne annyi lehtőséget, mint az I2C-ben. Bár lehet csak nem ismerem..
Szóval egyenlőre inkább maradnék az I2C-s eszközöknél. Főképp, mert viszonylag sok eszközt kéne felfűznöm egy-egy helységben(2-3 hőmérő, 1portbővítő a radiátorszelep vezérléshez, talán külön kijelzőnek is egy. És mindez helységenként).
Az LM76 esetében ill. a többi I2C-s hőmérő esetében a pontosság kérdését nem úgy értettem, hogy abszolút értékben. Az nem érdekel, hogy egyszer az elején kalibrálni kell (most is 3C minuszt vontam le az értékből szoftveresen, hogy reális lgyen). Inkább az a kérdésem, hogy ha egyszer be van lőve, akkor abban a max 5C fokos tartományban pontos-e, tehát a változás értéke pontos-e. Az LM76-nál most kihasználva a 0,0625-ös felbontást, tizedfokos pontossággal jeleztetem ki az értéket és reálisnak tűnik a változás.
Ill. az érdekelt még, hogy vezeték hossza ezt a pontosságot befolyásolja-e. Ahogy én gondlom nem, mert ha egyszer a kommunikáció stabil, akkor a szenzor csak egy digitális értéket ad át a vezérlőnek. Jól gondolom?
Ampervadász, közs a tippeket. A DS7505 tetszik, de a termosztát funkciójával nem tudnék mit kezdeni, mert a vezérelendő eszköz egyrészt db is lehet esetenként, ill. megint máshol van. Mindent a központi kontroller fog leolvasni és az alapján küldi ki a vezérléseket, ahova kell(radiátor szelep/ek, kazán,kijelző, indikátor led/ek, stb)
A terv és az elvek már rég megvoltak a fejemben. A vezérlés eszközeként 1-2 hónapja találtam meg az AVR-eket. Alap programozási ismeretek és kísérletek után, most a konkrét mérő és beavatkozó eszközöket keresem. Főképp a hőmérő egysgég korrekt kiválasztása lenne fontos. A kalibrálás utáni relatív pontossága és a finom felbontás nagyon fonots számomra. az I2C pedig vonzó programozás és rugalmasság miatt.
Tehát szerintetek mit válasszak, LM75, LM76, DS7505, stb.. nem sok gyakorlatom van, ezért kérek tanácsot. össz legalább 10 ilyen Ic-re lesz szükségem, nem akarok nagyot tévedni :)
Pl. néhány pontra a járólap fugáiba is bele szeretnék apliákálni néhány ilyen szközt a padlófűtés figyelése végett :) Lehet ez már nagyon elveteműltnek tűnik, de ha már elkezdtem, szeretnék egy igen korrekt rendszert összeállítani :) (Bocs a kisregényért)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. február 13. vasárnap, 16:00

Az adatlap alapján azonos hőmérséklet visszaolvasása 0.5 fok hibával megy.

Atz 1Wire-t nem véletlen mondom: 30 méter garantált (nem az ajánlást áthágva készülő távolsági regord (nálad I2C)); 70 eszközig egyetlen buszon tesztelve; a hőmérő _ténylegesen_ 0.1 fok pontos, kalibrálás _nélkül_.


Az 1-wire bővíthetőbb, kiterjeszthetőbb és nagyságrendekkel rugalmassabb. Csak 1x hegesszenek a szolszédban. Az 1W túléli, a I2C meghal.
I2C kommunikációt _sokkal könnyebb_ kommunikációs hibával kiakasztani...

Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2011. február 23. szerda, 9:04

Szervusz jsityu!

Már kezdem átlátni a helyzetet, amit szeretnél megvalósítani. Javaslom hallgass Robert mesterünkre!

10db I2C-s hőmérő szonda? Egy típusból max 8 fűzhető fel.

Portbővítés: Léteznek nagyon jó 1-WIRE-s portbővítők is, amit szuperul fel tudsz használni a célodnak megfelelően.

Zavarérzékenység szempontjából az 1-WIRE rendszer. Gondold el! Kész a rendszered I2C-vel, működik, majd a kommunikációd egy pici elektromos zavar végett szétesik. Összekuszálódik minden.

Avatar
jsityu
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2010. december 4. szombat, 7:00

HozzászólásSzerző: jsityu » 2011. február 23. szerda, 18:29

Köszönöm a segítő hozzászólásokat.

Mindenképp hallgatok rátok. Egyenlőre még nem volt 1 wire-s eszközöm és kicsit bonyibbnak tűnik a kezelése, azért határolódtam el tőle eddig. De most rendeltem pár 1 wire-s cuccot is meg még pár I2C-st. Még komolyabb éles teszteket fogok folytatni.
A max 8 db nem probléma, több típust variálva terveztem már így is a rendszert, ill. néhány helyre a behúzott vezetékszám probléma miatt mindenképp 1 wire-s eszköz is lesz téve.
Viszont ha tudnátok konkrét típust 1 wire-s portbővítőre, azt megköszönném. Egyenlőre nem akadtam ilyen cuccra. Ugyanis néhány pontra a rendszerben kis kijelzőket, néhány nyomógombbal kéne elhelyeznem. Amik így elméletben nagyon szépen felfűzhetőek lennének az I2C rendszerre.
1 wire-s portbővítők is elég gyorsak a kijelző kezelésére?
No még tesztelgetek, amint megérkeznek a a rendelt cuccok. Mondjuk a 20m.es kábelen bekötött I2C-s LM76 már vagy másfél hete hiba nélkül nyomul :) De azért tényleg átgondolom még a dolgot.
Köszönöm.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. február 23. szerda, 18:52

DS2408
Illetve emuláció, pl. ATMega8 chippel...

Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

HozzászólásSzerző: nobody_hun » 2011. február 27. vasárnap, 15:11

Üdv!
Adott egy gyári rendszer, benne egy i2c master és egy slave.
A feladat az lenne, hogy a slave regisztereit kiolvassam. Arra gondoltam, hogy a buszra rálógatok egy AVR-t, ami ciklikusan olvasgat.
Ha a valódi master írni akar, akkor viszont az AVR nem fog tudni olvasni, de ezt az Err változóval kezelni lehetne vagy az SCL figyelésével az olvasást eltolni.
Szerintetek?
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 867
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2011. február 27. vasárnap, 17:26

Reménykedjünk, hogy a másik rendszer is fel van készítve multi-master módra. Megoldás lehet még, hogy ha ciklikusan kérdezi a Master, hogy egy időzítéssel figyeled, mikor ment le egy tranzakció és a köztes időben beleköszönhet az AVR-ed (ha van rá annyi idő). A Master tranzakióba való beleszólás nem biztos, hogy egészséges, bár lehet, hogy egyszerűen újrakérdez, de nem biztos.

Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

HozzászólásSzerző: nobody_hun » 2011. február 27. vasárnap, 19:00

Egy tunerről van szó, amiből az osztó értékét (2 byte + 3 byte control) szeretném visszaolvasni.
Csak csatornaváltásnál van kommunikáció, illetve csatornakeresésnél.

Update:
Talán ez lesz a megoldás: PCF8584, ezzel megcsapolni az i2c buszt.

Adatlap:
nxp.com/documents/data_sheet/PCF8584.pdf
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző

"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 10 vendég