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   137 / 137
(#) kleinie válasza flaci76 hozzászólására (») Jan 21, 2018 /
 
Első körben próbapanelen összerakott kis áramkörökkel szeretnék gyakorlatozni. Műveleti erősítős, A/D konverter, egy kis PWM, valami kijelzőt vezérelni, stb. Lehet az célszerűbb lenne, amit te linkeltél, ha véletlenül letüzelem rajta a kontrollert, akkor ott tudom cserélni.
Most éppen a forrasztó állomásom kapcsolási rajzát fejtegetem vissza. Szerintem jó gyakorlat, van benne A/D, PWM. Abban Atmega8L van, de szeretném összerakni egy MSP430-al próbapanelen, aztán ha sikerül, akkor lehet megépítem.
(#) szitko hozzászólása Feb 8, 2018 /
 
Sziasztok.

Szeretnék az Enregiához új MCU-t hozzáadni. Elég ha a "board.txt"-ben megadom a paramétereket? Vagy több beállításra is szükség van?
(#) uv142 hozzászólása Okt 28, 2018 /
 
Sziasztok!
G2553 a fejlesztői környezetben üzemel, fe ha átrakom egy próbapanelon összedugott kapcsolásba, akkor nem hajlandó elindulni.
az RST láb egy 10K-s ellenállással 3,3V- on van.
Mi lehet még, ami a hibát okozhatja?
(#) icserny válasza uv142 hozzászólására (») Okt 28, 2018 / 1
 
100 nF a VDD és a GND láb közé. Esetleg további szűrés (10 µF - 100 uF) a tápfeszültségre.
(#) uv142 válasza icserny hozzászólására (») Okt 28, 2018 / 1
 
Köszi, de már megvan!
Volt egy szakad kábelem...
(#) icserny válasza uv142 hozzászólására (») Okt 29, 2018 /
 
(#) röntgen hozzászólása Jan 15, 2019 /
 
Sziasztok. Lehet off egy kicsit. Jobb helyet nem tudok ahol kérdezhetném. A Texas CC2530-ról lenne szó, ami zigbee mesh hálózatra képes 8051 magú kontroller. Valakinek van tapasztalata vele? Ha USB-s kis modult beszerzek belőle, akkor megoldható, hogy PC-ről konfiguráljak több másik eszközt is? Okos otthon témakörben alkalmaznám/ismerkednék vele.
A hozzászólás módosítva: Jan 15, 2019
(#) JOCO10 hozzászólása Dec 13, 2019 /
 
Sziasztok.
Adottegy msp430g2452 proci , LanuchPad 1.5 verzio, Energia 1.8.7 E 21 soft.
Soros portot szeretnék használni, hardwereserial nincs ezen a procin.
A softserial a mintapéldákból forditásnál hibát ad . Van valakinek müködő kódja?
(#) icserny válasza JOCO10 hozzászólására (») Dec 14, 2019 /
 
MSP430G22452 esetén:
- A beépített Serial osztályt kell használni, majd az tudja (a 2452 beállításból), hogy nincs hardveres UART és automatikusan úgy kezeli, ahogy kell

- Serial.begin(1200); legyen az inicializálás (semmiképp sem 9600!)

- A Lauchnpad kártyán a jumperek SW állásban legyenek, nem HW állásban!
(#) Zsolt32 hozzászólása Dec 23, 2019 /
 
Sziasztok!

Linux operációs rendszer alatt milyen fejlesztői környezettel lehet dolgozni? Egyáltalán létezik linuxra ilyen?
(#) Lucifer válasza Zsolt32 hozzászólására (») Dec 23, 2019 / 1
 
CCS van Linuxra is, én ARM fejlesztést toltam vele régebben, szerintem van MSP430 compiler is mögé, de erre nem veszek mérget. Általánosan nekem az volt a benyomásom, hogy jobban össze volt rakva mint az MPLAB X vagy az akkori ST-s hulladék IDE-k (STM32Workbench - CubeIDE).
(#) neogeo2 hozzászólása Dec 25, 2019 /
 
Üdv,

Nagyon amatőr kérdéssel fordulok hozzátok, de sajnos most nagyon elakadtam.
A cél egy BCD óra lenne, ami nagyjából már működik is. Amin elakadtam, az a gombkezelés ami a beállításhoz szükséges. A gombkezelést megszakítással szeretném megoldani. Ezt úgy képzeltem, hogy a port megszakításban egy a nyomógombhoz tartozó boolean tipusú változót billentek csak be, majd a main függvényben kezelem azt le.

Íme a félkész kód (a fordítás: msp430-gcc-4.6.3 -Os -mmcu=msp430g2553 -Wall -o main.elf main.c):
  1. #include <stdbool.h>
  2. #include <msp430.h>
  3.  
  4. #define delayckl 0x007F
  5.  
  6. volatile int hours = 12;
  7. volatile int mins = 34;
  8. volatile int secs = 56;
  9. volatile bool buttonA = false;
  10. volatile bool buttonB = false;
  11. volatile bool buttonC = false;
  12. volatile bool buttonD = false;
  13.  
  14. void delay(unsigned int d) {
  15.         while(d--) {}
  16. }
  17.  
  18. void display() {
  19.     P1OUT ^= BIT0;
  20.     P2OUT = hours/10;
  21.     delay(delayckl);
  22.     P1OUT ^= BIT0;
  23.     P2OUT = 0;
  24.  
  25.     P1OUT ^= BIT1;
  26.     P2OUT = hours%10;
  27.     delay(delayckl);
  28.     P1OUT ^= BIT1;
  29.     P2OUT = 0;
  30.  
  31.     P1OUT ^= BIT2;
  32.     P2OUT = mins/10;
  33.     delay(delayckl);
  34.     P1OUT ^= BIT2;
  35.     P2OUT = 0;
  36.  
  37.     P1OUT ^= BIT3;
  38.     P2OUT = mins%10;
  39.     delay(delayckl);
  40.     P1OUT ^= BIT3;
  41.     P2OUT = 0;
  42.  
  43.     P1OUT ^= BIT4;
  44.     P2OUT = secs/10;
  45.     delay(delayckl);
  46.     P1OUT ^= BIT4;
  47.     P2OUT = 0;
  48.  
  49.     P1OUT ^= BIT5;
  50.     P2OUT = secs%10;
  51.     delay(delayckl);
  52.     P1OUT ^= BIT5;
  53.     P2OUT = 0;
  54. }
  55.  
  56. int main(void) {
  57.         WDTCTL = WDTPW | WDTHOLD;   // Stop WDT
  58.         BCSCTL3 |= XCAP1 + XCAP0;       // Enable internal capacitor
  59.     TACCR0 = 32768;             // Compare value -> 1 Hz Toggle frequence
  60.     TACCTL0 = CM_0 + CCIE;      // C/C Register settings: no Capture; compare mode;
  61.     TACTL = 0;                  // Timer A setiings: Source = ACLK; Upmode; Interrupt enabled
  62.     TACTL = TASSEL_1 + MC_1;
  63.  
  64.         P1DIR = ~BIT7;              // P1.7 input, all others output
  65.     P1OUT = BIT7;               // Select Pullup resistor for P1.7
  66.     P1REN = BIT7;               // Enable Pullup/down for P1.7
  67.         P1IES |= BIT7;              // P1.7 negative edge triggered
  68.         P1IFG &= ~BIT7;             // Clear P1.7 IFG
  69.         P1IE |= BIT7;               // Enable interrupt for P1.7
  70.  
  71.         P2DIR = 0b11111111;         // P2.x output
  72.  
  73.         __enable_interrupt();       // Global interrupt enable
  74.  
  75.         while (1) {
  76.         if (buttonA) {
  77.             display();
  78.             if (++hours > 23) hours = 0;
  79.             buttonA = false;
  80.         }
  81.         display();
  82.         }
  83. }
  84.  
  85. // Timer A0 interrupt service routine
  86. void __attribute__ ((interrupt (TIMER0_A0_VECTOR))) TIMER0_A0_ISR(void) {
  87.         _BIC_SR_IRQ(LPM3_bits);
  88.         if (++secs > 59) {
  89.                 secs = 0;
  90.                 if (++mins > 59) {
  91.                         mins = 0;
  92.                         if (++hours > 23) {
  93.                                 hours = 0;
  94.                         }
  95.                 }
  96.         }
  97. }
  98.  
  99.  
  100. void __attribute__ ((interrupt (PORT1_VECTOR))) Port_1(void) {
  101.     buttonA = true;
  102.         P1IFG &= ~BIT7;            // Clear P1.7 IFG
  103. }


A gondom az, hogy a gombnyomás "dupláz". Tehát lenyomáskor és felengedéskor is léptet egyet az órák számán. Logikám szerint nem így kellene lennie, hiszen a programban be van kapcsolva a P1.7-hez tartozó felhúzó ellenállás és a megszakítás a lefutó élre van beállítva. Nem értem a dolgot. Kérlek segítsetek, hogy mit rontok el!
Köszönöm ha rá szánsz néhány percet és rávilágítasz a hibára!

Mellékeltem a kapcsolást is.

kimenet.pdf
    
(#) jefflynn válasza neogeo2 hozzászólására (») Dec 25, 2019 / 1
 
Prelleg a kapcsoló. Ezt ki kell védeni hardveresen vagy szoftveresen.
(#) neogeo2 válasza jefflynn hozzászólására (») Dec 25, 2019 /
 
A program 77. sorában van egy display() függvény hívás, ami tulajdonképpen emiatt került be oda. Ennyi időnek elegendőnek kell lennie a prellmentesítéshez. Bár jobban belegondolva a gomb felengedéskor is lehetséges néhány lefutó él, ami így nincs lekezelve. Most nincs ötletem, hogyan tudnám ezt megoldani. Holnapra megálmodom. Köszönöm a tippet!
(#) benjami válasza neogeo2 hozzászólására (») Dec 25, 2019 / 1
 
A bemeneti láb jelváltozás megszakítás szerintem tökéletesen alkalmatlan nyomógomb feldolgozásra mert a nyomógomb prellje miatt minden gombnyomást néhány 10 nagyságrendű lenyomásnak és felengedésnek fog érzékelni. Helyette nekem teljesen bevált az időzítéssel történő másodpercenként 30 körüli beolvasás (hogy ezt megszakításból, vagy megszakításban generált jelzés alapján a főprogramhurokban végezzük el az már lényegtelen). Ezzel a módszerrel remekül meg lehet oldani, hogy elkülönítsük a rövid lenyomást a hosszútól, megoldható a bizonyos ideig történő lenyomás után az ismétlés (mint ahogy a számítógép billentyűzetnél is van), sőt még a dupla 'kattintás' is könnyen detektálható.
(#) neogeo2 válasza benjami hozzászólására (») Dec 26, 2019 /
 
Másképpen ugyan, de sikerült megoldani. Köszönöm a tippet. Később még jó lehet ez a megoldás is.
Következő: »»   137 / 137
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu