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   120 / 139
(#) kisedison válasza martonroli hozzászólására (») Dec 23, 2013 /
 
Erre teljesen felesleges lenne msp-t kötni, persze függ ez attól hogy mire akarod használni. Viszont elég behatárolt a dolog. Kinai távirányitós autók vannak ezekkel tele. Kell hozzá az adó ic is különben azon kivül hogy beletenyerelj a lábaiba, nem sokra jó..
(#) martonroli hozzászólása Dec 24, 2013 /
 
Az adó ic is megvan TX6C, és azt esetleg meglehetne hogy msp-vel összekötve az rx6c-t azon keresztül vezérelne 3db dc motort?Vagy ez csak adó-vevő dologgal működik?
(#) Kovabe válasza martonroli hozzászólására (») Dec 24, 2013 /
 
Szia
Totál bolondság ait szeretnél, ezek a kimenetek az IC-n csak kontaktust adnak (megy, nem megy) és ráadásul 2 irányt tud. A modellező topikban találsz olyan személyt aki már találkozott ilyen IC-vel.
(#) kisedison hozzászólása Dec 24, 2013 /
 
Ezek az ic-k csak arra jók amire megcsinálták. Szabályozni se lehet, ahogy előttem irták. Csak előre hátra jobbra balra aztán kész. Nem olyan mint egy rendes rc rendszer. De ha csak ki-be akarsz kapcsolni 3 DC motort (gondolom kefés) akkor arra jó, viszont semmi szükség MSP-re elég 3 nyomógomb. Viszont az IC nem hajtja meg a motorokat közvetlenül, kell valami tranyós végfokozat.
(#) uli hozzászólása Dec 25, 2013 /
 
Sziasztok!
Egy egyszerű kérdésem lenne felétek:
Injektort szeretnék vezérelni. Ehhez az kell, hogy interrupt hatására a timer elinduljon, taccr1-ig magas szinten legyen, utána pedig alacsony a következő interruptig., amikor is újra indul az előző folyamat.
Amire gondoltam:

  1. P1SEL |= BIT2;                                                  // P1.2 to TA0.1
  2.   TACTL = TASSEL_2 + MC_1 + ID_0 + TACLR;    // smclk, up mode, 1/1 div, reset
  3.   CCTL1 = OUTMOD_5;                                        // CCR1 reset mode
  4.   TACCR0 = 65499;            
  5.   TACCR1 = 0;
  6.  
  7. //... program, kiszámolja a Tinj értékét és sok mást...
  8.  
  9. #pragma vector=PORT1_VECTOR
  10. __interrupt void Port_1(void) {
  11.   TACCR1 = Tinj;           // bef. idő
  12.   TACTL |=  TACLR;       // reset  
  13.   P1IFG &= ~BIT3;       // P1.3 interrupt flag del


Ami igazából kétséges, vagyis nem tudom jó-e:
Az outmod5 ugye reseteli a timert, ha elérte a TACCR1-et a számláló, és addig úgy tartja, amíg másik outmod-ot nem választunk (ezt olvastam). Az interruptnál elég lehet, ha resetelem a timert, vagy tényleg másik outmodot is választanom kell, és csak akkor indul el a számláló? Jó ez így szerintetek? Vagy ki hogy valósítaná meg?
Köszi!
(#) icserny hozzászólása Dec 27, 2013 /
 
A CCSv6 Texas Instruments Wiki honlap alján található gombra kattintva letölthető a Code Composer Studio v6.0 bétaverziója. Ebben többek között az alábbi újdonságok vannak:

- RedHat MSP430-GCC ingyenes fordító, nyomkövetési támogatással
- Energia vázlatok (*.ino projektek) importálása, fordítása és debugolása

Telepítésnél vigyázni kell, mert csak hálózati telepítés van, ez meg folyton pofázik, ha be van kapcsolva a Windows (vagy más) tűzfal. Külön ügyelni kell, hogy a telepítés konfigurálásánál az utolsó lapon az MSP430-GCC fordító is be legyen pipálva (nekem csak a második telepítésnél sikerült felrakni).
A hozzászólás módosítva: Dec 27, 2013
(#) kisedison hozzászólása Dec 27, 2013 /
 
Megjelent az új Energia is. Bővült a támogatott LaunchPadok listája, és jóval több minta kód került bele. (Főleg a Wi-Fi-hez, aminek örülök). Itt lehet letölteni az újat.
(#) kisedison hozzászólása Dec 27, 2013 /
 
SIkerült működésre bírni a HMC5883 magnetométert. Küldi szépen folyamatosan az x, y, z értékeket. Valaki le tudná ide írni hogy hogyan lehetne az értékekből (x,y) kiszámolni a szöget? É=0° , K=90°, stb..
(#) icserny válasza kisedison hozzászólására (») Dec 27, 2013 /
 
Ezen az oldalon van tutorial és mintapélda (Arduino-hoz).
(#) kisedison válasza icserny hozzászólására (») Dec 27, 2013 /
 
Az északot jól mutatja hogy 0°, viszont ahogy kezdek fordulni vele akkor jönnek a gondok. Amikor dél felé állok akkor már 270° körüli értéket mutat. Itt a kód hátha valaki előbb megtalálja a hibát:
  1. #include <Wire.h>
  2. #include <LiquidCrystal.h>
  3. LiquidCrystal lcd(P2_0, P2_1, P2_2, P2_3, P2_4, P2_5);
  4. #define address 0x1E //0011110b, I2C 7bit address of HMC5883
  5.  
  6. void setup(){
  7.   //Initialize Serial and I2C communications
  8.   Serial.begin(9600);
  9.   lcd.begin(16,2);
  10.   Wire.begin();
  11.  
  12.   //Put the HMC5883 IC into the correct operating mode
  13.   Wire.beginTransmission(address); //open communication with HMC5883
  14.   Wire.write(0x02); // mode register
  15.   Wire.write(0x00); //continuous measurement mode
  16.   Wire.endTransmission();
  17. }
  18.  
  19. void loop(){
  20.  
  21.   int x,y,z; //triple axis data
  22.  
  23.   //Tell the HMC5883 where to begin reading data
  24.   Wire.beginTransmission(address);
  25.   Wire.write(0x03); // register 3, X MSB register
  26.   Wire.endTransmission();
  27.  
  28.  
  29.  //Read data  each axis, 2 registers per axis
  30.   Wire.requestFrom(address, 6);
  31.   if(6<=Wire.available()){
  32.     x = Wire.read()<<8; //X msb
  33.     x |= Wire.read(); //X lsb
  34.     z = Wire.read()<<8; //Z msb
  35.     z |= Wire.read(); //Z lsb
  36.     y = Wire.read()<<8; //Y msb
  37.     y |= Wire.read(); //Y lsb
  38.   }
  39.  
  40.   //Print out values of each axis
  41.   Serial.print("x: ");
  42.   Serial.print(x);
  43.   Serial.print("  y: ");
  44.   Serial.print(y);
  45.   Serial.print("  z: ");
  46.   Serial.println(z);
  47.   lcd.clear();
  48.   lcd.print("X ");
  49.   lcd.print(x);
  50.   lcd.print(" ");
  51.   lcd.print("Y ");
  52.   lcd.print(y);
  53.  
  54.   //------------------------------------------------------------------
  55.  
  56.   float heading = atan2(y, x);
  57.  
  58.   // Correct for when signs are reversed.
  59.   if(heading < 0)
  60.     heading += 2*PI;
  61.    
  62.   // Check for wrap due to addition of declination.
  63.   if(heading > 2*PI)
  64.     heading -= 2*PI;
  65.    
  66.   // Convert radians to degrees for readability.
  67.   float headingDegrees = heading * 180/M_PI;
  68.   lcd.setCursor(0,1);
  69.   lcd.print("Fok: ");
  70.   lcd.print(headingDegrees);
  71.  
  72.   //-------------------------------------------------------------------
  73.  
  74.   delay(250);
  75. }
(#) szitko hozzászólása Dec 29, 2013 /
 
Egy "kis" év végi akció a Texas Instruments-nél. 54%-os kedvezménnyel adják a:
eZ430-CHRONOS-868 (868MHz - Europe and India)
eZ430-CHRONOS-915 (915 MHz - N. and S. America)
MSP-EXP430FR5739
A megrendelésnél, a fizetés előtt a "MSP_Holiday" kuponkódot kell megadni az 54%-os kedvezmény érvényesítéséhez!
Én most rendeltem egy eZ430-CHRONOS-868-at, pusztán kíváncsiságból. Hogy mire lesz jó, az időmérésen kívül, még nem tudom, mert nem foglalkoztam még vele.

Ja! A 433MHz-es órára nem jó a kupon!
A hozzászólás módosítva: Dec 29, 2013
(#) icserny hozzászólása Dec 29, 2013 /
 
Az MSP430F5529 Launchpad kártya debuggere tudja az ún. semihosting funkciót is, s ez a printf() függvény alapértelmezett kimenete.

Ez magyarul azt jelenti, hogy hardveres nyomkövetés közben a printf() függvénnyel kiiratott dolgok a CCS Console ablakában jelennek meg (ezzel is segítve a nyomkövetést). A dologban az a szép, hoyg mindez a nyomkövető csatornán keresztül jön, s sem soros portot nem kell konfigurálni, sem I/O lábat nem foglal le (a nyomkövetéshez használt SBW lábakon kívül).

A használat módját és a szükséges beállítást ezen a honlapon ismertetik részletesen.
(#) szitko válasza icserny hozzászólására (») Dec 29, 2013 /
 
Ez vajon az *.ino Energia projektek debug módjában is működhet?
(#) icserny válasza szitko hozzászólására (») Dec 30, 2013 /
 
Idézet:
„Ez vajon az *.ino Energia projektek debug módjában is működhet?”
Nem tartom valószínűnek mert akkor más fordító és más könyvtárak vannak használatban.
(#) uli válasza uli hozzászólására (») Jan 2, 2014 /
 
Senki?
(#) SBahadurD válasza uli hozzászólására (») Jan 2, 2014 /
 
Szerintem a reset előtt fel kell emelni a lábat, mert a reset hatására nem fogja állítsd outmod0-ba és állítsd be szoftveresen a lábat.
(#) t0bi válasza kisedison hozzászólására (») Jan 3, 2014 /
 
Sokat agyaltam én is, míg sikerült megértenem a compass lelkivilágát, de sikerült a végén . Rajzoltam egy kis elvi segítséget, amiből aztán meg lehetett írni az algoritmust (kép), bár már elég régen volt a fűnyíró topicban. Látszik, hogy x és y értékei hogyan változnak az irány függvényében, ennek alapján 3 különböző részre lehet osztani a 360 fokot 8 db 45 fokos szeletben. Ami meghatározó, hogy x-nek és y-nak milyen az előjele, valamint melyik nagyobb a másiknál. Így három sorba le lehet írni az algoritmust.
Itt vannak utalások a forrásokra:Bővebben: Link
Itt pedig a programrész:Bővebben: Link

comp 001.JPG
    
(#) kisedison válasza t0bi hozzászólására (») Jan 3, 2014 /
 
Köszönöm szépen. Meg látom mire jutok vele. Azóta már sikerült É-től K-ig 420°-ot is mérni
(#) Zsolt32 hozzászólása Jan 3, 2014 /
 
Sziasztok!

Egy laikus kérdésem lenne, egy MSP430 mikrovezérlő el tudja látni ugyan azt a feladatot mint egy PIC?

Üdv.
(#) kisedison válasza Zsolt32 hozzászólására (») Jan 3, 2014 /
 
Én mint "fanatikus azt mondom hogy még jobban is. De igen, persze hogy eltudja, függ ez a felhasználástól is de szerintem igen. Azért vannak itt nálam okosabbak, szóval várd meg ők mit mondanak.
(#) icserny válasza Zsolt32 hozzászólására (») Jan 4, 2014 /
 
Idézet:
„egy MSP430 mikrovezérlő el tudja látni ugyan azt a feladatot mint egy PIC?”
Az MSP430 és a PIC is egy termékcsalád, amelyben vannak butább és nagyobb tudású típusok. Egy adott feladathoz nagy valószínűséggel minkét termékcsaládban találsz alkalmas típust.
(#) Zsolt32 hozzászólása Jan 4, 2014 /
 
Értem, köszönöm mindkettőtöknek.
(#) idlob válasza szitko hozzászólására (») Jan 4, 2014 /
 
Szia!

Bár gondolom azóta már tuljutottál valahogy a dolgon, de kíváncsivá tettél, tényleg arra gondolok-e amire Te gondolsz.
Ha jól értem, Value_2 egy logikai érték, amitől az függ, hogy kiíratod-e Value_1 értékét, ill. hogy kigyulladjon-e a LED. Ez idáig annyi lenne, hogy:

  1. digitalWrite(LedPin, Value_2);
  2. if(Value_2 != 0){
  3.         myGLCD.print("F", LEFT, 24);
  4.         myGLCD.printNumI(Value_1, 6, 24);
  5. }


Gondolom a probléma igazából nem is a fenti, hanem, hogy Value_1-től függően az "F" betű helyett mást akarsz írni, ezért kellene a switch-case.
Ha valóban csak egy karaktert akarsz kiírni, akkor egész egyszerűen meg lehet oldani. Felveszel egy karakter tömböt, amiben egymás után következnek a lehetséges betűk, majd utána Value_1-el "megcímzed" a kiírni szándékozott karaktert. Így az ugró utasítások nagy részére nem lesz szükség.

  1. char foo[] = "ABCDEFGHIJKLMNOPQ";
  2.  
  3. digitalWrite(LedPin, Value_2);
  4. myGLCD.clrRow(3, 0, 50);
  5. if(Value_2 != 0){
  6.         myGLCD.print(foo[Value_1], LEFT, 24);
  7.         myGLCD.printNumI(Value_1, 6, 24);
  8. }


Ez Value_1 = 0 esetén "A"-t, Value_1 = 16 esetén "Q"-t ír ki.

Ez akkor ilyen egyszerű, ha a myGLCD.print() pontosan egy char típusú karaktert vár a bemenetén (és nem 0 terminált karakterláncot!). Ha a függvény nem ilyen és nincs kéznél alkalmas másik, akkor meg kell tákolni a tömb definíciót és a kiíratásnál az indexelést tartalmazó sorokat:

  1. char foo[] = "A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N\0O\0P\0Q"; //Az utolsó karakter kivételével mindegyik után kell tenni egy "\0"-t.
  2. myGLCD.print(&foo[2 * Value_1], LEFT, 24); //Mivel minden második elem egy lezáró 0, ezért a Value_1 kétszerese fog érvényes betűre mutatni. Az & a karakterre mutató mutatót adja vissza.


Arra is van (egy lényegében semmivel sem bonyolultabb) megoldás, ha nem csak egy betűt akarsz kiírni, de egyenlőre nem szaporítom a szót, mert lehet nem is a kérdésre válaszoltam. Ha érdekel, majd leírom.

üdv,
b
A hozzászólás módosítva: Jan 4, 2014
(#) Readdeo hozzászólása Jan 4, 2014 /
 
Üdv!
Sikerült megölnöm egy 2553-ast. Hol lehet ilyet rendelni? A TI oldalán nincs a launchpadba való verzió, máshol meg csak ebay-en találtam 1200Ft-ért. Ez nekem kicsit sok érte.
(#) szitko válasza idlob hozzászólására (») Jan 4, 2014 /
 
Nem, nem jó! Igaz megoldottam a problémát, de attól függetlenül nem tetszik.
Tehát, adott egy függvény. Két ismeretlen változó érkezik a függvénybe, "value_1, value_2".
A "value_2" változó, vagy nulla, vagy nagyobb nullánál, de én csak nullára vizsgálom. A "value_1" külső behatásra 0 és 16 közötti értéket vesz fel. Én azt szerettem volna elérni, hogy ne keljen a switch/case szerkezettel vizsgálni a value_1-et, mert az 17db case ágat jelent. Minden case ágban ugyan az szerepel, kivéve a 0 ágban, ahol bekapcsolok egy ledet.
Most így néz ki a program, csak a második case ágat meg kell szorozni 16-al, (case 1,2,3..:
  1. switch(Value_1){
  2.     case 0:
  3.       digitalWrite(f0LedPin, Value_2);
  4.       myGLCD.clrRow(3, 0, 12);
  5.       if(Value_2 != 0){
  6.         myGLCD.print("F", LEFT, 24);
  7.         myGLCD.printNumI(Value_1, 6, 24);
  8.       }
  9.       break;
  10.     case 1: myGLCD.clrRow(3, 12, 24);
  11.       if(Value_2 != 0){
  12.         myGLCD.print("F", 12, 24);
  13.         myGLCD.printNumI(Value_1, 18, 24);
  14.       }
  15.       break;

Tehát az lcd-re a Value_1 érték lesz kiírva decimálisan ami 0-16 között van.
(#) icserny válasza Readdeo hozzászólására (») Jan 4, 2014 /
 
Idézet:
„A TI oldalán nincs a launchpadba való”

Már hogyne volna! MSP430G2553IN20 a DIP tokozású verzió. Bővebben: Link
(#) mechanika válasza Readdeo hozzászólására (») Jan 4, 2014 /
 
Szia!

Én itt rendeltem:

itt rendelem

előtte itt kikeresem

pár nap alatt kihozzák, ráadásul Bp. területén díjmentesen.
A TI-től mennyi idő alatt szokott ideérni, és árban milyenek, szállításért kell fizetni?
A hozzászólás módosítva: Jan 4, 2014
(#) idlob válasza szitko hozzászólására (») Jan 4, 2014 /
 
Tehát akkor a kiírt karakter mindig ugyan az, csak a kiíratások pozíciója változik.
Ebben az esetben azt tudod tenni, hogy megpróbálsz valamilyen matematikai összefüggést találni Value_1 és a pozíciók között, és azokat adod át a kiíró függvényeknek.
Pl. nekem úgy tűnik, hogy myGLCD.clrRow első argumentuma mindig 3, tehát nem kell bántani, a második Value_1 tizenkétszerese, a harmadik 12 + Value_1 tizenkétszerese. A myGLCD.print-nél az első és haramdik konstans, a másdoiknál nem tudom mi a LEFT, de ha nulla, akkor lehet helyette Value_1 tizenkétszerese. A myGLCD.printNumI-nél talán jó a 6 + Value_1 tizenkétszerese összefüggés.

  1. static const int foo = 12;
  2.  
  3. if(!Value_1) digitalWrite(f0LedPin, Value_2);
  4. myGLCD.clrRow(3, i * foo, (i + 1) * foo);
  5. if(Value_2 != 0){
  6.         myGLCD.print("F", i * foo, 24);
  7.         myGLCD.printNumI(Value_1, 6 + i * foo, 24);
  8. }


Ha nincsenek ilyen összefüggések, vagy nagyon számításigényesek, akkor az korábban írtak alapján itt is használhatsz LUT-okat.

  1. foo[] = {0, 12, ..., 98};
  2. bar[] = {12, 24, ..., 42};
  3. baz[] = {LEFT, 12, ..., 32};
  4. qux[] = {6, 18, ..., 67};
  5.  
  6. if(!Value_1) digitalWrite(f0LedPin, Value_2);
  7. myGLCD.clrRow(3, foo[Value_1], bar[Value_1]);
  8. if(Value_2 != 0){
  9.         myGLCD.print("F", baz[Value_1], 24);
  10.         myGLCD.printNumI(Value_1, qux[Value_1], 24);
  11. }


Na, meg persze előfordulhat, hogy az egyikre tudsz matematikai megoldást adni, a másikra meg csak LUT-ot tudsz használni.
A hozzászólás módosítva: Jan 4, 2014
(#) szitko válasza idlob hozzászólására (») Jan 5, 2014 /
 
Köszi.
Tulajdonkép a számítás egyszerű. Egy nokia lcd-ről van szó amin 5x7-es karakter vannak definiálva. Az értékek kiírása, csak egy sorban történik egyenlőre, tehát egyenlőre a sorváltással nem kell foglalkozni. Most azon gondolkoztam, hogy egy egyszerű feltétellel és egy kis számítással meg lehet oldani az egészet.
(#) hotau hozzászólása Jan 11, 2014 /
 
Szép napot!
Lenne egy olyan kérdésem, hogy szeretnék csinálni nyomógombos led vezérlést és amikor Launch Pad-on letesztelem, nem akar úgy működni, ahogy én szeretném.
Mit is szeretnék? Amikor lenyomom, a gombot világít a led ha fölengedem, akkor nem világít.
Kipróbáltam 2 kodot is, ami szerintem jó lenne, de azok se működnek az első kódnál a zöld led világít de nyomogombra nem reagál semmit. A második kódnál pedig nem csinál semmi semmit.

Kód 1 :
  1. void main(void) {                  
  2.    WDTCTL = WDTPW + WDTHOLD;        // Stop watchdog timer
  3.    P1DIR |= 0x40;                   // Set P1.6 (green LED) to output direction, 1 is output
  4.    P1OUT &= ~0x40;                  // Set the green LED off
  5.    P1DIR &= ~0x08;                  // Port 1 P1.3 (push button) as input, 0 is input
  6.    P1SEL &= ~0x08;                  // Select Port 1 P1.3 (push button), 0 selects
  7.    P1REN |=  0x08;                  // Enable Port 1 P1.3 (push button) pull-up resistor
  8.         while( 1 ) {
  9.        if( (P1IN & 0x08) == 0)      // Push button down when bit 3 == 0
  10.           P1OUT |= 0x40;            // Set green LED on when button down
  11.                    else
  12.           P1OUT &= ~0x40;           // Set green LED off when button up
  13.  
  14.     }
  15. }


Kód 2 :

  1. #include <msp430g2553.h>
  2. void main(void) {
  3.    WDTCTL = WDTPW + WDTHOLD;        // Stop watchdog timer
  4.    P1OUT |= 0x40;                   // Set the LED on
  5.    P1DIR |= 0x40;                   // Set P1.6 (LED) to output direction, 1 is output
  6.    P1DIR &= ~0x08;                  // Port 1 P1.3 (push button) as input, 0 is input
  7.    P1REN |=  0x08;                  // Enable Port 1 P1.3 (push button) pull-up resistor
  8.    P1SEL &= ~0x08;                  // Select Port 1 P1.3 (push button), 0 selects
  9.         while( (P1IN & 0x08) == 0x08 )   // Wait while button up
  10.        P1OUT ^= 0x40;               // Toggle LED
  11.    P1OUT &= ~0x40;                  // Set LED off
  12. }


A segítséget előre is köszönöm.
Következő: »»   120 / 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