Fórum témák
» Több friss téma |
Szia!
DS 1621 I2C-n. Felrakom ide, hátha jól jön valakinek. Szia
Szia!
A nagyobb kapacitású EEPromok kezelése ettől csak annyiban tér el, hogy a slave cím után két byte-ot kell beírni (írás és olvasási parancsnál), hogy a memória rekeszt megcímezzük. Egy érdekesség: 16F886-nál a SSPCON regiszter CKP bitje nem használt az I2C master módjában, de nekem a kommunikáció hibásan futott, amikor 1-re állítottam. Szia
Szia!
Én csak a 16F877-tel próbálkozom. Ehhez van meg a demo panelom, igy mig ki nem növöm nem akarok másikkal kisérletezni, annak ellenére, hogy sokan írták, van már ennél jóval okosabb, könnyebben programozható,stb.! Igazából több helyről, pl. a lakásban, fóliában, veremben, ill. a kint levő hőmérsékletet szeretném vele mérni, esetleg úgy, hogy pl. egy napra vissza is lehessen keresni. Ez az II2C megoldás jó megoldásnak látszik, mert két szál madzagra fel lehet többet fűzni, és csak a cím módositásával bár melyik olvasható, csak a távolság, ami áthidalható, nagyon rövid. Jelenleg azt gondolom kivitelezhetőnek, hogy minden mérőponton a DS 1621-et a helyszinen kiolvasom egy PIC-el, és soros vonalon egy központ folyamarosan begyüjti az adatokat. Viszont ezen még van időm rágódni! Szia!
Sziasztok!
Meg tudnátok mondani, hogy egy áramkörön belül tudnám- e használni az i2c és spi buszt?(PIC18F4550) Természetesen felváltva. Köszönöm.
Szia!
Ha jól értem az a kérdés, hogy egy 18F4550 -nel szeretnél mind a kétféle kommunikációvan kapcsolatot kialakítani további áramkörökkel. Sajnos ugyan az az egység kezeli a kétféle kommunikációt a kontrollerben. Ettől még lehetne felváltva használni a két fajtát. Az SPI eszköz nem figyeli az adat és az órajel vonalakat, ha a SS bemenete nem aktív, tőle is lehetne felváltva használni. Az I2C eszközökön azonban nincs harmadik - chip kiválasztó - jel, mindig figyelik a két vonalat. Miattuk így nem lehet felváltva használni a két kommunikációt. Van megoldás: Az MSSI-vel kezeld az SPI áramköröket és programból - más lábakon - kezeld az I2C eszközöket. 16F628-hoz írtam már programozott I2C kezelést. Szia
Én az SPI-t kezelném szoftverből, mert az egyszerűbb és gyorsabb is, kevesebb szoftveridőt használ el.
Szia!
Az órajel demultiplexálásával nem tudom kiválasztani a kommunikációs csatornát? Köszönöm.
Szia!
Sajnos mind a SCLK mind a SDA vonalat meg kellene kapuzni külső átamkörrel (SDA lefutó éle, amikor a SCLK magas => START, SDA felfutó éle, amikor a SCLK magas => STOP). Ráadásul az SDA vonal kétirányú. Szia
Mondjuk analóg kapcsolóval (74HC4066) meg lehet oldani viszonylag egyszerűen, ha épp muszáj De ha meg lehet oldani szoftverből, akkor inkább abból csinálnám, azért van a mikrokontroller, hogy ami hardvert ki lehet váltani, azt kiváltsuk vele.
A PCA9515A I2C bus repeater is használható a leválasztásra (van neki egy engedélyező bemenete).
Szia!
Sajnos az említett típus majdnem annyiba kerül (~500 nettó), mint a kontroller... Ha nem kell a 3.3V - 5V konverzió akkor, a PCA9510 is megteszi (~200 nettó), de még ennek az ára is összemérhető a kontrollerével. Szia
Sziasztok!
Most ismerkedem az I2C kommunikációval, és az AN976-ost alapul véve , azt módosítottam úgy hogy csupán byte írás és byte olvasás legyen, a végén összehasonlítással, majd egy-egy LED jelezné a meg ill. nem megfelelőséget. Itt aztán elekadtam mert a szimulátorban /Protel/ folyamatosan a hibás LED világít és nem tudok rájönni hogy hol lehet a hiba ! Az MPLAB-ban látszólak jól működik ha én módosítom a regisztereket, nem tudom lehet-e máshogyan ezt szimulálni. Megépítettem próbapanelon gondolván hogy majd a PicKit2 Logic Tool-jával megmérem a jeleket /a 4,7 k-s lehúzó ellenállásokat kiszedtem a bemenetről/, hátha sikerül megoldanom a problémát de egyszerűen nem tudom pl. az SSPBUF-ba mi kerül stb. stb. ! Kérlek benneteket hogy fussátok át a kódomat hátha valami kopasz hibát vétettem benne ! Előre is köszi mindenkinek ! PS.
Szia!
Az SCL és SDA vonalakon van felhúzó ellenállás a pic Vcc tápjához? Szia
Szia ! Természetesen van. Kipróbáltam több értékkel is:2,2-4,7-10 kohm-os ellenállásokkal is. Az eredmény ugyan az.
PS.
Szia!
Az itt leírt kódom megy PCF8583-mal (1 byte word address), az eepromokhoz 2 byte word address kell.... - Mekkora a pic órajele, jó-e a beállítás? - Milyen eepromot kezelsz? - Milyen szintek vannak az A2, A1, A0 lábain? - Milyen szint van a WP lábon? Szia
A PCF8583-hoz én is tudok ajánlani egy jól bevált rutint...
I2C_HW_uni_rut Kb 10 "projektben" müködik kisebb módosításokkal...
Szia!
Először is köszönöm a segítséget, a válaszok a kérdéseidre sorban: -4 MHz-es az órajel, a beállítás jó -24LC256 az eeprom típusa -az A1, A2, A3, és a WP láb és GND-re van kötve Odáig már eljutottam a Protelben, hogy minden rendesen működik az írás folyamán végig, az olvasásnál is egészen addig amíg az SSPCON2 regiszter RCEN bitjét 1-be állítom, innentől csupa egyest olvas be az SSPBUF-ba, nem értem mitől lehet !
Szia!
Az I2C kiolvasó rutinod működik, a jelalak szerint a jó (0xAA) értéket olvassa ki és a kiolvasási képen az RD1 áll 1-re az összehasonlítás után... Szia
Szia!
Az igaz, hogy a jelalakok a valóban helyes működést ábrázolják, de a regiszterek értékei /SSPBUF=11111111, datai=11111111, PORTD=00000001/ nem egyeznek ezekkel, ja és a valóságban is a hibás működés tapasztalható. Van esetleg tipped hogy a PicKit2-vel hogyan tudnám megmérni ezeket a jeleket, vagy a regiszterek értékeit kiolvasni működés közben ?
Szia!
A PicKit2 "Logic Analizer" módjában fel tudod venni a tényleges jelalakokat. A Tools / Logic Tools / Analyzer... Szia
ugyan már kihalt a topic, de talán még jól jöhet valakinek miként tudja használni a pickit2 -t Logic Analizer módban.
leírás itt
Sziasztok szeretnék kérdezni az I2C témával kapcsolatban, mert kicsit fent akadtam Általatok mutatott programok segítségével olyan kommunikációt írtam, ami két különböző típusú pic közt zajlik le. Az egyik 16f74 -es (eléggé buta masterre nem igazán lehet alkalmazni, csak szoftveresen, hiányzik az sspcon2 regisztere) a másik 16f877A (ez a master míg a 74 es a slave). A program annyiból áll, tesztelés végett, a master folyamatosan csak elkezdi a kommunikációt, megcímzi a slave-t, ack-t ellenőriz, leálltja a kommunikációt ,és ezt tovább a végtelenségig Illetve ha a slave nem küldött vissza ACK-t akkor a masteren kigyullad egy led , a led akkor alszik ki ha kapott ack-t. Lényegében jól működik a rendszer, attól az apróbb hibától eltekintve hogy kb. 20másodpercenként kigyullad a ledem, tehát valamiért hosszabb időnként egy pillanatra nem ack-z a slave. Az probléma lehet, hogy nekem a felhúzó ellenállásaim , 4,7 k ohm osak? Esetleg lehet hogy kipróbálom 1,8 k val is mindjárt. A másik ami még érdekelne, Ha a slave egységéről lehúzom a tápegységet, akkor eléggé furcsán viselkedik ,nem ég a masteren a ACK vesztés led. Azaz a táp lehúzásánál egy pillanatra felvillan, aztán kialszik. De ha ezekután a panelról lehúzom magát az I2c vezetéket kigyullad a led, ha visszadugom újra elalszik.. Segítségeteket előre is köszönöm!
ui. Úgy teszteltem hogy az i2c vonalat megbontottam azaz lehúztam az egyik egységről, illetve hogy a slave-t reseteltem. Ekkor működik az ACK veszteség jelzése.
Sajnos 2k, val is fentáll az időleges ack- veszteség Semmi ötletem
a meghülyülésre közben rájöttem apukám segítségével, elmagyarázta hogy belül egy ic lába hogy néz ki.. És rájöttem hogy ha egy egységről lehúzom a tápot ne várjam azt hogy lényegében úgy működjön mintha ott sem lenne, mert az i2c visszatáplál neki feszültséget az ic-nek és hibás működést generál. Az még nem oldódott meg hogy időnként nem kap ack-t. Az micsoda hogy átírom a master címzését tehát hogy másik címet küldjön ki, és akkor is úgy néz ki hogy foadja a slave? Na jó megyek átnézem a slave programját..
Szia!
Az I2C buszon több slave is lehet... Az jelenti szerintem, hogy ne csak a 16F74 slave-vel kommunikáljon, hanem egy másik címen is. Ez a másik cím nem fog válaszolni, mert nincs ott az eszköz, ekkor biztosan nem szabad ACK-t kapni... - Két ciklus között kivárod-e a minimális időt? A 16F74-ben is program fut, lehet, hogy bizonyos helyzetekben nincs elég ideje a végrehajtásra...
Hogy érted a minimális időt? a 74-es csak felvan konfigurálva 7bites Slave-nak és elvileg ha megkapja a címét le ack-zna automatikusan ugye, amúgy meg egy végtelen ciklusban forog semmi,goto semmi. Fogalmam sincs hogy egy kamu címmel hívok akkor miért kapok ack-t??-amikor a slave címe tök más . Ha lenne egy kis időd szívesen mellékelem mind a két programot.
Szia!
Szerintem a SSPIF bitet törölni kell és az SSPBUF regisztert ki kell olvasni mielőttc a következő adat megérkezik. A 16F74 adatlapján a Figure 9-6 szerint nem ad automatinusan ACK-t, ha SSPOV bit ráfutást jelez.... A csak címzésből álló adatátvitel nem szabványos, egy adatot mindenképen át kellene vinni, utána stop helyzetet előállítani. A logika csak a stop után kerül alaphelyzetbe..
Szia! Én ez alapján indultam ki 9.3.1 "When an address is matched, or the data transfer after
an address match is received, the hardware automatically will generate the Acknowledge (ACK) pulse, and then load the SSPBUF register with the received value currently in the SSPSR register." vagyis ha címegyezés van illetve címegyezés után adat jön, a hardver automatikusan generál egy ack-t. Én ezt szerettem volna kihasználni és erre írtam masterban egy olyan programot hogy start-address-stop.Az egészben az a furcsa hogy vissza ack-z a masternek. Utólagosan beleírtam a te feltételeidet is, de a helyzet változatlan, hiába hogy átmegyek másik címre, ugyanígy vissza ack-z. A cím 1010000-után még küldök egy 01010101-et is. Mostmár a slave főciklusa így néz ki: I2C_MAIN BANKSEL PORTC BSF PORTC,1 ;VISSZAJELZŐ LED, ELJUTOTT-E MÁR IDÁIG BANKSEL PIR1 BCF PIR1,SSPIF BANKSEL SSPCON BCF SSPCON,SSPOV BANKSEL SSPBUF CLRF SSPBUF GOTO I2C_MAIN De mint mondtam vissza ack-z e nélkül is a slave.
Szia!
Ha még olvasol tovább, ott írják, hogy nincs ACK, ha BF=1 vagy SSPOV=1... Megfordítamám:
Szia!
Igazad van a TABLE 9-2: - mégjobban rámutat erre. Valamiért ezt eddig figyelmen kívül hagytam. Beprogramoztam azzal amit írtál, és működésben ugyanúgy viselkedik, lényegében bármilyen címet adhatok a slave-nak mindegyikre vissza ack-z:S Nem tudom hogy mi lehet a hiba. Köszönöm szépen az eddigi segítséged is. Esetleg még azt tudnám elképzelni hogy a 74 beállításai rosszak.. SETUP_I2C_SLAVE BANKSEL SSPCON ; BANK0 MOVLW B'00100110' ;SCL,SDA INPUT- 7BITES SLAVE MOVWF SSPCON BANKSEL SSPADD MOVLW B'10100000' MOVWF SSPADD BANKSEL PIE1 BCF PIE1,SSPIE BANKSEL INTCON BCF INTCON,PEIE BCF INTCON,GIE BANKSEL PIR1 BCF PIR1,SSPIF BANKSEL SSPCON |
Bejelentkezés
Hirdetés |