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   26 / 139
(#) icserny válasza ReFi hozzászólására (») Jan 3, 2012 /
 
Sok sikert és örömöt az új kártyához!

Idézet:
„-Lespóroltak komponenseket (pl R34 felhúzó ellenállás)”
Nem hiszem, hogy ez biztosítaná a cég nyereségét, valószínűbb, hogy lefelejtették.

Az MSP-EXP430FR5739 FRAM kártyán is vannak érdekes dolgok: az emulátor MCU analóg és digitális földjének kivezetéseit elfelejtették összekötni. Ezért ennek pótlására az SMD IC két lába között van egy takaros ónhíd. Én meg le akartam takarítani, még szerencse, hogy időben megnéztem a User Guide-ban a kártya dokumentációját.
(#) ReFi válasza icserny hozzászólására (») Jan 3, 2012 /
 
Idézet:
„Nem hiszem, hogy ez biztosítaná a cég nyereségét, valószínűbb, hogy lefelejtették.”


Nem, erről a release-ről tényleg lespórolták.
Specifikáció:itt

[quote]R34, R27 47k SMD0603 (R34 is not populated)[OFF]
(#) David.zsombor hozzászólása Jan 5, 2012 /
 
Sziasztok. Lenne kedve valakinek aki már jobban tud programozni közös projektként (esetleg cikk is lehet) építeni egy panelmérőt. 2X16-os LCD-vel kéne megoldani Olyannal mint ami a cikkben szerepel. Amit én vállalni tudok: Nyák gyártás forrasztás... Hogyha valakinek ahhoz a részéhez nincs kedve Ha valaki vállalja akkor esetleg LCD-t tudok küldeni a fáradozásokért cserébe. Köszi.
(#) ReFi válasza David.zsombor hozzászólására (») Jan 5, 2012 /
 
Egy sima volt mérőre gondoltál?
(#) moderboy válasza David.zsombor hozzászólására (») Jan 5, 2012 /
 
Azon kívül, hogy a kijelzést át kell írni karakteresre, ez nem elég jó? Bővebben: Link
(#) David.zsombor válasza moderboy hozzászólására (») Jan 5, 2012 /
 
De csak dip-es ic-vel kéne és 1602-es lcd-vel. 2 csatornát mérni és áramot is. Valahogy így: Bővebben: Link
(#) David.zsombor válasza David.zsombor hozzászólására (») Jan 5, 2012 /
 
Akkor lenne valakinek kedve segíteni?
(#) DecebaL válasza David.zsombor hozzászólására (») Jan 5, 2012 /
 
Nekem van PIC -re kész programom (igaz 3510i LCD -re )ha gondolod átküldöm a forrást nem nagy kunszt átírni MSP430 -ra. A labortápomban van már régóta mér áramot, feszültséget, teljesítményt számol, két hőszenzorról veszi folyamatosan az adatokat és vezérel egy ventit. Viszont a kapcsolásban van egy SOIC 8 -as IC (INA271).
(#) David.zsombor válasza DecebaL hozzászólására (») Jan 5, 2012 /
 
Egy viszonylag új cuccot lenne jó csinálni hogy valami igazán hasznosról is legyen már végre cikk... Szerintem nem nagy dolog az egész csak ilyen téren még nem vagyok tapasztalt.
(#) icserny válasza David.zsombor hozzászólására (») Jan 6, 2012 /
 
Ha MSP430 vezérli, akkor eleve új lesz.
(#) szitko hozzászólása Jan 6, 2012 /
 
Sziasztok.
Három nyomógomb egyidejű figyelését, hogy lehet megoldani? pl:
  1. while(!(P1IN & BIT4));

Ugye itt addig nem megy tovább a program, míg a BIT4 alacsony. Ezt írja le háromszor, vagy van valami egyszerűbb megoldás?
(#) icserny válasza szitko hozzászólására (») Jan 6, 2012 /
 
A megoldás (a program logikája) attól függ, hogy a nyomógombok és az általuk vezérelt tevékenységek milyen viszonyban vannak egymással, kell-e szoftveres pergésmentesítés, s hogy a tevékenységek milyen jellegűek. Ezek ismerete nélkül csak annyit lehet mondani, hogy a blokkoló típusú várakozás (a while ciklus) itt messzemenően kerülendő.
(#) szitko válasza icserny hozzászólására (») Jan 6, 2012 /
 
Igazából, csak egy szoftveres "pergésmentesítést" szeretnék csinálni. Azért "" jelben, mert a programot addig nem szeretném továbbengedni, míg valamelyik gombot el nem engették, és erre keresem az egyszerű megoldást.
Pontosítok: Egy Lcd menü kialakításán dolgozom, ami a fenti problémától eltekintve müködik. A menü kialakítása elég csúnya (legalábbis szerintem), de sajnos jelen tudásomból csak ennyire futotta.
(#) Beachway hozzászólása Jan 6, 2012 /
 
Sziasztok! Lenne egy kérdésem.Adott egy program ciklus, aminek az egyik utasítása az lenne, hogy vezéreljen egy másik ciklust.Valahogyan így szeretném.
while(feltétel) {
utasítás1;
utasítás2;
utasítás3 ez vezérelné;
}
while(ezt vezérelné) {
utasítás;
}
Próbáltam értéket adni neki, így.
utasítás3 helyett A=1; ,így a while ciklus értéke egy lenne, és futna, de hibát jelez a fordító.Előre is köszönöm a segítséget.
(#) moderboy válasza Beachway hozzászólására (») Jan 6, 2012 /
 
Írni kell egy függvényt, ezt tedd be a main függvényed elé:
  1. void masodik(void){
  2.   utas1;
  3.   utas2;
  4.   utas3;
  5.  
  6.  
  7.   return;
  8. };


ezt pedig úgy tudod meghívni akárhol, hogy a hozzászólásod alapján az utasítás3 helyére ezt írod:

masodik();

Ekkor a program "ki fog ugrani" és végrehajtja a MASODIK nevű függvényt. A függvényen belülre is írhatsz bármilyen kódot, sorban le fog futni, de csak olyan ciklust tegyél bele, ami véget is ér. Ha végig ért az utasításokon amik benne vannak a RETURN; hatására a program "vissza ugrik" oda ahol a MASODIK(); függvény meg lett hívva.

Tehát ha van még ott utasítás4; utasítás5; is akkor az is végre fog hajtódni.
De ha pontosabban leírod mit kéne csinálni, lehet van jobb megoldás is.
(#) Beachway válasza moderboy hozzászólására (») Jan 6, 2012 /
 
Köszi e segítséget! Így minden világos! Semmi konkrétum, csak tanulás céljából próbálkozom mindenféle dologgal. Így jobban megértem mint az olvasottak alapján. Fura még nekem ,hogy a mikrovezérlő csak egy dologgal képes egyszerre foglalkozni, ellenben egy számítógéppel. És minden lehetséges dologról gondoskodni kell a program írásakor.
(#) moderboy válasza Beachway hozzászólására (») Jan 6, 2012 /
 
Nem tudom ezt, hogy érted, a PC is csak egy sor kódot hajt végre egyszerre, ugyanígy sorjában hajtja végre a dolgokat, mint a mikrovezérlő Nem sok különbséget találtam a PC-re valóprogramozáshoz képest, maximum a perifériák miatt tünhet bonyolultabbnak
(#) szitko hozzászólása Jan 7, 2012 /
 
Sziasztok.
A lentebb (#1135777) hsz. felvetett problémámat, végülis három db. várakozó (icserny mester szavaival "blokkoló típusú várakozás") ciklussal oldottam meg.
Lenne egy kicsit furcsa kérésem azokhoz akiknek van egy kis idejük. (modjuk a mai világban ilyen ember nincs) Szeretném ha valaki átnézné nekem a csatolt programomat, ami az lcd vezérlés kivételével teljesen saját készítésű. (Mondjuk az lcd vezérlésbe is belepiszkátam, és icserny cikkéből hozzáraktam egy-két dolgot.) A segway programjához képest ez sokkal összetettebb, mert a segway programjában nincs semmi, csak matek, meg egy pár feltétel. A program működik rendesen, próbapanelen, de szeretnék az esetleges hibákból, vagy fatális tévedésekből tanulni. (Igérem többett nem lesz ilyen.)

Előre is köszönöm. Gábor
(#) icserny válasza szitko hozzászólására (») Jan 7, 2012 /
 
Szerintem rajtad kívül senkinek sincs fogalma arról, hogy mit csinál ez a program, vagy mit kellene csinálni neki. Ami ránézésre látszik, az lényegtelen dolog.
  1. while(!(P1IN & fel));                   // felengedésre vár
  2. while(!(P1IN & le));                    // felengedésre vár
  3. while(!(P1IN & set));                   // felengedésre vár
A fentie három sor helyett írhatnád azt is, hogy:
  1. while((P1IN&(fel+le+set)) != (fel+le+set));
(#) szitko válasza icserny hozzászólására (») Jan 7, 2012 /
 
Lentebb írtam
Idézet:
„Egy Lcd menü kialakításán dolgozom”

de igazad van. A program egy 4x16 LCD-n megjelenő szöveges menürendszer, és a menüben megjelenő értékek beállítására szolgál.
Amúgy köszönöm ,hogy belepillantottál.
Idézet:
„A fentie három sor helyett írhatnád azt is, hogy:”

Írhatnám, de sajnos még nem tudtam felfogni ,hogy mit is csinál, de most számolom.
Köszi mégegyszer.
(#) icserny válasza szitko hozzászólására (») Jan 7, 2012 /
 
Idézet:
„sajnos még nem tudtam felfogni ,hogy mit is csinál”
Egyetlen feltételben vizsgálja, hogy mindhárom gomb fel van engedve (ha ez volt a szándékod).
(#) szitko válasza icserny hozzászólására (») Jan 7, 2012 /
 
Nem. Meg szeretném érteni, és nekem csak úgy megy, hogy lerajzolom, vagy látom az eredményt. Addig nem tudok túllépni semmin, míg meg nem értem, hogy mit, és miért. Pl. "tudom" ,hogy mit csinál a "while" ciklus, értem az & és != operátorokat, de ,hogy ez egysorban,hogy áll össze, azt látnom kell.
Vagy pl: gomb = (~P1IN & fel + le + set) >> 4; erről a sorról már olvastam valahol, de kb 10 A4-es lapot írtam tele, míg összeállt az operátorok használata.
Én így tanulok, és úgy, hogy halgatok, az olyan, e szakmában profikra, mint pl. Te vagy.
(#) icserny válasza szitko hozzászólására (») Jan 7, 2012 /
 
Ki kell, hogy ábrándítsalak: nem vagyok én profi, csak autodidakta! Igaz, volt rá elég sok évem...

A while((P1IN&(fel+le+set)) != (fel+le+set)); sorban a (fel+le+set) kifejezés egy olyan számot jelent, amiben azokon a biteken (és csak ott) áll egyes, ahová a gombokat definiáltad. Például:

0000 0111 - ha BIT2, BIT1, BIT0 a három gomb
1001 0010 - ha BIT7, BIT4, BIT1 a három gomb

A P1IN&(fel+le+set) művelettel pedig beolvassuk P1IN-t és kinullázzuk azokat a biteket, amelyeket nem definiáltál nyomógombnak. (Bitenkénti műveleteknél az ÉS művelet nullázza azokat a biteket, amelyekkel szemben nem '1' áll).

A fenti művelet eredménye akkor és csak akkor egyezik meg a (fel+le+set) kifejezés értékével, ha P1DIR beolvasásakor mindhárom bemenet magas szinten állt. Ha nincs egyezés (a != reláció teljesül), akkor pedig várni kell.
(#) szitko válasza icserny hozzászólására (») Jan 7, 2012 /
 
Idézet:
„nem vagyok én profi, csak autodidakta!”

Dettó, csak nekem az elektronikában volt 20 év kihagyásom. Az Urbán féle epromégetö után, 2 éve találkoztam a PICkit2-vel.
Én így számoltam ki, javíts ki ha tévednék:
p1in 0b1x11xxxx
& 0b1x10xxxx
= 0b1x10xxxx
!= 0b0x01xxxx
A ciklus igaz, mert 0b0x01xxxx, tehát várunk.
(#) icserny válasza szitko hozzászólására (») Jan 7, 2012 /
 
Nem világos, hogy a példádban mi micsoda. Szerintem inkább így kellene:
(fel+le+set) = 0b10110000 (az elvárt állapot)
P1IN = 0b1x10xxxx (az aktuális állapot, ha a harmadik gomb még le van nyomva)
P1IN & (fel+le+set) = 0b1x10xxxx & 0b10110000 = 0b10100000

Mivel 0b10100000 != 0b10110000, ezért még várni kell.
(#) szitko válasza icserny hozzászólására (») Jan 7, 2012 /
 
Két dologért nem világos. 1: lehet, hogy egy kicsit sajátos a logikám. 2: Valamiért, a válaszablakba íráskor, menet közben fogja magát, és elküldi az üzenetet, miközben írom, és meg se nyomom a küldés gombot, de ez nem ide tartozik.
Én egymás alá írtam, de a fenti ok miat nem tudtam befejezni.
Amúgy teljes mértékben érthető amit írtál. Közben észrevettem egy hibát a programban. Ha az első menü bejön, (ahol csak két dolog közül lehet választani) a kurzort le lehet vinni a 4. sorba, ahol nincs semmi.
Köszönöm a kimérítő oktatást. :worship:
(#) Beachway hozzászólása Jan 8, 2012 /
 
Sziasztok! Lenne egy újabb kérdésem. Hogyan lehet azt kivitelezni egy programban, hogy a sorról sorra adott utasítások után, más és más várakozási időt adjunk.Pl
[while(feltétel) {
utasítás1;
__delay_cycles(2000000);
utasítás2;
__delay_cycles(6000000);
utasítás3;
__delay_cycles(100000);
}
]
Ha ezt így ebben a formában megírom, egy pillanatra végre hajtódanak az utasítások.De az időzítés csak az utolsónál kerül igazából kivitelezésre.Próbáltam for függvénnyel is, de ugyan úgy nem működik.A segítséget előre is köszönöm.
(#) David.zsombor válasza Beachway hozzászólására (») Jan 8, 2012 /
 
Esetleg egy változót csökkentesz várakozás helyett?
(#) icserny válasza Beachway hozzászólására (») Jan 8, 2012 /
 
Nekem ez így működik. A __delay_cycles(1000) MCLK = 1 MHz-hez van méretezve...
  1. /**----------------------------------------------
  2.  *   Késleltető eljárás (1 - 65535 ms)
  3.  *-----------------------------------------------
  4.  * \param delay a késleltetés ms egységben megadva
  5.  */
  6. void delay_ms(uint16_t delay) {
  7.   uint16_t i;
  8.   for(i=0; i<delay; i++) {
  9.     __delay_cycles(1000);
  10.   }
  11. }
(#) szitko válasza icserny hozzászólására (») Jan 8, 2012 /
 
Mi az "uint16_t", és hol találok róla több infót?
A C könyveimben nem találtam semmit róla.
Következő: »»   26 / 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