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   31 / 139
(#) szitko válasza icserny hozzászólására (») Jan 27, 2012 /
 
Ezt még át kell gondolnom rendesen, és utánaszámolnom. Először ezt a 4-5 félbehagyott projektet, kellene befejeznem, de az egyikből jött az óra ötlet,(van egy programom, ahol a proci elvégez egy pár mérést, megjeleníti lcd-n,és utána nem csinál semmit csak néha újra mér. gondoltam oda még elfér egy egyszerű óra. Egy másik projektbe, meg gyorsítani kéne az órát.) ezért vetettem fel a kérdést. Egyenlőre megpróbálok, 1Mhz, vagy nagyobb DCO frekiből, pontos 1Hz-et csinálni.
Köszönöm az ötleteket.
(#) gyengus hozzászólása Jan 27, 2012 /
 
Sziasztok!

Kezdésnek egy nagyon egyszerű programmal próbálkozok és közben debuggolom CCS4-el.

Néhány dolgot nem értek, ebben szeretnék segítséget kérni:
Hiába írok a P1DIR-be és P2DIR-be 0xFF-et, debugkor a Watch ablakban 0x0022 ill 0x002A szerepel.
Ha átállítom binárisra, akkor jobban látom a biteket. Viszont 16 bitesnek mutatja ezeket és a P1OUT regisztert is holott csak 8 bitesek. Az utolsó 8-at kell nézni? És a végén van a 0. bit?
Binárisan, hogy adhatom meg az értéket? A 0b00000000-at nem fogadja el.

A program szerintem működik, mert, ha az m változónak értéket adok, akkor a P1.6-on lévő ledet kapcsolgatja.
Itt a kód:
  1. #include <msp430.h>
  2.  
  3. void main(void) {
  4. int m = 0;
  5.  
  6. WDTCTL = WDTPW + WDTHOLD; // WDT kikapcsolása
  7. P1SEL = 0x00; // P1 és P2 legyen digitális IO
  8. P2SEL = 0x00;
  9. P1DIR = 0xFF; // P1 és P2 kimenet
  10. P2DIR = 0xFF;
  11.  
  12. while (1) {
  13.     if (m == 0) {
  14.     // P1.6 bemenet
  15.     P1DIR &= ~BIT6;
  16.     } else if (m == 1) {
  17.     // P1.6 kimenet és 0
  18.     P1DIR |= BIT6;
  19.     P1OUT &= ~BIT6;
  20.     } else if (m == 2) {
  21.     // P1.6 kimenet és 1
  22.     P1DIR |= BIT6;
  23.     P1OUT |= BIT6;
  24.     }
  25. } // while
  26. } // main


Előre is köszönöm a válaszokat!
(#) gyengus válasza gyengus hozzászólására (») Jan 27, 2012 /
 
Közben megtaláltam icserny cikkében, hogy azok a címek. Megzavart, hogy az érték oszlopban vannak.
Akkor, hogyan láthatom a portok értékét a Watch ablakban?
(#) szitko válasza gyengus hozzászólására (») Jan 27, 2012 /
 
Nyisd ki a "registers" ablakot. Azthiszem ott megtalálod.
(#) gyengus válasza szitko hozzászólására (») Jan 27, 2012 /
 
Köszönöm!
Ott vannak.
(#) szitko hozzászólása Jan 27, 2012 /
 
Nem hagyott nyugodni az óra, ezért foglalkoztam vele egy kicsit és sikerült megcsinálni az 1Hz-et. A többit majd később...
Más. Az alábbi kis programmal szeretnék a PC hypertermilájával kommunikálni, de valamiért nem megy. Elméletileg ha 1-est küldök neki, akkor visszaküld egy 2-est.
  1. #include "io430.h"
  2. #include "in430.h"
  3. volatile char rx_ert;
  4. void delay_ms(volatile unsigned int t){       // A "t" értéke határozza meg a kéleltetés idejét
  5.   unsigned int i;                             // "i" változó deklarálása
  6.   for(i=0; i<t; i++){                         // "for" ciklus, ahol 1: i=0, 2: i vizsgálata 3: i=i+1
  7.     __delay_cycles(1000);                     // 1000 uS = 1 mS
  8.   }                           // for ciklus
  9. }
  10. void main(void){
  11.   WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog
  12.   BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  13.   DCOCTL = CALDCO_1MHZ;
  14.   P1DIR = BIT0 + BIT6;
  15.   P1SEL = BIT1 + BIT2 ;                     // P1.1 = TXD, P1.2=RXD
  16.   P1SEL2 = BIT1 + BIT2;                      
  17.   UCA0CTL1 |= UCSSEL_2;                    // CLK = smclk
  18.   UCA0BR0 = 104;                           // 1MHz SMCLK / 104 = ~9600
  19.   UCA0BR1 = 0;
  20.   UCA0MCTL = UCBRS0;                       // Moduláció
  21.   UCA0CTL1 &= ~UCSWRST;
  22.   IE2 |= UCA0RXIE;                        // USCI_A0 RX megszakítás
  23.  
  24.   while(1){
  25.     _EINT();
  26.     P1OUT |= BIT0;
  27.     delay_ms(rx_ert);
  28.     P1OUT &= ~ BIT0;
  29.     delay_ms(rx_ert);
  30.   }                            // while
  31. }                              // main
  32.  
  33. // USCI A0/B0 Transmit ISR
  34. #pragma vector=USCIAB0TX_VECTOR
  35. __interrupt void USCI0_TX(void){
  36.   UCA0TXBUF = 2;
  37.   IE2 &= ~UCA0TXIE;
  38.    _DINT();
  39. }
  40. // USCI A0/B0 Receive ISR
  41. #pragma vector=USCIAB0RX_VECTOR
  42. __interrupt void USCI0_RX(void){
  43.   while (!(IFG2&UCA0RXIFG));          // várunk míg megjön az infó
  44.   rx_ert = UCA0RXBUF;                   // RX buffer tartalom mentése
  45.   IE2 |= UCA0TXIE;
  46. }

Két g2553-as proci közöt megy vele a kommunikáció. Lehet, hogy valamit nem állítok be? Vagy a hyperterminál nem jó?
(#) gyengus hozzászólása Jan 27, 2012 /
 
Spórolok a lábakkal

Találtam egy cikket, ahol leírják, hogy lehet 2 ledet egy lábra kötni: Bővebben: Link

A leírás szerint, ha bemenet a mikrovezérlő lába, akkor egyik led se világít:
Idézet:
„Case 1: The uC pin is set as an input.

In this case, neither LED will light. On AVRs, an input pin is 'high impedance', meaning it lets no current flow through the pin. That means that we can pretend that the pin isn't there and the circuit behaves as per diagram 2.1.

Note: AVRs can have pull-up resistors on input pins. These can be thought of as a 30-50k resistor between the pin and Vcc. This can be ignored in this application as the tiny current flowing through this is unlikely to cause the LED to glow. If it does, the pull-ups can be turned off for that pin.”


Tudom, ez AVR-re van. Gondoltam, működik MSP430G4552-vel is.
Csak részben: Ha a láb kimenet akkor 0 esetén az A led, 1 esetén a B világít.
Viszont, ha a láb bemenet, akkor mind a kettő halványan világít.
A felhúzó ellenállásokat kikapcsoltam.

Ennyire különbözik a két mikrovezérlő portja? Esetleg van valakinek ötlete, hogy tudom kikapcsolni egyszerre mind a két ledet?
Sajnos nincs több láb amit használhatnék.

2led_1pin.gif
    
(#) icserny válasza gyengus hozzászólására (») Jan 28, 2012 /
 
Próbáld ki, hogy lekötöd a PIC lábáról! SZerintem akkor is világítani fognak, ha a nyitófeszültségük összege kisebb, mint a tápfeszültség. A rajzon 3 V szerepel, te meg (gondolom) 3,5 V-ról járatod. Lehet más színű (pl. zöld) LED-del próbálkozni, aminek esetleg magasabb a nyitófeszültsége.
(#) icserny válasza szitko hozzászólására (») Jan 28, 2012 /
 
Baudrate, adatbitek száma, stop bitek száma, paritásbit van-e: ezek számítanak. S a Hyperteminálban azt válaszd, hogy nincs sem hardveres sem szoftveres adatfolyam-vezérlés.
(#) gyengus válasza icserny hozzászólására (») Jan 28, 2012 /
 
Köszönöm a választ!

A LaunchPadról járatom.
Ha lehúzom a mikrovezérlőről, akkor is világítanak halványan a ledek. Egy zöld és egy sárga ledről van szó.
Én is gondoltam rá, hogy a magasabb feszültség miatt lehet. A kész áramkört 3V-os gombelemről tervezem járatni.
Ki fogom próbálni azzal is.

Már ki is próbáltam elemről: egyik led se világít
(#) szitko válasza icserny hozzászólására (») Jan 28, 2012 /
 
Akkor elméletileg jónak kéne lennie. Az UCAxCTL0 reg-hez nem nyúltam, és a FUG. szerint a 0 a default.
UCPEN 0 Parity disabled.
UCPAR 0 Odd parity
UC7BIT 0 8-bit data
UCSPB 0 One stop bit
UCMODEx 00 UART mode
UCSYNC 0 Asynchronous mode
A hyperterminálban meg: 9600/8/nincs/1/nincs, van beállítva. Keresek valami példaprogit hátha okosabb leszek, bár lehet, hogy a 64bites win7-nek nem tetszik valami.

Más: Az óra 50 percenként késik 1 másodpercet, ha meleg van a lakásban (28Cfok).Hidegben még nem próbáltam. Pedig a szkóp szerint 1.002Hz a belállított freki.
(#) icserny válasza szitko hozzászólására (») Jan 28, 2012 /
 
A Launchpad kártya RX/TX átkötései keresztbe vannak kötve a G2553-hoz illően?
(#) szitko válasza icserny hozzászólására (») Jan 28, 2012 /
 
Nem. Símán ráraktam a jumpereket. A régi kártyán is meg kell fordítani? A két proci közötti kapcsolatnál megfordítottam.
(#) icserny válasza szitko hozzászólására (») Jan 28, 2012 /
 
Idézet:
„A régi kártyán is meg kell fordítani?”
Hát persze! A hardveres UART-nál P1.1 az RX, P1.2 a TX. A Launchpad kártya pedig pont fordítva van behuzalozva - a szoftveres UART kezeléshez.
(#) szitko válasza icserny hozzászólására (») Jan 28, 2012 /
 
Közben rájöttem. Most faraghatok egy kereszt jumpert.
Köszönöm.
(#) icserny válasza szitko hozzászólására (») Jan 28, 2012 /
 
Valami ilyesmi kellene.
(#) szitko válasza icserny hozzászólására (») Jan 28, 2012 /
 
Találtam régifajta jumpert, ami úgy néz ki mint egy csatlakozó, csak elvágom az összekötést, levágom a tetejét, és összeforrasztom keresztbe.
(#) szitko válasza icserny hozzászólására (») Jan 28, 2012 /
 
Hát nem volt egyszerű!
(#) szitko hozzászólása Jan 29, 2012 /
 
Egy kis érdekesség.
Játszottam egy G2231 DCO frekvencia beállításával. Ami ledöbbentett: A kalibrált 1Mhz nem igazán valós adat, de ha a TI álltal leírt toleranciák közül a nagyobb értéket nézzük (-3% +3%), akkor stimmel. Négy db. van itthon, és mindegyiknél, a kalib. érték 961-983kHz között mozgott. Gondoltam ha már itt van kipróbálom nagyobb frekivel. Itt is volt egy kis döbbenet, mert nem tudtam beállítani a kalibrált 8MHz-t, mert mindig hibát írt az IAR. Utána néztem, és láss csodát, nincs benne a fejfájlban a 8Mhz-es definíció, csak az 1MHz-é. Megnéztem a többi mikrovezérlő fájlait is,(pl.G2211) és nem mindegyikbe sikerült a gyártónak belerakni a kalibrációk definiálását. A CCS4-nél is ugyanez a helyzet. Kimaradt a 8, 12, 16MHz kalibráció definiálása.
Érdekesség képpen megnéztem egy kalib. 8MHz-es beállítást, és beállítottam a G2231-et. Eredmény: 10.142Mhz, ami már nem fér bele a 3%-ba. Minden beállításnál a fesz: 3.01V, hő: 28Cfok.
Végül sikerült egy közel 1MHz-es értéket beállítani, az RSELx = 6, DCOx = 5, MODx = 17-es beállításokkal. (1.012MHz)
Ui.: Ha pontosságot akarunk, mindig ellenőrizni kell a frekit, és nem szabad hinni az adatlapnak.
(#) szitko válasza icserny hozzászólására (») Jan 29, 2012 /
 
Sikerült a kapcsolat a PC-vel, UART-on. Hálás köszönet a segítségért.
Lenne egy nem idevágó kérdésem:
Processing 1.5.1 ba összedobtam egy kis programot, de nem igazán sikerül életre keltenem. A program soros kommunikációt valósítana meg, de állandóan hibát ír a soros portra.
Idézet:
„WARNING: RXTX Version mismatch
Jar version = RXTX-2.2pre1
native lib Version = RXTX-2.2pre2”

Nem nagyon akarom le Off-ni a topikot, ugyhogy nem is írnék többet róla.
Tudnál segíteni ebben?

Előre is köszönöm.
(#) icserny válasza szitko hozzászólására (») Jan 29, 2012 /
 
Idézet:
„WARNING: RXTX Version mismatch”
Ez nem hiba, csak figyelmeztetés. Valahol kétféle verziót talál az RXTX modulból, és ezek nem pontosan egyeznek meg. Megszüntetni úgy lehetne, hogy pontosan összeillő Java JRE és Processing verziót raksz föl, de én nem foglalkoztam vele. Elengedem a figyelmeztetést a fülem mellett. Végül is működik, nemde?
(#) icserny válasza szitko hozzászólására (») Jan 29, 2012 /
 
Idézet:
„Megnéztem a többi mikrovezérlő fájlait is,(pl.G2211) és nem mindegyikbe sikerült a gyártónak belerakni a kalibrációk definiálását.”
Ez a kisebbik probléma. A nagyobbik az, hogy az adatlap szerint a mikrovezérlőben sincsenek benne a kalibrációs adatok. A G2231 csak 1MHz-re kalibrált. A G2452 és G2553 mikrovezérlő viszont tartalmaz kalibrációs adatokat 1, 8, 12 és 16 MHz-re.

A frekvencia nemcsak a hőmérséklettől, hanem a feszültségtől is függ, s az együttes (overall) bizonytalanságra már +/-6 %-ot mond.
(#) szitko válasza icserny hozzászólására (») Jan 29, 2012 /
 
Hát nem. Berakom a kódot. Találtam egy videó tutoriált, és a példákból szedtem össze a progit, és ezek alapján tanulgatom. Futtatható álományt még nem csináltam, (azt sem tudom, hogy kell) de simán a RUN parancsal is mennie kéne, nem?

kod.txt
    
(#) icserny válasza szitko hozzászólására (») Jan 29, 2012 /
 
Szerintem a Launchpad Temp GUI.pde példából indulj ki, az nálam működött. A futtatáshoz valóban elég a RUN-ra kattintani.

Tanuláshoz ezt a honlapot ajánlom.
(#) szitko válasza icserny hozzászólására (») Jan 29, 2012 /
 
Rendben, köszi!
(#) szitko válasza icserny hozzászólására (») Jan 29, 2012 /
 
Működik! Kiszedtem a programodból a számomra fölösleges dolgokat, egy kicsit hozzáraktam, és megy mint a karikacsapás. Szépen kommunikál a LaunchPad-al.
Köszönöm szépen !
Ui.: A linket is köszönöm. Én a jaboston.com honlapon lévő videókból tanulgattam.
(#) szitko hozzászólása Jan 31, 2012 /
 
Kissé összekeveredtem a g2553 flash memoria, és az 512b ram fogalmakban. Tehát, szeretnék egy (vagy több) 16 bites regiszter értékét elmenteni, (egy változó, ami a program futása közben, mindig új értéket kap) úgy, hogy mielött kikapcsolom a procit elmenti, és bekapcsoláskor (vagy amikor mondom neki) beírja egy adott változóba.
A flash-be menti a programot amit írok, a ram-ba pedig a változókat, akkor hova tudok egy ilyen regisztert elmenteni? És hogyan?
(#) icserny válasza szitko hozzászólására (») Jan 31, 2012 /
 
Idézet:
„A flash-be menti a programot amit írok, a ram-ba pedig a változókat, akkor hova tudok egy ilyen regisztert elmenteni?”
Az ún. Information Memory-ba! Ez esetedben 256 bájt (010FFh - 01000h címtartományban), de lapokra van szabdalva (talán négyre), s ebból az "A" lapon vannak a gyári kalibrációs adatok (DCO, ADC). Többet én sem tudok erről.
(#) szitko válasza icserny hozzászólására (») Jan 31, 2012 /
 
Köszi. Megtalátam a FUG.-ban. Valóban négy lapra "Segment A-D" van szabdalva. Átnézem, és kipróbálom.
(#) icserny válasza szitko hozzászólására (») Jan 31, 2012 /
 
A msp430g2xx1_flashwrite_01.c mintaprogramot nézd meg! A write_SegC (char value) függvény pl. bájtonként írja a C lapot.
Következő: »»   31 / 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