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   82 / 139
(#) DecebaL válasza icserny hozzászólására (») Okt 18, 2012 /
 
Hú... ez engem is érdekelne, remélem sikerrel jársz.
(#) szitko hozzászólása Okt 19, 2012 /
 
Sziasztok.

Egy kis segítséget kérnék a megszakításokkal (energiatakarékos móddal) kapcsolatban.

Tehát, három (négy) modul megszakítását használom. ADC, PORT2, USCIAB0TX, USCIAB0RX.
Elsőnek az ADC -nél indítom el a LPM0 módot, "__low_power_mode_0();" és ebből értelemszerűen a "__low_power_mode_off_on_exit();" paranccsal szállok ki.
A kérdésem, hogy a többi modulnál is ki kell adni az LPM0 parancsot, és az LPM0 exit-tel kell befejezni a megszakítást?
Mert ha így teszek, akkor az USCIAB0TX megszakítás hívásánál leáll a programom, de ha csak simán "_EINT();" parancsot adok ki, akkor nem.
(#) icserny válasza szitko hozzászólására (») Okt 19, 2012 /
 
Ha a főprogram alvásba tette magát, akkor onnan csak az "__low_power_mode_off_on_exit();" tudja felébreszteni.

Mert mi is történik?
A főprogram beállítja az SR regiszterben az "energiatakarékos" biteket. Amikor egy megszakítás beüt, akkor a PC és az SR regiszterek automatikusan elmentésre kerülnek a veremtár tetején, s törlődnek az "energiatakarékos" bitek (talán egy kivételével), feléled a CPU. Amikor azonban vége a megszakításnak, automatikusan visszaállításra kerül SR és PC eredeti tartalma, tehát a CPU visszaalszik.

Hogy lehet ebből kikeveredni?
Csak úgy, hogy a megszakítás végén, visszatérés előtt megmachináljuk (praktikusan töröljük) a veremtár tetején eltárolt SR "energiatakarékos" bitjeit, hogy a visszaállítás után ne vigye alvásba a CPU-t. Ezzel "felébresztjük a főprogramot. Na, pont ez a machinálást csinálja a "__low_power_mode_off_on_exit();" függvényhívás! Használni mindazon megszakításokban kell, amelyeknek feladata a főprogram felélesztés.

Az, hogy egy megszakításnak feladata-e a főprogram felébresztése, az az adott alkalmazás megszervezésétől függ.
(#) szitko válasza icserny hozzászólására (») Okt 19, 2012 /
 
Köszi szépen.

Menet közben megtaláltam a hibát. Alvó állapotból akartam alvó állapotba küldeni.
(#) trudnai hozzászólása Okt 24, 2012 /
 
Sziasztok, kicsit off, de gondoltam itt par ember ismeri a Launchpad demo kartyakat, hatha ezt a valtozatot is megrendelte valaki...

A kerdesem csupan annyi lenne, hogy rendelt valaki anno az ARM-es Launchpad demo kartyabol (LM4F120), mikor meg $5-ert lehetett elorendelni? Nekem meg mindig nem jott meg, pedig az volt mar vagy 2 honapja (raadasul USA-ban vagyok, tehat meg csak az sem lehet, hogy akad a szallitas Mo-ra)
(#) icserny válasza trudnai hozzászólására (») Okt 24, 2012 /
 
Ha ott rendelted meg, akkor estore.ti.com-on meg lehet nézni, hogy mikor adják postára. Az előrendeléseket szeptember 25-én kezdték kiszállítani, de van, akinek novemberre ütemezték a kiszállítást. Én még az előrendelés megnyitása előtt regisztráltam magamat, így szept. 25 után pár nappal meg is kaptam.
(#) moderboy válasza trudnai hozzászólására (») Okt 25, 2012 /
 
Csak előrendelted vagy ki is fizetted már? Én 2 hete rendeltem meg, Dec 27.-re írták a becsült időt mire ideér. Gondolom ebből sem tudnak annyit gyártani, mint amennyit megvennénk.
(#) VaZso8 válasza trudnai hozzászólására (») Okt 25, 2012 /
 
Én szeptember 27-én rendeltem és Mikulásra ígérik.

Nézd meg a visszaigazoló e-mailt vagy az estore oldalon a rendelés pillanatnyi állapotát.
(#) szitko hozzászólása Okt 25, 2012 /
 
Sziasztok.

Lenne pár kérdésem, de nem mind kizárólag MSP-vel kapcsolatos, ezért előre is elnézést kérek!

1: Miután megoldódott minden problémám az rs5c372a RTC-vel kapcsolatban, akadt egy kis gondom a kiíratással. Az időt 1 másodpercenként íratom ki az LCD-re, rögtön a Port megszakításban, amit az RTC generál. A dátumot és a napot csak egyszer az induláskor. A kérdés az lenne, hogy hogyan mondjam meg a vezérlőnek, hogy ha elmúlt éjfél, frissítse a dátumot. Csináltam egy sima feltételt, amivel az órát figyelem "if(hour == 0)", de akkor amíg 0 óra van, másodpercenként a dátumot is frissíti fölöslegesen.

2: Ez nem igazán MSP hanem Processing.
A mikroverzérlő (g2553) elment egy csomó adatot, egy EEPROM-ba (24lc512). Ezeket az adatokat "valamikor, ha el van indítva a program..." bluetooth-on keresztül elküldi a számítógépnek, ahol egy koordináta rendszerben megjelenik, majd az adatokat elmenti egy fájlba. A problémám ez utóbbi pontnál van.
Tehát: Egy sima TXT fájlba mentem el a mikrovezérlőből érkező adatokat. Ha a programot elindítom ebből a fájlból behívja az adatokat és megjeleníti a koordináta rendszerbe, de ha lekérem és menteni szeretném a friss adatokat, akkor a régieket felülírja. Ezt hogy lehetne elkerülni?
(#) DecebaL válasza szitko hozzászólására (») Okt 25, 2012 /
 
1: Írd be a feltételbe a percet és a másodpercet is így: if ((hour==0) && (min==0) && (sec==0))

2: A pc oldali programot te írtad?
(#) szitko válasza DecebaL hozzászólására (») Okt 25, 2012 /
 
Idézet:
„if ((hour==0) && (min==0) && (sec==0))”

Itt nem úgy van, hogy az első igaznál, teljesül a feltétel? Vagy keverem valamivel?
Idézet:
„A pc oldali programot te írtad?”

Igen, Processingben, de még csak részletekben van kész. A fájlkezelést ezen mintaprogram alapján írtam.
(#) kissi válasza szitko hozzászólására (») Okt 25, 2012 /
 
Szia!

ÉS-nél az első nullánál hamis !

Steve
(#) DecebaL válasza szitko hozzászólására (») Okt 25, 2012 /
 
Igen a vagy-al kevered itt csak akkor igaz ha mindegyik feltétel igaz. Ha csak a (h==0) használod akkor egy teljes órán át igaz.
A Processing-el még nem volt dolgom, de gondolom itt is valahogyan a fájl végére kéne pozicionálni és onnan elkezdeni írni be az új adatokat. Ezek szerint mindig újra létrehozod a fájlt és utána írod be az adatokat és ezért írja mindig felül.

1. A meglévő fájlt megnyitod olvasásra (Open) majd lezárod
2. Majd a filet megnyitod szerkesztésre (Append) ekkor automatán a fájl végére kéne mutasson a mutató és ha beírsz valamit akkor a végére kéne írjon text fájl esetén, ha végeztél akkor itt is lezárod a fájlt.
A hozzászólás módosítva: Okt 25, 2012
(#) icserny válasza szitko hozzászólására (») Okt 26, 2012 /
 
Idézet:
„ha lekérem és menteni szeretném a friss adatokat, akkor a régieket felülírja. Ezt hogy lehetne elkerülni?”
Ezen a fórumon mutatnak egy megoldást. Ha jól értem az ott leírtakat, akkor a Processing nyelvi eszközeivel nincs rá lehetőség, ezért a Java szintjére kell "lesüllyedni". (Hasonlóan ahhoz, mint amikor a C programot assembly betéttel kell megfejelni...)

Megjegyzés: a másik lehetőség, hogy beolvasás után előbb visszaírod a beolvasott adataidat, utána hozzáírsz. Ez nem túl hatékony módszer, de ha nincs túl sok adatod, akkor ez is járható út...
A hozzászólás módosítva: Okt 26, 2012
(#) szitko válasza icserny hozzászólására (») Okt 26, 2012 /
 
Köszönöm a linket! Átnézem, hátha sikerül összehozni.

DecebaL.
Valóban a "vagy"-al kevertem össze, köszönöm.
Idézet:
„Ezek szerint mindig újra létrehozod a fájlt”

Nem, nem hozom létre mindig a filet. Azt a részt kiszedtem a példaprogramból.
Lehet, hogy egy "jobb" fordító programot kellene keressek a Processing helyett?

kissi: Köszi!

Más:
Ma, kb. két hónap elteltével megkaptam a Mouser-től a "Fram MCUs ....." könyvet.
Szerintem riksával jött Magyarországig.
(#) icserny hozzászólása Okt 26, 2012 / 1
 
Itt található egy leírás arról, hogy hogyan lehet a CCS v5 alá terminál ablak bővítményt installálni.
(#) moderboy hozzászólása Okt 26, 2012 /
 
Ha jól rémlik valaki itt adott egy linket még régebben, ahol az FRAM-os TI vezérlőkről lehetett könyvet rendelni. Jelentem a könyv megérkezett, köszönöm a lehetőséget.
(#) putr4 hozzászólása Okt 26, 2012 /
 
Sziasztok!

Olvasgattam a launchpad user's guide-ját és találtam benne egy olyan részt, hogy a launchpaddal programozható több F szériás típus, mint például a 2274-es RF modulos target board, illetve vannak egyéb target boardjai is a ti-nek elviselhető áron (10$). A problémám csak annyi, hogy a launchpadon J4-hez nem igen találok csatlakozót/tüskesort, ahol meg találok ott olyan árban van, hogy kijön belőle még egy startkit. Nem tudjátok hol tudnék ilyet beszerezni?

User's guide ennyit ír:
"connector J4 must be populated with a 0.050-in (1.27-mm) pitch male header"
(#) icserny válasza putr4 hozzászólására (») Okt 26, 2012 /
 
Ez inkább a Vásárlás, hol kapható? c. topikba való. A kulcsszavak: Tördelhető tüskesor, 1,27mm-es, 90°-os (ha hajlított kell...)

(#) szitko válasza icserny hozzászólására (») Okt 28, 2012 /
 
Sikerült megoldanom a Processingben, a file újraírási problémámat. De......Adódott egy kisebb problémám, amire nem találom a választ.
Az file újraíráshoz most ezt használom:
  1. void mousePressed() {
  2.  // newData++;
  3.   try {
  4.     filewrite = new FileWriter("data.txt", true);
  5.     filewrite.write( TAB + adat, 0, adat.length() + 1 );
  6.     file.close();
  7.     println("Írás kész!");
  8.   }
  9.   catch(Exception e) {
  10.     println("Nem találom a filet!");
  11.   }
  12. }

Viszont a file elérési útját "("data.txt", true)" itt pontosan meg kell adjam, különben nem találja a file-t. Tehát pl. ilyen formában: "c:/Users/Gabcsi/Documents/Processing/file_io/data/data.txt".
A problémám és a kérdésem csak az, hogy ha lefordítom véglegesen a programot, vagyis .exe állományt csinálok belőle, akkor másik számítógépen nem fogom tudni futtatni a programot a file elérési útja miatt? Vagy, hogy adjam meg a file elérési útját, hogy mindig ott keresse ahol a program van?
(#) uli hozzászólása Okt 28, 2012 /
 
Sziasztok! Újra elővettem a launchpadot, mert van egy kis időm. Icserny cikkeit tanulmányozom újra, viszont most elakadtam.
A program az interruptos cikk alapján:
  1.  
  2. #include "io430.h"
  3. #include "intrinsics.h"
  4.  
  5. int main( void )
  6. {
  7.   WDTCTL = WDTPW + WDTHOLD;
  8.   P1DIR |= (BIT0+BIT6);  // kimenetek
  9.   P1DIR &= ~ BIT3;   // bemenetek
  10.  
  11.  
  12.    
  13.   P1REN |= BIT3;    //belső felhúzó  mintha ez nem működne
  14.   P1IES |= BIT3;   // lefutó élre reagál
  15.   P1IFG &= ~BIT3;  // ifg törlése
  16.   P1IE  |= BIT3;   // interrupt enabled p1.3
  17.   __enable_interrupt();      // A programmegszakítás engedélyezése
  18.  
  19.   while(1)
  20.   {
  21.     P1OUT ^= BIT6;
  22.     __delay_cycles(50000);
  23.   }
  24. }
  25.  
  26. #pragma vector= PORT1_VECTOR
  27. __interrupt void Port_1(void)
  28. {
  29.   P1OUT ^= BIT0;
  30.   P1IFG &= ~BIT3;
  31. }


A probléma: A gomb lenomására nem fut le az interrupt. A gomb működik
Viszont ha A P1.3-at tápfeszre húzom, minden működik, ki tudom választani, hogy fel, vagy lefutó élre működjön. Olyan, mintha a belső ellenállással lenne gond. G2452-t használok. Mi a megoldás? Köszi!
(#) szitko válasza uli hozzászólására (») Okt 28, 2012 / 1
 
A felhúzó ellenállás bekapcsolása kevés! Próbáld meg így:
  1. P1REN |= BIT3;    //belső felhúzó  mintha ez nem működne
  2.  
  3. P1OUT |= BIT3;    // Így felhúzás !
  4. P1OUT &= ~BIT3; // Így pedig le !
  5. ....
(#) uli válasza szitko hozzászólására (») Okt 28, 2012 /
 
Tökéletes!! Köszönöm a gyors választ!
(#) icserny válasza szitko hozzászólására (») Okt 28, 2012 /
 
Erre egy Java programozó tudna választ adni. Vagy a Processing forráskódját kellene tanulmányozni, megnézve, hogy abban hogyan oldják meg.
(#) idlob válasza szitko hozzászólására (») Okt 28, 2012 /
 
Furcsa, mert a dokumentációból kiindulva, ha nem létezik a fájl, akkor megpróbálja létrehozni. Valami tehát megakadályozza ebben.
Ehhez egyrészt jó lenne tudni, milyen kivételt dob, amit megtehetsz pl. a catch ág módosításával:
  1. catch(IOException e) {
  2.     println(e.getMessage());
  3. }

Illetve megpróbálkozhatsz ezzel, hátha az explicit utasítás csodát tesz:
  1. File file =new File("data.txt");
  2. file.createNewFile(); //A felülírástól nem kell félni, csak akkor hozza létre ha nem létezik
  3. FileWriter fileWriter = new FileWriter(file.getName(),true);
A hozzászólás módosítva: Okt 28, 2012
(#) szitko válasza idlob hozzászólására (») Okt 29, 2012 /
 
Köszi mindkettőtöknek.

A dokumentációt olvastam, és nem a file létrehozásával van a gondom, illetve azzal is.
A pontos probléma: Csináltam egy üres file-t (Notepad, data.txt), oda, ahol a programom forráskódja van, illetve abba a könyvtárba amit a processing készít a file-nak (betűkészlet, stb.), jelen esetben: "c:\Users\Gabcsi\Documents\Processing\file_io\data\".
Ha "manuálisan" beírok pár adatot a file-ba, akkor ezt szépen ki is írja nekem a programom, tehát megtalálja a file-t.
Behívás:
  1. String[] lines;
  2. ...
  3. void setup(){
  4.    lines = loadStrings("data.txt");
  5.    ...
  6. }
  7. stb...

Ha viszont írni szeretnék ebbe a file-ba, az csak úgy tehetem meg, ha a teljes elérési utat megadom, tehát:
"filewrite = new FileWriter("c:/Users/Gabcsi/Documents/Processing/file_io/data/data.txt", true);"
mert ha nem akkor létrehoz egy "data.txt" file-t abba a könyvtárba, ahol a fordító program (Processing) található, jelen esetben: "d:\Msp430_and_all_Msp\processing-1.5.1\", és abba írja a mikrovezélőtől érkező adatokat.
Tehát az írás/olvasás jól működik, csak ha nem adok meg elérési utat, akkor csak az adott számítógépen tudom használni a programot.

Remélem így érthetőbb a problémám.
(#) icserny válasza szitko hozzászólására (») Okt 29, 2012 /
 
Ismér a fórumokat turkáltam meg, s emitt meg amott találtam érdekes információkat.

  1. mypath = parent.dataPath("data.txt"); vagy
  2. mypath = parent.dataPath("data/data.txt");
lehet, hogy megmondja a teljes elérési utat, ami az íráshoz kell.
(#) szitko válasza icserny hozzászólására (») Okt 29, 2012 /
 
Köszönöm szépen!

Menet közben sikerült "megoldanom" a problémát.
Ha, hogy téged idézzelek, a "Java szintjén" olvasom be a file-t (FileReader), akkor mindkét műveletet (írás/olvasás) ugyanabban a könyvtárban végzi el.
Összeraktam egy egyszerű programot, ami csak egy "Helló"-t ír be az egér gombnyomására, egy fileba, futtatható állomány készítettem belőle, bemásoltam a "helyére", és szépen működik. Megtalálja a filet írásnál olvasásnál, és ha kitörlöm, újat készít a megadott helyre. Ja és a lényeg, hogy nem írja felül a már meglévő adatokat, és ez volt a kezdeti hiba.

"Sajnos", hogy minden jól működjön, és meg is értsem, sokkal mélyebbre kell majd ássak a Processing/Java lelkivilágába.

Nagyon köszönöm a segítségeteket, és elnézést az off-ért, de pár hasonló kérdésért úgy gondolom kár létrehozni egy külön topikot, meg a Processing, inkább programozás mint elektronika, bár jelen esetben az MSP-hez kapcsolódik.
(#) idlob válasza szitko hozzászólására (») Okt 29, 2012 /
 
Vagy úgy! Ez a viselkedés a legtöbb nyelven "alapértelmezett". Azaz ha nem abszolút elérési utat adsz meg, akkor a futtatott binárishoz képest relatívan helyezi el a fájlt. Vagyis ha csak a nevét írod le, akkor közvetlenül a .exe, vagy .jar , stb mellé.
(#) szitko válasza idlob hozzászólására (») Okt 29, 2012 /
 
A programozás ezen formájával még csak "most" ismerkedem, ezért igazából semmit nem tudok ezekről a dolgokról. Jelen projektemben is csak azért kell, mert egy csomó adatot szeretnék tárolni, ami a mikrovezérlőben, vagy EEPROM/ok-ban már nem férne el, és ha már a számítógépen tárolom, akkor meg is jeleníthetem azokat.
A Processinget azért választottam, mert viszonylag egyszerűbbnek tünt mint pl. a Code Blocks, vagy a Visual Studio, amiket talán még elindítani sem tudnék, nemhogy programot fejleszteni velük. Bár ennek is megvannak a hátrányai. (nem is kevés)
Következő: »»   82 / 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