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   85 / 139
(#) Kovabe válasza uli hozzászólására (») Nov 5, 2012 /
 
Szia csak ötletelek, mértél tápfeszt amikor nem mutat jol illetve a feszültségoszto végén mértél feszültséget (nem cserélted fel a két ellenállást?
(#) moderboy válasza uli hozzászólására (») Nov 5, 2012 /
 
Próbáltad másik potival?
(#) icserny válasza uli hozzászólására (») Nov 6, 2012 /
 
Idézet:
„0-5V-nak a bemeneten megfeleltettem 0-2,5 értéket a kijelzőn.”
Ugye, tudod, hogy az ADC-vel nem lehet 5 V-ig mérni? Max. a tápfeszültségig, vagy a referenciáig (amelyik kisebb!).

Kapcsolási rajz is jó lenne (kondenzátor van az ADC bemeneten).
Programrészlet is jó lennea (az ADC konfigurálása és a mérések lebonyolítása).
(#) uli válasza icserny hozzászólására (») Nov 6, 2012 /
 
Szia! Azért írtam utána, hogy van feszültségosztó, melynek értéke össz 250k. A bemenetre 3,3Vnál nem jut több, az a referencia is. A kapcsolás próbapanelon launchpaddal működött, de a kontrollert kivéve nem megy.
A program: (eredetileg 4511-e használtam volna, de csak közös anódos kijelzőm volt, ezért az elején a sok //) k1,k2 a két kijelző közös pontja, a p1.1-re van kötve egy fesz osztó, P1.0, P1.1-1.7 a kijelző lábai, + van egy tizedespont kimenet.

  1. #include "msp430g2452.h"
  2.  
  3. //  DCBA=8421
  4. //  int a = BIT0;
  5. //  int b = BIT1;
  6. //  int c = BIT2;
  7. //  int d = BIT3;
  8. int a = BIT0;           //Segment A on P1.0
  9. int b = BIT7;           //Segment B on P1.7
  10. int c = BIT2;           //Segment C on P1.2
  11. int d = BIT3;           //Segment D on P1.3
  12. int e = BIT4;           //Segment E on P1.4
  13. int f = BIT5;           //Segment F on P1.5
  14. int g = BIT6;           //Segment G on P1.6
  15. int dp = BIT3;
  16.  
  17.  
  18. //  int one = (a);             
  19. //  int two = (b);             
  20. //  int thr = (a+b);           
  21. //  int fou = (c);             
  22. //  int fiv = (c+a);           
  23. //  int six = (c+b);
  24. //  int sev = (c+a+b);
  25. //  int eig = (d);
  26. //  int nin = (d+a);
  27.  
  28.  
  29.  
  30.   int k1 = BIT4;
  31.   int k2 = BIT5;
  32.  
  33.  
  34.  
  35. void main(void)
  36. {
  37.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  38.  
  39.   int nul=(a+b+c+d+e+f);
  40.   int one=(b+c);
  41.   int two=(a+b+g+e+d);
  42.   int thr=(a+b+g+c+d);
  43.   int fou=(f+g+b+c);
  44.   int fiv=(a+f+g+c+d);
  45.   int six=(a+f+e+d+c+g);
  46.   int sev=(a+b+c);
  47.   int eig=(a+b+c+d+e+f+g);
  48.   int nin=(a+b+c+d+f+g);
  49.  
  50.   ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
  51.   ADC10CTL1 = INCH_1;                       // input A1
  52.   ADC10AE0 |= BIT1;                         // PA.1 ADC option
  53.   BCSCTL1 = CALBC1_1MHZ;
  54.   DCOCTL = CALDCO_1MHZ;
  55.    
  56.   P2DIR |= (k1+k2+dp);                
  57.   P2OUT |= (k1+k2);  //pnp tranyó miatt
  58.   P2OUT |= dp;
  59.   P1DIR |= (a+b+c+d+e+f+g);
  60.   P1OUT |= (a+b+c+d+e+f+g);
  61.  
  62.  
  63.  
  64.  
  65.   while (1)
  66.   {
  67.     ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
  68.     __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
  69.    
  70.     if (ADC10MEM >= 1 && ADC10MEM < 410)         // elsö kijelző 0 legyen 0-0,9 bar közt
  71.     {
  72.       P2OUT &=~ k1;
  73.       P1OUT &=~ nul;
  74.       P2OUT &=~ dp;
  75.       __delay_cycles(4000);
  76.       P1OUT |= nul;
  77.       P2OUT |= dp;
  78.       P2OUT |= k1;
  79.     }      
  80.    
  81.    ...
  82.      
  83.   }
  84.  
  85. }
  86.  
  87.  
  88.  
  89. // ADC10 interrupt service routine
  90. #pragma vector=ADC10_VECTOR
  91. __interrupt void ADC10_ISR(void)
  92. {
  93.   __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit  0(SR)
  94. }

(#) uli hozzászólása Nov 6, 2012 /
 
Bővebben: Link

Eddig ilyen szépen működött. A poti értéke azt hiszem 10k. Lehet hogy túl nagy a fesz. osztó értéke?
A hozzászólás módosítva: Nov 6, 2012
(#) exorcist válasza uli hozzászólására (») Nov 7, 2012 /
 
A videóban sem ment 1.9 fölé, biztos, hogy működött 2.0 és a felett?
(#) uli hozzászólása Nov 7, 2012 /
 
Bocs az a videó még 0-1,9 ig volt beprogramozva azóta lett átállítva 2,5-ig, és akkor került ki a próbapanelról, akkor került rá a feszültségosztó, ami 5-ről 3,3-Vra csökkenti a feszültséget. De a lényeg, hogy látod, 0-1,9ig szépen lehet "tekergetni"
(#) szitko válasza uli hozzászólására (») Nov 7, 2012 /
 
Minek akkora fesz osztó?
A képen látható osztó paraméterei:

I = ~340 mikro A
osztás = 1,47:1
osztás = ~ -3.3 dB
ell. = 1/4W
Vcc = 5V

feszoszto.jpg
    
(#) szitko hozzászólása Nov 8, 2012 /
 
Sziasztok.

Egy kis matematikai segítség kellene.

Van egy változóm, nevezzük X-nek, amit kettesével növelek 0-tól 0xffff-ig.
Figyelve az X változót, egy olyan feltétel kellene, ami 256-val teljesül, tehát 256, 512, 768 .... 65536-ig. Hogy lehet ezt a legegyszerűbben megoldani?
(#) DecebaL válasza szitko hozzászólására (») Nov 8, 2012 /
 
Szia!
1. if ((x%256)==0) a feltétel akkor is igaz ha x=0. Ha az x=0 -ra azt akarod hogy ne lépjen be a feltételre akkor ki kell egészíteni x>0 -val a feltételt.
Így: if (((x%256)==0) && (x>0))


(#) Spumifater válasza DecebaL hozzászólására (») Nov 8, 2012 /
 
Talán ez is jó:
if (int(xx/256)==xx/256)

feltéve, hogy xx nem integer változó.
A hozzászólás módosítva: Nov 8, 2012
(#) szitko válasza DecebaL hozzászólására (») Nov 8, 2012 /
 
Köszönöm szépen!

Három napja gondolkodom ezen, de nem esett le a megoldás. Igaz ehhez nagyban hozzájárul az is, hogy két hete, minden másnap 24 órát kell dolgoznom.
(#) icserny hozzászólása Nov 8, 2012 /
 
Ne zavarítsatok már meg! Miért kellene a számot elosztani 256-tal, amikor már gyárilag "el van osztva"? A felső bájt a 256-tal való osztás hányadosát, az alsó bájt pedig az osztás maradékát tartalmazza. Elég tehát megnézni, hogy az alsó bájt nulla-e, vagy sem.

  1. if(!(X&0xFF)) {...}

is jó, de ha optimalizálni kell, akkor a típuskényszerítés vagy a 8- és 16-bites stuktúrák úniójaként definiálva, közvetlenül is vizsgálható X alsó bájtja.
(#) szitko válasza icserny hozzászólására (») Nov 8, 2012 /
 
Én elsőnek ugyan ezt csináltam, csak nem 255-öt írtam, hanem 256-ot, és csodálkoztam, hogy miért nem működik.
(#) neogeo2 válasza icserny hozzászólására (») Nov 8, 2012 /
 
Ez mekkora ötlet, magamtól sosem találtam volna ki ilyet... Én is köszönöm!
(#) icserny válasza neogeo2 hozzászólására (») Nov 9, 2012 /
 
Nem kellett kitalálni. Csak alkalmaztam a 100-zal való oszthatóság szabályát. Elvégre a 256 is 100 a hexadecimális számrendszerben.

Általánosítva: ha egy x számnak a számrendszer r alapjának n-edik hatványával való oszthatóságát vizsgáljuk, akkor az oszthatóság feltétele: x szám r számrendszerben felírt alakjának n darab nullát kell tartalmaznia a végén (a legkisebb helyiértékeken).

Például: a 3-mal, 9-cel, 27-tel való oszthatóság feltételét is megfogalmazhatjuk úgy, hogy a 3-as számrendszerben felírt x szám a végén 1, 2 vagy 3 nullát tartalmazzon. Csak az a bökkenő, hogy 3-as számrendszerben dolgozó mikrovezérlőt még nem láttam...
(#) sunyeb hozzászólása Nov 9, 2012 /
 
Érdeklődni szeretnék, hogy C-ben, hogy tudom az EEPROM tartalmát írni és olvasni. Valamint, hogy tudok neki "kezdő értéket" adni. Azaz ez legyen az adott memóriacím tartalma alpból, amikor áttöltöm a programot a vezérlőbe azért, hogy ne foglaljon plusz területet a programmemóriából.
(#) Mybuster hozzászólása Nov 9, 2012 /
 
Üdv. Találtam a neten egy LM35-el felépített MSP hőmérőt LCD-vel. Megtaláltam a source code.ot de rengeteg hibát ír ki az IAR. A program eredetileg is az IAR nevű programmal volt égetve. Tudtok nekem segíteni..nem nagyon tudok rájönni.
A hozzászólás módosítva: Nov 9, 2012
(#) VaZso8 válasza Mybuster hozzászólására (») Nov 9, 2012 /
 
Nem indítottam IAR-t soha, de az nem C-nyelvű fejlesztéshez való?
...mert ez a kód Assembly.

Tehát vagy valahol át tudod állítani benne vagy mégsem IAR kellene szerintem.
(#) Spumifater hozzászólása Nov 9, 2012 /
 
Hali!

Nem tudom pontosan, hogy hol tehetném fel ezt a kérdést, már több fórumot is megnéztem, de vagy nincs benne mozgás, vagy nem erről van szó benne. szitko fórumtársunk hatására kezdtem el foglalkozni ezzel és az általa megépített segway-t magam is megalkotni. Sokat segített eddig is. Persze próbálok magam is utána nézni a dolgoknak. Viszont minél többet olvasok, annál nagyobb a zavar a fejemben erről.

A kérdés: Miért kell a segway-be feltétlenül giroszkóp?
Már akkora a zűr a fejemben, hogy már kész vagyok tőle.

Szájbarágós választ kérnék, ha valaki tudja.

(#) icserny válasza Spumifater hozzászólására (») Nov 9, 2012 /
 
Idézet:
„A kérdés: Miért kell a segway-be feltétlenül giroszkóp?”
Én eddig úgy gondoltam, hogy nem giroszkóp, hanem gyorsulásmérő kell bele. De nem vagyok szakártője a témának. Azért kell bele, hogy tudja, hogy merre van a lefele. Ehhez képest kell ugyanis egyensúlyoznia.
(#) Spumifater válasza icserny hozzászólására (») Nov 9, 2012 /
 
Pont ez miatt nem értem. Hiszen a gyorsulásmérő megmondja merre van a lefelé. Ami nekem van az a másik két irányt is. Ezért nem vágom.
(#) Mybuster válasza VaZso8 hozzászólására (») Nov 9, 2012 /
 
Igen,megvolt a gond ASM.be kellet volna írni és most már jó. Köszi!
(#) exorcist válasza Spumifater hozzászólására (») Nov 9, 2012 /
 
Helló!
Én sem vagyok szakértő, de szerintem a gyorsulásmérővel nem tudod érzékelni a függőleges tengely körüli elfordulást, ellentétben a giroszkóppal ami viszont mind a 3 tengelyre érzékeny.
(#) Spumifater válasza exorcist hozzászólására (») Nov 9, 2012 /
 
Arra miért van szükség?
(#) exorcist válasza Spumifater hozzászólására (») Nov 9, 2012 /
 
Szerintem a jobbra, balra forduláshoz.
(#) Spumifater válasza exorcist hozzászólására (») Nov 9, 2012 /
 
Az elsődleges feladat: Függőben tartani. A többi már másodlagos. Hát ez az amiért nem értem. De több helyen is láttam, hogy a gyorsulásmérőt és a girot is beépítik. Csak nem látom át az okát. Jó lenne megértenem.
(#) exorcist válasza Spumifater hozzászólására (») Nov 9, 2012 /
 
Esetleg ez segíthet: Bővebben: Link
De szitko is épített ilyet, hátha ő tudja a választ vagy szkrep fórumtársunk.
(#) Fizikus válasza Spumifater hozzászólására (») Nov 10, 2012 /
 
Idézet:
„Miért kell a segway-be feltétlenül giroszkóp?”


A gyorsulasmero abszolut szogertekeket ad, de csak akkor, ha a robot viszonylag nyugalomban van. Amint a robot dolni kezd, akkor mar nem csak a gravitacios gyorsulas, hanem a doles miatt forgo mozgasnal fellepo szoggyorsulas is van. A gyorsulasmero nem tud kulonbseget tenni a 2 gyorsulas kozott, ezek osszeget meri. Ezert a robot doleset a giroszkop jelenek integralasaval szoktak merni. Mivel a giroszkop relativ szogertekeket mer csak, jellemzo ra hogy idovel lassan elmaszik az egyensulyi helyzete, ezert folyamatosan korrigalni kell egy abszolut szogertekkel, erre hasznaljak a gyorsulasmero altal mert szogerteket (ha a giroszkop altal adott szogsebesseg pl. egy adott erteknel kisebb, akkor vehetjuk ugy hogy a robot viszonylag nyugalomban van es a gyorsulasmero altal mert dolesszog a robot valodi dolesszoge).
(#) uli hozzászólása Nov 10, 2012 /
 
Sziasztok! Kicseréltem a fesz. osztó értékeit, egész jól áll a dolog, csak egy gond van. Összeszed mindenféle zavart. Csináltam pár képet.
A 61-es kép 1V/osztás, 2usec/osztás. Ez az ADC bemenete.
A 62-es kép a tápfeszültség, ha jól emlékszem az is 1V/div, de a gnd nem a középvonalnál van, mert lejjebb kellett tekernem.
100n fólia kondi van közvetlen a vezérlő Vcc és GND lábain, valamint 10 n a föld és az adc bemenete közt. A tápkábel kb 30 cm, a jel kb 8. Minden ki van kapcsolva körülötte, de semmit sem ér. Ötlet?
Következő: »»   85 / 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