Elektronika.lt
 2019 m. spalio 22 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2019 10 22, 16:59. Visos datos yra GMT + 2 valandos.
 Forumas » Skaitmeninė elektronika » I2C užlūžta
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 14
Pereiti prie 1, 2, 3, 4  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 I2C užlūžta
PranešimasParašytas: 2014 12 07, 19:47 Pranešti apie taisyklių pažeidimą Atsakyti su citata
malas
Naujokas
Naujokas
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sveiki,

Turiu RaspberryPi kaip I2C master ir Arduino nano v3 kaip Slave.
SDA ir DCL sujungti per maketinę plokštę (niekas nelituota) tiesiogiai (be varžų ar kt.).

Problema yra tame, kad kartas I2C komunikacija užlūžta, t.y. RPi siunčia komandas, bet Arduino nereaguoja ir nebegrąžina jokių duomenų.

Gal kas yra susidūręs su tokia problema?

Taipogi gal tiesiog sujungęs esu kažką negerai ir kasnors galėtų pakonsultuoti.

Rašau čia, nes užsienio forumuose nelabai kas pagelbėjo.


Plačiau apie kodą
Master visada siunčia komandos numerį, kurią Slave onReceive metu įsirašo, o pagrindinis loop pastoviai tikrina ir vykdo komandą, jei tokia įrašyta.

Kai kurios komandos nuskaito daviklius ir įrašo jų rezultatus, Master vėliau užklausia šių duomenų ir Slave juos išsiunčia ir išvalo.
Šiuo metu jei daviklis nesuveikia, tai Slave negrąžina jokių duomenų (siunčia tuščią atsakymą).

Master dalyje programa parašyta su JAVA ir panaudota PI4J biblioteka.
 I2C užlūžta
PranešimasParašytas: 2014 12 07, 20:12 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Zaria_klp
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
man iškart klausimas - ar tikrai turi būti be varžų? juk visur rekomenduojama skirtingų nominalų pull-up varžos.
taip pat, gal pirma paprastesniu kodu tikrinti, pvz tiesiog ping į vieną pusę ir tiek.

ir dar - rpi 3.3v signalo lygiai, o arduino irgi tokia versija?
http://www.ba0sh1.com/tutorial-3-3v-hacking-for-arduino-nano/ gal reikės modifikuoti arduino, arba naudoti lygių keitiklį iš 3.3v į 5.0v
 I2C užlūžta
PranešimasParašytas: 2014 12 07, 21:06 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
1) I2C synai reikia pull-up rezistoriu.
2) Kaip jau minejo, signalu lygiai turi buti vienodi.
3) Duomenu linijos reikia nepamirsti jungineti tarp iejimo ir isejimo. Gal Arduino nieko neatsiuncia atgal, o RPi laukia ACK?
4) Ka rodo oscilografas?
 I2C užlūžta
PranešimasParašytas: 2014 12 07, 21:45 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Dovydas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Pagrindinius aspektus, į ką reikėtų atkreipti dėmesį jau paminėjo Zaria_klp ir Socrates.

Neaišku, ką reiškia lūžtą? Ar komandos iš RaPi tikrai yra siunčiamos ir jų nepriima Arduino?

Tokias problemas geriausia spręsti naudojant oscilografą arba loginį analizatorių, prijungus prie dominančių magistralių. Tad jei yra galimybės, įdėk komunikacijos vaizdelius - sulauksi konkretesnių patarimų.

_________________
---
 I2C užlūžta
PranešimasParašytas: 2014 12 07, 23:23 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Artiomas.K
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Dar prie auksčiau paminėtu dalykų butu gerai sužinoti I2C synos grėitį ir kabeliuko ilgį tarp RaPi ir Arduino.
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 09:32 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
1) Arduino puseje pullup varzas junk i 3,3V
2) RaspberiPI negali laukti kol isorinis irenginys sugromulos ir atsakines su pauzemis, todel jei prasidejo I2C siuntimas - viska turi issiusti vienu ypu.

