Fórum témák
» Több friss téma |
Az SPI_MODE_0 a CKP és CKE beállításhoz kell (az SPI kommunikációban négyféle üzemmód lehetséges, amelyek az órajel polaritásában és fázisában különböznek. Bővebben: Link).
SPI_CLK_DIV_16 bizonyára azt jelenti, hogy Fosc/16 lesz az SPI órajel frekvenciája (Fosc = 1 MHz esetén 62500 Hz).
Köszönöm szépem mindkettőtöknek a választ. Így már remélem közelebb jutok a megoldáshoz
Nem látom át a programot, csak szemet szúrt egy dolog: Az miért jó, ha egy bemenő vonalat P1OUT--hoz és nem P1IN-hez rendelsz?
Kedves Icserny , teljesen igazad van hajnal volt és elírtam nálam már javítva van a hiba.
Időközben rájöttem, hogy mégis csak működik a printf IAR alatt, igaz nem úgy ahogy én szeretném , de megy. HA valaki még nem jött volna rá akkor Tiny módba kell tenni és debug közben a terminal I/O részben kiirja a dolgokat.
Ha ma sem haladok vele akkor holnap rákötöm mind a kettőt egy szókpra hátha előrébb jutok.
Bár már értem el félsikereket ma , valamiért nem küldi ki az adatot de státusz regisztert tudok olvasni. Csak a pontos óra beállítást és ezeket UCCKPL és UCCKPH-t kell megfejteni hogy miképpen is vannak. Icserny ha jol értelmeztem az kis kézikönyved a Ti hoz akkor a az SMLCK az alap órajelet használaj alapból ami 1mhz esetén 1mhz és pl:UCA0BR0__SPI = 2 ez lehet a megfelelője a Pices SPI_CLK_DIV_16-nak. Sajnos CCS nincen fent , vagyis nem akar menni. Idézet: „pl:UCA0BR0__SPI = 2 ez lehet a megfelelője a Pices SPI_CLK_DIV_16-nak” Nemegészen. A PIC 1MHz = 1000000/16=62,5kHz, MSP430 SMCLK 1MHz= 1000000/2=500kHz.
igy van én az osztó beállításra gondoltam, hogy ezzel lehet megadni neki az osztást.
gondoltam h 1000/2 az 500 lesz Nah akkor ma az elejétől neki ugrok meginthátha össze jön.
Bocsi, akkor én értettem félre.
A válasz, igen. Az UART kapcsolatnál, én így állítottam be a sebességet 3,358mHz-es órajelnél:
Mégegyszer, bocsi a félreértésért.
Nah akkor neki leselkedek majd.
Igazábol kerestem én ezeket a beállításokat , de valahogy vagy átsiklottam felette vagy nem találtam egy leírást hogy a kettő UCA0BR0 és BR1 miképpen konfigolandó tudom ott a family guid , nah de valami szájbarágósabb kell az elején
Pedig a FUG pontossan leírja.
Idézet: „Clock prescaler setting of the Baud rate generator. The 16-bit value of (UCAxBR0 + UCAxBR1 × 256) forms the prescaler value.” Az én példámnál már módosítva lett az érték, 3,358mHz/350=9594, csak a kommentben maradt benn a 349!
Kedves Szitko
még egy kérdést engedj meg számomra. Meg van irva nekem egy fügvény ami az spi küldés fogadást végzi, jól értelmeztem a neten ugye , hogy csak 8bitet eszik meg az SPi .
Eddig nem volt benne kétségem viszont most nézegettem a header fájlt és éppen ott láttam hogy LSB vagy MSB , lehet hogy magától lekezeli a 16bitet?
Ezekben a kommunikációkban, (SPI, I2C, UART) még én is gyerekcipőben járok. A minap próbálgattam egy SPI-s gyorsulásmérőt, de én az "Universal Serial Interface (USI)" modult használom.
MSP430g2xx1 USI SPI:
Az USCI SPI modal még nem foglalkoztam, csak az UART részével, de ott asszem csak 8bit megy.
Köszi
Sajnos nekem csak 2553-sok vannak itthon vagy 10 darab , és abban csak USCI van :/ Nah sebaj , azért forum hogyha valaki rájön megossza Ha sikerült életre keltenem akkor majd írok Idézet: „nah de valami szájbarágósabb kell az elején” Mind a két regiszter (UCAxBR0, UCAxBR1) 8 bites! A két regiszter határozza meg a sebességet, melynek kiszámítása a következő képletekkel lehetséges. Első képlet: (FUG-ban szereplő) UCA0BR0 = 94; UCA0BR1 = 1; UCA0BR0 + UCA0BR1 × 256 = 94 + 1 * 256 = 350 ( A szorzás magasabb rendű, mint az összeadás) Második képlet: (Ahogy én jegyeztem meg) 16 bitben a 350 = 0000 0001 0101 1110 UA0BR0 = alsó 8bit = 94 = 0b0101 1110 UA0BR1 = felső 8bit = 1 = 0b0000 0001 Remélem jól írtam, és elég "szájbarágós"! Mégegy megjegyzés:
Ha valamit rosszul írtam volna, javítsatok ki.
Sziasztok.
Újra falba ütköztem az I2C-vel. Egy ADXL312-t szerettem volna életre kelteni.
Az adatok kimennek, elvileg, de nem csinál semmit. A slave addres azért 0x1d, mert az ALT ADDRES pin fel van húzva. Csatoltam az adatlapot is, hátha valakinek van egy kis ideje belenézni. Idézet: Fogadjunk, hogy a második mondatot már nem olvastad el! „A slave addres azért 0x1d, mert az ALT ADDRES pin fel van húzva.” Idézet: „With the ALT ADDRESS pin high, the 7-bit I2C address for the device is 0x1D, followed by the R/Figure 26Table 10Table 11Figure 27W bit. This translates to 0x3A for a write and 0x3B for a read”
"Elolvastam". A 0x3a írás, 0x3b olvasás. Ha erre gondolsz. Ez az amit nem értek. A Figure 27 szerint,
START i2c - slave address+write - register addres - data - stop i2c. UCB0I2CSA = 0x1d; ezzel megadom a slave címet. (mást nem is tudok beírni, mert különben nem megy tovább.) Ezutána kell neki megmondani, hogy írás lesz? Próbáltam úgy is, de az eredmény ugyanaz. Egyre bonyolultabb eszközöket szedek elő, és egyre jobban nem értem az i2c-t. Idézet: „Egyre bonyolultabb eszközöket szedek elő, és egyre jobban nem értem az i2c-t.” hát ezzel én is így vagyok Sajnos i2C-t még nem használtam csak SPI-t így abban nem tudok segíteni.
Na tessék! Most kiderül, hogy én nem olvastam el az MSP430 I2C kezelését. Még mindig nincs időm foglalkozni vele, így abba nem tudok beleszólni, hogy mit hova kell írni. Mindenestre a kimenő bájtban (ami az adatvonalon megjelenik) az első 7 bit a cím, a 8. bit az R/W bit, így lesz ott az 1D-ből 3A vagy 3B, s a PIC esetében ezt így is kell megadni.
Itt viszont, ha külön regiszter van a címnek és jobbra igazítva kell beírni a címet, akkor jó a UCB0I2CSA = 0x1d; utasításod, s vedd úgy, hogy nem is szóltam! Árnyékra vetődtem...
Teljesen más mint a pic tegnap már találtam majdnem egy ugyan olyan beállítást mint a Picnél, de mégsem ugyan olyan. rámérve tegnap logikai analizátorral az sdi láb minig magas és csak iráskor megy alacsonyba(de lehet h az sdo , a kettőből az egyik.)
A TI-t akárhogy állítgattam mindig 0-ra ment vissza mind a 2
Ha jól emlékszem, jobbra igazítva kell megadni. De akkor azt nem értem, hogy hogy adjam meg neki, hogy írni fogok, vagy olvasni. Mondjuk az írás megy, mert azthiszem az az alapértelmezett.
Nem értem Idézet: Bizonyára egy másik regiszterben.„hogy adjam meg neki, hogy írni fogok?” Itt még úgy tűnt, hogy tudtad.
Igen, de nem megy. Vagyis az írás megy, mert az adatok kimennek. Az olvasásra nem csinál semmit.
Röviden: megadom a slave címet - 0x1d (semmi mást nem tudok megadni, mert különben leáll.) beírom, hogy írás lesz: UCB0TXBUF = 0x3a; (ugyanaz mint előbb, csak ezt lehet megadni.) Kiküldöm az egyéb beállításokat, pl: UCB0TXBUF = 0x31; (DATA_FORMAT) de ezt már az adatlap szerint, adatnak veszi. (Szerintem. Ha jól értem az adatlapot figu 27) Olvasásnál: slave cím -> írás (0x3a) -> DataX0 (0x32) -> olvasás (0x3b) -> UCB0CTL1 &= ~UCTR; -> UCB0CTL1 |= UCTXSTT; (i2c start) -> RXbuffer 0x00. És mindíg csak 0. Na de nem adom fel, majd rájövök, hogy hol hibázom. Amúgy a FUG szerint jobbra igazítva kell megadni a slave címet.
Végre áttörést értem el. Megtudtam, hogy jó az általam készített nyákba, beforrasztott adxl312-es. Pedig már azt hittem, hogy azért nem olvas semmit mert vagy a forrasztás, vagy a nyák rossz. Küldött egy jelet. Ha csak símán a slave cím után bekapcsolom az olvasást, (UCB0CTL1 &= ~UCTR;) akkor az adxl elküldi a DEVID-t, ami most esetemben 0xe5.
Végre neked sikerül
Én akár hogy állítgatom az óra jelet még köszönő viszonyban sincsen a másikkal.(logikai analyzer-el néztem) ha meg nagyából ugy néz ki akkor meg beint nem csinál semmit.
Ezt láttad már?
Hátha valamit ki tudsz belőle bogarászni.
Sziasztok.
Végre összeállt az adxl312 i2c kommunikáció, de lenne pár kérdésem. Nem értem az UCB0CTL1 |= UCTR; regiszter szerepét. Azt értem, hogy az írás-olvasást állítom be vele, de az adxl312 esetében, ha írok, akkor ki kell küldenem az írási címet (0x3a vagy 0xa6), de olvasásnál viszont csak a UCB0CTL1 &= ~UCTR; regisztert kell beállítani olvasásra. Az olvasási cím nem kell neki. Miért? A másik amit nem értek, hogy az olvasás végén mit kell csinálni a NACK -al? Ha jól olvastam, akkor a NACK visszaáll 0-ba a művelet végén. Kivéve az adat küldésnél, az ERRATA szerint. Az lenne az igazán jó dolog, ha érteném is amit csinálok. |
Bejelentkezés
Hirdetés |