Fórum témák
» Több friss téma |
Fórum » PIC18F4550 vs TC74 hardware-es I2C-vel hogyan?
Témaindító: ldani, idő: Jan 7, 2009
Témakörök:
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
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á.
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.
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.
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!
Multiméterrel megnéztem az ICD2 kiadja +5v-ot az mclr lábra.
Szoftveresen nem lehet elrontani. Tudsz mutatni egy kapcsolási rajzot és egy fényképet az áramkörről?
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.
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...
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....
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....
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? 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.
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.
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) ? 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.
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!
hopp egyből javítok is: cmd után is helyesen visszajön az ACK, hiszen alacsony marad a jel!
Pont ezt a PIC-et néztem ki magamnak tegnap egy kis USB tanulgatásra. Kicsi a világ. Az USB-vel hogy állsz?
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á.
Sikerült kijavítani a programot: a második StartI2C(); mögé is kellett egy
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.
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!
É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?
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.
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.
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
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? |
Bejelentkezés
Hirdetés |