P.S. kai man iskilo panasi beda, pasinaudojau papildomu pakvitavimu sistema, nes Raspbian nera REALAUS LAIKO OS, tad jei pradejo nuskaitineti kadra is kameros, tai 20ms nieko kito daryti nesugeba (nebent perrasyti nemaza dali raspivid/raspicam ir kameros draiveri ir dar OpenCV).
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 12:10 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Tai pas RasPi nera DMA kameros draiveryje? Smile
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 12:50 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Socrates rašo:
Tai pas RasPi nera DMA kameros draiveryje? Smile
yra, bet kai imi vaizda is kameros per OpenCV kol nenuskaito kadro, tol CPU freezinasi beveik 100%, tad nori nenori, bet tenka palaukti 16..35ms, priklausomai nuo rezoliucijos, formato ir t.t. Todel, kai reikia nuskaitineti kazkokius duomenis gan daznai ir dar tiksliu laiku, tai tenka naudoti dviguba buferizacija, pakvitavimus ir t.t. Pvz, jei siunciant per I2C dar ivyksta pertraukimas ir tarp siunciamu baitu susidaro nedidele pauze, tai RasPI gauna siuksles. ziureti BCM2835 ERRATA.
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 13:07 Pranešti apie taisyklių pažeidimą Atsakyti su citata
malas
Naujokas
Naujokas
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
bandau atsakyti į visus komentarus.

* kadangi esu pradedantysis elektronikas ir patyręs programeris, tai oscilografo deja neturiu ir nepavyks pažiūrėti ką tiksliai siunčia per magistrales.

* arduino pas mane yra 3V3, bet kiek teko skaityti, tai net jei būtų 5V, tai neturėtų sudaryti problemų, jei Arduino yra Slave, nes I2C aukštas signalas yra 0, o žemas 1 ir aukštam signalui pakanka 3V3. Čia, beabejo, pataisykit jei kažką negerai supratęs.

* I2C greitis abiejuose įrenginiuose yra standartinis, t.y. 100 kHz.

* I2C kabeliukas yra iki 1m ilgio, bet čia tik testavimo rėžime, vėliau norėsiu, kad būtų didesnis ilgis. Galbūt jau dabar reiktų kažką papildomo dėti, kad išgalėtų ilgesnius ilgius perdavinėti?

* Nelabai supratau dėl duomenų linijos perjungimo, nes tą daro I2C draiveriai tiek RPi, tiek Arduino, rankiniu būdu nieko nekeičiu.

* Kaip apskaičiuoti kokio dydžio pull-up rezistorių reikia mano konkrečiam atvejui?

"Lūžta" reiškia I2C neveikimą, Master komandas siunčia, negauna jokio Exception, bet negauna ir jokio atsakymo iš Slave. Slave komandų negauna ir jų nevykdo.

* Kaip rašiau pirmame poste, Masteris nelaukia kol Slave įvykdys jo atsiųstą komandą. Master tiesiog nusiunčia komandą Slave, kuris ją įsirašo į variable ir pagrindinis ciklas tą komandą įvykdo. Po tam tikro numatyto laiko tarpo Master kreipiasi į Slave buvusios komandos rezultato ir Slave jį iškart išsiunčia tokė koks jis tuo metu yra. Kartais rezultato nebūna ir Slave nieko nebegrąžina.


Jei pagelbėtų, galiu įkelti visą Arduino Slave kodą, atsiųsti foto kaip viskas sujungta pas mane. Master I2C komunikacijai naudoja com.pi4j.io.i2c paketą.

Konkreti klaida gaunama JAVA kodo (0x4 - Slave I2C adresas):
java.io.IOException: Error writing to /dev/i2c-1 at address 0x4. Got -20001.
at com.pi4j.io.i2c.impl.I2CDeviceImpl.write(I2CDeviceImpl.java:100)

Klaida įvyksta labai nereguliariai. Nuo vakar nakties iki šiandien šito posto rašymo įvyko 3 kartus, o prieš tai paskutinį kartą tik penktadienio naktį.

