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   101 / 139
(#) szitko válasza szitko hozzászólására (») Ápr 6, 2013 /
 
Az IAR 5.51.6-ban megtaláltam, de a CCS 5.3.0...90 sajnos még nem támogatja.
(#) mechanika hozzászólása Ápr 11, 2013 / 1
 
Sziasztok!

Két db, sorba kapcsolt AA-s áramforrás feszültségét (egy tizedes volt pontossággal) szeretném gombnyomásra megmérni 2553-as mikrovezérlővel, majd az eredményt egy leden keresztül kiíratni úgy, hogy hosszú villanások száma mutatná meg a mért egész voltok számát, ezután a rövid felvillanások száma mutatná a tizedvoltok számát.

Megköszönnöm, ha valaki tudna segíteni a dologban!
(#) szitko válasza mechanika hozzászólására (») Ápr 11, 2013 /
 
Az AA (3V) áramforrásról megy a mikrovezérlő is, vagy az független tőle?
(#) mechanika válasza szitko hozzászólására (») Ápr 12, 2013 /
 
Igen, de step-up on keresztül.
(#) szitko válasza mechanika hozzászólására (») Ápr 12, 2013 /
 
A "step-up" miért kell?
A g2553-as 1.8V-ról már működik. A boost konverter 1.8V-ig fölösleges, mert elég sok rajta a veszteség.
A felépítése viszont elég egyszerű:
- Figyeled a gomb állapotát, akár egy feltételben, akár megszakításban. (én ez utóbbit választanám)
- Ha változás történt, megnyomod a gombot, elindítod az AD konverziót.
- Kiszámolod a feszültséget. pl. ha a referencia a Vcc, akkor: ADC_vale*Vcc/1024.
- A kiszámolt értéket elosztod annyival ahány tizedes kell.
- Egy Timer modullal villogtatod a ledet, úgy, hogy két értéket adsz meg neki. pl: egyesek = 100, tizedes = 50. De ezt megcsinálhatod egy egyszerű "delay"-al is.
(#) Mybuster hozzászólása Ápr 14, 2013 /
 
Üdv. sziasztok van egy MSP-s LCD.s feszütlség mérőm Bővebben: Link Működik szépen viszont 6 tizedet ugrál a mért feszültség, hogy tudnék szűrni a bementen?

Üdv. Mybuster
A hozzászólás módosítva: Ápr 14, 2013
(#) icserny válasza Mybuster hozzászólására (») Ápr 14, 2013 /
 
A programot Energia IDE fordította? Abban valamiért ugrál az ADC konverzió eredménye, de nem tudtam rájönni, hogy miért. Tisztán C-ben megírva ((lásd pl. itt)( nem volt ilyen gondom, akkor sem, ha az Energia fordította, de nem a beépített függvényeket használtam (tehát nem az mspgcc fordító a hibás).

A belinkelt kapcsolásban az 50 kOhmos soros ellenállás nem biztos, hogy nyerő, közvetlenül az analóg bemenetre tegyél egy kondenzátort (100 nF is megteszi).
(#) Mybuster válasza icserny hozzászólására (») Ápr 14, 2013 /
 
Üdv igen energia8 al lett fordítva. Bocs igazabol csak hat századot ugrál na de az se mindegy rendben megfogadom tanácsod, igen az az ohm érték hibás potméterrel jó volt...
(#) Mybuster válasza Mybuster hozzászólására (») Ápr 14, 2013 /
 
Hát nem sokat segített a kondi se. Am ha megnézitek az eredeti ardunios videot ugyanúgy nála is ingadozik + - 0.06V ez érdekes.
(#) mechanika válasza szitko hozzászólására (») Ápr 16, 2013 /
 
Köszönöm!

Ha kihagyom a mikrovezérlő 3,3v-os step-up ját és közvetlenül a két AA-ról táplálom akkor:
1. feszültség méréskor belső referenciát kell választanom?
2. 2,5v nál nem tudok magasabb feszültséget mérni?
(#) szitko válasza mechanika hozzászólására (») Ápr 16, 2013 /
 
Idézet:
„1. feszültség méréskor belső referenciát kell választanom?”

Nem feltétlen szükséges, de ha külső referenciát választasz, akkor a referencia feszültséget elő is kell állítani. Erre a legegyszerűbb a TL431. De a Te esetedben inkább a belsőt választanám, mert miden plusz alkatrész, plusz energiát jelent, ami jelen esetben elég kevés.
Idézet:
„2. 2,5v nál nem tudok magasabb feszültséget mérni?”

Miért ne tudnál! Ha a Vcc a ref. akkor a Vcc fesz.-ig tudsz mérni.
Pl. REF = Vcc = 3.5V akkor ADC 1023 = 3.5V

Azt elfelejtettem "mondni" az előző hsz-ben, hogy ha befejezted az AD konverziót, kapcsold ki az ADC-t a következő konverzióig. (energiatakarékosság).
(#) mechanika válasza szitko hozzászólására (») Ápr 16, 2013 /
 
A 2. kérdés arra vonatkozott volna, hogy ha pl.: a legmagasabb feszültségű 2,5v belső referenciát választok, akkor nem tudok ennél magasabb értékű feszültséget mérni.
Jól gondolom?
(#) szitko válasza mechanika hozzászólására (») Ápr 16, 2013 /
 
Igen. Úgy ahogy írtam.
REF. = REF2_5V high, akkor ADC 1023 = 2.5V,
REF. = REF2_5V low, akkor ADC 1023 = 1.5V
A "REF2_5V" az ADC10CTL0 6. bitje. (ha jól emlékszem)
(#) VaZso8 válasza mechanika hozzászólására (») Ápr 16, 2013 /
 
Miért ne tudnál?

Közvetlenül persze valóban nem, de közvetetten igen.
Keresőszó: ellenállásosztó
(#) DJ Tacki válasza mechanika hozzászólására (») Ápr 16, 2013 /
 
Annyit még hozzátennék, hogy természetesen a mérendő feszültség leosztásával (a 0 - referencia fesz tartományba) elméletileg bármekkora feszültséget mérhetsz...
(#) szitko válasza VaZso8 hozzászólására (») Ápr 16, 2013 /
 
Igen, azt elfelejtettem hozzátenni, hogy megfelelő elektronikával (feszosztó, opamp, stb), akár Paksot is meg lehet mérni.
Kösz a kiegészítést.
(#) mechanika válasza szitko hozzászólására (») Ápr 16, 2013 /
 
Köszönöm!

Még feltartanálak egy kicsit:

Ugyebár egy tizedesre van szükségem, ha ref 3,3v akkor 1023/33=31 egy tized értéke.
Ebből hogyan mondom meg neki, hogy egyesből kettőt villogj, tizedből pedig ötöt.
Amire én gondoltam:
az egész voltok számát kivillogni viszonylag egyszerűen megy megnézem , hogy a négy tartomány közül melyikbe tartozik a mért érték 0-3-ig kap egy ciklusváltozót és annak megfelelően indítok egy for ciklust . Ez után kivonom az egész volt értékét (ami a ciklusváltozóval megegyezik) a mért értékből, majd megvizsgálom, hogy a különbség a 10 tartomány közül melyikbe esik és megint kap egy ciklusváltozót és mehet a for ciklus.

Esetleg kifejtenéd nekem, hogy hogyan lehetne egyszerűbben megoldani (pl.:timer modullal, ahogyan korábban írtad).
A hozzászólás módosítva: Ápr 16, 2013
(#) DJ Tacki válasza mechanika hozzászólására (») Ápr 16, 2013 /
 
A feladatot mindenképp 3 részre bontanám, mert sokkal könnyebb átlátni és tesztelni:
Először el kell végezni az ADC mérést, és az eredményt feszültség dimenzióba alakítani (célszerűen milivolt, vagy valami hasonló, hogy ne kelljen lebegőpontos számítás).
Második lépés hogy az egész és tizedes értékeket külön változóba teszed (milivoltot elosztod 100-al -> tizedes, ennek a maradékát 10-el -> egész).
Harmadik lépés, hogy csinálsz egy villogtató függvényt, aminek átadod paraméterként a lementett egész, illetve tizedes változó tartalmát.
(#) mechanika válasza DJ Tacki hozzászólására (») Ápr 16, 2013 /
 
A 2. lépés nem teljesen világos:
pl.: 2,5 v a mért feszültség. 2,5v=2500mV 2500/100= 25.
A 25-ből hogyan lesz nekem 5 ami a tizedesek száma??
(Lehet hogy nagyon este van... )
A hozzászólás módosítva: Ápr 16, 2013
(#) szitko válasza mechanika hozzászólására (») Ápr 16, 2013 /
 
Csak sorjában.
Idézet:
„ha ref 3,3v akkor 1023/33=31 egy tized értéke”

Nem.
Példa: ref=3.3V akkor 3300mV/1023=3,22 ebből csinálunk egy egész számot = 322.
Az AD konverzióból így lesz fesz:
A konverzió eredménye: XY = ADC10MEM; // pl. XY = 512
eredmény = XY * ref, azaz 512*322 = 164864
ADC_fesz = eredmény/10000, azaz 164864/100000=1,6Volt
Mivel neked egy tizedes kell, elég 10000-el osztani. Így kapod eredményként a 16-ot.
Ezt kell "szétszedni"
egyesek = ADC_fesz/10; // 16/10=1
tizedes = ADC_fesz%10; // 16%10=6
Megvan a két értéked.
Innentől jön a villogtatás rutin.
(#) mechanika válasza szitko hozzászólására (») Ápr 16, 2013 /
 
Köszönöm a felvilágosítást!

Azt hiszem minden világos (95%).
Most az ágyikómra szavazok holnap meg megpróbálom összerakni és tesztelni!

Még egyszer köszöntem a türelmedet.
(#) szitko válasza mechanika hozzászólására (») Ápr 16, 2013 /
 
Még egy kis kiegészítés. A változók definiálására oda kell figyelni. Célszerű itt "long" típusú változókat használni.
Most van egy kis dolgom, de utána leírom a Timerrel megvalósított kijelzés menetét is.
(#) szitko válasza mechanika hozzászólására (») Ápr 17, 2013 /
 
Visszatérve a kijelzésre. A legegyszerűbb megoldás, ha nincs más dolga a mikrovezérlőnek, a "__delay_cycles()" függvény használata.
Írsz egy függvényt, ahol ms-ban adhatod meg az időt, hogy ne keljen nagy számokkal dolgozni.
Egy másik függvénnyel pedig megvalósítod a kijelzést. Az előző példánál (változóknál) maradva, én így valósítanám meg a kijelzést:
  1. void led_vill(char egyesek, char tizedes){
  2.                while(egesek){
  3.                       PxOUT |= BITx;    // led be
  4.                       delay_ms(1500); // 1,5 másodpercig világít a led
  5.                       PxOUT &= ~BITx;    // led ki
  6.                       delay_ms(1000);  // 1 mp várakozás
  7.                       egyesek--;
  8.                }
  9.                while(tizedes){
  10.                       Ez ugyanolyan ciklus mint az előző, csak rövidebb időzítésekkel.
  11.                }
  12. }
(#) mechanika válasza szitko hozzászólására (») Ápr 20, 2013 /
 
Na most birkózok vele!

Az jó, ha a változókat "volatile unsigned long"-nak deklarálom?
(#) szitko válasza mechanika hozzászólására (») Ápr 20, 2013 /
 
A "volatile" fölösleges. Simán "long" elég.
(#) mechanika válasza szitko hozzászólására (») Ápr 20, 2013 /
 
Eddig jutottam:

  1. #include "msp430.h"
  2. #include "stdint.h"
  3. #include "intrinsics.h"
  4.    
  5.    
  6.   volatile unsigned long e;
  7.   volatile unsigned long ADC_fesz;
  8.   char egyesek;
  9.   char tizedes;
  10.  
  11.  
  12.  
  13. void main(void)
  14. {
  15.   WDTCTL = WDTPW + WDTHOLD;                 // Letiltjuk a watchdog időzítőt
  16.   ADC10CTL0 = ADC10SHT_3                    // mintavétel: 64 óraütés
  17.              | ADC10ON                      // Az ADC bekapcsolása
  18.              | SREF_0                       // VR+ = AVCC és VR- = AVSS
  19.              | ADC10IE;                     // ADC10 megszakítás engedélyezése
  20.   ADC10CTL1 = ADC10SSEL_0 | INCH_1;         // ADC10OSC az órajel, A1 a bemenet
  21.   ADC10AE0 |= BIT1;                         // P1.1 analóg funkció engedélyezése
  22.  
  23.          P1DIR |= (BIT0 + BIT6);                  //P1.6 és 1.0 legyen digitális kimenet
  24.  
  25.          P1REN |= BIT3 ;   // fehúzó ell. bekapcs
  26.          P1OUT |= BIT3 ;   // Vcc-re
  27.          P1DIR &= ~BIT3 ;  //P1.3 legyen digitális bemenet
  28.  
  29. while(1){
  30.     if (!(P1IN & BIT3)){
  31.    
  32.     ADC10CTL0 |= ENC + ADC10SC;             // Konverzió engedélyezése és indítása
  33.    
  34.     e = ADC10MEM*322;
  35.     ADC_fesz = e/10000;
  36.     egyesek = ADC_fesz/10;
  37.     tizedes = ADC_fesz%10;
  38.     }
  39.   }
  40.  
  41. }  
  42. void led_vill(char egyesek, char tizedes){
  43.  
  44.               while(egyesek){
  45.                       P1OUT |= BIT0;    // led be
  46.                       __delay_cycles(1000000); //  másodpercig világít a led
  47.                       P1OUT &= ~BIT0;    // led ki
  48.                       __delay_cycles(1000000);  //  várakozás
  49.                       egyesek--;
  50.                }
  51.                while(tizedes){
  52.                       P1OUT |= BIT0;    // led be
  53.                       __delay_cycles(10000000);//  másodpercig világít a led
  54.                       P1OUT &= ~BIT0;    // led ki
  55.                       __delay_cycles(1000000);  //  várakozás
  56.                       egyesek--;
  57.                }}


Nem akartam kiteregetni a szennyest,de nincs tippem...
(#) szitko válasza mechanika hozzászólására (») Ápr 20, 2013 /
 
Idézet:
„| ADC10IE; // ADC10 megszakítás engedélyezése”

Engedélyezed az ADC megszakítást. De hol van?
(#) mechanika válasza szitko hozzászólására (») Ápr 20, 2013 /
 
Benne maradt.

Kivettem- nem megy.

Betettem a megszakítást- nem megy...
(#) szitko válasza mechanika hozzászólására (») Ápr 20, 2013 /
 
Na.....
Idézet:
„Betettem a megszakítást- nem megy...”

Engedélyezted is?

A már kiszámolt értékeket, hogy juttatod el a "led_vill" függvénynek? A led_vill függvény másodig ciklusában, nem az "egyesek" változót kell csökkenteni egyel, hanem a "tizedes" változót, de ezt lehet még én rontottam el.
(#) szitko válasza mechanika hozzászólására (») Ápr 20, 2013 /
 
Ilyesmit szeretnél?
Következő: »»   101 / 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