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   55 / 139
(#) uli válasza colosseum hozzászólására (») Máj 3, 2012 /
 
  1. // Stop watchdog timer to prevent time out reset
  2.   WDTCTL = WDTPW + WDTHOLD;
  3.  
  4.  
  5.   P1DIR &= ~BIT3;   //p1.3 bemenet
  6.   P1DIR |=  BIT0;   //P1.0 kimenet
  7.   P1DIR |=  BIT6;   //p1.6 kimenet
  8.  
  9.   P1DIR |=  BIT3;   //felhúzás eng
  10.   P1REN |=  BIT3;   //belső felhúzás
  11.   const char a=0x40;
  12.   const char b=0x01;


Be. Ezt a részt egy másik progiból másoltam, ott működött.
(#) icserny válasza uli hozzászólására (») Máj 3, 2012 /
 
Idézet:
„P1DIR |= BIT3; //felhúzás eng”

P1DIR helyett P1OUT-ot kellett volna írni! Bővebben: Link
(#) uli válasza icserny hozzászólására (») Máj 3, 2012 /
 
Átírtam, köszönöm!
Javult valamit, az első lépésben felváltva villog, utána megint csak a piros, és nem reagál a gombra.
(#) icserny válasza uli hozzászólására (») Máj 3, 2012 /
 
Idézet:
„P1OUT =BIT0;”
Az ilyeneket mellőzni kellene, mert a felhúzást lehúzásba kapcsolod át a P1OUT regiszter BIT3 helyiértékű bitjének gondatlanságból elkövetett törlése miatt!

Bit '1'-be állítása: P1OUT |= BITn;

Bit '0'-ba állítása: P1OUT &= ~BITn;

Bit átbillentése: P1OUT ^= BITn;

ahol n = 0 ... 7 lehet.
(#) szikorapéter hozzászólása Máj 3, 2012 /
 
Helló.Én azt szeretném elérni ebben a "knight rider" programmal hogy a futó led ne elhalványosodjon és a többi világítson hanem hogy mindig 1-led menjen és azzal készítse ezt az effektust.

#include "io430.h"
#include "intrinsics.h"
const char a[]={0x01,0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80};
char i;
void main(void) {
WDTCTL = WDTPW + WDTHOLD; //Letiltjuk a watchdog időzítőt
P1DIR = 0xFF; //P1 minden bitje legyen digitális kimenet
while(1) {
for(i=0; i<10; i++) {
P1OUT = a[i]; //bitminta kirakása a P1 portra
__delay_cycles(50000); //Várakozás kb. 50 ms ideig
}
i=10;
while(i) { //a ciklus addig fut, amíg i!=0 teljesül
i--; //ciklusváltozó léptetése
P1OUT = a[i]; //bitminta kirakása a P1 portra
__delay_cycles(50000); //Várakozás kb. 50 ms ideig
}
}
}

Ezt a programot átlehetne írni úgy ahogy nekem kéne?
Válaszokat előre is köszönöm!>
(#) icserny válasza szikorapéter hozzászólására (») Máj 3, 2012 /
 
Nálad VDD a LED-ek közös pontja? Ha jól értem, hogy a mintaprogrammal majdnem minden LED ég egyszerre...
Ez esetben írd így:
  1. P1OUT = ~a[i]; //bitminta kirakása a P1 portra


Ha zavar, hogy egynél több (max 3) LED ég, akkor a bitminta legyen:
  1. const char a[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
, a ciklushatár pedig 10 helyett 8 legyen!
(#) colosseum válasza icserny hozzászólására (») Máj 3, 2012 /
 
nem akarok kötekedni , de ha egyszer valami bemenet akkor ott igazából minek is PxOUT-al bajlódni?

Ha már itt tartunk, és IAR-t használsz akkor javaslom:
PxDIR_bit.Px = 0 v 1;
PxOUT_bit.Px = 0 v 1;
PxIN_bit.Px = 0 v 1;
PxREN_bit.Px = 0 v 1;
es stb amilyen registerek vannak, ha csak 1 lábat szeretnél vezérelni.

Mindjárt megnézem a programod nálam egy padon Uli.
(#) icserny válasza colosseum hozzászólására (») Máj 3, 2012 /
 
Idézet:
„nem akarok kötekedni , de ha egyszer valami bemenet akkor ott igazából minek is PxOUT-al bajlódni?”
Belső fel/lehúzásnál így lehet beállítani, hogy le vagy fel.
(#) colosseum válasza icserny hozzászólására (») Máj 3, 2012 /
 
Mindig tanul az ember Köszönöm.
(#) szikorapéter válasza icserny hozzászólására (») Máj 4, 2012 /
 
Hát én még annyira nem értek hozzá hogy hogyan és hova mit kell beírni azért is kértem a segítséget.Ugyanazokat keressem meg a szövegben és cseréljem ki?
(#) icserny válasza szikorapéter hozzászólására (») Máj 4, 2012 /
 
Mielőtt bármit módosítanál, válaszold meg a kérdésem, hogy tisztázzuk: milyen kapcsolással dolgozol!
(#) Smithy87 hozzászólása Máj 4, 2012 /
 
Üdv!

Láttam valahol egy hasonló fejlesztő kitet mint a launchpad csak F sorozatra. Nem tudna valaki egy linket adni hozzá? mert én nem találom
(#) Smithy87 válasza Smithy87 hozzászólására (») Máj 4, 2012 /
 
Közben meg találtam tárgytalan.
(#) icserny válasza Smithy87 hozzászólására (») Máj 4, 2012 /
 
Ami a Launchpad-hoz hasonló, az FR5xxx sorozat (FRAM). Bővebben: Link

Az MSP430F2013-hoz egy másfajta olcsó KIT-ről tudok: EZ430-F2013
(#) szikorapéter válasza icserny hozzászólására (») Máj 4, 2012 /
 
Hát p1.0-1.7-ig vannak a led-ek kirakva (8db).Azok másik ága meg megy a negatív-ra.A reset le van kötve a pozitív ágra egy 15k-s ellenálláson keresztül.Ennyi a kapcsolás.
(#) icserny válasza szikorapéter hozzászólására (») Máj 4, 2012 /
 
Akkor nem értem az alábbi mondatodat:
Idézet:
„Én azt szeretném elérni ebben a "knight rider" programmal hogy a futó led ne elhalványosodjon és a többi világítson”
Ha a katódok vannak közösítve a földön, akkor csak az(ok) a LED(-ek) világít(anak), ahol '1', azaz magas szint a kimenet. Az általad bemásolt mintapéldában pedig csak 1, 2 vagy max. 3 db LED világít egyszerre.

Akkor tulajdonképpen mi a kérdésed?
(#) Smithy87 hozzászólása Máj 5, 2012 /
 
Hello!

Olyan kérdésem lenne, hogy a Capture/compare regiszterek használatánál, Timer_A esetében, a TACCRx regiszter honnan fogja tudni, hogy én most capture vagy compare regiszterként akarom használni?
(#) szitko válasza Smithy87 hozzászólására (») Máj 5, 2012 /
 
Idézet:
„honnan fogja tudni, hogy én most capture vagy compare regiszterként akarom használni?”

Onnan, hogy megmondod neki a TACCTLx regiszter segítségével.
FUG 374. oldal! TACCTLx -> CAP 0 or 1.
(#) Smithy87 hozzászólása Máj 5, 2012 /
 
  1. P1DIR |= BIT6;     // digitális kimenet
  2.          
  3.          P1SEL |= BIT6;            // Timer0_A kimenet
  4.          TA0CCR0 = 100;          // periódus   Itt csinálok 40KHz et
  5.          TA0CTL = TASSEL_2 | MC_1 | TACLR | TAIFG;
  6.          //Timer a forrása SMClk  felfelé számol TACCR0 értkig
  7.          TA0CCTL1 = CAP_0;    //  compare módba állítva
  8.          TA0CCR1 = 12;           // Capture regiszter értéke
  9.  
  10.  
  11.  P1DIR &= ~BIT1;
  12.  
  13. TA0CTL2 = TASSEL_2 | MC_1 | TACLR | TAIE |TAIFG;   //Timer forrása SMCLK Felfelé számol interrupt engedélyezve interrupt flag szintén
  14. TA0CCTL2 = CM_1 | CCI0A | CSC | CAP_1 | CCIE_1;
  15. result = TACCR2;
  16. tav = result*2;


Jól gondolom,hogy a fenti kód az SMCLK beállított 4MHz- éből csinál egy 40Khz- jelet a timer 1 felhasználásával? Aztán ebből egy 12 impulzusos burstöt állít elő.
A másik részen pedig a P1 porton ami a vezérlő 3 as lába bemenetnek állítom capture módban és várom, hogy valami jel érkezzen. És ha bejött letárolom a result változóban? Roppant égető lenne ez a program részlet. Amennyiben nem ezt csinálja kérlek segítsetek, elérnem, hogy ezt csinálja.
(#) Smithy87 hozzászólása Máj 7, 2012 /
 
Nem sok élet van itt mostanában. De lenne egy kérdésem. Ha Sima C nyelven írom a kódot hogy tudok bele tenni asm parancsokat?
(#) icserny válasza Smithy87 hozzászólására (») Máj 7, 2012 /
 
Idézet:
„Ha Sima C nyelven írom a kódot hogy tudok bele tenni asm parancsokat?”
Többféle módon:
1. Inline assembler segítségével
  1. asm("MOV.B &P1IN,&flag");

2. Assembly-ben írt függvény meghívásával, amelyet external-ként kell deklarálni:
  1. extern int foo(void);

vagy
  1. extern int foo(int i, int j);
(#) szitko hozzászólása Máj 8, 2012 /
 
Ha feltételben figyelem a gomb lenyomást, hogy oldjam meg a prellt?
  1. if(!(P1IN & BIT3)){
  2.             __delay_cycles(20000);
  3.             while(!(P1IN & BIT3));
  4.             sz++;

Így próbáltam, de ez nem vált be, mert 2-3-at ugrik az "sz" értéke, egy gombnyomásra.
(#) Smithy87 válasza szitko hozzászólására (») Máj 8, 2012 /
 
Szerintem azért mert sorosan hajt végre a kis barátunk. Tedd a késleltetést a feltétel mögé. Minta a példaprogikban is úgy láttam volna.

Kérdés, vissza kanyarodva az ASM es kérdésemhez. Inline assembler lenne jó nekem, de nem eszi meg a kódot. Panaszkodik a regiszternévre, hogy nem tudja micsoda. Ezt hogy tudom orvosolni?
(#) Smithy87 válasza Smithy87 hozzászólására (») Máj 8, 2012 /
 
Hopp kifelejtettem, hogy nem tude valaki valami webshopot vagy boltot ahol lehet 40 kHz es kvarcot venni? kellene órajelforrásnak.
(#) szitko válasza Smithy87 hozzászólására (») Máj 8, 2012 /
 
Idézet:
„Tedd a késleltetést a feltétel mögé.”

Az nem jó. Ha már végrehajtotta az utasítást, "sz++;" minek várjak. Vagy pedig arra gondoltál, hogy a "while(!..." után rakjam a várakozást? Ott is fölösleges, mert onnan csak akkor megy tovább a program, ha magas lesz a bemenet, és szerintem akkor már nincs prell.
(#) Smithy87 válasza szitko hozzászólására (») Máj 8, 2012 /
 
Szerintem meg pont ott lesz. Amíg nem nyomod a gombot alacsony a bemenet. Amikor megnyomod magas, és közben számol ha nem késlelteted. Szerintem a while után kell. De próbáld ki 1-1 ctrl c, ctrl v.
(#) szitko válasza Smithy87 hozzászólására (») Máj 8, 2012 /
 
Idézet:
„Amíg nem nyomod a gombot alacsony a bemenet.”

Nem! Pont fordítva. Ha megnézed a programrészletet, láthatod, hogy az "if" feltétel, és a "while" ciklus is, negálva (!) van.
A feltételben megvizsgálom a P1.3-at, ami ebben az esetben magas szinten van, tehát ha nem negálnám, akkor teljesülne a feltétel. De mivel a "!" jelell pont az ellenkezőjére állítom, így hát hamis lesz a feltétel, mindaddíg, míg a P1.3 magas szinten van.
De közben megoldottam, úgy, hogy a várakozást növeltem 30ms -ra.
(#) ZsoltiD hozzászólása Máj 9, 2012 /
 
Sziasztok!
Van egy MSP430G2553 mikrovezérlőm. Szeretném a kimeneteit bővíteni. Lehet ezeket kaszkádosítani (mondjuk 2 darab MSP4...)? Vagy csak úgy, hogy két külön progi megírásával összehangolom a kettőt?
Zsolti
(#) vilmosd válasza ZsoltiD hozzászólására (») Máj 9, 2012 /
 
Peldaul a Product search segit kivalasztani a neked megfelelo labszamu, es periferiaju eszkozt. Persze azt is meg lehet csinalni, hogy ha pl 100 I/O kell akkor felraksz 10 uC-t es csinalsz hozzajuk egy halozati protokollt, amin kommunikalnak. Termeszetesen minden egysegnek sajat FW-vel kell rendelkeznie. Persze vannak sokkal egyszerubb megoldasok, pl I2C, SPI bovitok a MCHP valasztekabol, vagy 74HC595 shift regiszter kimenetek bovitesere 3 szal derottal.
(#) icserny válasza ZsoltiD hozzászólására (») Máj 9, 2012 /
 
Idézet:
„Vagy csak úgy, hogy két külön progi megírásával összehangolom a kettőt?”
Egyrészt kell a fizikai kapcsolat (UART, RS-485, SPI, I2C stb), másrészt kell szoftver is, ami értelmesen kommunikál a fizikai csatornán.

Ha csak a láb kevés, akkor inkább portbővítő, ami olyan, mintha a fenti kommunikációs egységek közül az egyiket már készen kapnád...
Következő: »»   55 / 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