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   25 / 139
(#) szitko válasza hayes987 hozzászólására (») Dec 29, 2011 /
 
De ugye nem a J6-ra adod az 5V-t?
Idézet:
„lehúzom mind az 5 J3-as jumpert”

Ha mind az 5 jumpert lehúzod, hogy működik?
Ebbe a hibába Én is beleestem.
(#) DecebaL válasza hayes987 hozzászólására (») Dec 29, 2011 /
 
Az elemek feszültsége eléri az 1,8V -t? Sorba kötötted? Mert ha párhuzamosan kötötted akkor kevés a feszültség az IC -nek.
(#) hayes987 hozzászólása Dec 29, 2011 /
 
Na az a helyzet hogy szétszedtem, az egész kapcsolást, majd pedig összeraktam újra.
Pozitívum: most már úgy működik ahogy kell.
Negatívum: Nem tudom mit rontottam el az elején, de legyen ez a legkisebb baj.

@szitko: Ha a J6-nál adom neki az 5 voltot akkor nem kell a J3-on keresztül jövő feszültség. (Ráadásul ha elemről működtetem a LP-et, akkor az USB be sincs dugva, tehát nem is kap róla áramot.)
(#) szitko válasza hayes987 hozzászólására (») Dec 29, 2011 /
 
A J6-ra nem köthetsz 5V (max 3,5V-t), mert tönkremegy a uC, de a TP1-re mehet az 5V. Ezért kérdeztem.
(#) szitko hozzászólása Dec 29, 2011 /
 
Sziasztok.
Próbálgatom az SPI kommunikációt, és a For ciklus működését, de nem nagy sikerrel. Egy 74HC164-et kötöttem össze a LP-al, és egy 7seg. kilyelzőt tettem a 164-re. A programnak azt kéne csinálnia, hogy az S2 megnyomásakor a következő számot írja ki. Ehelyett csak a 9-et írja ki.
  1. #include "io430.h"
  2. unsigned char szamok[]={0x3F,0x06,0x5B,0x4F,0x66,0x6d,0x7c,0x07,0x7f,0x67};
  3. unsigned int i;
  4. void main(void){
  5.        WDTCTL = WDTPW + WDTHOLD;        // Letiltjuk a WDT-t
  6.        BCSCTL1 = CALBC1_1MHZ;           // A gyárilag kalibrált 1 MHz
  7.        DCOCTL = CALDCO_1MHZ;            // DCO frekvencia beállítása
  8.        P1DIR |= BIT0;                   // BIT0 kimenet
  9.        P1DIR &= ~BIT3;                  // BIT3 bemenet
  10.        P1OUT &= ~BIT0;                  // BIT0 alacsony
  11.        USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE;     // USI funkciók
  12.        USICTL1 |= USICKPH;                                       // órajelfázis = 1
  13.        USICKCTL = USIDIV_7 + USISSEL_3;                          // SMCLK kiváll & SMCLK/128
  14.        USICTL0 &= ~USISWRST;
  15.        USICTL1 &= ~USIIFG;
  16.        USISRL = 0x3f;        
  17.        USICNT = 8;                       // 8 bit
  18.        while(1){
  19.          P1OUT |= BIT0;
  20.          while(P1IN & BIT3);            // gombnyomásra várunk
  21.          for(i = 0; i <= 9; i++){
  22.            USICTL1 &= ~USIIFG;
  23.            USISRL = szamok[i];
  24.            USICNT = 8;
  25.            __delay_cycles(10000);         // 10ms
  26.            while(!(P1IN & BIT3));
  27.            __delay_cycles(10000);         // 10ms
  28.            P1OUT &= ~BIT0;
  29.          }
  30.        }
  31. }

Tudna valaki ebben segíteni, hogy a ciklusokat rontom-e el, vagy az SPI kommunikációt?
Köszönöm.
(#) David.zsombor válasza hayes987 hozzászólására (») Dec 30, 2011 /
 
Valahol (az IAR-ban) Be lehet állítani a target VCC-t persze bizonyos keretek között. Nekem volt probléma mert 3.3V os beállításon leterhelve random resetelte magát.
(#) moderboy hozzászólása Dec 30, 2011 /
 
A komolyabb vezérlőt igénylő feladatokkal foglalkozóknak segítésére közölném, hogy a 2-es és 5-ös szériával való próbálkozások sikeresek voltak! Minden probléma nélkül programoztam 430F2274-et és 430F5508-at a Launchpaddel

Tehát a wiki igazat mondd, azok a procik amik felsöbb szériásak és rendelkeznek spy-bi-wire maggal, probléma nélkül működnek együtt az LP-vel.


CC430F5137 vagy más CC szériás procit használt már alaki? VCORE lábra külső feszt kell tenni vagy nem terhelhető kivezetés, mint másik prociknál? Adatlapból számomra nem derült, probáltam minden lehetőséget, de csak füstgenerátor lett volna, ha nem húzom le gyorsan :no:
(#) icserny válasza szitko hozzászólására (») Dec 30, 2011 /
 
Idézet:
„while(P1IN & BIT3); // gombnyomásra várunk”
Ezt a sort is a for cikluson belül kellene tenni!
(#) szitko válasza icserny hozzászólására (») Dec 30, 2011 /
 
Valóban, köszönöm szépen. Legalább látom, hogy a kommunikáció megy rendesen.
Lenne viszont mégegy kérdésem. Ugyan így próbálkoztam egy 93LC56A-ba beírni 1 byte-ot, és utána kiolvasni, de valamiért nem sikerült. A beírást Pickit2-vel ellenőriztem, de mindenhol csak FF volt. Igazából csak az SPI olvasás menetét szerettem volna látni.
(#) icserny válasza szitko hozzászólására (») Dec 30, 2011 /
 
Idézet:
„próbálkoztam egy 93LC56A-ba beírni 1 byte-ot, és utána kiolvasni, de valamiért nem sikerült.”
Az EEPROM-ok írása bonyolultabb dolog, mert általában írásvédelemmel is rendelkeznek. (A jelek szerint működött. ) Adtál ki EWEN utasítás az EEPROM-nak?
(#) szitko válasza icserny hozzászólására (») Dec 30, 2011 /
 
Idézet:
„Adtál ki EWEN utasítás az EEPROM-nak?”

Nem, és megmondom őszintén, hogy nem is tudom, mi az.
Ahogy csináltam: Egy kibontott EEPROM-ról van szó, tehát lehet, hogy írásvédett, de a Pickit2-vel símán kitöröltem mindent belőle, és az írta, hogy sikeres volt a törlés, visszaolvasva pedig mindenhol FF volt.
A program amivel próbálkoztam, ugyanaz ami lentebb van, csak a USISRL = 0x01 volt, és a végtelen ciklusban nem volt semmi, csak bekapcsolt egy led.
(#) szitko válasza szitko hozzászólására (») Dec 30, 2011 /
 
Helyesbítek. Az EEPROM adatlap alaposabb átnézése után, már kicsit érthetőbb az írás/olvasás, és látom, hogy
Idézet:
„Az EEPROM-ok írása bonyolultabb dolog”
igazad van. Számomra sokkal bonyolultabb, pláne, hogy azt sem tudom, hogy írható-e, a bontott EEPROM. Naívan gondoltam egyszerűbb, és hogy összekössek két uC-t, elötte gyakorlásnak, jó lesz.
(#) balux33 hozzászólása Dec 30, 2011 / 1
 
Sziasztok!
A Timer A-t szeretném használni egyszerű felfelé számlálás és utána megszakítás használatával, ezt egy g2231-en meg is tudtam valósítani icserny cikke alapján de ezt már kinőttem és átváltottam g2452-re de ezen sehogy sem tudom összehozni.
Olvastam hogy ezeknél átnevezték timer megszakításvektorát, át is írtam a szerintem megfelelőre de a hiba továbbra is ez:
  1. Error[Pe020]: identifier "timer0_A1_VECTOR" is undefined D:\msp projektek\led mátrix\main.c 204

Mi lehet a probléma? Esetleg rossz header fájlt csatoltam volna be ? melyiket érdemes használni ? (msp430g2452.h van most )
(#) icserny válasza balux33 hozzászólására (») Dec 30, 2011 /
 
Miért nem nézel bele a becsatolt fájlba?
TIMER0_A0_VECTOR és TIMER0_A1_VECTOR van definiálva benne, csupa nagybetűvel.
(#) icserny válasza szitko hozzászólására (») Dec 30, 2011 /
 
Kikapcsoláskor mindig automatikusan írásvédett állapotba kerül az EEPROM, s csak az EWEN utasítás kódjának kiküldése után írható újra. Az adatlapjából minden kiderül (én is onnan veszem a sok okosságot).
(#) szitko válasza icserny hozzászólására (») Dec 30, 2011 /
 
Köszi. Sajnos Én a googli segítségét kértem, és egy olyan pdf-et találtam, amiben igazából csak a bekötés (93LC56A) és pár olyan dolog volt leírva, mint pl. az LC jelentése, de a regiszterekről semmi. Azóta találtam egy másikat, ami már részletesebb.
Mégegyszer köszönöm az infókat.
(#) icserny válasza szitko hozzászólására (») Dec 30, 2011 /
 
Idézet:
„Én a googli segítségét kértem”
Én is, és a típusszám beírására ez az oldal volt az első találat. Mikrovezérlőknél is a pontos típusszámot kell/érdemes megadni, s a gyártó honlapja lesz a legvalószínűbb találat.
(#) szitko válasza icserny hozzászólására (») Dec 30, 2011 /
 
Igazad van. Most ott tartok, hogy össze vagyok zavarodva. Hogy, miért. Az EEPROM amit lentebb említettem (93LC56A), (miután eltávolítottam a gyantát amitől nem teljesen lehetett látni a típusszámot), kiderült, hogy BR93LC56A ami nem ugyan az.
Most kezdhetem előről, ráadásul ez utóbbi 16 bites.
(#) ReFi hozzászólása Dec 30, 2011 /
 
Megtetszett eza MPS430 Launchpad, ugyhogy rendeltem 2db-t, az egyiket lehet hogy elpaszolom ha valakit érdekel.
(#) szitko válasza icserny hozzászólására (») Dec 30, 2011 /
 
Még egy kis segítséget szeretnék kérni.
Tehát, ha jól értem az adatlapot, és amit írtál akkor valahogy így kéne?
1: Engedélyezem az EEPROM-ot
2: Mondom neki, hogy írás lesz
3: Beírom az adatot.
Olvasásnál meg csak engedélyezni kell az EEPROM-ot.
  1. P1OUT &= ~BIT3;   // EEPROM engedélyezés (CS láb alacsony)
  2.   USICTL1 &= ~USIIFG;  //
  3.   USISRL = 0xc0;            // WEN írás engedélyezés
  4.   USICNT = 8;
  5.   P1OUT |= BIT3;            // EEPROM tiltás
  6.   .
  7.   .
  8. // írás
  9.   USICTL1 &= ~USIIFG;
  10.   P1OUT &= ~BIT3;   // CS alacsony
  11.   USISRL = 0xc01;     // írás lesz
  12.   USICNT = 8;            // 8 bit
  13.   USISRL = adat;       // adat írása
  14.   P1OUT |= BIT3        // EEPROM tiltása

Igazából, csak a USI SPI működését szerettem volna megérteni, de már nagyon belebonyolódtam, és már tetszik is ez az EEPROM-os dolog. (pláne ha érteném is )
(#) balux33 válasza icserny hozzászólására (») Dec 30, 2011 /
 
Nézegettem én benne, de valahogy elkerülte a figyelmemet a nagybetű.
Köszönöm a segítséget :worship:
És boldog új évet kívánok minden fórumlakónak
(#) kistigris hozzászólása Dec 31, 2011 1 /
 
Sziasztok.
Lenne egy olyan kérdésem,valaki találkozott-e már a Texas Instruments 430f2131 mikrokontrolerrel?Vagy esetleg dolgozott-e valaki már ilyennel?
(#) szitko hozzászólása Jan 2, 2012 /
 
Sziasztok. Előszőr is BUÉK mindenkinek. Az év első hozzám méltó kérdése.
Feladtam a küzdelmet az EEPROM SPI kommunikációjával, mert nem akart összejönni, a pláne az, hogy még a Pickit2-vel sem tudtam programozni, na mindegy. Visszatértem az eredeti elképzelésemhez, a két uC közötti kommunikáció. Eddig sikerüt kommunikálni egy 74HC164, egy MAX7219, és egy 16bit-es M66311fp-vel. Ezen sikerek után gondoltam (Én naív), hogy összekötöm a két uC-t. Hosszas kisérletek és olvasgatás után a mintaprogik (slac463a / slac467a) között találtam példákat az SPI kommunikációra amit megcsináltam, és működött. A kérdésem az lenne, hogy ugye e két mintaprogi (_usi_2 / _usi_3) megszakításban figyeli az SPI jeleket. (azthiszem) Ha igen miért nem tudok beletenni a programba pl. egy led villogtatot, vagy bármi mást, ami nem az USI megszakításban van?
(#) moderboy válasza moderboy hozzászólására (») Jan 2, 2012 /
 
Okulásul az utókornak... Másik forumon azt mondták, hogy VCORE lábra nem szabad feszültséget kapcsolni! A melegedés probléma pedig abból adódott, hogy a rádió kimeneti teljesítményét szabályzó lábat egy ellenálláson földre kell húzni. Ehez a képletet nem találtam az adatlapon, de ha nem lebeg már nem akar felrobbanni
(#) icserny válasza szitko hozzászólására (») Jan 3, 2012 /
 
Idézet:
„Ha igen miért nem tudok beletenni a programba pl. egy led villogtatot, vagy bármi mást, ami nem az USI megszakításban van?”
Elfelejtetted becsatolni a programodat!
(#) szitko válasza icserny hozzászólására (») Jan 3, 2012 /
 
Igen észrevettem, bocsi.
A "gyár" programot rontottam el ily formában:
  1. //   USI inicializálás, példaprogi alapján...
  2.     __low_power_mode_0();
  3.   while(1){
  4.     P2OUT |= BIT1;
  5.     sor(1);
  6.     print("Ertek = ");
  7.     Lcdkiir(spi_ert);
  8.     __delay_cycles(100000);
  9.     P2OUT &= ~BIT1;
  10.     __delay_cycles(100000);
  11.   }
  12. }
  13.    // ------ Master ----- megszakítás ----------
  14. #pragma vector=USI_VECTOR
  15. __interrupt void universal_serial_interface(void){
  16.   if (0x08 & USISRL)
  17.       spi_ert=USISRL;
  18.   USISRL = P2IN;
  19.   USICNT = 8;
  20.   USICTL1 &= ~USIIFG;
  21.    __low_power_mode_off_on_exit();        // Ébresztő
  22. }

A mester-t kiegészítettem egy Lcd vezérlésel, ahol meg kéne jelenítse a slave által küldött 8 bites értéket, ami elméletileg 0x08. A slave gyakorlatilag megegyezik a példaprogrammal,(csatolva ..02=master, ..03=slave) csak LPM_off..-al lett kiegészítve, és a végtelen ciklusban (kéne) villogtat egy ledet.
(#) icserny válasza szitko hozzászólására (») Jan 3, 2012 /
 
Ez így megint félinformáció, mert a mintaprogramban szereplő msp430g2x21-nek nincs P2OUT-on BIT1, tehát valami mást használhattál.

Mindenestre először próbáld meg úgy, hogy a gyári program megszakításkiszolgáló részébe csak az érték eltárolását és a CPU felébresztését teszed be, mást ne változtass benne!
(#) szitko válasza icserny hozzászólására (») Jan 3, 2012 /
 
Újabb bocsánat. A master uC g2352-es, a slave uC g2231-es. Közben haladtam, és oda jutottam, hogy programszervezési hibákat csinálok folyamatosan.
A lényeg: Első lépésben azt csináltam, hogy egy 8bites adatot elküldtem a slave-nek, és ugyanezt vissza és utána nem csinált semmit, csak a ledet villogtatta. Ez már sikerült is. Továbblépve, beraktam egy rész, ami egy újabb értéket küdene a slave-nek, de itt már nem csinál semmit, se a slave, se a master. Most itt tartok.
Visszatérek a kezdetekhez és kipróbálom amit írtál.
Köszönöm.
(#) szitko válasza icserny hozzászólására (») Jan 3, 2012 /
 
Megcsináltam amit írtál, és jó. Ha viszont egy újabb adatot szeretnék küldeni (master -> slave), akkor olyan mintha nem okozna megszakítást. A master:
  1. ...
  2. void spi_kuld(void){
  3.   USISRL = spi_ert;
  4.   USICNT = 8;
  5.   __low_power_mode_0();
  6. }
  7. ...
  8.   while(1){
  9.     if(!(P2IN & BIT2)){
  10.       spi_ert = 0x00;
  11.       spi_kuld();
  12.     }
  13.  ...
  14. #pragma vector=USI_VECTOR
  15. __interrupt void universal_serial_interface(void){
  16.   spi_ert=USISRL;
  17.   USICTL1 &= ~USIIFG;
  18.   __low_power_mode_off_on_exit();        // Ébresztő
  19. }
  20. //----------- Slave:
  21. ...
  22.   while(1){
  23.     __delay_cycles(500000);
  24.     P1OUT &= ~BIT0;
  25.     if(ert == 0x00){
  26.       P1OUT |= ert;
  27.     }
  28. ...
  29. #pragma vector=USI_VECTOR
  30. __interrupt void universal_serial_interface(void){
  31.   ert = USISRL;
  32.    USICTL1 &= ~USIIFG;
  33.    __low_power_mode_off_on_exit();        // Ébresztő
  34. }

Lehet, hogy ezt a variációt is feladom, és megpróbálom megszakítás nélkül. Ettől már kezdek becsavarodni.
(#) ReFi hozzászólása Jan 3, 2012 /
 
Megjött az egyik Launchpad.
Pár tapasztalat:
+Már az R1.5-s verzió érkezett, ami már kompatibilis a hardveres és szoftveres UART-al is.
+Két sokkal jobb uC-t adtak hozzá -> MSP430G2553 és MSP430G2452
-Előre be van forrasztva a tüskesor
-Lespóroltak komponenseket (pl R34 felhúzó ellenállás)

Rögtön neki estem a 1. cikkben levő minta progiknak, frankón működik minden, viszont a nyomógombos LED ki/be kapcsolással szívtam kicsit. Elsőre azt hittem valami baj van uC-vel mert nem reagált a gombra ellenben ha a tüskesoron a P1.3-hoz (amin a gomb van) értem akkor úgy vette mintha gombot nyomtam volna persze messze nem tökéletesen. Ezután tűnt fel a felhúzó ellenállás hiánya.
Ezután beállítottam a uC felhúzó ellenállását és tökéletesen működött ahogy kell.



  1. #include "io430.h"
  2. #include "intrinsics.h"
  3.  
  4. void Init(void)
  5. {
  6.          WDTCTL = WDTPW + WDTHOLD;       //Letiltjuk a watchdog időzítőt
  7.          P1DIR |= BIT0;                  //P1.0 legyen digitális kimenet
  8.          P1DIR &= ~BIT3;                 //P1.3 legyen digitális bemenet
  9.          
  10.          P1DIR &= ~BIT3;                 //Gombok Initje
  11.          P1OUT |= BIT3;
  12.          P1REN |= BIT3;
  13.          P1IES |= BIT3;
  14.          P1IFG &= ~BIT3;
  15.          P1IE |= BIT3;
  16. }
  17.  
  18. void main(void) {
  19.        
  20.         Init();    
  21.          while(1) {
  22.            while(P1IN & BIT3);           //lenyomásra vár
  23.            P1OUT ^= BIT0;                //LED1 állapotának átbillentése    
  24.            __delay_cycles(20000);        //20 ms pergésmentesítő késleltetés
  25.            while(!(P1IN & BIT3));        //felengedésre vár
  26.            __delay_cycles(20000);        //20 ms pergésmentesítő késleltetés
  27.          }
  28. }
Következő: »»   25 / 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