Po klaidos vienintelis veiksmas, kuris atstato I2C komunikaciją yra Slave perkrovimas (Reset mygtuko pagalba). Master perkrauti nereikia.
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 13:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
malas
Naujokas
Naujokas
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
čia panašu, kad labai panaši problema kaip pas mane. paskutinis komentaras.
https://code.google.com/p/arduino/issues/detail?id=506

bet kadangi nelabai suprantu kodėl tie pull up rezistoriai kažką gadina, norėčiau sulaukt protingesnių už mane šioje srityje komentarų.
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 14:07 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
I2C standarte "1" yra tiek, kiek paduoda per pull-up varzas, nes isejimai yra "atviro kolektoriaus/istakos".
Esant ilgesniems laidams juos reikia ekranuoti, o jei naudojamas didesnis greitis, dar ir sumazinti pull-up varzu nominalus (priklausomai nuo isejimo driverio sugebejimu, varzas galima mazinti iki 1k ar net 300om ).
BCM2835 atveju reikia tureti maumeny, kad jis nepalaiko WAIT, todel pradejus siusti/priimti, visi bitai turi buti istransliuoti iki galo tuo greiciu, koks nustatytas.

Jei bendrautum tarpu dvieju Arduino - tokiu bedu nebutu, ta desinchronizacijos beda yra pas RaspberyPI ir kitus irenginius, kuriuose naudojamas tas konkretus ARM chipas. As sita beda (kaip jau minejau) sprendziau taip:
1) jei arduino turi pakankamai laiko issiusti/priimti - duoda signala raspi per papildoma isejima
2) kai raspi turi pakankamai laiko subendrauti - pranesa jog gali subendrauti
3) jei laiko dar yra, arduino patvirtina tai
4) raspi siuncia uzklausa, arduino atsako paketu duomenu
5) jei duomenu buferyje nebera, arduino nuima prasymo signala
6) jei nebera laiko raspiui, jis nuima pasirengimo signala
7) jei duomenys priimti sekmingai, raspi duoda patvirtinima, jei ne - prasyma pakartoti

SLYKSTU, zinoma, bet ka padarysi, jei RaspberyPI (tiksliau jo CPU ) kurejai biski apsilasharino.
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 14:14 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
malas rašo:
čia panašu, kad labai panaši problema kaip pas mane. paskutinis komentaras.
https://code.google.com/p/arduino/issues/detail?id=506

bet kadangi nelabai suprantu kodėl tie pull up rezistoriai kažką gadina, norėčiau sulaukt protingesnių už mane šioje srityje komentarų.

"gadina" tuo, kad gali sukelti "1" lygi iki 5V, ir jei kita iranga nera 5V tolerant, tai gali strigti ar net dumais parukti.

1) gali pakoreguoti TWI library ir twi_init() pakeisti taip, kad nejungtu pull-up
2) gali sumazinti isorines pull-up i 3,3V varzas tiek, kad vidines varzos nebeturetu itakos (uztektu 1k ir ta itaka butu vos iki +0,6V)
3) triuksmingoje aplinkoje galima papildomai i GND prijungti nedideles talpos kondensatorius (50..100pF)
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 16:16 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Algi, ka reiskia zodis pakvitavimas? Nuo zodzio kvitas? Cia lietuviskas vertinys is kokio anglisko zodzio?
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 17:51 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Socrates rašo:
Algi, ka reiskia zodis pakvitavimas? Nuo zodzio kvitas? Cia lietuviskas vertinys is kokio anglisko zodzio?
suprask kaip FLAG/SIGNAL ar dar kaip tik tau ant seiles uzeis. Tipo paduodam "1" arba "0", kuri kita schemos dalis supranta kaip signala veikti (gali duoti atgal atsakyma, kad tipo suprato/atliko. "Tarybineje" literaturoje tokie signalu apsikeitimai buvo aprasomi kaip pakvitavimas (nieko bendro su cekiu kokiam McDonald'e ).
 I2C užlūžta
PranešimasParašytas: 2014 12 08, 18:05 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Artiomas.K
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Taigi,pradėsim nuo pradžios,nuo hardware.
1) Logic level RaPi ir Arduino(3.3V ar 5V)
2) Teisinga pullup rezistorių varžą.

