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   99 / 139
(#) szitko válasza icserny hozzászólására (») Márc 15, 2013 /
 
Idézet:
„- A sor hosszát mennyinek állítottad be?”

Nem állítottam sorhosszt. A "loadStrings("filename");" alapján csináltam.
Az előzmények:
  1. ..
  2. String[] lines;
  3. int[] nums = new int[65535];
  4. ...
  5. void setup(){
  6. ...
  7. lines = loadStrings("data.txt");
  8. ...

A "fro = new FileReader( "c:/Users/ga....." sor fölösleges! A "nums" int típusú lesz, elméletileg.
Lehet az lesz a legegyszerűbb, ha az egészet átrakom az Eclipse-be, és megnézem mit is csináltam.
(#) szusznorbert hozzászólása Márc 15, 2013 /
 
Sziasztok! Segitseget szeretnek kerni tolletek. Ma erkezett meg az uj launchpad-om es amikor felszeretnem tolteni a programom ezt a hibauzenetet irja ki: "Fatal error: Could not find device (or device not supported) Session aborted!" Elore is koszonom segitsegetek!
(#) icserny válasza szusznorbert hozzászólására (») Márc 15, 2013 /
 
A porojekt opcióknál be kell állítani a mikrovezérlő típusát. Ha MSP430G2553 van a panel foglalatába (ellenőrizd, rá van írva!), akkor azt válaszd ki!

Ezen kívül a programozó eszközt is ki kell választani! IAR Embedded Workbench esetén
Debugger: FET debugger
FET Debugger: Texas Instruments USB-IF

Bővebben: Link
(#) icserny hozzászólása Márc 15, 2013 /
 
A 43oh.com fórumán megjelent egy leírás a Code::Blocks IDE Windows alatti bekonfigurálásáról az mspgcc-hez. Fél napos munkával sikerült elérni, hogy rendesen lefordítson egy LED villogtató programot, s a Tool menüben is sikerült létrehozni egy Letöltés eszközt, amely az mspdebug segítségével letölti a lefordított programot. A debugoláshoz azonban egyelőre nincs kotta.

Összességében nagyon kiábrándító az egésznek a viselkedése, úgyhogy részemről felejtős az egész! Az Eclipse-hez való mspgcc plugin sokkal könnyebben használható, bár a debugolás nekem ott sem jött össze (a Texas gyári meghajtó programmal).
(#) szusznorbert válasza icserny hozzászólására (») Márc 15, 2013 /
 
Igen ezeket mind megcsinaltam es megsem mukodik, de azert koszonom a valaszt!
(#) Mdavid válasza szusznorbert hozzászólására (») Márc 15, 2013 /
 
Úgy csináltad, ahogy a cikkek között Icserny kolléga írta? Bővebben: Link
(#) szusznorbert válasza Mdavid hozzászólására (») Márc 15, 2013 /
 
Természetesen igen!
(#) icserny válasza szusznorbert hozzászólására (») Márc 15, 2013 /
 
A gyárilag beégetett program egyébként működött? A PC-vel rendben van a kapcsolata a kártyának?
(#) szusznorbert válasza icserny hozzászólására (») Márc 15, 2013 /
 
igen villog felvaltva a ket led, es a com3 an van csatlakoztatva.
(#) icserny válasza szusznorbert hozzászólására (») Márc 15, 2013 /
 
A soros porton kívül egy HID USB beviteli eszköznek is meg kell jelennie, melynek hardverazonosítója: HID\VID_0451&PID_F432&REV_0105&MI_01

A kártyán a J3 átkötéseknek a helyükön kell lennie. Néha előfordul, hogy nem működik a kapcsolat, ilyenkor újracsatlakozás, vagy az IAR IDE újraindítása megoldja a problémát. Ha végképp nem megy, nézd meg egy másik gépen is!
(#) szusznorbert válasza icserny hozzászólására (») Márc 15, 2013 /
 
Az az igazsag, hogy nem tudom, hogy hogy kell nézzem a HID USB beviteli eszközt. Habar nagy a gyanum, hogy az nincs.
(#) icserny válasza szusznorbert hozzászólására (») Márc 15, 2013 /
 
Eszközkezelőben HID / HID beviteli eszközök / HID szabvénynak megfelelő eszköz vagy USB beviteli eszközre jobbklikk, Tulajdonságok-ra katt. A Részletek fül kiválasztása után a Tulajdonság-nál a Harverazonosítókat válszd ki. Win7-nél legalábbis így megy...
(#) szusznorbert hozzászólása Márc 15, 2013 /
 
Ezt talaltam, mondjuk nem egyezik teljesen "Device USB\VID_0451&PID_F432&MI_01\6&3aaf645e&0&0001 was configured."
(#) szusznorbert válasza szusznorbert hozzászólására (») Márc 15, 2013 /
 
De amikor kihuzom az usb-csatlakozobol akkor eltünik, és amikor visszadugom, akkor elöjön, szoval annak kell lennie
(#) icserny válasza szusznorbert hozzászólására (») Márc 15, 2013 /
 
Ettől még mennie kellene, mert tudtommal csak a VID/PID páros kell a felismeréshez. De megfpróbálhatod frissíteni (vagy leszedni és újra telepíteni) a drivert. Ha IAR van fent, akkor a telepítési könyvtárán belül a 430/drivers/TIUSBFET mappában van a meghajtó. Ha jól emlékszem, nekem a 64 bites rendszeren is csak a 32 bites driver volt jó, de erre most nem vennék mérget. Lehet próbálkozni...
A hozzászólás módosítva: Márc 15, 2013
(#) szusznorbert válasza icserny hozzászólására (») Márc 15, 2013 /
 
Köszönöm a segitséget, még probálkozom
(#) szitko válasza icserny hozzászólására (») Márc 16, 2013 /
 
Átraktam az Eclipse-be az egész programot. Tulajdonképpen az adatbehívás fájlból résszel semmi gond nincs. A "lines" string tömbbe berakja az egész fájl tartalmát, és mindegy neki, hogy 1, 2, 3, ... jegyű szám szerepel benne. Minden sor az Enter-ig tart.
A gond valóban ebben a sorban van:"nums = int(split(lines[file_index], " " ));" , de sajnos az eclipse nem akarja elfogadni ezt a sor.
Az én értelmezésem szerint a fenti sor, a lines tömb file_index sorát kéne berakja, "szétdarabolva" a nums tömbbe.
Pl: lines[0]= 10 20 30 40 50 .... = nums[0]=10, nums[1]=20, nums[2]=30,.....
Vagy rosszul értelmeztem megint egy leírást? Pontosabban a split(); leírását?
Ezek után már abszolút nem értem, hogy mi a problémája.
A hozzászólás módosítva: Márc 16, 2013

eclipse.jpg
    
(#) icserny válasza szitko hozzászólására (») Márc 16, 2013 /
 
Nem a split-tel van a gond, azt szerintem jól értelmezted.

Én abban nem vagyok biztos, hogy ha az int() konverziós függvényt egy szóközökkel elválasztott szövegsorra ráereszted, abból az lesz, amire te gondolsz.

Hasonló esetben én két lépésben csináltam a konverziót:
1. lépés: a szövegsor szétszedése split()-tel
2. lépés: a szétszedett szövegelemek egyenkénti konverziója.
A dolog szépséghibája, hogy nem tudom, van-e olyan változó vagy metódus, ami megmondja, hogy a split() hány darabra szedte szét a sort (eszerint kellene szervezni egy for ciklust a konverziókhoz).
(#) szitko válasza icserny hozzászólására (») Márc 16, 2013 /
 
Így átgondolva, az egész fájl műveletet, és a hozzá tartozó konverziókat át kell szervezzem.
Jelen pillanatban, úgy van megírva a program, hogy az MCU által küldött infó, egy fájlba tárolódik. Ez így egy idő után, egy hatalmas adatmennyiség lesz, amit be kell hívjon egyetlen tömbbe. Ha ezt megoldottam, utána lehet gondolkodni a konverzión.
Köszi a segítséget!
A hozzászólás módosítva: Márc 16, 2013
(#) uli hozzászólása Márc 20, 2013 /
 
Sziasztok!
Szeretnék kérdezni pár dolgot programozással kapcsolatban.
1. Lehetséges-e a program futása közben bármikor resetelni a timert? A lényeg annyi, hogy egy interrupt hatására szeretném resetelni a timert, bekapcsolni, majd meghatározott idő után lekapcsolni.
A többit majd később, azokon még dolgozok. Köszi!
(#) icserny válasza uli hozzászólására (») Márc 20, 2013 /
 
Idézet:
„Lehetséges-e a program futása közben bármikor resetelni a timert?”
A TACTL regiszter TACLR bitje erre szolgál. Bővebben: Link
(#) icserny hozzászólása Márc 20, 2013 /
 
Új, nagyob tudású tagokkal bővül az MSP430G2xxx sorozat. Az adatlapok még nem elérhetők, tehát egyelőre még várni kell. Addig csak a véletlenül kiszivárgott adatokkal kell beérni. Az MSP-GANG programozó leírásában például ez áll:
Idézet:
„MSP-GANG v1.1.2.0

This version has added support for new devices:

MSP430G2444, MSP430G2544, MSP430G2744
MSP430G2755, MSP430G2855, MSP430G2955”


A G2x55 sorozatról annyit tudni, hogy 38 lábú TSSOP tokozású lesz (ez kb. 4 I/O portot jelent), 3 Timerrel, s 32, 48 illetve 56 kB flash memóriával, 4 kB RAM-mal fog rendelkezni (többi paraméterében a G2553-mal egyezik meg (tehát pl. USCI A és B lesz benne).

A számozás rendje szerint a G2x44 sorozat valószínűleg 8/16/32 kB flash és 2 kB RAM-mal fog rendelkezni. Bővebben: Link

Nem tudni, hogy miért rejtette el a TI a korábban már közzétett adatlapokat, mindenestre egy Errata itt elérhető: http://www.ti.com/lit/er/slaz516/slaz516.pdf
(#) szitko válasza icserny hozzászólására (») Márc 20, 2013 /
 
A minap olvastam, hogy az új, IAR Embedded Workbench for MSP430 v5.51.6 támogatni fogja az újabb kiadású gXXXX és más MSP430 MCU-kat. Bővebben: Link
(#) uli válasza icserny hozzászólására (») Márc 20, 2013 /
 
Köszönöm, erre nem is emlékeztem!
Akadt közben viszont másik problémám. A program a következőt fogja csinálni: Beolvassa a légtömegmérő és a gázpedálszenzor adatait, majd azokat kiértékelve kiszámolja a befecskendezési időt. Egy 8x8-as tömbbe van leírva a befecskendezési térkép, ezeknek az elemei közt lin. interpolál, és kapjuk a megfelelő időt.
A probléma a képen látható. Mit rontottam el tudja valaki?
A program: (még közel sincs kész)
  1. //p1.0 input alpha(throttle sensor)
  2. //p1.1 input air mass(mass air flow sensor)
  3. //p1.2 output injector
  4.  
  5. #include "io430.h"
  6. #include "stdint.h"
  7.  
  8. //injection time table headers. M: airmass(x), A: alpha(y). in 10 bit format, according to ADC results.
  9. int M[8]={0,146,292,438,584,730,876,1023};
  10. int A[8]={0,146,292,438,584,730,876,1023};
  11.  
  12.  
  13.  
  14. //injection time table.  rows: airmass  columns: alpha
  15. int T[8][8]={
  16.   {10,12,14,15,16,17,18,19},
  17.   {10,12,14,15,16,17,18,19},
  18.   {10,12,14,15,16,17,18,19},
  19.   {10,12,14,15,16,17,18,19},
  20.   {10,12,14,15,16,17,18,19},
  21.   {10,12,14,15,16,17,18,19},
  22.   {10,12,14,15,16,17,18,19},
  23.   {10,12,14,15,16,17,18,19}};
  24.  
  25.  
  26. //ADC function:
  27. int ADC_meas(uint16_t chan) {
  28.   ADC10CTL0 &= ~ENC;                               //ADC off to reconfigure
  29.   ADC10CTL0 = ADC10SHT_3 | ADC10ON | SREF_0;       //sampling time: 64 clk | ADC on | voltage references: Vcc and Gnd
  30.   ADC10CTL1 = ADC10SSEL_0 + chan;                  //chan= input channel, ADC10OSC az órajel
  31.   ADC10CTL0 |= ENC + ADC10SC;                      //ADC enabled and start
  32.   while (ADC10CTL1 & BUSY);                        //waiting for the end of conversation
  33.   return ADC10MEM;
  34. }
  35.  
  36. //linear interpolation function:
  37. int INTERP(int X1, int X2, int X, int Y1, int Y2) {
  38.    double Yd = Y1+((X-X1)*(Y2-Y1)/(X2-X1));
  39.    int Y = (int)Yd;
  40.    return Y;
  41. }
  42.  
  43. //injection function:
  44. //void INJECT(uint8_t inj_time){
  45. //}
  46.  
  47.  
  48.  
  49.  
  50.              
  51.  
  52.  
  53.  
  54. int main( void )
  55. {
  56.   int y1,y2,x1,x2, Ta,Tb,Tinj;         //injection time table rows and columns index...
  57.   int alpha,airmass;
  58.  
  59.  
  60.  
  61.  
  62.   WDTCTL = WDTPW + WDTHOLD;    //Stop watchdog timer to prevent time out reset
  63.   BCSCTL1 = CALBC1_1MHZ;      
  64.   DCOCTL = CALDCO_1MHZ;        //Calibrated 1 MHz DCO
  65.  
  66.   P1DIR |= BIT2;             // P1.2 to output
  67.   P1SEL |= BIT2;             // P1.2 to TA0.1
  68.   TACTL = TASSEL_2 + MC_1;   // SMCLK, up mode
  69.   CCTL1 = OUTMOD_7;          // CCR1 reset/set
  70.   CCR0 = 1000;               // PWM Period
  71.    
  72.  
  73.  
  74.   while(1){
  75.     CCR1=0;
  76.     alpha=ADC_meas(INCH_0);         //throttle sensor read
  77.     airmass=ADC_meas(INCH_1);       //MAF sensor read
  78.    
  79.     if (alpha<=A[0]) {               //Column index
  80.     CCR1 = 0;  
  81.     }
  82.     else if (alpha<=A[1]) {
  83.       y1=0;
  84.       y2=1;}
  85.     else if (alpha<=A[2]) {
  86.       y1=1;
  87.       y2=2;}
  88.     else if (alpha<=A[3]) {
  89.       y1=2;
  90.       y2=3;}
  91.     else if (alpha<=A[4]) {
  92.       y1=3;
  93.       y2=4;}
  94.     else if (alpha<=A[5]) {
  95.       y1=4;
  96.       y2=5;}
  97.     else if (alpha<=A[6]) {
  98.       y1=5;
  99.       y2=6;}
  100.     else {
  101.       y1=6;
  102.       y2=7;}
  103.    
  104.     if (airmass<=M[0]) {             //Row index
  105.     CCR1 = 0;  
  106.     }
  107.     else if (airmass<=M[1]) {
  108.       x1=0;
  109.       x2=1;}
  110.     else if (airmass<=M[2]) {
  111.       x1=1;
  112.       x2=2;}
  113.     else if (airmass<=M[3]) {
  114.       x1=2;
  115.       x2=3;}
  116.     else if (airmass<=M[4]) {
  117.       x1=3;
  118.       x2=4;}
  119.     else if (airmass<=M[5]) {
  120.       x1=4;
  121.       x2=5;}
  122.     else if (airmass<=M[6]) {
  123.       x1=5;
  124.       x2=6;}
  125.     else {
  126.       x1=6;
  127.       x2=7;}
  128.    
  129.    
  130.   Ta=INTERP(A[y1], A[y2], alpha, T[y1][x1], T[y1][x2]);
  131.   Tb=INTERP(M[x1], M[x2], airmass, T[y2][x1], T[y2][x2]);
  132.   Tinj=INTERP(M[x1], M[x2],airmass, Ta, Tb);
  133.  
  134.  
  135.  
  136.  
  137.    
  138.  
  139.  
  140.  
  141.  
  142. }
  143. }


Köszi!
(#) icserny válasza uli hozzászólására (») Márc 21, 2013 /
 
  1. int INTERP(int X1, int X2, int X, int Y1, int Y2) {
  2.    double Yd = Y1+((X-X1)*(Y2-Y1)/(X2-X1));
  3.    int Y = (int)Yd;
  4.    return Y;
  5. }
Válaszd ketté a változó deklarálását és az értékadást!
(#) uli válasza icserny hozzászólására (») Márc 21, 2013 /
 
Nem segít sajnos Arra gondoltam, hogy a sok változó mind integer, és ugye annak mikor deklarálom lefoglalja a helyet a memóriában. Mi van ha olyan sok a változó, hogy elfogyott az erre fenntartott memória, és ezért nem bírja lefoglalni?
Gondoltam ,hogy párat át lehetne írni, mert felesleges az integer, de nem találtam sehol hogy milyen más változótípusok vannak. Anno C-ben még volt byte (0-255), meg vannak olyanok, amit előszeretettel használtok, uint16_t? Ezek mit tudnak? Gondolom unsigned int 16 bit, de mi az a T?
Köszi
(#) icserny válasza uli hozzászólására (») Márc 21, 2013 /
 
Nekem az IAR-ral nem ír ki hibát a fordításkor. Projekt opcióknál az MSP430G2553 van kiválasztva.
(#) uli válasza icserny hozzászólására (») Márc 21, 2013 /
 
Igen, nekem is az van+ FET debugger, de valamiért mégsem oké. Találtam egy írást a változókról most lecseréltem a nagyrészét, hogy ne legyenek feleslegesen nagyok, de az sem segített. A programot nekem is lefordítja, bele is "égeti" a kontrollerbe, de mikor előjön a debug rész, akkor írja ki a hibát. Köszönöm hogy próbál segíteni István!

Közben::
a roject-nél rámentem a clean parancsra, és most minden oké. Érdekes, de örülök. Köszönöm
A hozzászólás módosítva: Márc 21, 2013
(#) kisedison hozzászólása Márc 23, 2013 /
 
Üdv Mindenkinek!

Lenne ez a visszaszámláló:
  1. void TizmasodpercLcd() {
  2.   ClearLcmScreen();
  3.   PrintStr("      20 perc   ");
  4.    __delay_cycles(60000000);
  5.    ClearLcmScreen();
  6.   PrintStr("      19 perc   ");
  7.    __delay_cycles(60000000);
  8.    ClearLcmScreen();
  9.   PrintStr("      18 perc   ");
  10.    __delay_cycles(60000000);
  11.    ClearLcmScreen();
  12.   PrintStr("      17 perc   ");
  13.    __delay_cycles(60000000);
  14.    ClearLcmScreen();
  15.   PrintStr("      16 perc   ");
  16.    __delay_cycles(60000000);
  17.    ClearLcmScreen();
  18.   PrintStr("      15 perc   ");
  19.    __delay_cycles(60000000);
  20.    ClearLcmScreen();
  21.   PrintStr("      14 perc   ");
  22.    __delay_cycles(60000000);
  23.    ClearLcmScreen();
  24.   PrintStr("      13 perc   ");
  25.    __delay_cycles(60000000);
  26.    ClearLcmScreen();
  27.   PrintStr("      12 perc   ");
  28.    __delay_cycles(60000000);
  29.    ClearLcmScreen();
  30.   PrintStr("      11 perc   ");
  31.    __delay_cycles(60000000);
  32.   ClearLcmScreen();
  33.   PrintStr("      10 perc   ");
  34.    __delay_cycles(60000000);
  35.    ClearLcmScreen();
  36.   PrintStr("       9 perc   ");
  37.    __delay_cycles(60000000);
  38.    ClearLcmScreen();
  39.   PrintStr("       8 perc   ");
  40.    __delay_cycles(60000000);
  41.    ClearLcmScreen();
  42.   PrintStr("       7 perc   ");
  43.    __delay_cycles(60000000);
  44.    ClearLcmScreen();
  45.   PrintStr("       6 perc   ");
  46.    __delay_cycles(60000000);
  47.    ClearLcmScreen();
  48.   PrintStr("       5 perc   ");
  49.    __delay_cycles(60000000);
  50.    ClearLcmScreen();
  51.   PrintStr("       4 perc   ");
  52.    __delay_cycles(60000000);
  53.    ClearLcmScreen();
  54.   PrintStr("       3 perc   ");
  55.    __delay_cycles(60000000);
  56.    ClearLcmScreen();
  57.   PrintStr("       2 perc   ");
  58.    __delay_cycles(60000000);
  59.    ClearLcmScreen();
  60.   PrintStr("       1 perc   ");
  61.    __delay_cycles(60000000);
  62.    ClearLcmScreen();
  63.   PrintStr("       0 perc   ");
  64. }


(az hogy "Tizmasodperc"-nek van jelölve az az előző próbálkozás maradéka)
Van valami módja hogy ezt kultúráltabban meg lehessen csinálni? Egy 16x2-es LCD-re írja ki, és a lejárat után elenged a relé. De itt most a visszaszámlálás a kérdés, meg hogy esetleg másodperc kijelzést lehetne-e rakni hozzá?
A hozzászólás módosítva: Márc 23, 2013
(#) szitko válasza kisedison hozzászólására (») Márc 23, 2013 /
 
Szia.

Beállítasz egy Timer modult, hogy egy másodpercenként megszakítást okozzon, és a megszakításba beraksz egy számlálót. A Timer két megszakítása között meg kiíratod a másodpercet, meg amit akarsz.
Következő: »»   99 / 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