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   135 / 139
(#) Mybuster hozzászólása Feb 14, 2016 / 2
 
Sziasztok!
Gondoltam megosztom veletek.
Egy 430-as 8X8X8 LED kocka shiftregiszteres vezérléssel.
Ki mit épített topic.
A hozzászólás módosítva: Feb 14, 2016
(#) szitko hozzászólása Márc 6, 2016 /
 
Sziasztok.

G2452-es capture moduljával próbálkozom.
Az ide vágó program részlet:
  1. P1DIR &= ~BIT1;  // input
  2.     P1SEL = BIT1;
  3.   //  P1SEL2 = BIT2;
  4.  
  5.     /* Timer setup */
  6.     TA0CCTL0 |= CM_1 + SCS + CCIS_0 + CAP + CCIE;
  7.     TA0CTL |= TASSEL_2 + MC_2 + ID_0;
  8.      _BIS_SR(GIE); // global interrupt
  9.  
  10. /* interrupt */
  11. #pragma vector=TIMER0_A0_VECTOR
  12. __interrupt void TimerA0(void)
  13. {
  14.         count++;
  15.         TA0CTL &= ~TAIFG;
  16. }

A P1.1 bemeneten a felfutó éleket számolom. A kódrészlet tökéletesen működik, de csak a P1.1 bemeneten!
Próbáltam áttenni a P1.2 CCI1A és a P1.4 CCI2A lábra, de egyszerűen nem tudom beállítani, hogy ott is működjön a számlálás.
P1.2: TA0CCTL1, megszakítás TIMER0_A1_VECTOR
P1.4: TA0CCTL2, megszakítás TIMER0_A1_VECTOR
Valamit kihagyok?
(#) mechanika hozzászólása Márc 6, 2016 /
 
Sziasztok!

LPM-ből ébred a 2553 ha hw uarton adat érkezik?
(#) szitko válasza szitko hozzászólására (») Márc 6, 2016 /
 
Megoldódott. Megszakításban switch/case választás, csak nem értem, miért nem lehet ezt kihagyni.
  1. #pragma vector = TIMER0_A1_VECTOR
  2. __interrupt void TIMER0_A1_ISR (void)
  3. {
  4.         switch(TA0IV)
  5.         {
  6.         case TA0IV_NONE: break;
  7.         case TA0IV_TACCR1: break;
  8.         case TA0IV_TACCR2:
  9.                 if (TA0CCTL2 & CCI)
  10.                 {
  11.                         count++;
  12.                 }
  13.                 break;
  14.         case TA0IV_TAIFG: break;
  15.     default:    break;
  16.         }
  17. }
A hozzászólás módosítva: Márc 6, 2016
(#) SBahadurD válasza mechanika hozzászólására (») Márc 6, 2016 / 1
 
Igen, csak járjon az az órajel, amiről az UART modul megy.
(#) mechanika válasza SBahadurD hozzászólására (») Márc 6, 2016 /
 
Köszi!
(#) icserny válasza szitko hozzászólására (») Márc 6, 2016 /
 
Idézet:
„Megszakításban switch/case választás, csak nem értem, miért nem lehet ezt kihagyni.”
A TIMER_A-hoz két megszakításvektor tartozik, de ezek nem egyformák, a második osztott használatú. A Family Reference írja:
12.2.6 Timer_A Interrupts
Two interrupt vectors are associated with the 16-bit Timer_A module:
• TACCR0 interrupt vector for TACCR0 CCIFG
• TAIV interrupt vector for all other CCIFG flags and TAIFG
A hozzászólás módosítva: Márc 6, 2016
(#) szitko válasza icserny hozzászólására (») Márc 7, 2016 /
 
Köszönöm, megtaláltam.
(#) szitko hozzászólása Márc 8, 2016 /
 
Van egy rövid függvényem az osztásra, bár a maradékkal nem foglalkozik, ezért nem teljes.(Azt hiszem valamilyen könyvben olvastam róla)
A program futási idejébe melyik a gyorsabb? A függvény, vagy az osztásjel (/)? A CCS v6.01-ben nem tudom hogy lehet megnézni...
függ.:
  1. int osztas(int osztando, int oszto){
  2.     int hanyados = 1;
  3. while (oszto <= osztando) {
  4.         oszto = oszto << 1;
  5.         hanyados = hanyados << 1;
  6.      }
  7.      tempdivisor = tempdivisor >> 1;
  8.      hanyados = hanyados >> 1;
  9.      hanyados = hanyados + osztas(osztando - oszto, oszto);
  10.      return hanyados;
  11. }
A hozzászólás módosítva: Márc 8, 2016
(#) kissi válasza szitko hozzászólására (») Márc 8, 2016 /
 
Idézet:
„A CCS v6.01-ben nem tudom hogy lehet megnézni...”
Nem használom a CCS-t, de előtte bekapcsolsz, utána kikapcsolsz egy LED-et és logikai analizátorral vagy szkóppal, PK2-vel megnézed ( megméred !) az időt !
A hozzászólás módosítva: Márc 8, 2016
(#) szitko válasza kissi hozzászólására (») Márc 9, 2016 /
 
Megtaláltam a disassembly ablakot. Egyértelműen a függvény (bit-tologatás) a gyorsabb.
(#) szitko hozzászólása Márc 15, 2016 /
 
Sziasztok.

Változó frekvenciát kellene mérnem, de megakadtam. A g2452 capture modulját használom a freki mérésére, egy régebbi programom részletével. Program. A programból csak a freki számítást vettem ki. (megszakítási rész)
A g2452 capture beállításai:
  1. TA0CCTL2 |= CM_1 + SCS + CCIS_0 + CAP + CCIE;
  2. TACTL |= TASSEL_2 + MC_2 + ID_3;

A g2452 belső 16MHz-en megy. A frekvencia mérés kHz-es nagyságrendben, viszonylag pontos.
A problémám, hogy nekem 1Hz-100Hz között kellene mérjek és sajnos 32Hz alatt már csak fals eredményt kapok. 32Hz-ig pontos a mérés. Hogy tudnék 5Hz-es jelet mérni?
(#) icserny válasza szitko hozzászólására (») Márc 15, 2016 /
 
Idézet:
„Hogy tudnék 5Hz-es jelet mérni?”
Két lehetőség van:
1. Csökkenteni kell a számláló órajelének frekvenciáját akár SMCLK 1:8 előosztójának bekapcsolásával (BCSCTL2 DIVS1 és DIVS2 bitek), akár SMCLK helyett ACLK választásával (TACTL írásakor TASSEL_2 helyett TASSEL_1)
2. A másik lehetőség: minden maradjon úgy, ahogy most csinálod, de számláld a TAR számláló regiszter túcsordulásait is, és ahányszor túlcsordult, annyiszor adj hozzá 65536-ot a capture során kapott értékhez.

A 32 Hz-es limit onnan jön, hogy a most 2 MHz-re leosztott TAR órajel mellett másodpercenként 30-szor túlcsordul a 16 bites számláló. A 32 Hz periódusideje tehát még épp belefér az első túlcsordulás előtti intervallumba.
A hozzászólás módosítva: Márc 15, 2016
(#) szitko válasza icserny hozzászólására (») Márc 15, 2016 /
 
Köszi a segítséget.
A Timer órajele direkt 2MHz, mert más is megy róla.
A pontossággal még van egy kis gond amit nem értek, de majd kialakul.
be=35Hz, mért érték, átlagolás után 35Hz, átlagolás nélkül, 35Hz.
be=25Hz, mért érték, 20-21Hz a fentiekkel.
be=14Hz, mért=14Hz/14Hz.
be=7Hz, mért=6Hz/6HZ.
Tudom, hogy nem kell csodákat várjak a belső oszcillátortól és az ahhoz való számolástól, de azt nem értem, hogy egyes értékeknél pontos a mérés, míg másoknál túl nagy eltérés van (25Hz/20Hz).
Így oldottam meg:
  1. #pragma vector = TIMER0_A1_VECTOR
  2. __interrupt void TIMER0_A1_ISR (void)
  3. {
  4.         switch(TA0IV)
  5.         {
  6.         case TA0IV_NONE: break;
  7.         case TA0IV_TACCR1: break;
  8.         case TA0IV_TACCR2:
  9.                 if (TA0CCTL2 & CCI)
  10.                 {
  11.                         freq_= 0;
  12.                         freq_ = tulcs;
  13.                         n_capture = TACCR2;
  14.                         freq_ += n_capture - o_capture;
  15.                         capture_array[count++] = freq_;
  16.                         if(count==16)
  17.                         {
  18.                                 count=0;
  19.                                 cap=1;
  20.                         }
  21.                         o_capture = n_capture;
  22.                         tulcs=0;
  23.                 }
  24.                 break;
  25.         case TA0IV_TAIFG:
  26.                 tulcs += 65536;
  27.                 break;
  28.     default:    break;
  29.         }
  30. }
A hozzászólás módosítva: Márc 15, 2016
(#) mechanika hozzászólása Márc 16, 2016 /
 
Sziasztok!

Letöltöttem ezt. majd kicsomagoltam a C:\Program Files\energia-0101E0017\examples könyvtárba.
Amikor futtatom ezt a hibaüzenetet kapom:
Idézet:
ds1307.cpp:5:20: fatal error: RTClib.h: No such file or directory
compilation terminated.”

Valaki segítene, hogy mit kell tenni hogy működjön?
Köszönöm!
(#) icserny válasza mechanika hozzászólására (») Márc 16, 2016 /
 
Szerintem a vázlatfüzetben lévő libraries (nálam c:/Felhasználók/nevem/Documents/Energia/libraries) almappába kellene tenni - legalábbis a régebbi Energia kiadásoknál, meg az Arduino IDE esetében így működik.

Ezen kívül az is lehet, hogy a csomagod nem tartalmazza a ds1307 kezeléséhez szükséges programkönyvtárat, akkor azt külön kell beszerezni.

Arduinohoz én inkább az Adafruit kiadású RTClib-et töltöttem le, abban benne van háromféle RTC modul kezelése is.
(#) icserny válasza mechanika hozzászólására (») Márc 16, 2016 /
 
Letöltöttem az általad megadott címről github.com/elpaso/rtclib) az rtclib-master.zip csomagot, kibontottam a c:/Users/cserny/Energia/libraries mappába. Az így létrejött rtclib-master almappanevet átneveztem rtclib névre. Ezután annak az examples/ds1307 mintapéldája első pöccre lefordult.

Lényeg az, hogy nem kell hozzá más csomagot letölteni, ha a DS1307, DS1388, PCF8563, BQ32000 RTC-k közül valamelyikkel beéred. (DS3221 támogatást nem látok benne, de ez legyen az én gondom...)
(#) mechanika válasza icserny hozzászólására (») Márc 17, 2016 /
 
Nagyon köszönöm!
(#) mechanika válasza icserny hozzászólására (») Márc 19, 2016 /
 
Kicsomagoltam, ahoygyan írtad és nem indul el az energia.
Ha kiveszem a mappából a kicsomagolt könyvtárat elindul.
(másik gépen is próbáltam ugyan az)
Csatolom a hibaüzenet képét.
Valakinek volt már ilyen hibája?
(#) icserny válasza mechanika hozzászólására (») Márc 19, 2016 /
 
Volt, igen, az Energia újabb változataival. Hasonló okok miatt én megmaradtam a régi 10-es vagy a 12-es Energia kiadásnál.
(#) mechanika válasza icserny hozzászólására (») Márc 19, 2016 /
 
Lecseréltem 12-re,
most legalább már elindul.
A hibaüzenet:
Idézet:
ds1307.ino:3:20: fatal error: RTClib.h: No such file or directory
compilation terminated.”

A C:\Users\user\Documents\Energia\libraries\ mappában van az RTClib.h

Hátha valamit rosszul csináltam:
1. Letöltöttem a 12-es verziót
2. kicsomagoltam C:\programfiles-ba
3. A C:\Users\user\Documents\Energia\libraries\ mappába kicsomagoltam a letöltött zip-et és átneveztem RTClib-re.

??
(#) mechanika válasza mechanika hozzászólására (») Márc 19, 2016 /
 
Lefordult!

Még egyszer végigcsináltam, nem tudom a hiba okát!
Köszönöm a segítséget Icserny!
(#) icserny válasza mechanika hozzászólására (») Márc 20, 2016 /
 
Néha az Energia is olyan, mint Bill Gates autója: ha nem működik, ki kell szállni belőle, és újra be kell ülni.
(#) vottokar hozzászólása Márc 20, 2016 /
 
Az elmúlt időszakban nem igazán volt idő foglalkozni az MSP-s terveimmel, de az eheti hosszú délutános szakomon eldöntöttem, hogy igyekszem befejezni a forrólevegős állomásomat. Elővettem a launchpadot meg a még maradt plusz 2553-omat és nekiálltam a "programozásnak". Két nap után oda jutottam, hogy már azok a funkciók is hibásan működtek, amik a nyáron gond nélkül éles használatban jók voltak. Hirtelen felindulásból lefordítottam az eredeti verziót és beraktam az állomásba a vezérlőt. Így is rossz volt. A kijelzés szellemképes volt bizonyos esetekben, a többlépcsős menü össze vissza működött. Elgondolkodtam, hogy mi is változott nyár eleje óta. Csak az Energiát frissítettem 1.2-ről egészen 1.7-ig. Nosza fordítás a még fennlevő 1.2-vel és a hibák eltűntek. Utána figyeltem meg, hogy ugyanabból a forrásból teljesen eltérő hosszú programot fordít a két verzió. Mindent alapon használtam nem is tudom ,hogy miként lehet-e egyáltalán állítani a fordítási opciókat.
Azt hiszem maradok az 1.2-nél és ezzel fejezem be a "művemet".
(#) szitko hozzászólása Nov 19, 2016 /
 
Sziasztok.
2553-as Timer A0 problémám van.
Port megszakításban beállítom a Timer A0-t felfele számolásra adott értékig (CCR0), ami megy szépen, csak a kezdetekkel van baj.
Ahogy kiadom a Timer megszakítás parancsot, számolás nélkül lefut egyszer a Timer megszakítás rutin és nem értem miért.
Nem úgy kéne, hogy elszámol CCR0-ig és akkor lesz megszakítás?
  1. // Timer A0 interrupt service routine
  2. #pragma vector=TIMER0_A0_VECTOR
  3. __interrupt void Timer_A (void)
  4. {
  5.         if(wait==0){
  6.  
  7.         P1OUT ^= BIT4;
  8.         .
  9.         .
  10.         rutin.....
  11.         .
  12.         count--;
  13.         if(count==0)
  14.         {
  15.                 count=11;
  16.                 CCTL0 &= ~CCIE;
  17.                 P1IE |= BIT0;
  18.             P1IFG &= ~BIT0;
  19.             ser=1;
  20.             P1OUT &= ~BIT4;
  21.         }
  22.         }
  23.         wait=0;
  24. }
  25.  
  26. // Port 1 interrupt service routine
  27. #pragma vector=PORT1_VECTOR
  28. __interrupt void Port_1(void)
  29. {
  30.         TACTL = TASSEL_2 + MC_1 + TACLR;
  31.         CCTL0 |= CCIE;
  32.         wait=1;
  33.         P1IE &= ~BIT0;
  34.         P1IFG &= ~BIT0;     // P1.4 IFG cleared
  35. }
A "wait" változót azért tettem be, hogy a fent leírt hibát kiküszöböljem.
(#) SBahadurD válasza szitko hozzászólására (») Nov 20, 2016 /
 
Mielőtt engedélyezed a timer megszakítást, töröld a megszakítás flagjét. A CCTL0 |= CCIE; sor előtt.
(#) szitko válasza SBahadurD hozzászólására (») Nov 20, 2016 /
 
Köszönöm!
Abban a hitben voltam, hogy alapértelmezetten törölve van, de tévedtem.
(#) sanca29 hozzászólása Dec 14, 2016 /
 
Sziasztok, látom itt némelyik fórumtárs nagyon profi a mikrovezérlő terén, lenne egy kérdésem adott egy lipo 4s akku benne egy MSP430 mikrovezérlő, hogy lehetne azt törölni ha másik cellát rakok bele ugyan is megjegyzi a régi cella töltötségét ,állapotát esetleges cella hibákat maga a smart akku panel rendelkezik egy sda, scl portal, ezen keresztül meg lehetne oldani?
(#) Lucifer válasza sanca29 hozzászólására (») Dec 17, 2016 /
 
A QFN tokos az MSP430? Mert a másik az egy Texasos fuel gauge IC nem mikrokontroller. Vagyis de csak máshogy.
(#) sanca29 válasza Lucifer hozzászólására (») Dec 17, 2016 /
 
igen a a kocka a MSP430 középtájt pedig egy BQ30Z55 jo kis pdf amit linkeltél akár a megoldás is benne lehet csak az i2c interface nem tudni mi lehet az akku és a pc közt erre a progira gondoltam de ez nagyon kínai :

software
A hozzászólás módosítva: Dec 17, 2016
Következő: »»   135 / 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