Fórum témák
» Több friss téma |
Rájöttem, hogy mire figyelmeztet. Illetve nem jöttem rá csak... Ha az "io430.h" (ami az io430g2553.h-t hívja) helyett az "msp430g2553.h"-t rakom be, akkor nem figyelmeztet. De hogy miért?
Köszi... ogen be kellett rakni, amúgy nekem 6.1 van.
Sziasztok.
Újra problémám van az I2C-vel. Egy mcp23008-t szeretnék működésre bírni, de nem értem, hogy hogy küldjem ki neki a parancsokat. A beállítások: reset=Vcc, A0,A1,A2=Vss, SCL=P1.6 SDA=P1.7 4,7k-val Vcc-re.
Kiválasztom az mcp23008 címét, de utána, hogy küldjem ki neki a beállításokat? Pl. az IODIR=0x00-át, hogy mind kimenet legyen? A UCB0TXBUF = 0x00-val nem csinál semmit, hiába küldöm ki nemki egymás után töbször. A vezérlő=G2553.
Az adatlap részletesen ismerteti a protokolt. A legegyszerűbb így:
write2I2C1(MCP23008ADDR,IODIR_CIME,0); Azaz 3 bájtot kell küldeni: 1. Az eszköz 7 bites I2C címe és az R/W bit 2. Az IODIR regiszter címe (adatlap szerint) 3. Az IODIR regiszterbe írni kívánt adat Itt találsz egy mintapéldát, bár PIC24 és MCP23017, amiben minden regiszterben 2-2 db van (ezért szerepel ott IODIRA és IODIRB).
Azt nagyából"értem" amit az adatlap ír, hogy hogyan kell kiadni a parancsokat, és olvastam az oldaladon az ide kapcsolódó részt is. Nekem a hogyan okoz problémát. Pl. a PCF8574-nél úgy csináltam, hogy
1: slave cím__UCB0I2CSA = 0x20; 2: adat küldés__UCB0TXBUF = xy;
Ez így szépen működik a pcf-nél, de az mcp23..-nál a while parancsnál leál. Magyarul az a "write2I2C1" nem tiszta.
Igen. Közben megfogalmazódott bennem, a problémám értelmes megfogalmazása.
Tehát, azt nem értem, hogyan küdjek ki neki 3 bájtot. Egymás után? Pl: UCB0TXBUF = 0x00; UCB0TXBUF = 0x0a; Mert ugye a UCB0I2CSA = 0x40-el, az mcp23008 címét beállítom, és utánna ahoz már nem kell nyúlni.(Csak ha rárakok mégegyet)
Egymás után, csak persze, meg kell várni a küldés végét. A G2553 mintapéldák közül a msp430g2xx3_uscib0_i2c_03.c program csinál hasonlót, csak ott a feladat jellege miatt végtelen ciklusban nyomja az adatot (DAC-ra, hullámforma táblából).
Abban a programban az USCIAB0TX_VECTOR-ba érkező megszakítás jelzi, hogy befejeződött a küldés. Gondolom, a hozzá tartozó IFG bit szoftveresen is lekérdezhető.
Megcsináltam, de nem megy.
Már teljesen belekeveredtem. A "while" utasításnál egy amatőr hiba miatt állt le. (már sokszor elkövettem) Nem húztam le a led jamperét. (P1.6)
Ha jól értem a Family User Guide "17.3.4.2.1 I2C Master Transmitter Mode" alfejezetében leírtakat, a második while ciklusban nem az UCTXSTT bitet kellene figyelni, hanem az ICFG2 regiszterben az UCB0TXIFG jelzőbitet!
Az UCTXSTT bit az én értelmezésem szerint a slave cím nyugtázásakor törlődik, és a továbbiakban nulla is marad. Az UCB0TXIFG bit pedig azt jelzi, hogy újabb adatot írhatsz a kimeneti bufferbe.
Valahol, valamit az elején nagyon elrontok. Ha jól értelmezem, akkor ha kiküldöm a slave címet, (UCB0I2CSA = 0x40 és veszi az eszköz, akkor a "UCNACKIFG" 0-ba kéne álljon. De nem teszi. Olyan mintha ott se lenne az MCP23008. Megnéztem a PCF8574-nél, hogy működik, (lépésenként futtatam), és ott visszaált. Megpróbálom 400kHz-re állítani az I2C frekit, mert eddig csak 100kHz-n próbálkoztam, hátha, bár elvileg 100kHz-n is kéne működie.
Ja, próbáltam, hogy az UCB0TXIFG bitet figyelem, de ezzel sem léptem előrébb. Idézet: Valószínűleg a címzést... Az adatlapban 0x40 szerepel, de az balraigazítva értendő (a legalsó helyiértéken már az R/W vezérlőbit van). Ha az UCB0I2CSAregiszterbe jobbraigazítva kell beírni a címet, akkor az 0x20 lesz! „Valahol, valamit az elején nagyon elrontok.”
A kitartás gyümölcse a siker. Ezzel a balra-jobbra tologatással nem vagyok kibékülve, de ezt már végigjátszottam a PCF-nél is. Nem tudom, hogy itt miért nem figyeltem oda erre.
A lényeg, hogy félig már "működik". Azért csak félig, mert csak akkor kapcsol be a GP0-án a led, ha egyesével léptetem a futtatáskor. Ha valós időben futtatom, akkor nem kapcsol be a led. Idáig így sikerült eljutnom:
Első a slave cím, -> IODIR = 0 -> STOP I2C, következő, GPIO -> GP0 high. Mindez 100kHz-en.
Ha már írtál adatot az UCB0TXBUF-ba, akkor ne az UCTXSTT jelzőbitet figyeld. Erre a hibára már felhívtam a figyelmedet.
Valóban. Elnézést a figyelmetlenségemért. (nem akarok magyarázkodni, de a programban a sok kikommentezett parancsok közül, már azt sem tudom melyiket rakom be.)
Így már megy. Köszönöm a kitartásod! Már csak azt kell "kitaláljam", hogy tudom külön kapcsolgatni az egyes GP0-7 biteket.
Örülök, hogy megy végre. Egészségedre!
Idézet: „Már csak azt kell "kitaláljam", hogy tudom külön kapcsolgatni az egyes GP0-7 biteket.” 1. Tárolod egy változóban az utoljára kiküldött adatot. 2. Elvégzed rajta a a szükséges módosításokat. 3. Kiküldöd a módosított adatot. A másik módszer az lenne, hogy beolvasod az I2C buszon a regiszter értékét, módosítod, majd visszaírod. Ez dupla I2C forgalommal jár, tehát lassabb (ellenjavalt).
A Pcf-nél mindíg újraírtam az összes bitet, de a tárolás jó lesz.Köszi. Mennyire kell pontossan beállítani az I2C frekit? Mivan ha a 400kHz, csak 333.
Idézet: „Mennyire kell pontosan beállítani az I2C frekit?” Semennyire. Ez a 100 kHz, 400 kHz stb, csak a kategóriák felső határértékei. Low speed mode 10 kbit/s Standard mode 100 kbit/s Fast mode 400 kbit/s Fast mode plus 1 Mbit/s Bővebben: Link
Köszi. Ezzel az oldallal kellet volna kezdenem az i2c tanulmányozását, de csak most láttam először.
Van másik! Bővebben: Link
Köszi, egyenlőre elég lesz. Ha túl sok az infó, elfelejtem, hogy hol tartok. (meg, hogy fiú vagyok-e, vagy lány). -Tényleg, mi is?
Sziasztok.
Összeállítottam egy alfanumerikus Lcd vezérlő programot. Hála ICserny kitartásának, sikerült a vezérlőprogramot I2C-n, MCP23008 segítségével megírni. (A ChipCad-nál beszerezhető, kb 250Ft) A teljes anyagot megosztom veletek, hátha valakinek szüksége lesz rá. Megpróbáltam, "normálisan" kommentezni, hátha valaki át akarja írni. Az ékezetes betüket ICserny cikkéből másoltam. Ha valaki hibát találna benne, szóljon, bár nálam tökéletesen működik.
Nah' megérkeztek a drágák (nem egészen 5 nap alatt, benne 1 hétvége). Lassan kezdődhet a kísérletezés.
Kérdésem lenne. icserny leírása szerint a kimenetek terhelhetősége 6mA. Ez azt jelenti, hogy 2 kimenet közé (egyik Hi, másik Lo) nem tehetek egy normál led-et mondjuk cca. 220ohm-mal? Milyenterhelési határértékek vannak az egyes kimenetekre, illetve több kimenet együttes használatára. Nem egészen világos...
Nagy mértékben függ a LED színétől (a nyitófeszültségtől) hogy mekkora maradék feszültséget kell ejteni az áramkorlátozó ellenállásnak. Ha megnézed a kártya kapcsolását, látható, hogy a vörös és a zöld LED különböző értékű ellenállásokkal vannak sorbakötve.
Idézet: Ez számomra nem derült ki egyértelműen az adatlapból. „Milyenterhelési határértékek vannak az egyes kimenetekre?”
Már többször volt róla szó ebben a topikban: csak a "kétvezetékes" (SBW = Spy-bi-wire) módon programozhatókat tudja kezelni. Ennél a típusnál például említik az SBW-t.
Köszönöm.
Még lemaradtak a Fritzing-hez a fájlok. Az mcp23008.fzp-t Én csináltam, és mivel az első alkatrész amit csináltam, nemtudom, hogy mi kell az *.fzp-n kívül. Ha nem menne felrakom az összes svg fájlt hozzá.
A g2553-as adatlapjában, a 23. oldalon írja a 6 mA-t. Kiegészítésként, ha jól értem, az összes kimenet együttesen nem haladhatja meg a ą 48 mA-t. Bár ugyanezt írja a g2231-hez is, pedig annak kevesebb I/O lába van.
Sziasztok Lenne egy problémám: Megépítettem ezt: Bővebben: Link és próbapanelon rendesen megy de összeforrasztva nem. be lehet állítani de nem lépteti az időt. A másik kérdésem az lenne hogy meg tudnátok mutatni hol van a perellmentesítés? Mert sokszor 2-t léptet. Köszi.
|
Bejelentkezés
Hirdetés |