Fórum témák

» Több friss téma
Fórum » MSP430 mikrovezérlők
 
Témaindító: gomzito, idő: Ápr 21, 2006
Témakörök:
Lapozás: OK   76 / 139
(#) szitko hozzászólása Szept 25, 2012 /
 
Sziasztok.
Lenne egy csomó kérdésem, de csak szépen sorba teszem fel.
Ismét számolás.
Egy 24lc512 eepromba szeretnék írni. Az adatlap szerint egy "16" bites, 8 felső, 8 alsó, regiszterrel lehet beállítani, hogy melyik lapra rakja az adatot. Ez az eeprom, ugye 64KB-os, tehát 65536 bájt fér bele. De hány lap van? 512? És akkor egy lapba 128 bájt fér bele?
Jól számoltam? Vagy inkább jól értem az adatlapot?

Még egy kérdés, hogy lehet a legegyszerűbben megállapítani, hogy megtelt egy lap?
+1: Ha törölni szeretném a teljes eepromot, akkor 0x00-val kell feltölteni?
A hozzászólás módosítva: Szept 25, 2012
(#) balux33 válasza szitko hozzászólására (») Szept 25, 2012 /
 
Szia.
A két 8 bites address regiszterrel tudod kijelölni, hogy honnan írjon vagy olvasson.
A lapoknak csak akkor van jelentőségük ha egyszerre több bájtot akarsz írni egymás után (max 128-at lehet egy start-stop között) ilyenkor ha jól értelmezem elmenti az adatokat egy belső bufferbe és a stop után kezdi el beírni az eepromba.
Igazából ez az eeprom nincs lapokra osztva, mert onnan kezdheted a 128 as lapot ahonnan akarod (az address regiszter szablya meg).
(#) balux33 hozzászólása Szept 25, 2012 /
 
Tényleg ilyen sokára ígérik a stellaris launchpad-ot ?
DecebaL:
Áll még az ajánlatod? Mikorra ígérik?
(#) icserny válasza balux33 hozzászólására (») Szept 25, 2012 /
 
balux33:
Idézet:
„Igazából ez az eeprom nincs lapokra osztva”
Az adatlap ennek az ellenkezőjét mondja. Tehát fizikai lap kezdete minden olyan cím, ahol a 16 bites cím utolsó 7 bitje nulla, s page write tranzakcióval nem lehet átlépni a laphatáron Lásd: adatlap 6.2 szakasz).

szitko: igen, 512 lap van (65536/128).
Idézet:
„Még egy kérdés, hogy lehet a legegyszerűbben megállapítani, hogy megtelt egy lap?”
Ha pl. bájtonként írsz, akkor új lapnál a cím maradéka = 0, a 128-cal történő osztás esetén.
(#) balux33 válasza icserny hozzászólására (») Szept 25, 2012 /
 
Tényleg így van!
Bocsánat, hogy hülyeséget mondtam, a szürke részt nem olvastam el.
Igazából én is mindig bájtonként írtam.
(#) szitko válasza icserny hozzászólására (») Szept 25, 2012 /
 
Na most végkép elvesztettem a fonalat.
Tehát ha a "FIGURE 6-2" ábrát nézem, akkor pl.
start, address high = 0x00, address low = 0x01, adat bájt 0-127-ig. stop
A következő:
address high byte = 0x00, address low byte = 0x02, ...stb... ?
Programban, valahogy így nézne ki, egy lap törlése:
  1. void 24lc512_page_clear(uint16_t page){
  2.      UCB0CTL1 |= UCTR + UCTXSTT;            // I2C TX, start
  3.      while (!(IFG2 & UCNACKIFG));           // ACK-ra vár
  4.      char l_byte = 0;
  5.      char h_byte = 0;
  6.      l_byte = page;
  7.      h_bite = page >> 8;
  8.      UCB0TXBUF = h_byte;                    // felső 8 byte küldése
  9.      while (!(IFG2 & UCNACKIFG));           // ACK-ra vár
  10.      UCB0TXBUF = l_byte;                    // alsó 8 byte küldése
  11.      while (!(IFG2 & UCNACKIFG));           // ACK-ra vár
  12.      for(char i=0; i<127; i++){             // 128 adat
  13.           UCB0TXBUF = 0x00;                 // küldés
  14.           while (!(IFG2 & UCNACKIFG));      // ACK-ra vár
  15.      }
  16.      UCB0CTL1 |= UCTXSTP;                   // I2C stop
  17.      while (UCB0CTL1 & UCTXSTP);            // várunk a stopra
  18. }

És a teljes törlésnél, 128 bájtonként egy stopot be kell iktatni?
(#) szitko válasza balux33 hozzászólására (») Szept 25, 2012 /
 
Én is bájtonként fogom írni, naponta 24 bájt kerül bele.
(#) szitko hozzászólása Szept 25, 2012 /
 
Már bele is futottam a következő problémába.
Elkezdek írni egy lapot, beleírok pl. 10 bájtot, és kiadom a stop parancsot. Hogy tudom a 11. bájttól folytatni az írás? Hozzáadom az address címhez a 10-et? De akkor a plusz tizedik lapra fog írni.

Bocs a sok hülye kérdésért, de sajna nem találok választ ezekre a kérdésekre.
(#) icserny válasza szitko hozzászólására (») Szept 25, 2012 /
 
Idézet:
„start, address high = 0x00, address low = 0x01, adat bájt 0-127-ig. stop”
Nem, dehogy!
1. lap: address high = 0x00, address low = 0x01, adat bájt 0-127-ig.
2. lap: address high = 0x00, address low = 0x80, adat bájt 0-127-ig.
3. lap: address high = 0x01, address low = 0x00, adat bájt 0-127-ig.
4. lap: address high = 0x01, address low = 0x80, adat bájt 0-127-ig.

Idézet:
„És a teljes törlésnél, 128 bájtonként egy stopot be kell iktatni?”
Igen.
(#) szitko válasza icserny hozzászólására (») Szept 25, 2012 /
 
Köszönöm szépen, akkor az előző kérdésem tárgytalan, mert jól gondoltam, hogy az address regiszter megadásával tudom folytatni az írást.
Köszi még egyszer mindkettőtöknek!
(#) icserny hozzászólása Szept 25, 2012 /
 
Találtam ezen az oldalon egy jól összeszedett GCC fordítót MSP430-hoz, le is töltöttem ( msp430-gcc4.6.3.exe), és telepítettem. Valamint letöltöttem erről az oldalról az msp430-gdbproxy-1.0.zip segédeszközt is.

Programfordítás:
  1. PATH=C:\sysGCC\msp430\bin;%PATH%
  2. msp430-gcc -g -mcpu=430 -mmcu=msp430g2231 -o ledflash.elf main.c

GDBproxy indítás külön ablakban (előtte csatlakoztatni kell a Launchpad kártyát:
  1. msp430-gdbproxy.exe

(a PATH beállítása mellőzhető, ha a C:\sysGCC\msp430\bin az aktuális könyvtár)

GDB indítás az első ablakban:
  1. msp430-gdb ledflash.elf

A GDB promptnál ki kell adni az alábbi parancsokat:
  1. target remote :2000
  2. mon erase
  3. load

Innen kezdődhet a gdb debugolás (már ha valaki ismeri...).
(#) szitko hozzászólása Szept 26, 2012 /
 
Sziasztok.
Valamit összekutyultam az eeprom 24lc512 vezérlésemben és ne tudok rájönni, hogy mit. Ebben kérném a segítségeteket. Az olvasási függvény, csak egy bájtot kéne kiolvasson:
  1. void E_24lc512_rx_byte(uint16_t address){
  2.      char l_byte = 0;
  3.      char h_byte = 0;
  4.      l_byte = address;
  5.      h_byte = address >> 8;
  6.      UCB0CTL1 &= ~UCSWRST;
  7.      UCB0CTL1 |= UCTR + UCTXSTT;              // I2C TX, start
  8.      while (!(IFG2 & UCNACKIFG));             // ACK-ra vár
  9.      UCB0TXBUF = h_byte;                      // felső 8 byte küldése
  10.      while (!(IFG2 & UCNACKIFG));             // ACK-ra vár
  11.      UCB0TXBUF = l_byte;                      // alsó 8 byte küldése
  12.      while (!(IFG2 & UCNACKIFG));             // ACK-ra vár
  13.      UCB0CTL1 &= ~UCTR;                       // I2C RX
  14.      UCB0CTL1 |= UCTXNACK + UCTXSTT;          // I2C stop + NACK generálása
  15.      while (!(IFG2 & UCNACKIFG));             // ACK-ra vár
  16.      rx_temp = UCB0RXBUF;
  17.      UCB0CTL1 |= UCTXSTP;                    // I2C stop
  18.      while (UCB0CTL1 & UCTXSTP);              // Stop kész?

Elméletileg minden úgy van ahogy az adatlapban, vagyis:
"start->slave add->ACK->add reg H->ACK->add reg L->ACK->start + read->ACK"--> és nem onnan olvas, ahonnan kellene. De ha a teljes olvasási funkciót berakom megszakításba, akkor minden jól megy. Miért?
Így írom pl az első lap első bájtját:
  1. E_24lc512_tx_byte(0, 'H');

Az olvasási rutin:
  1. E_24lc512_rx_byte(0);
(#) szitko válasza szitko hozzászólására (») Szept 26, 2012 /
 
Megoldottam! Illetve az olvasási funkciót, megszakításban kezelem le.

De volna egy másik problémám. Egy JD-T18-as lcd-re szeretnék kiíratni órát. A probléma csak annyi lenne, hogy a karaktereket (számokat) egymásra írja. Már próbáltam mindent, képernyőtörlést (hülyeség, mert minden eltűnik), üres karakter kiíratni, de nem jött össze. A nokia lcd-nél nem volt ilyen problémám, ott nem írta egymásra a számokat.
Van ehhez valami spéci beállítása az lcd-nek? Vagy, hogy lehet ezt a problémát megoldani?
(#) Kovabe hozzászólása Szept 27, 2012 /
 
Sziasztok végre megjött a lanchpad amit rendeltem 8 nappal korábban mint igérték. Elsö nekifutásra mit ajánlotok mivel kezdjem a tanulást? Nem tudok programotirni de szeretnék megtanulni.
Üdv Kovács
(#) Kovabe hozzászólása Szept 27, 2012 /
 
Egy nagy segitséget kérnék szeretnék épiteni egy rc szabályzót ennek az ic-nek a segitségével. Keresek olyat aki tud segiteni az alapokban hogy miként mérjem az impulzust, vagy a pwm kitöltést hogyan számoljam, stb. Igazábol sémák is jól jönnének hátha össze tudom fésülni. Egy fontos dolog az angol nyelvtudásom hiányos konkrétan nagyon kicsi.
Köszönettel Kovács Gábor
(#) moderboy válasza Kovabe hozzászólására (») Szept 27, 2012 /
 
A 3 részes cikk sorozatot elolvastad itt HE-n?
(#) Kovabe válasza moderboy hozzászólására (») Szept 27, 2012 /
 
Még nem teljesen de igyekszem illetve az értelmezéssel van bajom szaktudás hiányában.
Viszont egy másik kérdés ami biztos segitene, létezik olyan táblázat ahol az összes utasitás le van irva?
(#) moderboy válasza Kovabe hozzászólására (») Szept 27, 2012 /
 
C vagy Assembly?
(#) Kovabe válasza moderboy hozzászólására (») Szept 27, 2012 /
 
Igazábol nekem C kellene mert több helyen is olvastam olyat hogy assembbly-ben ahány ház annyi szokás révén sokkal több utasitás van felselegesen( több utasitás azonos funkcióval) illetve icserny mintaprogramjai is ha jól tudom C. A másik dolog hogy assembly nyelvet elég kevesen ismerik vagy legalábbis használják.
(#) moderboy válasza Kovabe hozzászólására (») Szept 27, 2012 /
 
Többiek talán tudnak jobbat ajánlani, én Kónyának a könyvét tudnám mondani ami magyar és kifejezetten C-vel is foglalkozik, bár PIC-ről van benne szó, de az utasítások ugyanazok. PIC mikrovezérlők programozás C nyelven a címe, ha jól rémlik, nem tudom meg lehet-e szerezni digitálisan.

De talán kezdésnek az Energiával is probálkozhatsz, az talán egyértelműbb, sok mintaprogram van benne
(#) Kovabe válasza moderboy hozzászólására (») Szept 27, 2012 /
 
Köszönöm és ha jól emlékszem akkr pont a minap küldözgette valaki valaki másnak az ajánlott PIC mikrovezérlök programozás C nyelven cimü könyv digit formában. Akkor visszakeresem, ezekszerint ezzel kell kezdeni.
(#) szitko válasza Kovabe hozzászólására (») Szept 27, 2012 /
 
Idézet:
„A másik dolog hogy assembly nyelvet elég kevesen ismerik vagy legalábbis használják.”

Ez azért így nemteljesen igaz. Elég sok ASM program van a neten. A másik, én pl. elég sokat használom a "disassemby" ablakot programozáskor, pláne ha hibát keresek. Az ASM utasításokról, icserny PIC-kwik plus tananyagában olvashatsz, és még sok-sok hasznos dologról.
(#) icserny válasza Kovabe hozzászólására (») Szept 28, 2012 /
 
Idézet:
„Igazábol nekem C kellene”
A C nyelv megtanulásához ezt a könyvet kell átrágni. Konkrétan az MSP430 mikrovezérlők propgramozását pedig ebből a könyvbe írták le legjobban. Utóbbit, sajnos, angolul, de sem ezt, sem az adatlapot, sem a Family User's Guide-ot nem fogja senki lefordítani nekünk magyarra. Bele kell törődni, hogy valamilyen elemi szinten bele kell tanulni az angolba is.
A hozzászólás módosítva: Szept 28, 2012
(#) Kovabe válasza icserny hozzászólására (») Szept 28, 2012 /
 
Szia hát a forditás valoban nem jön létre az biztos. Az MSP link nem nyilik meg valamiért
(#) icserny válasza Kovabe hozzászólására (») Szept 28, 2012 /
 
Idézet:
„Az MSP link nem nyilik meg valamiért”
Megszűnt a kurzus, vagy a fejére koppintottak a nem egészen hivatalos közzétételért... A Google Books-on is bele lehet tekinteni, illetve keresgélni kell egyéb elérhetőségeket.
(#) szitko válasza icserny hozzászólására (») Szept 28, 2012 /
 
Ha nem rúgnak seggbe érte, felteszem ide. ~4MB pdf. Hátha kellene másnak is.
A hozzászólás módosítva: Szept 28, 2012
(#) icserny hozzászólása Szept 28, 2012 /
 
Némi keresgélés után valamelyik egyetemi honlapon mindig meg lehet találni az MSP430 Microcontroller Basics c. könyvet, mert sok helyen tartanak bevezető kurzusokat ennek alapján.
(#) szitko hozzászólása Szept 28, 2012 /
 
Rájöttem egy régebbi, úgymond hibára.
Régóta szenvedek az I/O portok megszakításból való lekezelésével. A hiba mindig ugyan az. Ha megszakítást kerek bármely bemenetre, a megszakítás kétszer-háromszor, van, hogy többször is lefut egymás után. Az okára eddig nem jöttem rá, sőt még régebben fel is vetettem itt ezt a kérdést, de nem sikerült megoldani. Most is csak félig értem a megoldást, de működik.
Tehát, ha csak simán beállítok egy lábat bemenetnek, megadom neki, hogy megszakítást csináljon mondjuk a felfutó élre, akkor a megszakításban lévő parancsok többször lefutnak egymás után, hiába van törölve a flag. pl:
  1. P2DIR &= ~BIT5;               // P2.5 bemenet
  2.      P2IES |= BIT5;                // felfutó él
  3.      P2IFG &= ~BIT5;               // flag törlése
  4.      P2IE |= BIT5;               // megszak. eng.
  5. #pragma vector=PORT2_VECTOR
  6. __interrupt void Port2_rtc_int(void){
  7.      ......
  8.     sz++;                         // hányszor fut le a megszakítás?
  9.     P2IFG &= ~BIT5;               // flag törlése
  10. }

Ez így rossz! Legalábbis én ezt tapaszalom. De ha bekapcsoljuk a fel/lehúzó ellenállást, minden működik rendesen, és ahogy kell, csak egyszer fut le a megszakítás. Amit viszont nem teljesen értek, hogy próbáltam külső felhúzással is, de azzal nem működött. Vajon miért nem?
(#) putr4 hozzászólása Szept 28, 2012 /
 
Valaki el tudná mondani hogy mi értelme van a signed char-nak? Ha karaktert akarok deklarálni, hogy lehet azt negatívan értelmezni? Az megvan, hogy 1 bájt méretű, de az ASCII elfér 7 biten is.
(#) idlob válasza putr4 hozzászólására (») Szept 28, 2012 / 1
 
A C gyengén típusos, így megengedi, hogy a char-t ne karakterként, hanem számként értelmezd. Jól jön, ha [-128;127] elegendő és nem akarsz felesleges helyet foglalni.
Következő: »»   76 / 139
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