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   126 / 139
(#) szitko válasza steelgoofy hozzászólására (») Ápr 14, 2014 /
 
Köszi az infót.
Az AT parancsokat egy USB/UART modullal is ki lehet küldeni, legalább is nekem már sokszor sikerült.
Igazából az összepárosítással nem voltam tisztában.
(Holnap kipróbálom...)
(#) szitko válasza steelgoofy hozzászólására (») Ápr 15, 2014 /
 
Szia!

Nálam tökéletesen működik a két modul közti kommunikáció. Igaz nem két mikrovezérlő közé van berakva, hanem egy g2553-as, és egy cp2102-es usb/uart átalakító közé, de a lényeg ugyan az.
Ahogy néztem, a HC-05-nek mindegy, hogy slave vagy master módban van.
(#) SBahadurD válasza szitko hozzászólására (») Ápr 16, 2014 /
 
Én 8 MHz-en ezt csináltam, de ez már majdnem egy éve volt, nem emlékszem, már miért pont ezt.
  1. FCTL2 = FWKEY | FSSEL0 | FN1;
(#) szitko válasza SBahadurD hozzászólására (») Ápr 16, 2014 /
 
Már nekem is megy 16MHz-en, de igazából csak vaktában írogadtam az értékeket. De így nem tetszik!
(#) SBahadurD válasza szitko hozzászólására (») Ápr 16, 2014 /
 
Az adatlap a 7.3.1 pontban azt írja, hogy a leosztás eredménye 257 kHz és 476 kHz között legyen. A leosztás értéke az FN-be írt érték egyel növelve. Nekem a DCO-m le volt osztva 8-al, arról járt az MCLK és akkor az így kapott 1MHz lett még 3-al leosztva.
(#) uli hozzászólása Ápr 23, 2014 /
 
Sziasztok!
Ezt miért csinálja az alábbi program?
A ledet most kicsi kitöltési tényezővel kéne villogtatnia, de valamiért folyton hosszabb időre felvillantja.
Bővebben: Link
A progi:
  1. #include "io430.h"
  2. #include "stdint.h"
  3.  
  4.  
  5. //bemenetek: 1.0: TPS, 1.1: RPM, 1.2:
  6.  
  7.   //ADC function:
  8.   int ADC_meas(uint16_t chan) {
  9.    ADC10CTL0 &= ~ENC;                               //ADC off to reconfigure
  10.    ADC10CTL0 = ADC10SHT_3 | ADC10ON | SREF_0;       //sampling time: 16 clk | ADC on | voltage references: Vcc and Gnd
  11.    ADC10CTL1 = ADC10SSEL_0 + chan;                  //chan= input channel, ADC10OSC az órajel
  12.    ADC10CTL0 |= ENC + ADC10SC;                      //ADC enabled and start
  13.    while (ADC10CTL1 & BUSY);                        //waiting for the end of conversation
  14.    return ADC10MEM;                                 //0-1023
  15.   }
  16.  
  17. long TPS, RPM, pwm, i;
  18.  
  19.  
  20. int main( void )
  21. {
  22.    WDTCTL = WDTPW + WDTHOLD;
  23.    BCSCTL1 = CALBC1_8MHZ;                    // Set range
  24.    DCOCTL = CALDCO_8MHZ;                     // Set DCO step + modulation */
  25.  
  26.    P1DIR |= (BIT6);           // P1.6 output
  27.    P1SEL |= BIT6;             // P1.6 to TA0.1
  28.    TACTL = MC_1 + ID_3 + TASSEL_2 + TACLR; // up mode, div8, smclk, clr
  29.    CCTL1 = OUTMOD_7;          // CCR1 reset/set
  30.    TACCR0 = 65535;            // Period 500 ms if: 1MHz, div 8.
  31.    TACCR1 = 0;
  32.  
  33.    P1DIR &=~(BIT0+BIT1+BIT2); // P1.0-1-2 input,
  34.    ADC10AE0 |= (BIT0+BIT1+BIT2);   // adc enabled
  35.  
  36.    while(1){    
  37.      
  38.        TPS=ADC_meas(INCH_0);
  39.        RPM=ADC_meas(INCH_1);      
  40.        pwm=(TPS+RPM)*32;
  41.        TACCR1=pwm;  
  42.  
  43.   }
  44. }


Köszi a válaszokat előre is
(#) icserny válasza uli hozzászólására (») Ápr 23, 2014 /
 
  1. pwm=(TPS+RPM)*32;
  2. TACCR1=pwm;


A fenti sorok közé próbálj meg beszúrni egy várakozást:
  1. while(TAR <= pwm);


Már nem emlékszem pontosan az évekkel ezelőtti cikk és programok minden részletére, de a lényeg az, hogy az "A" típusú Timer beírása nem pufferelt, ezért nem szabad akármikor átírni a PWM kitöltési tényezőt. Ha rossz pillanatban írsz be a korábbinál kisebb értéket, akkor előfordulhat, hogy "nem áll le" a PWM impulzusod, és az új periódus kezdetéig magas szinten marad a kimenet. Ezt próbálja kibekkelni a fenti várakozás.

Bővebben: Link
(#) uli válasza icserny hozzászólására (») Ápr 24, 2014 /
 
Köszönöm!! Működik ha a <=-t megfordítom.
(#) uli válasza uli hozzászólására (») Ápr 24, 2014 /
 
Mégsem jó. Ha nem írom át a relációt, akkor ugyan azt csinálja, ha átírom, végtelen ciklusba kerül.
De így működik:
  1. while(TAR <= pwm);
  2.        pwm=(TPS+RPM)*32;
  3.        TACCR1=pwm;


Köszönöm!
A hozzászólás módosítva: Ápr 24, 2014
(#) icserny válasza uli hozzászólására (») Ápr 24, 2014 /
 
Érdekes észrevétel! Ezt azt jelenti, hogy az előzőleg beírt értékig kell várni...
Arra vigyázz, hogy maradjon idő a beírásra, azaz a 100 %-os kitöltést ne közelítsd meg nagyon!
(#) l0m3x hozzászólása Ápr 24, 2014 /
 
Sziasztok...

Olyan problémám lenne, hogy sok lábat foglal az MSP430-on az LCD.
Találtam is leírást smi szerint a LiquidCrystal_SR.h-val működik.
Csak elakadtam a shift register bekötésénél, mert arra nem találtam leírást...

Tudnátok segíreni?

Előre is köszi...
(#) icserny válasza l0m3x hozzászólására (») Ápr 24, 2014 /
 
Idézet:
„Találtam is leírást ami szerint a LiquidCrystal_SR.h-val működik.”
Kizártnak tartom. Kell ott lenni egy LiquidCrystal_SR.cpp forrásállománynak is, s abban van leírva, hogy melyik bit hová kötendő.
(#) l0m3x válasza icserny hozzászólására (») Ápr 25, 2014 /
 
Jaja arra gondoltam amikor nem találtam... De benne is van, köszi...
(#) entroz hozzászólása Ápr 25, 2014 /
 
Sziasztok!

Egy FR5739-en a timert próbálgatom PWM jel előállítására, de problémába ütköztem. Beállítottam,hogy az ACLK a VLO-ból vegye az órajelet és nincs semmi osztás, azaz elvileg 8KHz-et kellene mérnem, azonban ehelyett 8Hz-et mérek. Túl sok beállítási lehetőség nincs, de még se jöttem rá mi lehet a gond. 24MHz-es SMCLK esetén simán 24MHz-es PWM jel elő is áll.

  1. CSCTL0_H = 0xA5;
  2. CSCTL1 |= DCORSEL;        
  3. CSCTL1 |= DCOFSEL_3;                    
  4. CSCTL2 = SELA_1 + SELS_3 + SELM_3;        
  5. CSCTL3 = DIVA_0 + DIVS_0 + DIVM_0;


  1. P1DIR |= BIT2;
  2. P1SEL0 |= BIT2;
  3.  
  4. TA1CCR0 = 1000-1;                        
  5. TA1CCTL1 = OUTMOD_7;                      
  6. TA1CCR1 = 500;                          
  7. TA1CTL = TASSEL_1 + MC_1 + TACLR;
(#) icserny válasza entroz hozzászólására (») Ápr 25, 2014 /
 
Idézet:
„24MHz-es SMCLK esetén simán 24MHz-es PWM jel elő is áll.”
Ezt nem tartom valószínűnek, mert 1000 órajelciklusú periódusidő esetén a PWM frekvenciája 1000-szer kisebb lesz.

Tehát 24 MHz-nél 24 kHz, 8 kHz-nél pedig 8 Hz lesz a PWM frekvencia, vagyis jó a programod, tudja a fizikát!
(#) entroz válasza icserny hozzászólására (») Ápr 25, 2014 /
 
Igazad van én néztem el. Köszi a gyors választ.
(#) icserny hozzászólása Ápr 29, 2014 / 1
 
Újra itt van az "MSP430 napja" (április 30), ennek örömére az estore.ti.com kétnapos kedvezményes akcióval várja a vevőket (tehát ma és holnap).

15 %os kedvezménnyel kapható termékek (kupon kód: 430DAYLP)
- MSP-EXP430F5529LP Launchpad kártya
- MSP-EXP430G2 Launchpad kártya

50 %-os árengedménnyel kapható termékek (kupon kód: 430DAYBP)
- 430BOOST-SENSE1 kapacitív érzékelő és LED-ek booster pack
- 430BOOST-SHARP96 kijelző és kapacitív csúszka booster pack

A kupon kódokat fejnként csak egyszer lehet igénybe venni, de a 15 %-os kedvezményű termékekből állítólag több darab is rendelhető egyidejűleg, míg az 50 %-os kedvezményű termékekből csak 1 db rendelhető kedvezményesen.

Bővebben: Link
(#) uli hozzászólása Ápr 30, 2014 /
 
Üdv!
Újra elakadtam egy kicsit.
LCD-re szeretnék változó tartalmat kiíratni.
A program nagy része az 1. cikk alapján készült, azt nem másolom be, tökéletesen működik.
Amit beraktam új függvény és egyéb programrészletek:

  1. void integerToLcd(int szam)
  2. {
  3.   uint16_t thc,huc,tec,onc;  //ez azért van, mert próbálkoztam karakterré konvertálni a változókat.
  4.   int th,hu,te,on;
  5.  
  6.   th = szam / 1000;
  7.   lcd_write(th,1);
  8.  
  9.   hu = ((szam - th*1000)-1) / 100;
  10.   lcd_write(hu,1);
  11.  
  12.   te=(szam%100)/10;
  13.   lcd_write(te ,1);
  14.  
  15.   on=szam%10;  
  16.   lcd_write(on ,1);
  17. }
  18.  
  19. ...
  20.  
  21. int MAP;
  22.  
  23. ...
  24.  
  25. while(1){
  26.    
  27.      
  28.        MAP=ADC_meas(INCH_2);
  29.        GOTO_LINE1();
  30.        lcd_puts("MAP:");
  31.        integerToLcd(MAP);
  32.        GOTO_LINE2();
  33.        lcd_puts(" bar");
  34.        __delay_cycles(1);
  35.  
  36. ...


Az alábbi videón látható az eredmény:
Bővebben: Link

Válaszaitokat előre is köszi
A hozzászólás módosítva: Ápr 30, 2014
(#) icserny válasza uli hozzászólására (») Ápr 30, 2014 /
 
  1. th = szam / 1000;
  2.  lcd_write(th,1);

Ezzel az a gond, hogy a számjegy értékét küldöd ki a számjegy ASCII kódja helyett. Inkább így próbáld:
  1. th = szam / 1000;
  2. lcd_write(0x30+th,1);

(0x30 a '0' karakter kódja...

Természetesen ugyanezt kell eljátszani a többi számjegyre is.
(#) uli válasza icserny hozzászólására (») Ápr 30, 2014 /
 
Érthető. Köszönöm, működik
(#) icserny válasza uli hozzászólására (») Ápr 30, 2014 /
 
Ezen az oldalon mindjárt az első mintapélda is tartalmazza az sw_uart_outdec() függvényt, amelyet könnyen át lehet írni LCD kijelzésre (a függvény nevét, meg az egy karaktert kiíró sw_uart_putc() hívásokat kell megváltoztatni benne.
(#) szitko hozzászólása Máj 1, 2014 /
 
Sziasztok.

Volt egy kis időm foglalkozni a ez430-Chronos-al, de sajna rögtön belecsöppentem egy hibába. Írtam egy progit és fel szerettem volna tölteni az órára, de az IAR ezt a hibát dobja ki:
Idézet:
„The debugging session could not be started.
Either the debugger initialization failed, or else the file C:\... was corrupt or of an unsupported format.
There might be more information in the debug log window.”

Próbáltam a gyár programot feltenni, amit az óra programja telepít, a c:\Program Files (x86)\Texas Instruments\eZ430-Chronos\Software Projects\Chronos Watch\... könyvtárba, de ennél is ugyanezt a hibát kapom.
A program jó, mert lefordítja, csak feltölteni nem tudom, pedig minden jól van beállítva. Próbáltam a CCS programot, de ott is hasonló hibát kaptam.
Lehet, hogy hibás programozót kaptam?
(#) icserny válasza szitko hozzászólására (») Máj 1, 2014 /
 
Ha van 1.27 mm-es tüskesorod (azt hiszem a FRAM kártyához kaptál), akkor nem lehet bármelyik Launchpad kártyával programozni? Illetve megfordítva: az EZ430-Cronos programozójával nem lehet bármelyik MSP430F2xxxx vagy G2xxx-et programozni?
(Csak kérdezem, mert nem láttam még ez430-Chronos-t közelről)
(#) szitko válasza icserny hozzászólására (») Máj 1, 2014 /
 
Próbáltam már a G Launchpad kártyával programozni az MSP430f5529-est, de az nem jött össze, és fordítva sem. A CC430f6137-est még nem próbáltam.
Keresgéltem a neten, és úgy tűnik nem csak nálam nem működik a Chronos "fehér" programozója.
A bosszantó az, hogy a "wireless update" sem működik úgy, ahogy a Chronos wiki-n írják.
(#) szitko válasza icserny hozzászólására (») Máj 1, 2014 /
 
Kipróbáltam. A hiba ugyan az.
(#) Patryk91 hozzászólása Máj 2, 2014 /
 
Sziasztok!

Az lenne a problémám, hogy lenne egy MSP430as launchpad G2553-as mikrovezérlővel és szeretnék hozzá egy lcd modult csatlakoztatni. Bővebben: Link
Ez lenne a datasheetje a modulnak. A probléma az lenne, hogy olvastam az oldalon lévő cikket, de itt az inicializálásra teljesen más módot ír. És az oldalon lévő programmal nem működik.
A kijelzőn az egyes betűk pixelei mind fehérek és nem csinál mást.

Az egyik kérdésem az lenne, hogy vannak ezek a kétsoros "parancsok" például rögtön a 39 us-s várakozás után DB5-re kell 1 és alatta rögtön DB7 N és DB6 F, most ezeket egybe kell elküldeni vagy elsőnek pulzálom DB5el a bemenetet, majd a másik sort?

A választ előre is köszönöm!
A hozzászólás módosítva: Máj 2, 2014
(#) icserny válasza Patryk91 hozzászólására (») Máj 2, 2014 /
 
Nekem még nem volt a kezemben olyan 16x02-es kijelző, amelyikkel nem működött volna a program. Amire ügyelni kell:

- A program időzítései az 1 MHz körüli alapértelmezett CPU frekvencia esetére vonatkoznak.
- A kijelződ hosszabb várakozásokat igényel (pl. 15 ms helyett 40 ms). Ha megnöveled a késleltetéseket, az ártani nem fog.

Idézet:
„A kijelzőn az egyes betűk pixelei mind fehérek és nem csinál mást.”
Ez lehet rossz kontrasztfeszültség miatt is. Ha csak az első sorban van téglalap, a második sorban semmi, akkor viszont az inicializálás nem sikerült.
Idézet:
„vannak ezek a kétsoros "parancsok"”
Azokat külön-külön kell kiadni.
A hozzászólás módosítva: Máj 2, 2014
(#) Patryk91 válasza icserny hozzászólására (») Máj 2, 2014 /
 
Értem és köszönöm!

Mind a két sorban az össze pixel fehér, miután lefutott a program, a led villog, tehát elakadni nem akadt el a program.

Az nem tudom, hogy probléma-e, de az összes ChangeBits(LCD_PORT,0x00,LCD_MASK); kifejezésre (a paramétertől függetlenül) ezt írja:

undefined behavior: the order of volatile accesses is undefined in this statement
(#) icserny válasza Patryk91 hozzászólására (») Máj 2, 2014 / 1
 
Idézet:
„Mind a két sorban az össze pixel fehér”
A kontraszt (3 láb) hová van kötve? Ha földön van, akkor próbáld megemelni a földhöz képest (potméter, osztó).
Az adatlapban szereplő VLCD feszültséget a tápfeszből visszafelé kell érteni.

VCC = 5V mellett VLCD = 3,64V, tehát a földhöz képest 1,34 V körüli érték kell neki.
Idézet:
„undefined behavior: the order of volatile accesses is undefined in this statement”
Ez nem érdekes.
(#) Patryk91 válasza icserny hozzászólására (») Máj 2, 2014 /
 
A Vcc a panel 5 V-ról kapja, a gnd az a gndről, ami bejön az usbről. A Vee kontrasztot először a földre kötöttem ellenállás nélkül, úgy mindkét sorban fehér az egész az összes pixel.

Most kap úgy 1,35-1,4 V körül, így viszont a felső sor kék az alsó meg sötét. 1,2 Volton már jobb valamivel a helyzet.
Következő: »»   126 / 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