Fórum témák

» Több friss téma
Fórum » PIC18F4550 vs TC74 hardware-es I2C-vel hogyan?
Lapozás: OK   1 / 2
(#) ldani hozzászólása Jan 7, 2009 /
 
Sziasztok!

Fenti konfigurációval próbálkozok már napok óta és sehogy nem akar összejönni. Már próbálkoztam mindenféle dologgal. Életem első I2C-je lenne, ha működne...
A HW részről annyit kell tudni, hogy 20MHz-es kristály hajtja a CPU-t és az SDA,SCL lábak fel vannak húzva 4.7 kOhm-al tápra. Az egész cucc ICD2-es (USB-s) kütyővel lett programozva és onnan kapja a tápot is.
A forráskód mellékleve, amely HiTech PICC18 9.63 lite-ban készült.
Kérlek segítsetek, mert megőrölök! Egyszerűen nem tudom elképzelni, hogy mi lehet a baj, pedig próbáltam mindent a doksik alapján csinálni!

Előre is köszönöm a segítséget!

Üdv.LD


maini2c.c
    
(#) potyo válasza ldani hozzászólására (») Jan 7, 2009 /
 
Vedd lejjebb minimálisra a sebességet, nem kell a 100kHz-hez ragaszkodni.

Nem írtál semmit arról, hogy meddig jut el a program. Tegyél ledeket pl. a PORTC-re, és egyesével gyújtsd ki azokat, amikor valahová a program elért. Illetve megszakítási pontokat is használhatsz, ha már az ICD2 kéznél van.

Az SDA és SCL vonalakon futó jeleket is meg lehet nézni akár egy hangkártyával is, ha a busz sebességét leveszed 10kHz környékére vagy az alá.
(#) ldani válasza potyo hozzászólására (») Jan 7, 2009 /
 
A sebességcsökkentést már megcsináltam, sajnos nem segített.
Ezek szerint szembetűnő szarvashibát nem követtem el. Már ez is valami Annyit tudok mondani, hogy a meghívott függvény sajnos nem tér vissza, szóval biztosan abban van vmi gáz! Konkrétan az olvasás utáni utasítás nem fut le => nem jön vissza infó a TC74-től és gondolom várakozik.
(#) potyo válasza ldani hozzászólására (») Jan 7, 2009 /
 
Csak átfutottam a kódot, programozási hibát nem találtam. De azt nem néztem, hogy a regisztereket jól állítottad-e be. Legjobb ilyenkor megnézni, hogy milyen jelek futnak a buszon. Egy-egy 10k ellenállással bekötheted a jeleket a hangkártya line-in bemenetébe, és egy hanfelvevővel felveheted. Én régebben az Any Sound Recorder-t használtam ilyen célra.
(#) ldani válasza potyo hozzászólására (») Jan 7, 2009 /
 
Durvul a helyzet... ;(
Mostmár eljutottam odáig, hogy a sima LED kikapcs, bekapcs sem akar menni.
A HW-en nem változtattam semmit. A debuggolás nem akart működni, így elkezdtem variálni a prg-ban, visszakapcsolni sima programozó módra, szgépet újraindítani, új projectet csinálni stb.. A vége az lett, hogy ármit írok, nem működik. Fordulni fordul, a log szerint fel is kerül a PIC-re a kód. Visszatöltve a prgmemóriát látszanak is az assambly utasítások (bár assemblyhez nem igazán értek, max 1-2 apróságot). Viszont ha nyomok egy Release from reset-et, akkor nem történik semmi...
El tudom rontani swesen a PIC-et? Van vmi tipp, hogy mit bénázok? Az ICD2-m a potyo2-rev1 féle Pipi 2008.02 nyákkal. Pls help me!
(#) ldani válasza ldani hozzászólására (») Jan 7, 2009 /
 
Multiméterrel megnéztem az ICD2 kiadja +5v-ot az mclr lábra.
(#) potyo válasza ldani hozzászólására (») Jan 7, 2009 /
 
Szoftveresen nem lehet elrontani. Tudsz mutatni egy kapcsolási rajzot és egy fényképet az áramkörről?
(#) ldani válasza potyo hozzászólására (») Jan 7, 2009 /
 
Nincs nálam sajnos most fényképezőgép. Kapcs rajzot rajzolok egyet, ha hazaértem, bár nem túl bonyolult és eddig működött is.
Még annyi infó, hogy debugba lépéskor azt mondja: ICD0083: Unable to enter debug mode. A programot természetesen újrafordítottam és ismét beégettem.
(#) ldani válasza ldani hozzászólására (») Jan 8, 2009 /
 
Tegnap este elraktam az egész cuccot a fiókba. Ma elővettem, bekapcsoltam és láss csodát működik!
Lehet, h vmi kontakthiba szivat? A PIC foglaltban van, minden más alkatrész (kristály, kondik, ledek, ellenállások, forrasztva).
A lényeg, h most ok, visszatérhetek az I2C problémakörére. Megnézem hangkarival, hogy jön-e ki vmi a PIC-ből...
(#) ldani válasza ldani hozzászólására (») Jan 8, 2009 /
 
Van egy kis egyszerű logikai analizátorom.
Megcsináltam, hogy a readtemp() előtt PORTD legyen 0xff, ez volt a triggerem. Lásd csatolt kép: sajnos SCL, SDA meg sem moccan....
(#) icserny válasza ldani hozzászólására (») Jan 8, 2009 /
 
1. Ha jól látom, SDA és SCL alacsony szinten vannak. Ezexerint mégsincs felhúzás?

2. A topiknyitóban közzétett forráskódban nem látom nyomát sem annak, hogy az ADC le lenne tiltva. Pl. ADCON1 regiszter beállítása....
(#) ldani válasza icserny hozzászólására (») Jan 8, 2009 /
 
Szia!
1.Amikor rákötöttem a logikai analizátort, akkor lehúztam a TC74 paneljét és csak a két lábat vizsgáltam szűzen. Ezt rosszul tettem?
2.hm ADC-vel tényleg nem foglalkoztam, de nem rémlik, hogy írna ilyet a doksi. Mindjárt bele is nézek újra! Tehát az tiltani kellene?

(#) potyo válasza ldani hozzászólására (») Jan 8, 2009 /
 
Idézet:
„Tehát az tiltani kellene?”


Alaposan elolvasni az adatlap azon fejezetét, ami arról szól, hogy hogyan állítsuk be az I2C perifériát, illetve az IO portokról szóló részt. Aztán az alapján meg tudod válaszolni a kérdést.

Egyébként már a Pin diagrams-ból kiderül a lábak melletti jelölésekből.
(#) dcsabi hozzászólása Jan 8, 2009 /
 
Amit segíteni tudok egy bevált PIC-es I2C iró-olvasó rutin
( azaz 3 DB...egyik a a tényleges szubrutin a másik a főprogiból való ugrás, a harmadik pedig az initbe lévő "hivatkozás") ez ugyan 16F... ra készült, szivesen küldöm hátha segít...
Ez a PCF8583 I2C buszos valós idejű óra IC és ram kezelője... 4Mhz is meg 20 Mhz is ugyanúgy müködik.
(#) ldani válasza potyo hozzászólására (») Jan 8, 2009 /
 
OK. Én az MSSP fejezetnek ugrottam neki, azon belül is az I2C Master módot olvastam át tüzetesen; gondoltam ott csak leírnak minden apró szösszenetet! Ezek szerint nem.
OK, a kezdő csávó köszöni az eddigi segítséget, és elvonul manualt nyálazni...

ps: az első résszel kapcsolatosan: a logikai analizátort "rádughatom" csak simán a PIC és a TC74 közötti vonalra (lásd ábra) ?

CIMG2029.jpg
    
(#) ldani válasza dcsabi hozzászólására (») Jan 8, 2009 /
 
Köszi! Megnézem!
(#) potyo válasza ldani hozzászólására (») Jan 8, 2009 /
 
(#) icserny válasza ldani hozzászólására (») Jan 9, 2009 / 4
 
Idézet:
„1.Amikor rákötöttem a logikai analizátort, akkor lehúztam a TC74 paneljét és csak a két lábat vizsgáltam szűzen.”


A TC74 kevésbé érdekes, a lényeg az, hogy a két felhúzóellenállás rajta legyen...

Idézet:
„ADC-vel tényleg nem foglalkoztam... Tehát az tiltani kellene?”

Miazhogy! Nagyonis! ADCON1-ben legalább az AN10-12 bemeneteket állítsd digitálisra!

Amennyire én tudom az I2C kommunikáció lényege az, hogy a buszvonalakat az ellenállások felhúzzák (magas szint), aki éppen adatot küld rá, az meg lehúzza. Hogy a kimenetek ne akadjanak össze, alaphelyzetben a port megfelelő adatbitjeibe 0-át kell írni, és digitális bemenetként figyelik a vonalat (TRISB megfelelő bitjei=1). Adáskor a master a kimetre váltással (TRISB bit 0-ba) húzza le a buszvonalakat, vagy inputra váltással (TRISB bit 1-be) engedi fel azokat.

Nyugtázáskor vagy órajel nyújtásnál (clock stretch) pedig a master inputra vált ("elengedi a vonalat"), s akkor a slave eszköz húzza le (vagy nem húzza le) a vonalat.
(#) ldani válasza icserny hozzászólására (») Jan 9, 2009 /
 
A segítségetekkel a képen látható eredményig eljutottam. Tehát TC74 az első írásnál korrekt ACK jelet küld. Ha megváltoztatom a címét, vagy rosszul beállított RW bitet küldök neki, akkor természetesen nincs ACK. Ebből azt a következtetést vonom le, hogy tényleg jó úton haladok. A cmd írása után nincs ACK, szóval ott egyből lesz vmi gebasz. Már csak finomítanom kell a megoldáson, hogy a kommunikáció a TC74 doksijának megfelelő legyen. Ha továbbjutok jelentkezek! Köszi még1x!
(#) ldani válasza ldani hozzászólására (») Jan 9, 2009 /
 
hopp egyből javítok is: cmd után is helyesen visszajön az ACK, hiszen alacsony marad a jel!
(#) googa válasza ldani hozzászólására (») Jan 9, 2009 /
 
Pont ezt a PIC-et néztem ki magamnak tegnap egy kis USB tanulgatásra. Kicsi a világ. Az USB-vel hogy állsz?
(#) ldani válasza googa hozzászólására (») Jan 9, 2009 /
 
Nekem már régóta megvan a cucc, csak hosszú hónapokig (lehet, h 1 évig) a fiókban pihent és most vettem ismét elő. Annó régen még letöltöttem hozzá egy USB-s példaprogramot, amit sikerült is feltenni lefuttatni és örültem neki: kb tudtam szgépről kapcsolgatni a PIC-en lévő LEDeket. Majd előbb-utóbb ismét nekifutok az USBnek is. Állítólag jó választás ez a PIC hozzá.
(#) ldani válasza ldani hozzászólására (») Jan 9, 2009 /
 
Sikerült kijavítani a programot: a második StartI2C(); mögé is kellett egy
  1. while (SSPCON2bits.SEN);
Így már jön vissza adat kb jól is méri a hőmérsékletet. De amikor while ciklusba szerveztem a readtemp()-et, akkor úgy tűnik mitha nem lenne "stabil" a mért érték: kb 24-28 fok között ingadozik kb tizedmásodpercenként. Szerintem így még nem OK. A doksi szerint az adatlekérés: [Read][NACK][P]-vel zárul, ami a kódom szerint csak [Read][P]. Megpróbálok ezen még finomhangolni! (ugye jól sejtem, hogy ennél jóval "stabilabbnak" kelle lennie, főleg, hogy csak 1C-os felbontást tud?)
(#) icserny válasza ldani hozzászólására (») Jan 9, 2009 / 4
 
Idézet:
„úgy tűnik mitha nem lenne "stabil" a mért érték: kb 24-28 fok között ingadozik kb tizedmásodpercenként.”

Ha ilyen gyakorisággal olvasod, akkor átlagolhatnád. Ha jól emlékszem, a Microchip Picdem HPC Explorer demóprogramjában is 16 vagy 32 mérést átlagolnak.
(#) ldani válasza icserny hozzászólására (») Jan 9, 2009 /
 
Ezek szerint ez normális működésnek tekinthető?

Ki fogom próbálni az általad javasolt átlagolást is, de megnézem azt is, hogy kb csak másodpercenként mérek egyet!
(#) icserny válasza ldani hozzászólására (») Jan 9, 2009 /
 
Érdemes lenne a szerelést, a szűrést és a tápfeszültséget is végignézni, mert zaj/brumm is okozhatja az ugrálást. Ugye, a TC74-en is van tápfesz szűrőkondi?
(#) icserny válasza ldani hozzászólására (») Jan 9, 2009 /
 
Idézet:
„Ezek szerint ez normális működésnek tekinthető?”

Ez majd akkor derül ki, ha legalább 16-onként átlagoltad.
(#) ldani válasza icserny hozzászólására (») Jan 9, 2009 /
 
Szerelés szerintem OK, egész precízen forrasztok. Tápfeszültség is szerintem OK, mert az áramkör az ICD-ről, az ICD2 pedig USB-n keresztül az aksiról működő laptopról kapja a delejt.
Kezdőhöz híven természetesen nincs szűrve...
Ahogy utánna olvastam a dolgoknak olyan 30-100nF nagyságrendő kerámiakondit kell tennem az IChez minél közelebb a Vdd és a Vss közé, ugye?

Ezúton kérek elnézést minden hozzáértőtől a kezdőjellegű dolgaim miatt és egyúttal nem győzök hálákodni a segítségért! Köszi!

Mind a kondikérdést és az átlagolást is csak hétfőn fogom tudni kipróbálni.
(#) rigidus hozzászólása Jan 10, 2009 /
 
Szia, en a sajat kodommal hajtok LTC6904-eset I2C buszon Atimega168-20PU MCU es 16Mhz-es orajel mellett. Kifogastalanul megy.

Azért ennyire hosszú kódot nem biztos, hogy minden esetben beszúrni kell. Érdemesebb egyszerű szövegfájlként feltölteni csatolva, különben kilométeres lesz az oldal!
Norberto
(#) ldani válasza icserny hozzászólására (») Jan 12, 2009 /
 
Egy 100nF-os kondit beforrasztottam az IC mellé a táp és a föld közé. Sajnos semmi változás nem történt: ugyanúgy "ugrál" a mért érték.

Átírtam a kódot, hogy 16 vagy 32 mintát véve átlagot számoljon, de sajnos ez sem jelentett előrelépést: látszólag nincs változás.

Mi más lehet még probléma?
Következő: »»   1 / 2
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem