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   86 / 139
(#) exorcist válasza uli hozzászólására (») Nov 10, 2012 /
 
Helló! Ha igaz a 2 usec/osztás, akkor a jel periódusa kb. 5 us, freki 200 kHZ. Van kapcsolóüzemű tápod a rendszerben? Esetleg egy rosszul szűrt, vagy alig terhelt LDO is okozhat ilyet, mert bármily fura, de ma már azok is valamilyen szinten kapcsolóüzemben működnek, bár inkább 1 MHz környékén. Esetleg oszd meg a kapcsolási rajzot, ha nem titok, könnyeben tudunk neked segíteni hol szedheti össze a zajt. Azonban a 1,5V-os csúcsingadozás a tápban elég aggasztó, kiül a mérendő jelre is, így nem csoda, hogy ugrál az ADC értéke.
(#) uli válasza exorcist hozzászólására (») Nov 10, 2012 /
 
Szia! Igen, van egy LDO a rendszerben, TLV 1117-33. Utána van egy 10 µF elko, és a többi, ahogy írtam. Direkt akkuról üzemeltettem, épp a kapcsolóüzemű tápok által keltett zavarok miatt. Kapcsolási rajz nincsen, fejből építkezek, meg rém egyszerű a rendszer. Van egy ADC bemenet, rajta egy feszosztó. Van 7 +2+1 kimenetem. 7szegmenses kijelzőhöz, a két közös anódhoz és egy a dotpoint. A tápfeszültséget pedig a fent említett ic szolgáltatja.
(#) kissi válasza uli hozzászólására (») Nov 10, 2012 /
 
Szia!

Ha nem jól csináltad meg a NYÁK-ot vagy a vezetékezést, akkor a hétszegmenses is tud ilyet csinálni, mert rángatja pl. a föld potenciált ( pl. közös a kijelző és a kontroller testje, a kijelző áramát átvezeted a kontrollerhez menő GND vezetéken is!) !

Steve
(#) exorcist válasza uli hozzászólására (») Nov 10, 2012 /
 
Az LDO elé tegyél 10µF-ot, a kimenetére 100µF-ot, minél közelebb a lábakhoz. Továbbá én megpróbálnám, hogy az LDO kimenetét leterhelem 470 Ohm-mal, mert így túllépi az adatlapban megadott min. 5 mA kimeneti áramot. Nézd meg így is a tápot.
szerk.: mondjuk a kijelző miatt biztos, hogy többet fogyaszt 5 mA-nél az egész, így ez a rész lehet tárgytalan. Jobban meg kell szűrni a tápot. Nagyobb elko és esetleg valami pici soros induktivitást neki.
A hozzászólás módosítva: Nov 10, 2012
(#) uli hozzászólása Nov 10, 2012 /
 
Ok, megpróbálom, köszönöm!
(#) uli válasza exorcist hozzászólására (») Nov 10, 2012 /
 
Szia! a 100 µF megoldotta a gondot, nincs ripple a tápfeszben. Köszönöm a segítséget. Viszont valami még mindig nem ok. Az adc bemenete így néz ki: jel(0-5V)-> 4,7k-> ADC in->10k -> föld. A feszosztó után beraktam egy 10 nanós fóliát. A bemeneten is megszűnt a ripple, viszont ha lehúzom a földre a feszültség nem esik le 0V-ra, hanem megmarad 1V körül. Valami ötlet? Köszi!!
(#) DecebaL válasza uli hozzászólására (») Nov 10, 2012 /
 
Próbáld kisebb ellenállással lehúzni földre az ADC in bemenetet.
(#) exorcist válasza uli hozzászólására (») Nov 11, 2012 /
 
Bekapcsolt belső felhúzó ellenállásra gyanakszom, de pontosan nem írtad le, hogyan húzod le a földre, mekkora ellenállással és konkrétan a uC bemenetét, vagy a jelet tekered le 0V-ra?
Erősen javaslom, hogy legalább magadnak csináld meg a kapcsolási rajzot, akár kézzel papírra. Sokkal könnyebb a hibakeresés és ha esetleg 2-3 év múlva majd javítanod kell ezt a kütyüt és azóta nem foglalkoztál vele, akkor nagyon valószínű, hogy nem fogsz emlékezni rá, mit miért, hogyan kötöttél
(#) szitko válasza DecebaL hozzászólására (») Nov 11, 2012 /
 
Szia.

Még régebben kérdezted, hogy megépítette-e valaki ezt az analizátort. Találtam itthon egy panelt, nem tudom mi volt, amiben 23k256-os eepromok voltak, 10db., ezért összedobtam. Az első tapasztalatok, sajnos rosszak. A program, nálam, minden ~100-ik olvasásra mutat csak valamit. Lehet, hogy valamit én állítottam be rosszul a PC oldali szoftverben, bár nem túl sok mindent lehet elrontani a beállításnál. Az MSP szoftverben be kell állítani az UART sebességet, mert alapban nem jól van megadva. Most csak kb ennyi jutott eszembe.

De ha akarsz egy olcsó, egyszerű logikai analizátort, amit sok-sok funkcióval ki lehet egészíteni, lásd, akkor tudom ajánlani ezt. Csak egy plusz eepromot kell mellé venni, és tökéletesen működik. Hobbi szintre szerintem elég.
A hozzászólás módosítva: Nov 11, 2012
(#) icserny válasza szitko hozzászólására (») Nov 11, 2012 /
 
Idézet:
„Csak egy plusz eepromot kell mellé venni”
Én úgy értettem a kártya leírását, hogy már rajta van a szükséges EEPROM. Mi kell még mellé? Azért érdekelne, mert én is fontolgatom a beszerzését...
(#) szitko válasza icserny hozzászólására (») Nov 11, 2012 /
 
Az ami a kártyán van, nem jó! Vagyis nem ismeri fel.
Sajnos elég kevés fórum, irodalom foglalkozik ezzel, ezért nekem is beletelt egy pár napba, hogy rájöjjek a turpisságra.

A lényeg: A kártyán egy 24c128-as eeprom van, amit a PC szoftverek nem tudnak lekezelni, se a Saleae Logic, se a lentebb említett USBee, sőt, még a saját SuiteUSB nevű programja/drivere se kezeli.
Ezért ki kell cserélni egy "kisebbre" 24lc/c02- max 16. Ezután már jöhet egy kisebb "szenvedés", ugyanis ebbe az eepromba be kell írni az "azonosítót".
Én egyszerűen megoldottam. Megjött a kártya, eeprom ki, felprogramozott eeprom be, öröm és boldogság.
Az eepromba, Saleae logic-nál 0000-tól kezdve "C0 25 09 81 38 00 00 00 FF FF - végig FF -et kell írni, USBee- nél "C0 A9 08 05 00 84 23 00 FF - FF".
Így az Usbee mindegyik progija megy, kivéve a szkóp. De van funkciógen, frekimérő PWM logic stb..., A SL iy gyönyörűen üzemel. lásd kép.
Kb ennyi. De mindezek ellenére, szerintem nagyon megéri!

logic.jpg
    
(#) DecebaL válasza szitko hozzászólására (») Nov 11, 2012 /
 
Rendeltem én is egyet, remélem karácsonyig megjön
(#) szitko válasza DecebaL hozzászólására (») Nov 11, 2012 /
 
Nekem "rekord" idő alatt megjött. 9 nap. Hozzáteszem, attól az eladótól, már rengeteget ezt-azt rendeltem.
Ha bármilyen segítség kell majd hozzá, szólj. Én már kipróbáltam "mindent" mire összeállt a kép.
(#) moderboy válasza szitko hozzászólására (») Nov 12, 2012 /
 
Leírnád, hogy mi ez a panel és hogyan lehet működésre bírni? A 24LC64 -s eepromokkal szerelteken is cserélni kell a chipet?
(#) icserny válasza moderboy hozzászólására (») Nov 12, 2012 /
 
Itt meg emitt gyakorlatilag mindent megtalálsz róla (utóbbinak a hozzászólásait is olvasd el!).

Egyébként a leírások szerint nem muszáj cserélni az EEPROM-ot, a tüskesoron is lehet csatlakozni az I2C buszra...
A hozzászólás módosítva: Nov 12, 2012
(#) szitko válasza icserny hozzászólására (») Nov 12, 2012 /
 
Köszi a linkeket, ezeket még nem is láttam.
Idézet:
„nem muszáj cserélni az EEPROM-ot”

Ez igaz, ki van vezetve, ezért majd megpróbálom egy g2231-el helyettesíteni az eepromot. Akkor nem kell cserélgetni, a VID, PID azonosítókat az eepromban.

moderboy:
Hogy pontosan mi ez, nem tudom.(valami 8051-es mikrovez. azt hiszem.) Még a nyár elején kellett volna egy logikai analizátor, és ez a kis kártya, az ára miatt, megtetszett. Megjött, és kb 1 heti vacakolás után a legalsó fiókba landolt. Most volt nálam egy Szlovák ismerősöm, és meglátta ezt a kártyát, és mondta, hogy neki is van, és, hogy milyen jól működik. Ő mondta el a megoldást, amit lentebb már leírtam. Ami a lényeg, hogy biztosan működik, és nem egy vagyonba kerül, lásd USbee SX $150, és ugyan ez a felépítése, és jó a PC oldali szoftvere (tudásra értem).
(#) Spumifater hozzászólása Nov 12, 2012 /
 
Hi!

Ezt láttátok már? Ismeri valaki? Launchpad workbench (processing alapon)
(#) moderboy válasza Spumifater hozzászólására (») Nov 12, 2012 /
 
Volt már róla szó itt a forumon, nagyon jó alternatíva arduino helyett. Én is használtam már sokszor, még nem volt vele baj.
(#) szitko hozzászólása Nov 13, 2012 /
 
Sziasztok.

Ha már itt kezdtük a témát, akkor még egy utolsó bejegyzés, "helyesbítés" a CY7C68013A-56 EZ-USB FX2LP USB 2.0 fejlesztőkártyával (logikai analizátor) kapcsolatban.

Átfutottam az Icserny által linkelt leírást/fórumot, és egy-két dolgot végigpróbáltam, a 24c128-as eeprommal. Sikertelenül! Se a Saleae Logic, se az USBee programot nem tudtam vele működésre bírni.

Nálam! csak az eeprom csere segített, vagy ahogy Icserny írta, külső eeprom használata. Az eepromokból a ST24c02, 24lc04, 24c16, 24lc16-os típusokat próbáltam, a lényeg, hogy 3,3V-ról menyen, és mindegyikkel ment, mind a két program. De, és itt jön a helyesbítés, amit lentebb írtam az USbee programhoz azonosítót, az csak az USBee ZX-hez jó!!
(#) icserny válasza szitko hozzászólására (») Nov 13, 2012 /
 
Idézet:
„a lényeg, hogy 3,3V-ról menjen...”
Ezen kívül még szükséges az is, hogy:
- 8 bites címzésű legyen (nem pedig 16 bites címzésű, mint pl. a 24c128)
- az A0 címmel lehessen elérni

Ebben a blogban BWF2 hozzászólásából derülnek ki ezek (March 8th, 2012 on 11:13 am).
(#) sunyeb hozzászólása Nov 14, 2012 /
 
Sziasztok! Némi segítségre lenne szükségem, mert lassan géprombolást rendezek...
Az alábbi programrészletnek az lenne a feladata, hogy gombnyomásra csipogjon (jelen esetben) 4-et. Ha a főprogramban hívom meg a beep rutint, akkor működik is, ha közben gombot nyomok se akad el. Azonban ha a bill. kezelő rutinba teszem a beep() meghívását megakad a progi, méghozzá a beep rutinban, ahol arra vár, hogy a beep_delay számláló 0 legyen. Az beep_delay értéke nem csökken. Olyan mintha a timer megszakítás megállt volna.

  1. #define PIEZO1 BIT6                    //Piezo egyik lába P2.6
  2. #define PIEZO2 BIT7                    //Piezo egyik lába P2.7
  3. #define BTN BIT3                         //Gomb a P1.3-on
  4.  
  5. volatile int beep_delay = 0;
  6. volatile char piezo_enable = 0;
  7.  
  8. /*******************************************************************
  9.  *  Beep rutin. Paraméterként 5-i annyit csippan amennyit megadunk *
  10.  *  5-nél nagyobb száb esetén számtól függő hosszút pl. 16         *
  11.  *******************************************************************/
  12. void beep(char num_of_beeps) {
  13.   char cnt = num_of_beeps;
  14.   P2OUT |= PIEZO1;                    //Piezo1 kezdőérték high
  15.   P2OUT &= ~PIEZO2;                   //Piezo2 kezdőérték low
  16.   while (cnt > 0) {                   //Ciklus csipogásszámig
  17.     beep_delay = 150;                 //A sípolás ideje
  18.     piezo_enable = 1;                 //Piezo bekapcsolása
  19.     while (beep_delay > 0);           //Várakozás sípolás leteltéig
  20.     if (num_of_beeps < 6) {
  21.       piezo_enable = 0;
  22.       beep_delay = 100;               // A szünet ideje
  23.       while (beep_delay >0);          //várakozás a szünet leteltéig
  24.     }  
  25.   --cnt;
  26.   }
  27.   piezo_enable = 0;
  28.   P2OUT &= ~PIEZO1;
  29.   P2OUT &= ~PIEZO2;
  30.   return;
  31. }  
  32.  
  33.  
  34. void main(void) {
  35.   WDTCTL = WDTPW + WDTHOLD;            //Letiltjuk a watchdog időzítőt
  36.   DCOCTL = CALDCO_1MHZ;                //DCO beállítása a gyárilag kalibrált
  37.   BCSCTL1 = CALBC1_1MHZ;               //1 MHz-es frekvenciára  
  38.   BCSCTL3 |= 0x20;                     //ACLK forrása legyen VLO
  39.   TACCR0 =3;                           //3count/10KHz = kb. 3300Hz
  40.   //A hangmagasság tehát 3300Hz/2 =1650Hz
  41.   TACCTL0 = CCIE;                      //Megszakítás eng. Compare0-n
  42.   P1DIR &= ~BTN;                       //Nyomógomb pinje legyen dig. bemenet
  43.   P1OUT |= BTN;                        //Felfelé húzzuk, nem lefelé
  44.   P1REN |= BTN;                        //Belső felhúzás engedélyezése
  45.   P1IES |= BTN;                        //Lefutó élre érzékeny
  46.   P1IFG &= ~BTN;                       //Nyomógomb megszakítás törlés
  47.   P1IE |= BTN;                         //Nyomógomb megszakítás engedélyezés
  48.   P2SEL = 0x3E;                        //P2.6, 2.7 dig. I/O
  49.   P2DIR |= PIEZO1|PIEZO2;              //Piezo1, Piezo2 kimenet
  50.   TACTL = MC_1|TASSEL_1|TACLR;         //TIMERA beállítás és indítás
  51.   //Felfelé számol CCR0-ig, ACLK az órajel, timer törlése
  52.   __enable_interrupt();                //Megszakítások engedélyezése
  53.   while(1) {
  54.    // beep(4);
  55.   //    __delay_cycles(1000000);           // 1mp szünet
  56.   }
  57. }
  58.  
  59. #pragma vector=TIMER0_A0_VECTOR
  60.   __interrupt void TIMERA0_int (void) {
  61.     if (beep_delay > 0) {
  62.       if (piezo_enable == 1) {P2OUT ^= PIEZO1|PIEZO2;} //p2.6, 2.7 felcserélése
  63.       --beep_delay;
  64.    }
  65.   }
  66.  
  67. #pragma vector=PORT1_VECTOR
  68. __interrupt void Port_1 (void) {
  69.   __delay_cycles(30000);               //Várakozás prell miatt
  70.   if (!(P1IN & BTN)) {                 //Gomb lenyomva (L szint)
  71. //     P1OUT |= BIT6;
  72.      P1IES &= ~BTN;
  73.      beep(4);
  74.   }
  75.   else {
  76. //     P1OUT &= ~BIT6;
  77.      P1IES |= BTN;
  78.   }  
  79.    P1IFG &= ~BTN;                       //Megszakítás törlése
  80. }


Valakinek ötlet?
A hozzászólás módosítva: Nov 14, 2012
(#) icserny válasza sunyeb hozzászólására (») Nov 14, 2012 /
 
Idézet:
„Olyan mintha a timer megszakítás megállt volna.”
Hát persze, hogy megáll, hiszem megszakításból hívod meg, ahol hivatalból tiltva van az összes maszkolható megszakítás!

Szervezd át a programot úgy, hogy az interrupt kiszolgáló függvényben ne legyen sem késleltetés, sem más, blokkoló, vagy hosszabban időző függvény meghívva! Például: Ha úgyis van rendszeres timer megszakítás, akkor mintavételezd a nyomógombot abban!
(#) sunyeb válasza icserny hozzászólására (») Nov 15, 2012 /
 
Hmmm. Szomorúan hallom Azt hittem, hogy a megszakítások prioritásuktól függően egymástól függetlenül végrehajtódnak. Ez "kicsit" bonyolítja a helyzetet. 2200+ soros progi, amit erre alapoztam. A terv az volt, hogy a timer megszakítás nem fut, csak ha bill. megszakítás érkezik. A pollingot el akartam kerülni. Most úgy néz ki muszáj leszek szanaszét szemaforozni a progit, csak hát a RAM véges. Nah meg egy rakás counter változóra is szükség lesz.Úgy néz ki az LMP mód ugrani fog, mert a ROM is véges, így is cipőkanalas a program. Köszönöm a segítséget. Lehet erőt veszek magamon és újraírom az egészet...
A hozzászólás módosítva: Nov 15, 2012
(#) icserny válasza sunyeb hozzászólására (») Nov 15, 2012 /
 
Idézet:
„A terv az volt, hogy a timer megszakítás nem fut, csak ha bill. megszakítás érkezik.”
Annak sincs akadálya. Például az első nyomógomb megszakításkor, az azt kiszolgáló eljárásban engedélyezed a timer megszakításait, a nyomógomb megszakításait viszont letiltod. A nyomógomb újabb megszakításait pedig csak a timer engedélyezi - egy idő múlva. Így a szoftveres pergésmentesítés és az energiatakarékos mód is megoldható.
(#) sunyeb hozzászólása Nov 16, 2012 /
 
Újragondolom a dolgot és nekiállok. A pergésmentesítés shiftregiszter-szerű módon lesz megoldva. A többit még átgondolom. Köszönöm a segítséget. Szoknom kell még ezt a MC-t. Biztos lesznek még buta kérdéseim
(#) szitko hozzászólása Nov 19, 2012 /
 
Sziasztok.

Egy kicsit értetlenül nézem a logikai analizátor által "kirajzolt" UART kommunikáció jeleit/értékét.
Nem értem, hogy mi az a '0' nulla?
A Channel 2, az MSP430g2553 által küldött adat/tok a PC felé.
A küldés prog részlete:
  1. char s[6];
  2.      s[0] = fok / 100 + 48;
  3.      s[1] = (fok %100) /10 + 48;
  4.      s[2] = '.';
  5.      s[3] = fok %10 + 48;
  6.      s[5] = '\t';
  7.      for(char i=0; i<6; i++){
  8.           while (!(IFG2&UCA0TXIFG));     // üres a TX buffer? Vagy valami hasonló.
  9.           UCA0TXBUF = s[i];              // adat küldése bluetooth-on
  10.      }

Ha viszont egyszerre több adatot küldök, akkor nem jelenik meg.
  1. for(char i=0; i<128; i++){
  2.           data = (rx_data[i]/100)+48;
  3.           while (!(IFG2&UCA0TXIFG));    // üres a TX buffer? Vagy valami hasonló.
  4.           UCA0TXBUF = data;             // adat küldése bluetooth-on
  5.           data = ((rx_data[i]%100)/10)+48;
  6.           while (!(IFG2&UCA0TXIFG));
  7.   ........ stb....

uart_1.png
    
(#) Istvanpisti válasza szitko hozzászólására (») Nov 19, 2012 /
 
Az s[4] -nek nem adsz értéket.
(#) szitko válasza Istvanpisti hozzászólására (») Nov 20, 2012 /
 
Valóban. Ezt jól elnéztem.

Köszi a választ!
(#) uli hozzászólása Nov 20, 2012 /
 
Sziasztok!

Annyi lenne a kérdésem, hogy ha több ADC konverzió szeretnék futtatni, hogy tegyem? Mintaprogramból kinéztem, hogy kell beállítani több adc csatornát.
  1. ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
  2.   ADC10DTC1 = 0x03;                                //3 conversions
  3.   ADC10CTL1 = INCH_2;
  4.   ADC10AE0 |=  BIT1 + BIT0;                       //BIT0 poti, BIT1 motor poti


Eddig itt tartok. Valaki elmondaná mi az az MSC? az előző programomban nem volt benne és úgy is működött.
A 3 konverzió mit jelent pontosan? 3-szor olvassa be és átlagolja?

Most jön a neheze.
A szokásos while(1) ciklusban hogy indítom el az egyik majd a másik konverziót, és hogy tudom felhasználni az értékeket?
Ha valaki tud valami használható irodalmat azt is megköszönném.
Uli
(#) uli hozzászólása Nov 20, 2012 /
 
Még egy kérdés. Tudnátok ajánlani valami végfok szerűt amit használhatok msp430-cal?
Mondjuk jelen pillanatban 12V/10 A-t szeretnék kapcsolgatni. Kösz
Következő: »»   86 / 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