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   49 / 139
(#) putr4 válasza icserny hozzászólására (») Márc 29, 2012 /
 
Akkor értem, köszönöm és ezt hol írja? most lefuttattam én is szimulátorba, de nem tudom mit kezdjek azzal a kóddal jobb oldalt.

ui.: azt hiszem közben megtaláltam a RAM fülnél
(#) icserny válasza putr4 hozzászólására (») Márc 29, 2012 /
 
A Registers ablakban számlálja a ciklusokat.
(#) putr4 válasza icserny hozzászólására (») Márc 29, 2012 /
 
Megvan, köszönöm!
(#) Smithy87 hozzászólása Márc 29, 2012 /
 
Hello!

Jártam már itt a kínommal nem tudna valaki egy tök egyszerű mondjuk 5-10 lépéses programocskát megosztani ami léptető motort vezérel?
(#) icserny válasza Smithy87 hozzászólására (») Márc 30, 2012 /
 
Szerintem annál azért bonyolultabb lesz. Egy egyszerű példa itt található. Video is van hozzá.
(#) szikorapéter válasza icserny hozzászólására (») Márc 30, 2012 /
 
Hát a negatív oldala a közös pont ha kell a típusát is le tudom írni,ja és rengeteg ilyen 8bites IC-m van itthon régi-régi computerek paneljaiból.És a napokban találtam egy 7446-os kijelzővezérlő IC-t amiről nemtudom hogy jó lenne-e valamire ebben a feladatkörben.
(#) icserny válasza szikorapéter hozzászólására (») Márc 30, 2012 /
 
A probléma ott kezdődik, hogy a 7446 nyitott kollektoros, aktív lehúzással. Ez - szerintem - a közös anódú kijelzőkhöz alkalmas.
(#) szitko hozzászólása Márc 30, 2012 /
 
Sziasztok.
Hosszas kínlódás után, végre teljes sikert értem el az adxl312 accelero, i2c-n történő vezérlésében.

A rövid történet: Miután már egy-két projektben sikerrel alkalmaztam az i2c kommunikációt, gondoltam az adxl312 vezérlése sem lesz túl bonyolult. Rosszul gondoltam. Először kimentek az adatok, de nem jött vissza semmi. Aztán már ki se ment semmi. Azután, végre sikerült kiküldeni egy regisztert, és vissza is jött a válasz, de csak egy. Ezután, már elborult az agyam, és összedobtam, egy az interneten található logikai analizátort, PIC-el, de nem volt itthon olyan PIC ami kellett bele, így hát, át kellett írnom a PIC programját egy másikra. (Még szerencse, hogy volt forráskód, és, hogy asm-ben volt.) Még a logikai analizátor használatát is meg kellett néznem, mert távol állt tőlem ez a műszer. Miután rájöttem, hogy mit jelent az a sok vonal a képernyőn, kezdett kitisztulni minden, és sikerült elküldeni a beállításokat, a gyorsulásmérőnek. Fogadni viszont még nem sikerült, illetve csak egyszer, de a FUG, és az adatlap hamar megmutatta a hibát. Így végül minden jó lett.

Az utókor számára, meg, ha valakit érdekel, felrakom a működő forrást. (Az a 28 db rossz, úgyse érdekel senkit.) Plusz egy analizátor képet.

U.i: Ismét sokat segített Icserny fórumtársunk honlapja, ezért csak ajánlani tudom mindenkinek! Lassan jobban ismerem, a PIC kommunikációkat, mint az MSP430-t.
(#) mechanika hozzászólása Márc 31, 2012 /
 
Sziasztok!

Porton belül egyszerre lehet e több lábat felhúzni?
Erre gondoltam:

P1OUT = BIT3;
P1OUT = BIT4;
P1OUT = BIT5;

Ha igen akkor hogyan, mert így nem működik nálam?
Köszi!
(#) szitko válasza mechanika hozzászólására (») Márc 31, 2012 /
 
Mármint, hogy magas legyen a kimenete? Vagy a felhúzóellenállásra gondolsz?
1:
  1. P1DIR = (BIT3 + BIT4 + BIT5);   // kimenet
  2. P1OUT |= BIT3;       // magas
  3. P1OUT |= BIT4;       // magas
  4. P1OUT |= BIT5;       // magas

2:
  1. P1DIR = (BIT3 + BIT4 + BIT5);    // kimenet
  2. P1OUT |= (BIT3 + BIT5 + BIT5);   // mind magas
(#) mechanika válasza szitko hozzászólására (») Márc 31, 2012 /
 
Felhúzóellenállásra gondoltam.
(#) szitko válasza mechanika hozzászólására (») Márc 31, 2012 / 1
 
Felhúzóell. Vcc-re:
  1. P1REN |= (BIT3 + BIT4 + BIT5);   // fehúzó ell. bekapcs
  2. P1OUT |= (BIT3 + BIT4 + BIT5);   // Vcc-re
(#) mechanika válasza szitko hozzászólására (») Márc 31, 2012 /
 
Köszönöm, működik!
(#) szitko hozzászólása Márc 31, 2012 /
 
IAR-ban, egy 16 bites változó értéke -1.
  1. signed int a=2, b=3, valtozo=0;
  2. .
  3. .
  4. a - b = valtozo;

Ezt az értéket, (valtozo) elküldöm a PC-nek. A PC fogadja, de 65535-öt jelenít meg.
Processing kód:
  1. int rx_byte=0;
  2. byte[] tarolo = new byte[2];
  3. .
  4. server.readBytes(tarolo);
  5. rx_byte = int(tarolo[0]) << 8 | int(tarolo[1]);

Hogyan magyarázzam meg neki, hogy az "rx_byte", -1 legyen, és ne 65535 ?
(#) kissi válasza szitko hozzászólására (») Márc 31, 2012 /
 
A PC-n Te írtad a programot? A signed változó az előjeles... ez azt jelenti, ha a legnagyobb helyiértéken '1' van, akkor negatív ! --> ezt kell nézned ilyenkor ki kell írnod egy mínusz jelet + a szám 2-es komplemensét!

Steve
(#) szitko válasza kissi hozzászólására (») Márc 31, 2012 /
 
Én írtam a PC-n futó programot, Processing-ben, de sajna a processing nem ismeri a "signed int" változót. Vagy valamit én csinálok rosszul, mert a "signed int"-re hibát ír:
Idézet:
„processing.app.SketchException: unexpected token: signed”
(#) icserny válasza szitko hozzászólására (») Márc 31, 2012 /
 
Processing-ben az int változó 32 bites (4 bájt). A kapott adat (65535) "túl kicsi" ahhoz, hogy negatív számnak vegye. Bővebben: Link
(#) szitko válasza icserny hozzászólására (») Márc 31, 2012 /
 
Valóban. Valamiért elsiklottam felette.
Köszönöm.
(#) mechanika hozzászólása Márc 31, 2012 /
 
Sziasztok!

Az Icserny cikkében szereplő "A főprogram felébresztése alvó állapotból
( 5_2. lista: A p1_3_wakeup.c program listája)"
nálam úgy működik, ha P1.3-at nem a GND-re, hanem a VCC-re zárom.
Tud valaki segíteni nekem, hogy miért van ez így?
Az új LaunchPadot használom 2452-vel.

Köszi!
(#) icserny válasza mechanika hozzászólására (») Ápr 1, 2012 / 1
 
itt található a válasz. (Az új kártyáról kihagyták a nyomógomb felhúzását.)
(#) szitko hozzászólása Ápr 1, 2012 /
 
Megint sikerült összekeverjem magam, és nem találolm a kiutat.
Tehát, adott egy számláló, ami 2048-tól számol vissza, -2048-ig. Minden értéket, 2047-2046-2045.... elküldök a PC-nek, de mint már lentebb írtam, a -1-től baj van a megjelenítéssel, a PC oldalon. Miután Icserny fórumtársunk leírta, hogy miért, elkeztem dolgozni a megoldáson, de nem akar összejönni.
Még mindíg ott tartok, hogy a 65535-ből, 32 bitben, hogyan csináljak -1-et. A biteltolás és összeadás ((0x7fff0000 + 0xffff) << 1= -2) nem vezetett a helyes útra, inkább csak jobban összezavart, és ebből nem tudok most kimászni.
A Processing-ben a "char" változó 16 bites, de az karakteres megjelenítést eredményez.
Tehát a kérdésem, az lenne, hogy a uC által elküldött -1-et, a Processing-ben hogy jelenítsem meg?>>
(#) icserny válasza szitko hozzászólására (») Ápr 2, 2012 /
 
Inkább így próbáld: (0x7fff8000<<1 + 0xffff)
vagy egyszerűen: 0xffff0000 + 0xffff
Lényeg az, hogy a 0xffff-et már ne léptesd balra, mert akkor a -1-et kettővel szorzod, s akkor tényleg -2 lesz belőle!

De vissza lehet menni a számábrázolás értelmezéséhez is:
Ha (a beolvasott) szam > 32767, akkor
szam = szam - 65536

Ezt most hirtelen nem is tudom, hogy írják Processing-ül. Talán így?:
  1. if(szam>32767) {
  2.   szam-=0x10000;
  3. }
(#) szitko válasza icserny hozzászólására (») Ápr 2, 2012 /
 
Köszönöm szépen.
Igazából, teljesen belekeveredtem, a uC, és a PC, illetve a Processing változótípusaiba, főleg az adtatok soros portól történő beolvasásánál.
Idézet:
„nem is tudom, hogy írják Processing-ül. Talán így?:”

Igen, így. Így most "jól" jeleníti meg a mikrovezérlő által küldött adatokat.
Köszi mégegyszer.
(#) szitko hozzászólása Ápr 2, 2012 /
 
Sziasztok.
Valaki keresett, egy léptetőmotor vezérlő mintaprogramot. Amit a neten lehet találni MSP430g2xxx-re, (ezt) szerintem több sebből vérzik.
Mivel úgy hozta a sors, hogy pont kellet egy ilyen vezérlő program nekem, ezért írtam egyet.
Csatoltam.
(#) mechanika válasza icserny hozzászólására (») Ápr 2, 2012 /
 
Köszönöm!
(#) colosseum hozzászólása Ápr 2, 2012 /
 
ÖHÖMMM Végre 80% nál járok!

Video link
ha valakit érdekel a videóm
(#) mechanika hozzászólása Ápr 2, 2012 /
 
Sziasztok!

Egy led fényerejét szeretném két nyomógombbal szabályozni.
Kedves Icserny cikkét tanulmányozva hosszú hónapok verejtékes munkájával jutottam el az alábbi kódig, ami nem tökéletes:

  1. while(1) {
  2.          i=1;
  3.            while(i<100 && i>0) {
  4.            
  5.               P1OUT |= BIT0;        //LED1 bekapcsolása
  6.               delay_100us(i);       //i-vel arányos idejű késleltetés
  7.               P1OUT &= ~BIT0;       //LED1 kikapcsolása
  8.               delay_100us(150-i);   //Kiegészítő idejű késleltetés
  9.              
  10.           if (!(P1IN & BIT3)){
  11.           i++;
  12.           }
  13.           if (!(P1IN & BIT4)){
  14.           i--;
  15.            }             }
  16.          
  17.          
  18.          }


A -gombbal semmi gond, de ha a + gombot nyomva tartom a legerősebb fényerő után leugrik 0-ra. Én meg ugye azt szeretném, hogy 100%-on maradjon.
Én továbbra is bízom a lelkes fórumtársak segítségében és várom, hogy elűzze valaki a gonosz sötétséget elmémből.
Köszönöm!
(#) icserny válasza mechanika hozzászólására (») Ápr 3, 2012 /
 
Az i++ vagy i-- mellé be kellene tenni mégegy feltételt, hogy ne menjen se mínuszba, se 100 fölé. Például így:
  1. if (!(P1IN & BIT3) && (i<100)) {
  2.     i++;
  3. }


A növelésből most (gondolom) úgy lesz nulla, hogy ha nem fogod meg 100-nál a változót, akkor előbb-utóbb túlcsordul.
(#) icserny válasza icserny hozzászólására (») Ápr 3, 2012 /
 
Itt folytatom:

Szóval, ha az i 101 lesz, akkor a programod kilép a belső while ciklusból, és akkor 1-re állítod vissza i értékét.

Az alábbi sorokat tehát ki kellene hagyni:
  1. i=1;
  2. while(i<100 && i>0) {


A kezdeti értéket csak egyszer, még a while(1) előtt kell beállítani!
(#) mechanika válasza icserny hozzászólására (») Ápr 3, 2012 /
 
Köszönöm, működik.
Csak az nem esett le tegnap. hogy hogyan és hol lehet megadni, hogy ne menjen 100 felé (és 1-nél is megálljon).
Ez tényleg egyszerű volt!
Köszi még egyszer!
Következő: »»   49 / 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