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   54 / 139
(#) icserny válasza Smithy87 hozzászólására (») Ápr 26, 2012 /
 
Idézet:
„Kérdésem is lenne, a g2452 egy db timerével tudok e 2 különböző frekit létrehozni?”
Igen, lehet. Ha a timer szabadonfutó módban megy, a Capture/Compare csatornákba pedig beírod, hogy hány óraütés múlva adjanak megszakítást, majd megszakításkor a periódusidővel növelt értéket írod beléjük vissza. Az átvitellel nem kell törődni, mivel a timer is ugyanakkor csordul túl (lévén mindegyik 16 bites).

A második cikkem utolsó példájában is van hasonló dolog, csak ott a kitöltés nem 50 %-os (két, független PWM csatornát játszottam, különböző frekvenciával). A te eseted annál egy kicsivel egyszerűbb.
(#) szitko válasza icserny hozzászólására (») Ápr 26, 2012 /
 
Valóban.
Smithy87: Bocsi a félrevezetésért!!

Köszönöm a javítást! Nem tudom, miért hittem, hogy bennevan.
(#) krobert válasza Smithy87 hozzászólására (») Ápr 27, 2012 /
 
A DHL Global Forwarding szállítja a TI "cargo" szállítmányait Hollandiába. Ez azt jelenti, hogy ebbe sok embernek benne van a rendelése, ami a hollandiai DHL központba érkezik. Innen kerül át a DHL Express-hez, akik majd hozzád szállítják ki.
A gond ott van, hogy a TI nem a te csomagodhoz tartozó tracking number-t adja meg, hanem a cargo-ét.

Ez az infó nekem is pár email-be és egy telefonhívásba került, de a rendelésem tracking number-e nem derült ki.
(#) szitko hozzászólása Ápr 27, 2012 /
 
Egy kis érdekesség. (Ne próbáljátok ki!)
Egy analóg + digitális labortápon dolgozom, és teljesen véletlenül (figyelmetlenségből), a mikrovezérlő (g2252) analóg bemenetére, ráengettem a teljes kimenő tápot, 41 voltot, egy 1kohm-os ellenálláson keresztül. Csodák-csodájára, a mikrovezérlőnek semmi baja nem lett, még az analóg bemenet is megy, pedig, jó sokáig rajta volt (kb 5-6 perc), mire észrevettem a hibát, mert közben méregettem a tápot.

Azért írtam le, mert nagyon felbosszantott a dolog, mert egy g2553-ast, a multiméter ampermérőjével tettem tönkre. Véletlenül a GND és egy analóg bemenetnek beállított lábra raktam a műszer vezetékeit ampermérő állásban. (Rögtön elszált az a láb, és még egy-két periféria is használhatatlan lett.)
(#) DecebaL hozzászólása Ápr 27, 2012 /
 
Nem tudja valaki, hogy ccs-ben hogy lehet megadni egy bináris számot? A 0b0001 alakban hibát jelez.
(#) Atielektro hozzászólása Ápr 28, 2012 /
 
Sziasztok!

Foglalkozott közületek valaki a TI-s USB-s stack-el CCS-ben? Épp egy MSP430F5510-be szeretném belegyömöszölni a CDC demot, de nem akar lefordulni a kód. A hibajelenség a csatolt képen látható. Több ilyen hiba is van, de ebből csak egy látható. Én úgy értelmeztem, hogy nem találja a fájlt, de valójában látja, mert: 1, Az elérési útvonalat többször ellenőriztem. 2, F3-at nyomva a kódsoron meg is nyitja azt.

DecebaL-nak: Ezt a kérdést már én is feltettem itt egyszer, de én sem kaptam választ, szóval erre még nem jött rá senki. Amúgy próbáltam rákeresni is, illetve a CCS doksiját is néztem, de sehol semmilyen utalást nem találtam erre.

CCS_Hiba.PNG
    
(#) icserny válasza Atielektro hozzászólására (») Ápr 28, 2012 /
 
Mit jelentenek baloldalt a piros X-ek? Nem azt, hogy nincs, vagy nem ott található a fájl? Ha nincs ott, akkor nem csoda, hogy nem tudja betölteni!
(#) Atielektro válasza icserny hozzászólására (») Ápr 28, 2012 /
 
Nem, azok azt jelentik, hogy abban a fájlban hibát talált a fordító.
(#) colosseum válasza DecebaL hozzászólására (») Ápr 29, 2012 /
 
a headerben megírod magadnak.

Keress vissza azt hiszem icserny a múltkor leírta , hogy ő miképpen szokta.
(#) Smithy87 hozzászólása Ápr 29, 2012 /
 
  1. unsigned char tx_byte=65;
  2. .
  3. .
  4. int main( void ){
  5.     WDTCTL = WDTPW + WDTHOLD;                // Stop WDT
  6.     BCSCTL1 = CALBC1_1MHZ;                   // kalibrált 1MHz
  7.     DCOCTL = CALDCO_1MHZ;
  8. //---- Hardveres UART beállítás ------
  9.     P1SEL |= BIT1 + BIT2;        // P1.1 = TXD, P1.2=RXD
  10.     P1SEL2|= BIT1 + BIT2;       // P1.1 = TXD, P1.2=RXD
  11.     UCA0CTL1 |= UCSSEL_2;   // CLK = smclk
  12.     UCA0BR0 = 104;                 // 1MHz SMCLK / 104 = ~9600
  13.     UCA0BR1 = 0;
  14.     UCA0MCTL = UCBRS0;                      // Moduláció
  15.     UCA0CTL1 &= ~UCSWRST;               // UCA0 reset tiltás
  16. // --------- Egy bájt küldése UART-on ----------------
  17.         while (!(IFG2&UCA0TXIFG));     // üres a TX buffer? Vagy valami hasonló.
  18.         UCA0TXBUF = tx_byte;            //  tx byte másolása UART bufferbe
  19.         return;
  20. }


A fent linkelt kóddal próbálom a hw-s uartot egy 2553-assal az új launchpadon. Ha a felrajzolt jumper beállítást használom akkor sem megy át a cucc a hyperterminálba.
(#) szitko válasza Smithy87 hozzászólására (») Ápr 29, 2012 /
 
A 17,18,19-es sorok helyett tedd be ezt:
  1. for(char i=0; i < 6; i++){         // ciklus az adat küldésre
  2.          while (!(IFG2&UCA0TXIFG));     // üres a TX buffer? Vagy valami hasonló.
  3.          UCA0TXBUF = tx_byte;         // adat küldése bluetooth-on
  4.          __delay_cycles(100);
  5.      }
  6.    _NOP();

Most nemnagyon volt időm megnézni, hogy miért nem küldi át a lenti kóddal az "A" betűt, csak beleraktam a ciklust, és nálam megjelentek az "A" betük, a hyerterminálban. De valamiért nálam, csak 4db "A", plusz egy mosolygós jel jelenik meg.
(#) Smithy87 válasza szitko hozzászólására (») Ápr 29, 2012 /
 
A lapkán úgy csináltad a hw jumperelést ahogy a felfestés mondja? vagyis függőlegesből vízszintesbe fordítva? vagy barkácsoltál a keresztbekötéssel?
Valamint a timer lábakról tude mondani valaki valami hasznosat? arra szeretném hasztnálni,h az egyik lábon kimenetnek állítva 40Khz es PWM et tolok ki rajta. Elvileg van valami compare regisztere. Egy másik lábon meg a viszhang jel billentene. A lényeg a kiadás és a vissza verődés között eltelt idő közötti különbség számítása.
(#) szitko válasza Smithy87 hozzászólására (») Ápr 29, 2012 /
 
Igen, hw módban vannak a jumperek. A régi LP-nél kell barkácsolni.
A Timer ki/bemenetek, részletesen le vannak írva az adatlapban. Melyik, hol, hogy jön ki/be.
(#) Smithy87 hozzászólása Ápr 29, 2012 /
 
Hát ha meg gebedek sem értem, hogy hogy az Istenkébe lehet programozni ezt a szutykot egyszerűen nem fogom fel az elnevezeséket nem látom át a dolgait. Egy nyamvadt frekvencia ösztást nem tudok beállítani :@
(#) szitko válasza Smithy87 hozzászólására (») Ápr 29, 2012 /
 
Naaa, csak szépen higgadtan, nyugodtan. Nem kell kapkodni. A kapkodásból, és nem odafigyelésből, még soha semmi jó nem származott!

Megpróbálok egy rövid példát, leírni az adatlap megértéséhez, illetve a Timer perifériához.
Tehát: MSP430G2553 = adatlap 5. oldal, lábak elnevezése.
Pl. A P1.6-os lábhoz az van írva, hogy "TA0_1, Timer0_A, compare, Out1 output.
Eszerint a Timer0_A egyes kimenete. Ha ezt írod be:
  1. P1DIR |= BIT6;     // digitális kimenet
  2.          P1SEL |= BIT6;            // Timer0_A kimenet
  3.          TA0CCR0 = 100;          // periódus
  4.          TA0CTL = TASSEL_2 | MC_1 | TACLR;
  5.          TA0CCTL1 = OUTMOD_7;    // felfele számolás
  6.          TA0CCR1 = 50;           // kitöltési tényező

akkor egy 50%-os kitöltésű PWM jelet kapsz a P1.6-os kimeneten. Tehát a fenti kis programocskát mindegyik olyan kimenetre be tudod állítani, ami TA0_1-es jelölést kapott, csak a P1DIR-t, és a P1SEL-t kell átállítani. A Timer0_A beállítást, viszont a FUG tartalmazza!!
A javaslatom, hogy Icserny fórumtársunk cikkét olvasd át, mert Ő sokkal jobban le tudta írni.

Ui. Ha esetleg valaki hibát látna a fentiekben, kérem javítson ki!
(#) Atielektro válasza icserny hozzászólására (») Ápr 29, 2012 /
 
Nos sikerült megoldanom a problémát, bár érteni nem teljesen értem. Beimportáltam egy gyári mintapéldát, ami gond nélkül lefordult. Ennél megnéztem, hogy melyek azok a mappák, melyek a fordítónál be vannak állítva, mint "includolási" mappák és ezeket beírkáltam az én projektem includolási beállításai közé. Igazából itt is azok a mappák szerepeltek, melyeket én lokálisan megadtam a .c és .h fájlokban az #include direktívákkal. A lényeg, hogy lefordult és sikerült felprogramoznom az MSP430F5510-esemet Launchpad-dal . Összeaggattam hozzá az áramkört. Működni működik, mert felismeri a Windows, de nem az igazi, mert a CDC eszközömet HID-ként ismeri fel, bár egyszer sikerült CDC-nek látnia, de akkor meg a hozzá társított driver-el voltak gondjai. Majd még agyalok rajta, hogy mi baja lehet...
Egyébként a TI-s USB stack szoftver oldalról nagyon jól dokumentált, a stack jól struktúrált (bár ez nem azt jelenti, hogy minden apró részletet értek is benne, de átláthatóbbnak tűnik, mint a Microchip-pé ), illetve van hozzá egy gyári descriptor készítő program is, mellyel könnyedén lehet CDC,HID,MSC és kompozit eszközöket is gyártani. A hardver oldal van egy kissé szellősen dokumentálva, de azt össze lehet szedni.
Szóval, ha valakinek kedve támadt USB-zni egy kicsit, akkor csak nosza
(#) Smithy87 hozzászólása Máj 1, 2012 /
 
  1. #include "io430g2553.h"
  2.  
  3.  
  4. int main( void )
  5. {
  6.                
  7.  
  8. WDTCTL = WDTPW + WDTHOLD;    // Stop watchdog timer to prevent time out reset
  9.  
  10. DCOCTL = CALDCO_8MHZ;
  11. BCSCTL1 = CALBC1_8MHZ;          // 8 MHz-es frekvencia
  12. BCSCTL2 = SELM_0 +              // MCLK forrása: DCO
  13.         DIVM_0 +              // MLCK osztója 1  Marad 8Mhz
  14.  
  15.         DIVS_1;               // SMCLK osztója: 2 4Mhz re csökken
  16.  
  17. BCSCTL2 &= ~BIT3;               // SMCLK forrása DCO
  18.  
  19.  
  20.   P1DIR |= BIT6;     // digitális kimenet
  21.          
  22.          P1SEL |= BIT6;            // Timer0_A kimenet
  23.          TA0CCR0 = 100;          // periódus   Itt csinálok 40KHz et
  24.          TA0CTL = TASSEL_2 | MC_1 | TACLR | TAIFG;
  25.          //Timaer a forrása SMclk  felfelé számol TACCR0 értkig
  26.          TA0CCTL1 = OUTMOD_7;    // felfele számolás
  27.          TA0CCR1 = 50;           // kitöltési tényező
  28.   return 0;
  29. }


Jól gondolom, hogy ez azt csinálja amit én szeretnék? Lesz 2 órajelem egy 8mhz és egy 4Mhz amiből a Timer_A használatával csinálok 40KHz-et 50% os tehát 12.5Us os félperiódussal. Már csak azt kellene megoldanom, hogy 12db ilyen jel generálása után álljon le és várjon.

Valamint a capture/compare részből ha valaki tudna felvilágosítani azt meghálálnám.
(#) icserny válasza Smithy87 hozzászólására (») Máj 1, 2012 /
 
Idézet:
„Valamint a capture/compare részből ha valaki tudna felvilágosítani azt meghálálnám.”

Az MSP430x2xx Family User's Guide-ban (SLAU144I.PDF), valamint
John Davies: MSP430 Microcontroller Basics ("MSP430 mikrovezérlő alapok") c. könyvében mit nem találtál meg?
(#) Smithy87 válasza icserny hozzászólására (») Máj 1, 2012 /
 
Általam is érthető egyszerű példát Azt akarom hogy amikor elindul a 12 jelből álló 40KHz-s burst akkor induljon egy számláló és akkor álljon le amikor az echoja vissza ér. De nem jöttem rá, hogy melyik regisztereket kell meg voodoozom.
(#) maser_dude hozzászólása Máj 1, 2012 /
 
Timer kérdés:

Launchpad 2553-sal és icserny 2x16-os LCD kijelzövel. Egy NE555 oszcillátor frekvenciáját akartam megmérni (kb 38kHz) Timer capture/interupt segitségével.

Az órajelet 12MHz-ra állitottam, beállitottam a Timer-t és a két felfutó él közötti számlálást tettem az LCD-re. 20 mintavételből minden második a jó számláló értéket mutatta (316), de minden második nulla számlálót mutatott (0).

Nincs oszcilloszkopom, de az NE555 +5V tápról TTL jelet kellene hogy adjon és egy kis ellenállás osztot is betettem nehogy tulvezerelje a 2553. A Timer interupt vector törli az interupt zászlót igy nem értem miért adja vissza az interuptot rögtön a vezérlés.

Van valakinek ötlete, miért nem müködik jól a program.

Csatolva a lényege a programnak:
(#) Smithy87 hozzászólása Máj 3, 2012 /
 
Program indulással kapcsolatos kérdés. Olyat szeretnék, hogy soros porton jön egy jel mondjuk egy pc-s progin lévő gomb megnyomása. És ennek hatására kell elinduljon a mikrovezérlőn a program. Ezt hogy a legegyszerűbb megoldani?
(#) icserny válasza Smithy87 hozzászólására (») Máj 3, 2012 /
 
A mikrovezérlőn futó program normális körülmények között a tápfeszültség bekapcsolásakor már elindul.

Ha jól értem a szándékodat, akkor a főprogramnak induláskor egy karakter beérkezésére kellene várakoznia, s annak beérkezésekor végrehajtani az az eljárást, vagy programágat, ami a PC-s gomblenyomáshoz tartozik.
(#) Smithy87 válasza icserny hozzászólására (») Máj 3, 2012 /
 
Igen !

Közben ki kísérleteztem, hogy amint táp-fesz kerül rá elindul a program. Gyakorlatilag a főprogramnak kell indulni a karakter beérkezése után. Jól gondolom, hogy az UART_init után a mainbe ha teszek egy hurkot ami a beérkező karakterre vár az működőképes megoldás?
(#) icserny válasza Smithy87 hozzászólására (») Máj 3, 2012 /
 
Idézet:
„az UART_init után a mainbe ha teszek egy hurkot ami a beérkező karakterre vár az működőképes megoldás?”
Igen, erre gondoltam.
(#) uli hozzászólása Máj 3, 2012 /
 
Sziasztok!
Ismét elakadtam kicsit.
  1. #include "io430.h"
  2. #include "io430g2553.h"
  3. #include "intrinsics.h"
  4.  
  5. int main( void )
  6. {
  7.   // Stop watchdog timer to prevent time out reset
  8.   WDTCTL = WDTPW + WDTHOLD;
  9.  
  10.  
  11.   P1DIR |=  BIT0;   //P1.0 kimenet
  12.   P1DIR |=  BIT6;   //p1.6 kimenet
  13.   P1DIR &= ~BIT3;   //p1.3 bemenet
  14.   P1DIR |=  BIT3;   //felhúzás eng
  15.   P1REN |=  BIT3;   //belső felhúzás
  16.   const char a=0x40;
  17.   const char b=0x01;
  18.  
  19.  
  20.   while (1)
  21.   {
  22.     if ((P1IN & BIT3))
  23.     {
  24.       P1OUT=a;
  25.       __delay_cycles(200000);
  26.       P1OUT=b;
  27.       __delay_cycles(200000);
  28.     }
  29.     else
  30.     {
  31.       P1OUT=a|b;
  32.     }
  33.   }
  34.    
  35.      
  36.      
  37.  
  38.  
  39.  
  40. }


Szeretném azt csinálni a fenti programmal, hogy ha be van nyomva a gomb, akkor folyamatosan világítson a két led, egyébként felváltva.
Az if feltétel működik, tehát ha a feltételnek (!(P1IN & BIT3))-at írok, akkor felváltva villog, ha az van, ami most, akkor folyamatosan.
De valahogy menet közben nem akar váltani.
Azt is megköszönném, ha elmagyarázza valaki, hogy a feltétel pontosan mit jelent.
P1IN és BIT3 ? Eddig nem bírtam értelmezni. Miért nem elég csak a bit3-at figyelni? Miért kell össze ÉS-elni P1IN-nel?
köszi:
uli
(#) colosseum hozzászólása Máj 3, 2012 /
 
(!(P1IN&BIT3))

csak annyit jelent hogy ha nem 1 akkor teljesül ergo nincsen lenyomva ha le van nyomva akkor else.
Ha jól emlékszem. ezzel vizsgálod hogy az adott port bemenetén azt a láb magas avgy alacsony.

Azért kell az in mert lehetne out is. és te bemenetet akarsz vizsgálni.+ ha nincsen bementre állítva és te figyeled a lábat attol még működhet.
(#) Smithy87 válasza uli hozzászólására (») Máj 3, 2012 /
 
Valami hasonlót akartam össze hozni kísérletezés címszóval én is de nekem sem működött folyamatában. az okára azóta sem jöttem rá.
(#) uli válasza colosseum hozzászólására (») Máj 3, 2012 /
 
Köszi! Már csak azt nem értem, a program miért nem működik
(#) uli hozzászólása Máj 3, 2012 /
 
  1. while (1)
  2.   {
  3.    
  4.    while ((P1IN & BIT3))
  5.     {
  6.       P1OUT=a;
  7.       __delay_cycles(200000);
  8.       P1OUT=b;
  9.       __delay_cycles(200000);
  10.     }
  11.    
  12.    P1OUT =BIT0;
  13.    __delay_cycles(10000);
  14.    P1OUT ^= BIT0;
  15.    __delay_cycles(250000);
  16.   }

Átírtam kicsit, IF helyett While-t használtam. Ez most azt műveli, hogy az utolsó pár sor folyamatosan ismétlődik, viszont egyáltalán nem érdekli, hogy a gombot nyomom-e vagy sem, így nem lép be a másik while ciklusba.
Lényeges, hogy P1 kimeneteit és bemeneteit milyen sorrendben deklarálom?
(#) colosseum válasza uli hozzászólására (») Máj 3, 2012 /
 
az egy dolog h nyomode de a felhuzó ellenálást bekapcsoltad és az egyébb dologkat amit kell.
Következő: »»   54 / 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