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   56 / 139
(#) Smithy87 hozzászólása Máj 10, 2012 /
 
Volna egy kis gondom a g2552 soros kommunikációjával. Meg van a hardveres deffiniálásra az echo program. Azt felhasználva írtam meg a saját programomra a soros kommot. Az lenne a kérdés lényege, a kérdésemnek, hogy ha valamit betöltök a TX bufferbe azt minden egyéb instrukció nélkül elküldi a cuccos? Vagy van valami trükkje. Mert valamelyik fórum kolléga adott egy programot ami 1 byteot küld el. De a pc oldalon nem jelenik meg. Holott a debug nézertnél a TX bufferbe beíródik a szám.
(#) Smithy87 hozzászólása Máj 10, 2012 /
 
LFXT1 ről akarom szedni a cuccot ACLK hoz g2553-on de nem eszi meg a beállításokat pedig az adatlapjáról szedtem. " XTS = 0, XCAPx = 0, LFXT1Sx = 3" van írva az adatlapjára de rinyál a fordító. Ezzel a beállítással elvileg megenne 32kHz esnél nagyobb kristályt is.
(#) szitko hozzászólása Máj 11, 2012 /
 
Sziasztok.
Egy újabb kérdés pergésmentesítés ügyben.
Az alábbi kis programot, egy mechanikus encoder (kép) jeleinek a feldolgozására írtam:
  1. #include "io430.h"
  2. #include "in430.h"
  3. signed int szam=0;
  4.  
  5. int main(void){
  6.    
  7.     WDTCTL = WDTPW | WDTHOLD;                 // Stop WDT
  8.    
  9.     BCSCTL1 = CALBC1_8MHZ;                    // Kalibrált 8MHz
  10.     DCOCTL = CALDCO_8MHZ;
  11.    
  12.     P1DIR |= 0xff;
  13.     P1OUT &= ~0xff;
  14.    
  15.     P2DIR &= ~(BIT3 + BIT4);                 // P2.3 P2.4 bemenet, encoder A-B
  16.     P2REN |= (BIT3 + BIT4);                  // P2.3 P2.4 felhúzóell. bekapcs, (hátha jó)
  17.     P2OUT |= (BIT3 + BIT4);                  // felfele húzás, VCC-re
  18.     P2IE |= BIT3;                            // P2.3 megszakítás eng.
  19.     P2IFG = 0x00;                            // P2 flag törlése  
  20.     _EINT();  
  21.    while(1){
  22.        // üres
  23.    }
  24. }
  25. // ------------------------------------ P2.x megszakítás -------------------------------------------
  26. #pragma vector=PORT2_VECTOR
  27. __interrupt void encoder_Port_2(void){
  28.     _DINT();    
  29.     if(P2IFG & BIT3){
  30.         if(P2IN & BIT4){
  31.         szam--;
  32.     } else {
  33.         szam++;
  34.     }
  35.   }
  36.   P2IFG = 0x00;            // P2 flag törlése
  37.   _EINT();
  38. }

A kérdésem az lenne, hogy kell-e pergésmentesíteni az encodert, és hogy hogyan?
A program működik, ha lassan forgatom az encodert, de ha gyorsan, akkor össze-vissza számol.
Próbaképp ledeket akartam vezérelni vele, de a fent leírt hibába fulladt a dolog.
(#) putr4 hozzászólása Máj 11, 2012 /
 
Sziasztok!

Ismét lett egy kis szabadidőm így azonnal visszatértem a mikrkontroller ismerkedéséhez oda ahol abbahagytam. Icserny cikkjében a két független pwm csatornával foglalkozó cikkrészlet volt már csak hátra, így azzal kezdtem. Sajnos viszont elakadtam mivel nem értek pár sort a programban miért kell ezt nekünk csinálni vagy miért éppen ezt teszi a program.
Az addig világos, hogy szabadon fut a számlaló (TAR ami lévén hogy 16 bites 65535nél csordul túl). Azt is értem, hogy a compare toggle módjával azt szeretnénk elérni, hogy a TACCR0 beírt értékkor ne csak a kimeneti jel állapota változzon meg, hanem egy magszakításban a TACCR0-hoz való érték hozzáadásával elérjük, hogy a következő átbillenés (kimenet jelének megváltozása) ne a számláló egység túlcsordulása után következzen be hanem hamarabb. Így manipulálva a toggle üzemmódot egyedi pwm frekvenciát tudunk előállítani.
A problémám csak azzal van, hogy a megszakításban mi csak értékeket adunk hozzá a TACCR0 regiszterhez és ez egy idő után meg fogja haladni a számláló álltal maximálisan elérhető értéket (65535) vagyis egy idő után nem fog megszakítás generálódni, sőt a kimenet sem fog változni, mert a számláló nem fog ilyen értéket elérni.
Nem tudom, mennyire értelmezem jól/rosszul a program sorait, sajnos a cikk ezen írott sorai még jobban megkavarnak. Egy kis segítséget kaphatnék, hogy hol értelmezen rosszul a sorokat vagy mi az a hiányzó elem ami miatt nem értem?
(#) icserny válasza putr4 hozzászólására (») Máj 11, 2012 /
 
Idézet:
„A problémám csak azzal van, hogy a megszakításban mi csak értékeket adunk hozzá a TACCR0 regiszterhez és ez egy idő után meg fogja haladni a számláló álltal maximálisan elérhető értéket (65535) vagyis egy idő után nem fog megszakítás generálódni, sőt a kimenet sem fog változni, mert a számláló nem fog ilyen értéket elérni.”
Az igaz, hogy mindig csak hozzáadunk, de a TACCR0 és TACCR1 regiszterek éppúgy 16 bitesek, és 65535 után tűlcsordulnak, mint a TAR regiszter. Tehát az összeadás után a nagy számból egyszer újra kis érték lesz... Az összeadások végeredménye mindig a 0 - 65535 közötti tartományban mozog.
(#) icserny válasza szitko hozzászólására (») Máj 11, 2012 /
 
Csak egy PIC24 példát tudok mutatni. Abban egy Timer-rel keltett periodikus megszakításban olvasom ki az encoder állapotát (mintavételezés). Tapasztalati alapon egy bizonyos encoder esetében 5 ms-ra kellett állítani a mintavételezés gyakoriságát, hogy ne legyen adatvesztés ha gyorsabban forgatom, de maradjon pergésmentesítés is.

Mivel a WDT-t úgysem használod, esetleg azzal is lehet periodikus megszakításokat kelteni, ha beállítható vele a kívánt gyakoriság.
(#) szitko válasza icserny hozzászólására (») Máj 11, 2012 /
 
Igazából az nem zavarna, hogy egy-két lépést kihagy, mert jelen esetben nem a pontosság a fontos. Egy érték beállítónak szánom, ami LCD-n jelenik meg. Ami zavar, az az, hogyha gyorsan forgatom, nem számol. (Még régebben csináltam egy hasonló programot PIC16-al, de ott fontos volt a pontosság. Az szépen működik, és mindegy neki, hogy milyen gyorsan forog a tárcsa.)
Olyan, mintha nem tudná a vezérlő felfogni a beérkező jeleket.

Még csak a "Kiterjesztett pontosságú műveletek" c. részig jutottam el a PIC-kwik-ben. Igaz a PICCOLO-t és a PICula-t kihagytam, mert a PIC18 valahogy nem tud lekötni.
(#) putr4 válasza icserny hozzászólására (») Máj 12, 2012 /
 
Ó hát persze, így már tiszta sor. Köszönöm.
(#) putr4 válasza szitko hozzászólására (») Máj 12, 2012 /
 
Ilyen problémám már nekem is volt. Egy fordulatszámlálót csináltam a g2211-ből fototranzisztor és infraled segítségével. Először azt hittem nem reagál elég gyorsan a tranyó a váltásokra, de végül a magas alacsony szint érzékelésével volt a baj. Nem tudott kölünbséget tenni köztük mikor nagy volt a fordulatszám és egyszerűen nem számolt. Szórakoztam kicsit a a led meghajtásával, illetve a feszültségosztóval és összejött.
Esetleg ha szükséged van rá megtudom osztani a programkódot én is lcd-re írattam ki.
(#) szitko válasza putr4 hozzászólására (») Máj 12, 2012 /
 
Nálam lehet, hogy a rotary encoder-rel van a baj. Néztem szkópon, és össze vissza jelet ad ki, ha gyorsan tekerem. Nem a megszokott A B négyszögjel jön ki belőle, hanem menet közben mindenféle tüskéket rak bele, és a vezérlő ezt is érzékeli, és ezért bolondul meg.
Ha nem titkos, megoszthatod a kódot. Szerintem szívesen látja mindenki.
(#) putr4 válasza szitko hozzászólására (») Máj 12, 2012 /
 
Igazából ez eléggé félkész projekt még (vagy inkább csak negyedkész). Icserny cikkjéből lett összeollózva és hülyére kommenteztem, mert akkor kezdett összekavarodni az egész a fejemben. Ha kész leszek vele teljesen, közzéteszem. Az elv amúgy az, ami itt pár sorral lejjebb elhangzott, hogy wdt megszakítás során történik az aktuális fordulatszám kalkulációja.
(#) szitko hozzászólása Máj 14, 2012 /
 
Úgy néz ki, hogy megoldódott az encoder problémám.
Kísérleteim során, egy furcsa dologra lettem figyelmes. Szkóppal figyeltem az encoder álltal kiadott jeleket, és ilyenkor teljesen normálisan működött, nemhagyott ki, nem ugrált össze-vissza, stb... Ha viszont levettem a szkópot megbolondult. Ezután beraktam egy RC tagot (1k,100nF) az encorder elsődlegesen figyelt lábára, (jelen esetben P2.3) és jelentőssen javult a helyzet, de még mindíd nem volt az igazi. Újra szkóp, jel figyelése. Azért nem volt az igazi, mert a 100nf kondi nagyon eltorzította a jelet. Az áttörést úgy értem el, hogy az RC tagból az ellenállást kivettem, a kondit 1nF-ra cseréltem, és az encoder másik lábára is raktam egy 1nF kondit. Így most, az alábbi kis progival, szépen működik az encoder, gyorsan, és lassan is. (csak a lényeget rakom be)
  1. #pragma vector=PORT2_VECTOR
  2. __interrupt void encoder_Port_2(void){
  3.     _DINT();                       // megszakítás tiltása
  4.     if(P2IFG & BIT3){              // P2.3 flag figyelése
  5.         if(P2IN & BIT4){           // P2.4 magas? Ha igen
  6.             if( pos > BIT0){       // "pos" nagyobb mint BIT0? Ha igen
  7.                 pos = pos >> 1;    // jobbra lép egyet
  8.             }
  9.             szam--;                // "szam" változó csökkentése egyel
  10.         }
  11.         else{                      // ha P2.4 alacsony
  12.             if( pos < BIT7 ){      // ha "pos" kissebb mint BIT7
  13.                 pos = pos << 1;    // "pos" balra lép egyet
  14.             }
  15.             szam++;                // "szam" változó növelése egyel
  16.         }
  17.         P1OUT = pos;               // "pos" értékének beírása P1-be
  18.     }
  19.     P2IFG = 0x00;                  // P2 flag törlése
  20.     _EINT();                       // megszakítás engedélyezése
  21. }

Az if(pos > BIT...... feltétel, csak azért van benne, mert a vezérlő P1.0-7 lábára raktam 8db ledet, ezzel figyelve az encoder működését.
(#) DecebaL hozzászólása Máj 16, 2012 /
 
Az alábbi kóddal az a problémám, hogy BIT4-en folyamatosan 1.01 MHZ a frekvencia és 50% a kitöltés, függetlenül a TA0CCR2 értékétől.
Azt szeretném, hogy a BIT4 -en 75% legyen a kitöltés.
A Proci típusa 2452.
Van valakinek ötlete?
  1. #include  "msp430.h"
  2. void main(void)
  3. {
  4.    WDTCTL = WDTPW + WDTHOLD;
  5.    P1DIR |= BIT2 + BIT4;  
  6.    P1SEL |= BIT2 + BIT4;  
  7.    TA0CCR0 = 100;        // PWM period
  8.    TA0CCTL1 = OUTMOD_3;  // CCR2 reset/set
  9.    TA0CCR1 = 55;         // CCR1 55% kitöltés
  10.    TA0CCTL2 = OUTMOD_3;  // CCR2 reset/set
  11.    TA0CCR2 = 75;          // CCR2 75% kitöltés
  12.    TA0CTL = TASSEL_2 + MC_1 + TACLR;        
  13.  
  14.    __bis_SR_register(LPM0_bits); //LPM 0
  15.  
  16.    while(1){
  17.  
  18.    }
  19. }
(#) szitko válasza DecebaL hozzászólására (») Máj 16, 2012 /
 
Megoldás:
  1. P1SEL2 |= BIT4;

He-he, ebbe a hibába már én is beleestem.
(#) DecebaL válasza szitko hozzászólására (») Máj 16, 2012 /
 
Köszi már vagy 3 órája szívok vele. Ha nem írod meg, nem tudom mikor jöttem volna rá.
(#) szitko válasza DecebaL hozzászólására (») Máj 16, 2012 /
 
Én két napig szívtam vele, mire Icserny fórumtársunk felvilágosított, hogy az adatlap vége fele, valahol, megtalálható a PxSEL leírása.
(#) kardexcsaba hozzászólása Máj 17, 2012 /
 
Sziasztok.
Viszonylag még kezdő vagyok az MSP430-programozásában és volna egy projekt amit minél hamarabb meg kellene valosítsak. A projekt egy fontos része a következő:
egy wireless vagy bluetooth (amelyikkel egyszerűbb)modullal le kellene olvassam egy gps-ről a mozgásban lévő jármű sebességét. A problémám az, hogy nem tudom egyáltalán lehetségese ez, ha igen akkor megkérem azokat akik dolgoztak hasonló projekten segítsetek hogyan induljak el.
Előre is köszönöm a segítséget.
(#) icserny válasza kardexcsaba hozzászólására (») Máj 17, 2012 /
 
A GPS moduloknak tudtommal van soros kimenete, a Bluetooth eszköznek pedig soros ki/bemenete. Ha összekötöd őket, akkor már mehet is az adás, MSP430 sem kell hozzá. Jól értettem a kérdésedet?
(#) Grebi válasza kardexcsaba hozzászólására (») Máj 18, 2012 /
 
Lehetségesnek lehetséges Szerintem mindenféleképpen kell egy vezérlő, mert be kell konfigurálni a bluetooth és GPS egységet is. Ajánlatos megnézni hogy milyen kommunikációs csatorna áll rendelkezésre a két modulnál, mert ha az UART-ot lefoglalod a GPS-nek akkor ugye a Bluetooth modult már nem tudod vezérelni ha az is UART-os (ezek száma persze függ a vezérlő típusától is).
(#) colosseum hozzászólása Máj 19, 2012 /
 
Üdv ujra mindenkinek. Kis kényszer pihenő után megint itt .

Kérdésem a következő van egy fotodiódám,infra kaput akarok csinálni, de adc-vel még sosem foglalkoztam , aki már állított be adc-t mspben jelezze már felém , hogy ezt miképpen kellene, kb ilyen 300mv-t kellene mérni.
(#) szitko válasza colosseum hozzászólására (») Máj 19, 2012 /
 
Ha vissza lapozol, akkor találsz egy, általam írt egyszerű voltmérő programot. Abban benne van, a szerintem legegyszerűbb ADC beállítás. Ha csak 300mV-ot szeretnél mérni, akkor külső ref.feszt javaslok, de ha nem a pontosság a lényeg, akkor állísd be a ref.feszt 1.5V-ra (FUG).
(#) szitko hozzászólása Máj 20, 2012 /
 
Sziasztok.
Tanácsokat, ötleteket, keresek egy feladat megoldásához.
Egy nagyon egyszerű, "Ne hagyd el a táskád" szerkezetet szeretnék csinálni. Tudom, első (hallásra), kicsit furcsa.
A lényeg: (elsőnek egy kis mese) Édesapám rendszeresen elveszti a táskáját. Mindig lerakja valahova, és elindul nélküle. Mindannyian tudjuk, hogy ez mindenkivel előfordul, de vele sajnos mindig, és a legfurcsább helyeken. Sajnos ez a táskaelhagyás már nagyon sok pénzbe kerül nek/em/ki.
Gondolatban kitaláltam egy egyszerű szerkezetet, és ennek a megvalósításában szeretnék segítséget kérni tőletek.
Valami olyasmire gondoltam, hogy két vezérlő lenne összekötve bluetooth-on keresztül, és ha az egyik nem tudna a másiknak valamit!? küldeni, akkor hangjelzést adna. Az adó, és a vevő is, egy-egy 3,6V 360mAh-ás akksiról menne, ami azt jelentené, hogy az energiatakarékos módban, akár több hétig is üzemelne, feltöltés nélkül. Persze tudom, hogy mi van ha lemerül az akksi, vagy lehagyja az adót, vagy ?. Ezekre is vannak már megoldásaim, de azt most nem részletezném. Nem az érdekel, hogy, minek, meg hogy úgyis, vagy ez meg az, stb. Az érdekelne, hogy ez így megvalósítható-e, (bluetooth-al) vagy van-e valami jobb, olcsóbb, könnyebb megoldás.
(#) putr4 válasza szitko hozzászólására (») Máj 20, 2012 /
 
Anyám mikor kicsi voltam belekötötte a kabátomba egy madzaggal a télikesztyűm, hogy ne veszítsem el soha ha leveszem. Bár ez nem tudom mennyire jó megoldás egy táska esetében.
(#) Grebi válasza szitko hozzászólására (») Máj 20, 2012 /
 
Bluetooth-al is megoldható, de szerintem egy egyszerű RF adó-vevő pár olcsóbban kijön. 5-20 másodpercenként megpingeled a "táskát" és ha nem jön válasz akkor riaszt. Persze itt figyelembe kell venni hogy a két pingelés közötti időt, mert az végülis reakcióidő a táska elhagyásának észlelésére. A pingelési időközök rövidítésével ez az idő csökkenthető, de ugye ez több energiát emészt.
(#) szitko válasza Grebi hozzászólására (») Máj 20, 2012 /
 
Való s igaz. Az RF modulra nem is gondoltam. Azért a bluetooth-ra gondoltam, mert van itthon pár db HC-05-ös modulom, és egyszerű dolgozni vele. Én 1 perces periódusokra gondoltam, s a két periódus között elmehet aludni a vezérlő. Az 1 perc bőven elég, mert talán egy perc alatt nem felejti el, hogy hol volt, és nem lesz túl messze a táskától.
(#) Grebi válasza szitko hozzászólására (») Máj 20, 2012 /
 
1 perc szerintem sok, mert leszáll a buszról és hopp csipog, az meg már 50m-re jár(tapasztalatból tudom :S ). 20 másodperc szerintem célszerű.
Ha van modulod akkor ugye nem kell kiadni pénzt RF-re. Kérdés az hogy a Bluetooth modulok mennyi energiát fogyasztanak, nem kell-e újra konfigurálni őket minden ébredésnél, ha esetleg ott is megszünteted a tápfeszültséget energiatakarékosságból. Mondjuk a bluetooth megoldás mellett szól az hogy ott viszont nem kell foglalkozni a zavarvédettséggel, RF modulok érzékenyebbek rá a nyílt frekvencia sáv miatt.
(#) Grebi válasza szitko hozzászólására (») Máj 20, 2012 /
 
Lényeg a lényeg. Szerintem egy egyszerű "Ping" szoftver tökéletesen megteszi, szerintem energia takarékos is.
(#) DecebaL hozzászólása Máj 21, 2012 /
 
Ha valami szoftver hiba miatt lefagy a proci van rá lehetőség lekezelni? Tehát ha valami oknál fogva lefagy újraindítsa a programot.
(#) colosseum hozzászólása Máj 21, 2012 /
 
hát első körben azt mondanám hogy watchdog , de akkor ugye minden újra indul.
(#) icserny válasza DecebaL hozzászólására (») Máj 21, 2012 /
 
Idézet:
„Ha valami szoftver hiba miatt lefagy a proci”
Szoftver hiba miatt nem fagy le a proci, legfeljebb nem azt csinálja, amit szeretnél.
Következő: »»   56 / 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