Sprendimu variantai ir eiliškumas:
1)Pasirinkti tinkama variantą abiem.Neturėjau reikalu ne su vienu ne su kitu,todel nežinau tiksliai,bet jei abeju chipų įejimai yra "5V tolerant",geriau naudoti 5V ir pritraukti linijos per išorinius pullup rezistorius.
2) Kuo ilgesnis kabeliukas,tuo didesne parazitinę talpą visos sistėmos(kabelis+master+slave) todel atsiranda ribojimai maksimaliam greičiui.Reikia stengtis mažinti ta talpą,o ne didinti kaip pasiulė vienas iš forumiečiu. Arba mažinti pullup rezistorių varžą iki leistino minimumo,t.y. paskaičioti pagal maksimaliai leidžiama įeinančia srovę RaPi ar Arduino įejimo(pagal silpniausia).

Papildymas: Minimalia pullup varžą dar apriboja toks paramėtras kaip synos Vlow max.(maksimali įtampa loginio 0).Pagal specifikacija 0.4V.

O šiaip naudoti I2C didėlems atstumams IMHO ne pats geriausias sprendimas,nes jo paskirtis "chip to chip comunication". Dideliems atstumams yra skirti RS232,RS485,CAN ir t.t.


Paskutinį kartą redagavo Artiomas.K, 2014 12 08, 19:52. Redaguota 2 kartus(ų)
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie 1, 2, 3, 4  Toliau
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

TMS ELECTRONICS
TMS ELECTRONICS

www.rslietuva.com – nemokamas elektronikos komponentų pristatymas

www.matuok.lt - Interneto spartos matavimo sistema

Lietuvos mokinių neformaliojo švietimo centras

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Technologijos.lt

Mokslo festivalis „Erdvėlaivis Žemė

www.esaugumas.lt – apsaugok savo kompiuterį!

LTV.LT - lietuviškų tinklalapių vitrina

www.rrt.lt – Lietuvos Respublikos ryšių reguliavimo tarnyba

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

MRO Supply

FS 19 Tractor mods
Farming Simulator 19 Mods, FS 19 Maps, How to install
ATS mods
ATS trailer mods, ATS truck mods, ATS map mods
FS 19 Tractors
Farming Simulator 19 Mods, FS 19 Maps, FS 19 Trucks
FS19 Maps, FS19 Trucks
Farming Simulator 2019 Mods, FS19 Tractors
Install MC Mods
Minecraft Dungeons Mods, Minecraft Dungeons Skins, Minecraft Dungeons Maps
FS19 Combines
Farming Simulator 19 Mods, FS19 Trucks, FS 19 Mods
How to Install Mods
Minecraft Dungeons Mod, Minecraft Dungeons Maps, Minecraft Dungeons Skins
Mobilieji telefonai
Mobilieji telefonai internetu, telefonų dėklai, telefonų priedai
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Farming Simulator 2017 Mods, FS 17 Mods
ls2017.com
„TV programa“ – tiksli
televizijos programa

www.tvprograma.lt
Lietuvos mokinių neformaliojo švietimo centras
www.lmnsc.lt
Buhalterijos kursai, apskaitos kursai, vadovų apskaitos kursai
www.apskaitakiekvienam.lt
Svarstyklės – čia, matuokliai, laboratorinė įranga
www.moris.lt
Lyderystės mokymai, mokymai vadovams, vadovų mokymai
www.tripleo.lt
Mokslo ir technologijų pasaulis – naujienos ir straipsniai
www.technologijos.lt
Farming Simulator 2019 Mods, FS19 Tractors, FS19 Maps
farmingsimulator19mods.fr
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – geriausių lietuviškų tinklalapių katalogas
www.ltv.lt/technologijos/
FS 2019 Mods, FS 2017 Mods, FS 2015 Mods
www.farming2015mods.com
Mokslo populiarinimo projektas „Mokslas verslui ir visuomenei“
www.mokslasplius.lt
Reklama


Reklama