Fórum témák
» Több friss téma |
Van ennek valahol elérhető tudománya? Boost C -re gondolok. Angol is jó...
Hát hosszas töprengés után csak ráadtam a fejem az I2C kivesézésére...
De hogy őszinte legyek nem értem... mármint magát a metódust értem, csak azt nem ahogy a Flow használja! Vegyük elsőnek a "Küldést".... leszedtem a példaprogramot Ezt az egész litániát be kell irni minden adatküldés elött? vagy csak egyszer a program elején és utánna amikor küldeni akarok akkor már csak a Send the I2C data részt kell? Ugy kezd a makró hogy iniciálás I2C(0) MI2C_Init() (Én mondjuk itt simán a startot választottam volna! Ő miért az Init-el kezd? amikor nem is ad értéket Utánna: Initialise Constants DeviceAddress = 0x1C Data = 0x55 Internal_Address = 1057 ( Itt a Változóknak adja meg az értéket a DeviceAddress gondolom a cimzett I2C ezköz címe A Data itt gondolom megadja a küldeni kívánt adatot, Az Internal_Adress pedig egy belső cim... amit nem értek, de erre mindenhol ezt látom) Utánna folytatja hogy Workout Internal Address Byte Values InternalHi = (Internal_Address >> 8) InternalLo = Internal_Address (Ezt Szintén nem értem, de erre is mindenhol ezt irja) Utánna pedig maga a küldés Send the I2C data MI2C_Send_Byte_Transaction DEVICE_ID ( Gondolom a cimzett I2C-t kell kiválasztani) AddrH AddrL (Ezeket valami kötelező protokolnak gondolom, mert mindenhol ez szerepel) Data (Pedig a küldendő adat... ha jol gondolom) Namost ... !!!! Mi a Különbség a MI2C_Transmit_Byte és a fent leirt Sent_Byte_Transaction között? Mert ha jol látom akkor a "sima Transmit_Byte-nál, nem tudok címeztni... csak az adatot tudom megadni... Ezek szerint ott kiküldi minden egyes kapcsolt I2C ezköznek?? Remélem nem kapok letolást a konyhanyelves fogalmazásért... de most csak bámulok mint a sülthal!
Közbe Bujom folyamatosan a példaprogramokat , ha jól gondolom az Initialize I2C "opciót" a program elejébe kell csak betennem azzal úgymond csak a programba élesztem az I2C-t
Illetve a Initialise Constants és a Workout Internal Address Byte Values szintén csak a program elejébe kell betennem amikor meg irni vagy olvasni szeretnék a Akkor a Call nál a MI2c_Startot hívom meg ugy ahogy gondoltam.. és a végén a Stop-al zárom.... De még mindig nem tudom miért jo a két féle küldés és fogadás
Elöször tisztázzuk azt, hogy milyen eszközzel szeretnél beszélgetni, mert nagyon nem mindegy. A példádban szereplő valaminek, ha minden igaz, 16 bites belső címe van. Lehet, hogy egyszerűbb lenne egy olyannal kezdeni, aminek csak 8 bites belső címzése van, majd onnan továbblépni. Egy példát már mutattam neked itt: Bővebben: Link.
Na ezt a hozzászólast kerestem! Hat igy egy fokkal egyszerűbb!
na latod ezt se tudtam hogy 16 bites meg 8 bites cim! Rendeltem egy két olcsobb I2C-s komponenst, aztán most jöttek meg... ezért gondoltam hogy elkezdek gyakorolni velük!
Ma vagy holnap összedobok egy dugdosos panelon egy probakapcsolást. Tegnap megjött a PicKit3-is.... bár nekem elég klone kinézete van! De mindegy, ha megy akkor jo!
Azthiszem van I2C hőmérőm is, de giroszkopom az biztis, söt I2C-s LCD is van a pakkba! Dugdosok egyet aztán jöhet a teszt! Azt még eltudod mondani előzetesbe hogy mi a különbség a MI2C_Transmit_Byte és a Sent_Byte_Transaction között? Mintha az utobbinál egy pakba lenne az ezköz cime, a cimzett terület és az adat... migpedig a sima transmit Byte-nál külön külön egyenként /Call- onként/ kéne beirni a cimet, címzettet és az adatot
De lehet hogy rosszul látom, illetve gondolom!
Ha addig nem válaszolnak, a hétvégén tudok részletesebben segíteni, nem vagyok a gépem közelében.
Előre is köszönöm! Addig előbányászom az I2C-s perifériákat! Hogy tudjunk majd válogatni!
Bar most meggyülik a Bajon pickit3-al, de az már egy másik topik!
Mellékletben két kép. Az I2C parancsok a DS1307 típusú RTC IC olvasásáról és írásáról szólnak. A képeken nem látszik, de a teljes program elején szerepel egyszer az I2C inícializálása. A harmadik kép az IC belső regisztereiről (memóriaterületeiről) szól, bővebben az adatlapban találsz információkat.
Alapinfó, hogy a DS1307-es IC címe 1101 000. Ez csak hét bit, a nyolcadik határozza meg, hogy írni vagy olvasni akarsz az IC-be/ből. Íráskor 1101 0000 (decimálisan 208) kell, olvasáskor 1101 0001 (decimálisan 209). Az egyszerűség kedvéért a makrókban is a decimális számok szerepelnek. Kezdjük az írással (az idő beállításával), az egyszerűbb. 1: Az I2C kapcsolat indítása. 2: 208 kiküldése (az IC megszólítása, írás üzemmód). 3: Az IC-nek meg kell mondani, hogy melyik memóraterületre állítsa be a regisztermutatót. Jelen esetben a másodperceket akarod beállítani ami a nulladik regiszter. 4: 0. regiszterbe nullát írsz. 5: 1. regiszterbe (perc) beírod a beállítani kívánt percet. 6: 2. regiszterbe (óra) beírod a beállítani kívánt órát. 7: Az I2C kapcsolat leállítása. A dolgot kicsit bonyolítja pár dolog. Az első lépés, legalábbis ennél az IC-nél az, hogy meg kell neki mondani, melyik regiszterrel akarsz foglalkozni. A 0. regiszter tartalmazza a CH bitet is. Ha az egy, akkor az óra áll. Az időt és a dátumot BCD formátumban kell megadni az IC-nek. Az IC automatikusan növeli regisztermutatót (olvasások és íráskor is), azt nem kell külön növelned. Magyarán, ha írsz a 10. regiszterbe, akkor a következő írás automatikusan a 11. regiszterbe fog íródni. 3. ikon: nem kötelező a nulladik regiszterrel kezdeni. Ha csak a dátumot akarod beállítani, akkor a harmadik ikonnál 3-at kell megadni. Az adatlapi regisztertáblázatban megadott címek hexadecimális formátumúak, azokat tetszés szerint át lehet váltani más számrendszerbe vagy eleve úgy használni Flowcode-ban: 155 = 0b10011011 = 0x9B Olvasás: 1: Az I2C kapcsolat indítása. 2: 208 kiküldése (az IC megszólítása, írás üzemmód). 3: Regisztermutató nullára állítása, mert kíváncsi vagy a másodpercekre is (már ha valóban itt akarod kezdeni). 4: Az I2C újraindítása. 5: 209 kiküldése (az IC megszólítása, olvasás üzemmód). 6: Másodperc kiolvasása (0. regiszter, az olvasás után a regisztermutató automatikusan ugrik egyet). 7: Perc kiolvasása. 8: Óra kiolvasása. * 9: Az I2C kapcsolat leállítása. * Olvasáskor a makrónak meg kell adni, hogy az adott olvasás az utolsó-e vagy lesz még több is. Ha az utolsó, akkor az adott értéket 1-re kell állítani. 6. és 7. makrónál nulla, a 8. makrónál ez az érték 1, jelen példában.
Szia sajnos csak most tudtam megnézni a programokat .Az adó része szépen küldi az adatokat de a vevő rész nem csinál semmit. Megnéznéd nekem,hogy mi lehet a baja ?
Kicsit kezdem jobban érteni!
De ugy látom hogy I2C-n belül is el kell különíteni azokat az ezközöket amik csak adatot küldenek illetve azokat amik küldenek és fogadnak is! Jelen esetben amire gondolok... Van itthon egy MPU6050 modulom, erre gondolom én értelemszerűen nem tudok irni, bár hogy nézegetem az adatlapját /igaz az angolom elég pocsék/ de ugy látom hogy "'az érzékenységet" én választom meg.... hogy azt hogy, azt még nem tudom! De akkor ha én egy MPU6050-es modultol akarom lekérni az adatokat akkor - Elindítom Start al az I2C-t - Megszólítom a perifériát / adatlapja szerint ennek is a címe 1101000 mivel olvasok ezért 11010001 azaz 209 - Utánna Pedig és itt jön a pedig.. Mivel nem tudom értelmezni az adatlapot kicsit meg vagyok lőve! Azt irja hogy a visszatérési értéket int-be mentsem ha jol olvasom. Ok csináltam is 3 változot Xaxy Yaxy Zaxy int kategóriába. olvasásos megszólitás után hivok mégegy MI2C_Receive_Byte komponens makrót adom neki hogy Byte 0 visszatérési érték ( mert ha jol tudom oda menti a bejövőt) Xaxy?? Utánna végigpötyögöm ugyan ezt Yaxy-ra meg Zaxy-ra plussz 3 másik változóval x-y-z gfyorsulásra, annyi különbséggel hogy a legutolsónál 0 helyett 1 Byte? Vagy hogy címzem azt hogy honnan olvassa? Helyesebben hogy az X axysnnál az X axyst kérdezze, vagy ez automatikus?? és lépeget egymás után? én csak kérdezgessem az adatokat? Vagy nagyon nagy nagy marhaságot írtam?
Most néztem egy ( igaz Arduinos) videot, és ott találtam egy ilyen linket
Nem csodálom hogy nem találtam a melyik regiszter melyik tengelyhez tartozik, mivel én a produk infót néztem! Itt a 4,17 és a 4,19 pontba van a tengelyekhez a regiszter hozzárendelve. bár itt megkülönböztet magas és alacsony kimenetet is! Viszont olyan Byte fogadást ahol alacsony magas értéket egyaránt meg tudok adni azt csak a MI2C_Receive_Byte_Transaction-nál találtam Viszont ez alapján valahogy így képzelem el ahogy a képen illetve a mellékelt programba van. Ez már valamivel közelebb van az igazsághoz ugye? A hozzászólás módosítva: Aug 21, 2017
A képek alaján jó nyomon vagy de tesztelni csak hétvégén tudom. Ha a kapott értékeket kiíratod egy kijelzőre és mozgatod a modult, láthatóvá válik, hogy jól csinálod-e vagy nem. Pl. másodpercenként kiolvasod négyszer, így gyorsan látszik az eredmény.
Szia!
Még mielőtt teljesen eltévedsz adok 3 képet.. Az egyik az olvasás a másik az írás a 3. a konfig. Ahhoz hogy ez a gyro menjen nem elég annyi hogy kiolvasod a kívánt regisztert, mert azt nem fogja érteni, mivel alapból sleepben van.Ezután még konfigurálni is kell mert nem tudja az érzékenységet stb..
Megprobálom akkor formába önteni! Meg komplett programot kalapálni belőle, aztán énis feltöltöm!
De azért majd számítok rád a hétvégén! Közbe itt az adatlap alapjan már a konfigurálást is kezdem sejteni! Aregiszterekbe kell "küldenem" hogy mit akarok és hogyan Csak még kicsit katyvasz A hozzászólás módosítva: Aug 22, 2017
Szia!
Igen pont erre jöttem rá! már ahogy olvasom és kezdem megérteni hogy kell értelmezni az adatlapot rájöttem hogy az érzékenységet stb hogy állitom! De jok a képek amiket küldtél mert igy kezdem még jobban megérteni! Azt el tudod meg mondani hogy a két féle küldés és fogadás között a Flow-ba mi a különbség! Mert én csak azt látom hogy az egyik "komplexen irja az ID-t alacsony magas jelszintet és a visszatérési értéket a másik meg ugyan ezt tudja csak egyesével kell nekem bepöty-pöty
Idézet: nincs alacsony magas jelszint itt csak egyesek és nullák vannak „komplexen irja az ID-t alacsony magas jelszintet” Az "alacsony" az az írási cím a "Magas" meg az olvasási cím.. Azért jobb szerintem ha nem packba küldesz mindent mert sok felesleges dolgot küld újra meg újra ami csak lassítja és növeli a programodat. Ha tudod mit akarsz inkább pötyögj, a végén jobban jársz vele, és igazából csak az inicializálásnál kell pötyögni.
Na mar eztis tudom akkor.... Lassan lassan de kezd összeálni a kép!
Ha jol látom az irási opciokat te egy makroba raktad bele igy azt nem kell mindig pötyögni... bár most csak mobilrol nézem... de jo ötlet! Ezt az iniciálást még atkell vesézzem... de jo lessz ez! A héten probalok egy programot összerakni rá... kivancsi vagyok hány helyen csúszok meg... Szerintem lessz bőven!
Sziasztok!
16F1823-al kezdek megismerkedni (LED villogtatás) és van egy problémám. Az órajelet internal clock-ra állítottam, 10 MHz-re. A Timer0 beállításai: prescaler: 1:128 clock source: Internal Clock A program által számolt frekvencia a Timer0-ra 76,294Hz. A megszakításban 10-el osztok, aminek a LED-en 7,6 Hz-et kellene létrehoznia. Amit a LED-en látok, az kb. 0,2 Hz. Valamit nem veszek számításba? 16F690-el jól futott.
Töltsd fel a programot, úgy egyszerűbb ellenőrizni. Ami biztosan hibás, az az órajel beállítása, a kontroller nem tud 10 MHz-et előállítni a belső oszcillátorból.
Ha az osccon regisztert nem állítottad be, akkor a kontroller 500 kHz-es órajelről megy.
Az Osccon-t nem tudom, hol kell állítani. C-ben?
Csatoltam pár képernyőfotót is.
Nem tudom, hogy hogyan lehetne erre a fórumra is egy fix fejlécet kitenni, mint a más fórumokban is van, ahol az ilyen fontos alap dolgok mindig ki lennének írva, mint az Osccon beállítása azzal az infóval, hogy a Flowcode nem állítja be. Nekem is Bakman nyújtott ebben segítséget régebben.
Az adatlapból nézd meg, hogy a belső oszcillátor milyen frekvenciákon tud ketyegni. Ezután válassz egyet, állítsd be az osccon regiszterrel (Bővebben: Link) maj ezt az értéket add meg a Chip beállításaiban.
Ez oké, de F690-nél nem kell beállítani? Mert ott jól futott.
Ott is be kell állítani de ha jól emlékszem, ott alapból 4 MHz-en fut a belső oszcillátor.
Köszönöm a segítséget, minden flottul megy.
Az I2C konfigurálását elég egyszer megcsinálnom a program elején ugye?
Tehát amikor áramot kap a PIC is meg az MPU is akkor "felkeltem", és beállítom az érzékenységet..
Igen. Utána már csak olvasni kell.
|
Bejelentkezés
Hirdetés |