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   118 / 139
(#) szitko válasza icserny hozzászólására (») Dec 3, 2013 /
 
Nem néztem bele ezekbe a programokba.
A Timer beállításoknak van valami speckó egyszerűsített megoldása az energiában? Vagy ez az "F_TIMER" valami definiált változó?
(#) icserny válasza szitko hozzászólására (») Dec 4, 2013 /
 
A hangkeltéshez használt időzítő a CPU frekvenciáját 1:8-as előosztással kapja. Így F_CPU = 1 MHZ esetén 1 Hz - 65 kHz a beállítható tartomány (a felső határ szúnyogriasztóhoz is jó), F_CPU = 16 MHz esetén pedig 16 Hz - 1 MHz).

Fentiekhez illeszkedően F_TIMER így van definiálva:
  1. #define F_TIMER (F_CPU/8L)
(#) szitko válasza icserny hozzászólására (») Dec 4, 2013 /
 
Köszönöm.

Más!
Adott egy XY változó. Ezt a változót, hogy tudom bit szinten variálni IAR-ban, tehát pl. csak egy adott bitet megváltoztatni, vagy ami most fontos lenne nekem, csak a változó valamelyik bitjét vizsgálni?
Esetleg el lehet valahogy nevezni a változó bitjeit?
A hozzászólás módosítva: Dec 4, 2013
(#) röntgen válasza szitko hozzászólására (») Dec 4, 2013 /
 
Szia,
A logikai műveletekkel megtudod oldani.
- Vagy kapcsolattal bit 1-be állítása. Pl: X |= 0x01 //Első bit egy-be
- És kapcsolattal tudsz törölni bitet. Pl.: Y &= 0x7f // 7.bit törlése
- És művelettel tudsz tesztelni is. Pl.: X &= 0x40 // ha a 6.bit "1-es" akkor az eredmény is "0x40" egyébként '0".

Csak egy ötlet........

Üdv.
A hozzászólás módosítva: Dec 4, 2013
(#) icserny válasza szitko hozzászólására (») Dec 4, 2013 /
 
Idézet:
„Esetleg el lehet valahogy nevezni a változó bitjeit?”

Ebben a hozzászólásban van bitenként matatható típus definiálására példa.
(#) szitko válasza icserny hozzászólására (») Dec 4, 2013 /
 
Köszi, menet közben megtaláltam, és átnéztem a io430xy.h fájlt.
Azt viszont nem értem, hogy ha a hozzászólásban lévő definíciót használom, miért nem tudok a változónak értéket adni. Illetve tudok, de csak bitenként. Az viszont nem jó.
(#) szitko válasza röntgen hozzászólására (») Dec 4, 2013 /
 
Kösz.

Szerintem ennél a megoldásnál maradok. Definiálok 8 bitet, akkor a biteknek is lesz neve, és azt úgy változtatom, vizsgálom ahogy akarom. Legalábbis remélem...
(#) icserny válasza szitko hozzászólására (») Dec 4, 2013 /
 
Idézet:
„Azt viszont nem értem, hogy ha a hozzászólásban lévő definíciót használom, miért nem tudok a változónak értéket adni.”

Nem tudom, hogy hogyan próbáltad. Így lehet:
  1. #include "io430.h"
  2.  
  3. typedef unsigned char   byte;
  4.     typedef union _BYTE
  5.     {
  6.         byte bajt;
  7.         struct
  8.         {
  9.             unsigned b0:1;
  10.             unsigned b1:1;
  11.             unsigned b2:1;
  12.             unsigned b3:1;
  13.             unsigned b4:1;
  14.             unsigned b5:1;
  15.             unsigned b6:1;
  16.             unsigned b7:1;
  17.         } bits;
  18.     } BYTE;
  19.  
  20.  BYTE blabla;
  21.  
  22.  void main() {
  23.    blabla.bajt = 35;
  24.    blabla.bits.b2 = 1;
  25.    blabla.bits.b5 = 0;
  26.    
  27.  }


Megjegyzés: A nem túl szimpatikus _byte név helyett bajt nevet írtam. De írhatsz bármilyen nevet...
(#) szitko válasza icserny hozzászólására (») Dec 4, 2013 /
 
Köszönöm.
Egy kicsit túlbonyolítottam a definíciót, ezért nem működött.
(#) bottila hozzászólása Dec 5, 2013 /
 
Sziasztok!
Android-MSP430 kommunikációs kísérletnek szánva terveztem egy nagyon egyszerű, PI rendszerű fémkereső kapcsolást. Mostanra elkészült mindkét oldali program is, bár erősen alfa állapotúak még. (Mindazon által működnek.) Kérdésem az lenne, hogy meg tudom e oldani és miképpen, hogy ne kelljen minden méréssorozat után újrainicializálni az ADC-t megszakításban? Eddig nekem nem sikerült, de lehet, hogy csak elnéztem valamit. Itt van lentebb a mikrovezérlő oldali teljes kód. Elnézést a külleme miatt, de még nem végleges, plusz most álltam át teljesen linuxra és geany-ben nem tudok rendesen formáztatni sem. - Meg amúgy is csak egy buta asztalos vagyok.

  1. #include "msp430g2553.h"
  2. #include "intrinsics.h"
  3.  
  4.  //sending time->  48 int -> compressed to 60 byte +start+stop =600bit (0,00000217s/bit)-> 0,001302s
  5.  //period>firstDelay+ADC+sending time
  6.  //max 600Hz
  7.  
  8.  #define ADCSOROZAT (40) //néggyel osztható legyen
  9.  #define PERIOD (20000) //0,0000005S*20000 =10mS min 35Hz~>57143 ;max 600Hz ~> min 3333clk
  10.  #define IMPWIDTH (200) //0,0000005S*200=100uS
  11.  #define FIRSTDELAY (50) //
  12.  #define GETADC (1)
  13.  #define GETTEMPERATURE (2)
  14.  #define GETSETTINGS (3)
  15.  #define SETFREQUENCY (4)
  16.  #define SETPULSEWIDTH (5)
  17.  #define SETDELAYBEFOREADC (6)
  18.  #define SETSAMPLEANDHOLD (7)
  19.  #define SETADCDIVIDER (8)
  20.  #define SETTEST (11)
  21.  #define REDLEDON (9)
  22.  #define REDLEDOFF (10)
  23.  volatile unsigned int test=0,period=PERIOD,firstDelay=FIRSTDELAY,adcSht=ADC10SHT_0,adcDiv=ADC10DIV_2, impwidth=IMPWIDTH, adcsorozat=ADCSOROZAT, mer[ADCSOROZAT],serialParam=0,serialTemp=0;
  24.  volatile char serialCommand=0;
  25.  
  26.  
  27.  void pakolKuld(){
  28.  unsigned char upbits=0;
  29.  int i;
  30.         while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
  31.         UCA0TXBUF=68; // Send "D"
  32.         while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
  33.         UCA0TXBUF=(unsigned char)(ADCSOROZAT+(ADCSOROZAT>>2)); // Send data lenght
  34.         for (i=0;i<(ADCSOROZAT);i++){
  35.                 while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
  36.                 UCA0TXBUF=(unsigned char) (mer[i]&0xFF);
  37.                 upbits|=(unsigned char)(mer[i]>>8);
  38.                 if ((i+1)%4){
  39.                         upbits=(upbits<<2); //a felső két bit 2-esével fordított sorrendben mint az alsó 8
  40.                 }else{
  41.                         while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
  42.                         UCA0TXBUF =(unsigned char) upbits;
  43.                         upbits=0;
  44.                 }
  45.         }
  46.         while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
  47. }
  48.  
  49.  void hom(){
  50.  unsigned char upbits=0;
  51.  int i,temp,IntDegC;
  52.  ADC10CTL0 &=~ENC;
  53.  while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
  54.         UCA0TXBUF='T'; //
  55.     ADC10DTC1=0;
  56.     ADC10CTL0 = SREF_1+REFON+ADC10ON+ADC10SHT_3;
  57.     ADC10CTL1 = INCH_10+ CONSEQ_0+ADC10SSEL_3+ADC10DIV_7;    
  58.     ADC10CTL0 |= ENC +ADC10SC;
  59.     while (ADC10CTL1 & BUSY);
  60.     temp = ADC10MEM;
  61.         IntDegC = ((temp - 673) * 423) / 1024;
  62.         UCA0TXBUF=(char)IntDegC&0x00FF;
  63.     while (ADC10CTL1 & BUSY);              
  64.         ADC10CTL0 &=~ENC;
  65.         ADC10DTC1=adcsorozat;
  66.         ADC10SA = (int)mer;  
  67.         ADC10CTL0 = SREF_1+ADC10ON+ADC10SHT_0+ADC10IE;  
  68.         ADC10CTL1 = INCH_7+ CONSEQ_2+ADC10SSEL_0+ADC10DIV_0+SHS_1+ISSH;    
  69.         ADC10CTL0 |= ENC +MSC;
  70. }
  71.  
  72.  
  73.  
  74.  
  75.  
  76. void main(void){
  77. WDTCTL = WDTPW + WDTHOLD; // Stop WDT
  78. P1DIR |= (BIT0); // Set the LEDs on P1.0 as outputs
  79. P1OUT = 0x01;
  80.  
  81.  //init basic clock
  82. BCSCTL1 = CALBC1_16MHZ; // Set DCO
  83. DCOCTL = CALDCO_16MHZ;
  84. BCSCTL3 |= LFXT1S1;
  85.  
  86. //init UART
  87. P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
  88. P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
  89. UCA0CTL1 |= UCSSEL_3; // SMCLK
  90. UCA0BR0 =2; // 16MHz 460800
  91. UCA0BR1 = 0; // 16MHz 460800
  92. UCA0MCTL = UCBRS_3+UCBRF_2+UCOS16;
  93. // 1 bit 0,00000217s
  94.  
  95.  
  96. UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
  97. IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
  98.  
  99. //init PWM
  100. P1DIR |=BIT6;    // Fet, ki,    
  101. P1SEL |= BIT6;  //TA0 out
  102. P1SEL2&=~(BIT6);
  103. TA0CCR0=period-1;
  104. TA0CCR2=firstDelay; //25uS a mérés előtt
  105. TA0CCR1=TA0CCR0-impwidth;
  106.  
  107. //TA0CCTL0 = CCIE; //up
  108. TA0CCTL0 =CCIE; //up
  109. TA0CCTL1 = OUTMOD_3; //up
  110. TA0CCTL2= OUTMOD_3; //up
  111. TA0CTL=TASSEL_2|MC_1|TACLR|ID_3|TAIE;   //SMCLK->16MHz/8=2Mhz
  112.  
  113. //init adc
  114. P1DIR&=~BIT7;
  115.  
  116. //init end
  117. __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
  118. }
  119.  
  120.  
  121. #pragma vector=USCIAB0RX_VECTOR
  122. __interrupt void USCI0RX_ISR(void){
  123. while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
  124. serialCommand=UCA0RXBUF;
  125. serialParam=0;
  126. while (!(IFG2&UCA0RXIFG));
  127. serialParam|=UCA0RXBUF;
  128. while (!(IFG2&UCA0RXIFG));
  129. serialTemp=UCA0RXBUF;
  130. serialParam|=(serialTemp<<8);
  131. switch (serialCommand) {
  132. case GETADC:
  133.         pakolKuld();
  134. break
  135. case GETTEMPERATURE:
  136. hom();
  137. break
  138. case GETSETTINGS:
  139.         while (!(IFG2&UCA0TXIFG));
  140.         UCA0TXBUF='B';
  141.         while (!(IFG2&UCA0TXIFG));
  142.         UCA0TXBUF=(unsigned char)(period&0xFF); // frequency
  143.         while (!(IFG2&UCA0TXIFG));
  144.         UCA0TXBUF=(unsigned char)((period>>8)&0xFF); // frequency
  145.         while (!(IFG2&UCA0TXIFG));
  146.         UCA0TXBUF=(unsigned char)(impwidth&0xFF); // pulse
  147.         while (!(IFG2&UCA0TXIFG));
  148.         UCA0TXBUF=(unsigned char)((impwidth>>8)&0xFF); //      
  149.         while (!(IFG2&UCA0TXIFG));
  150.         UCA0TXBUF=(unsigned char)(firstDelay&0xFF); // delay adc
  151.         while (!(IFG2&UCA0TXIFG));
  152.         UCA0TXBUF=(unsigned char)((firstDelay>>8)&0xFF); //    
  153.         while (!(IFG2&UCA0TXIFG));
  154.         UCA0TXBUF=(unsigned char)(adcSht&0xFF); // ADC sample and hold time
  155.         while (!(IFG2&UCA0TXIFG));
  156.         UCA0TXBUF=(unsigned char)((adcSht>>8)&0xFF); //        
  157.         while (!(IFG2&UCA0TXIFG));
  158.         UCA0TXBUF=(unsigned char)(adcDiv&0xFF); // ADC timer divider
  159.         while (!(IFG2&UCA0TXIFG));
  160.         UCA0TXBUF=(unsigned char)((adcDiv>>8)&0xFF); //        
  161.         while (!(IFG2&UCA0TXIFG));
  162.         UCA0TXBUF=(unsigned char)((P1OUT&BIT0)&0xFF); //        RedLed
  163.         while (!(IFG2&UCA0TXIFG));
  164.         UCA0TXBUF=(unsigned char)(test&0xFF); // test
  165.         while (!(IFG2&UCA0TXIFG));
  166.         UCA0TXBUF=(unsigned char)((test>>8)&0xFF); //  
  167.         while (!(IFG2&UCA0TXIFG));
  168. break
  169. case SETFREQUENCY:
  170.         period=serialParam; // frequency
  171.         TA0CCR0=period-1;
  172.         TA0CCR2=firstDelay; //25uS a mérés előtt
  173.         TA0CCR1=TA0CCR0-impwidth;
  174.         TA0CCTL0 =CCIE; //up
  175.         TA0CCTL1 = OUTMOD_3; //up
  176.         TA0CCTL2= OUTMOD_3; //up
  177.         TA0CTL=TASSEL_2|MC_1|TACLR|ID_3|TAIE;   //SMCLK->16MHz/8=2Mhz
  178. break
  179. case SETPULSEWIDTH:
  180.         impwidth=serialParam; // frequency
  181.         TA0CCR1=TA0CCR0-impwidth;
  182.         TA0CTL=TASSEL_2|MC_1|TACLR|ID_3|TAIE;   //SMCLK->16MHz/8=2Mhz
  183. break;         
  184. case SETDELAYBEFOREADC:
  185.         firstDelay=serialParam;
  186.         TA0CCR2=firstDelay;             //kezdeti késleltetés
  187.         TA0CTL=TASSEL_2|MC_1|TACLR|ID_3|TAIE;   //SMCLK->16MHz/8=2Mhz
  188. break
  189. case SETSAMPLEANDHOLD:
  190.          adcSht=serialParam;
  191. break
  192. case SETADCDIVIDER:
  193.          adcDiv=serialParam;
  194. break
  195. case REDLEDON:
  196.          P1OUT |= BIT0;
  197. break
  198. case REDLEDOFF:
  199.          P1OUT &= ~BIT0;
  200. break
  201. case SETTEST:
  202.          test=serialParam;
  203. break;                                                                                                                                                                 
  204. }
  205. }
  206.  
  207. #pragma vector=ADC10_VECTOR
  208. __interrupt void adc_vector(void) {
  209.         volatile unsigned char k,i;
  210. }
  211.  
  212. // Timer A0 interrupt service routine
  213. #pragma vector=TIMER0_A0_VECTOR
  214. __interrupt void Timer_A0(void){
  215. ADC10CTL0 &=~ENC;
  216. while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active
  217.  ADC10CTL0 &=~ENC;
  218.  while (ADC10CTL1 & BUSY);
  219.  ADC10AE0 |=INCH_7;  
  220.  ADC10SA = (int)mer;            
  221.  ADC10DTC1=adcsorozat;
  222.  ADC10CTL0 = SREF_1+ADC10ON+adcSht+REFON+MSC;  
  223.  ADC10CTL1 = INCH_7+ CONSEQ_2+ADC10SSEL_3+SHS_3+adcDiv;    
  224.  ADC10CTL0 |= ENC;
  225. }
  226.  
  227. // Timer A1 interrupt service routine
  228. #pragma vector=TIMER0_A1_VECTOR
  229. __interrupt void Timer_A1(void){
  230.  switch (TAIV){
  231.  case 2:
  232.         break;
  233.         case 4:
  234.         break;
  235.  }
  236. }
(#) tcsonka hozzászólása Dec 7, 2013 /
 
Sziasztok!

Adott a következő programrészlet:

while(!(P1IN & BIT3)){
P1OUT = BIT6;
a=a+1;
}

Azt szeretném megtudni, hogy hány órajelciklus alatt hajtódik végre egyszer e fenti programrészlet.
Szeretném kiszámolni hány másodpercig tart amíg "a" értéke mondjuk 50000-ig emelkedik.
(#) icserny válasza tcsonka hozzászólására (») Dec 7, 2013 /
 
Ebben és az előtte levő hozzászólásokból kiderül, hogy az IAR szimulátorban a CPU registers ablakban a CYCLECOUNTER kijelzi a végrehajtott ciklusok számát. A while cikklusba lépésed előtt jegyezd fel az értéket, majd egy ciklus végrehajtása után ismét, s a kettő különbsége a keresett szám.
(#) kisedison hozzászólása Dec 8, 2013 /
 
Szép napot Mindenkinek!

Adott ez a program:
  1. #include <Wire.h>
  2. #define address 0x1E //0011110b, I2C 7bit address of HMC5883
  3.  
  4. void setup()
  5. {
  6.   Serial.begin(9600);  // start serial for output
  7.   Wire.begin();        // join i2c bus (address optional for master)
  8.  
  9.   //Put the HMC5883 IC into the correct operating mode
  10.   Wire.beginTransmission(address); //open communication with HMC5883
  11.  
  12.   //Write CRA (00) – send 0x3C 0x00 0x70 (8-average, 15 Hz default, normal measurement)
  13.   Wire.write(0x3c);
  14.   Wire.write(0x00);
  15.   Wire.write(0x70);
  16.  
  17.   //Write CRB (01) – send 0x3C 0x01 0xA0 (Gain=5, or any other desired gain)
  18.   Wire.write(0x3c);
  19.   Wire.write(0x00);
  20.   Wire.write(0x70);
  21.  
  22.   //Write Mode (02) – send 0x3C 0x02 0x00 (Continuous-measurement mode)
  23.   Wire.write(0x3c);
  24.   Wire.write(0x02);
  25.   Wire.write(0x00);
  26.   delay(60);
  27.  
  28.  
  29.   Wire.endTransmission();
  30. }
  31.  
  32. void loop()
  33. {
  34.   int x,y,z; //triple axis data
  35.  
  36.   //Tell the HMC5883 where to begin reading data
  37.   Wire.beginTransmission(address);
  38.   Wire.write(0x03); // register 3, X MSB register
  39.   Wire.endTransmission();
  40.  
  41.  
  42.   //Read data  each axis, 2 registers per axis
  43.   Wire.requestFrom(address, 6);
  44.   if(6<=Wire.available()){
  45.     x = Wire.read()<<8; //X msb
  46.     x |= Wire.read(); //X lsb
  47.     z = Wire.read()<<8; //Z msb
  48.     z |= Wire.read(); //Z lsb
  49.     y = Wire.read()<<8; //Y msb
  50.     y |= Wire.read(); //Y lsb
  51.   }
  52.  
  53.   //Print out values of each axis
  54.   Serial.print("x: ");
  55.   Serial.print(x);
  56.   Serial.print("  y: ");
  57.   Serial.print(y);
  58.   Serial.print("  z: ");
  59.   Serial.println(z);
  60.  
  61.   delay(100);
  62. }


HMC5883-as 3 tengelyes magnetométer értékeit olvassa ki, és küldi tovább soros porton. A probléma hogy egyszer kiolvas, és utána folyamatosan azokat az értékeket küldi. Tehát ha mondjuk ez jön ki x: 255 y: 156 z: -35, akkor ezt küldi folyamatosan hiába mozgatom a modult. Ha lehúzom az i2c kábelét és visszadugom akkor megint kiolvassa az aktuális értéket, de szintén nem változik utána. Mi lehet a gond?
(#) t0bi válasza kisedison hozzászólására (») Dec 8, 2013 /
 
Nekem ez működött, ha jól látom a különbség az, hogy a printelés is benne van a hurokban.
Nem vagyok még spéci ebben a programozásban, de próbáld ki, hátha jó
  1. void main(void)
  2. { while(1){
  3.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  4.  
  5.   BCSCTL1 = CALBC1_1MHZ;
  6.   DCOCTL = CALDCO_1MHZ;
  7.   RBC = 0;
  8.   _EINT();
  9.  
  10.     while ( TI_USCI_I2C_notready() );         // wait for bus to be free
  11.    
  12.     TI_USCI_I2C_transmitinit(0x1E,0x3F);  // init transmitting with
  13.     while ( TI_USCI_I2C_notready() );         // wait for bus to be free
  14.     TI_USCI_I2C_transmit(2,array1);       // start transmitting
  15.     __delay_cycles(100000);
  16.  
  17.     while ( TI_USCI_I2C_notready() );         // wait for bus to be free
  18.    
  19.     TI_USCI_I2C_transmitinit(0x1E,0x3F);  // init transmitting with
  20.     while ( TI_USCI_I2C_notready() );         // wait for bus to be free
  21.     TI_USCI_I2C_transmit(1,array2);       // start transmitting
  22.     __delay_cycles(100000);
  23.  
  24.     while ( TI_USCI_I2C_notready() );         // wait for bus to be free
  25.      
  26.     TI_USCI_I2C_receiveinit(0x1E,0x3F);   // init receiving with USCI
  27.     while ( TI_USCI_I2C_notready() );         // wait for bus to be free
  28.     TI_USCI_I2C_receive(6);              //store
  29.     __delay_cycles(100000);
  30.        
  31.       H = angle * 10;
  32.    
  33. //      P1OUT = 0xC1;  
  34. //      P1REN |= 0xC1;  
  35. //      P1DIR = 0xFF;
  36.    
  37.    sw_uart_putc(' ');
  38.    sw_uart_putc('0'+(H/1000) % 10);  // Ezresek ertekenek kiirasa
  39.    sw_uart_putc('0'+(H/100) % 10);   // Szazasok ertekenek kiirasa
  40.    sw_uart_putc('0'+(H/10) % 10);    // Tizesek ertekenek kiirasa
  41.    sw_uart_putc(',');                // Tizedes vessző
  42.    sw_uart_putc('0'+H % 10);         // Egyesek ertekenek kiirasa
  43. //   sw_uart_putc('\n');                // Kovetkezo sor
  44. //   sw_uart_putc('\r');                // Ugras a sor elejere
  45.  
  46.      
  47.    sw_uart_puts("  Fok\r\n");
  48.  
  49.    __delay_cycles(1000000);         // várakozás 0.1 másodpercig
  50.  
  51.  
  52. }
  53. }
(#) kisedison válasza t0bi hozzászólására (») Dec 8, 2013 /
 
Köszönöm a választ. Próbálok alkotni valamit. Sajnos azóta se sikerült összehozni.
(#) martonroli hozzászólása Dec 9, 2013 /
 
Üdv!
MSP430G2-vel össze lehet kötni egy ilyet?Ha igen hogy,illetve a program is érdekelne, ehhez a vezérlőhöz hogyan lehet tápot csatlakoztatni?.
Még annyit hogy a H-brigde az ilyen vezérlők esetében csak annyit jelent hogy képes áram irányt váltani?
Esetleg más megoldás van servo vezérlésre?
A hozzászólás módosítva: Dec 9, 2013

vezérlő.JPG
    
(#) szitko válasza martonroli hozzászólására (») Dec 9, 2013 / 1
 
Idézet:
„össze lehet kötni egy ilyet”

Igen, össze. Itt találod a kapcsolási rajzát. Ez alapján, ha a motor nagyobb feszt igényel mint 3.3V, akkor szét kell választani a vezérlő feszültségtől.
Két PWM jellel szépen lehet két kis DC motort vezérelni oda-vissza.
Milyen szervó motort szeretnél vezérelni? GK szervót, vagy RC szervót, vagy CNC szervó motort, vagy....?
Ha RC analóg szervót, akkor nem kell ilyen vezérlő. Oda csak egy "PWM" jel kell meg ~5V. Nézd meg az Energia könyvtárat, abban van szervóvezérlés...
(#) martonroli hozzászólása Dec 9, 2013 /
 
Először is köszönöm a választ.
Másodszor pedig, RC autóból lettek kiszedve a szervók, és azt hogyan lehet megoldani hogy 5V-ot PWM el vezéreljek?Addig eljutottam hogy MSP430G2 ben megirom a programot mikor, meddig, mennyit mozduljon a szervó de hogy az 5V-ot hogyan kapcsolom hozzá?Bocsánat ha nagyon amatőr kérdés,még kezdő vagyok.
(#) kisedison válasza martonroli hozzászólására (») Dec 9, 2013 /
 
Ha sikerült vezérelni a szervót akkor nem kell mást csinálni. Ha teszi a dolgát akkor rendben van.
(#) martonroli hozzászólása Dec 9, 2013 /
 
Én még mindig ott tartok hogy van a vezérlő ,a szervó, és a táp.Hogy kötöm össze úgy hogy a vezérlő adja a jelet és 5V-ot kap a szervó?
(#) szitko válasza martonroli hozzászólására (») Dec 9, 2013 /
 
Ezt tanulmányozd!
A cikkben is le van írva, de röviden:
RC szervó vezérlés: 1 vezérlőjel kell (általában sárga vezeték),
+5V (piros | fehér vezeték) (ha szerencséd van akkor elmegy 3,3V-ról is),
GND (fekete vezeték).
A LaunchPad TP1-es csatlakozásánál van +5V (USB, max. 500mA!). Be kell forrasztani egy "tüskét" a csatlakozáshoz.
(Használd a "Válasz" gombot!)
(#) Erick válasza szitko hozzászólására (») Dec 10, 2013 /
 
Helló!

Átírtam ezt a programot, hogy jó legyen g2553-ra, megy is, csak egy kicsit felémér. Ha a bemenő frekvencia 11Hz, akkor 13-at ír, ha 37Hz, akkor 44-et ír, ha pedig 710Hz, akkor 870 körüli értéket ír. Ez a belső órajel hibája miatt van, vagy kalibrálni kellene?
(#) kisedison válasza martonroli hozzászólására (») Dec 10, 2013 /
 
Itt egy rajz hogy hogyan kell összekötni. Bocsi a paintes szintért.
Elvileg a szervó elmegy 3,3V-ról is, csak kisebb nyomatékkal és sebességgel. Micro és Standard HobbyKing szervók nekem mennek róla.
A hozzászólás módosítva: Dec 10, 2013
(#) szitko válasza Erick hozzászólására (») Dec 10, 2013 /
 
Ez csak egy egyszerű kis programocska, "gyorsan összedobva". Tapasztalataim, méréseim szerint a g2553-as belső frekije nagyon rossz, kivéve a QFN tokozásúé, az pontos.
Próbálj rakni rá egy 32,768kHz-es kvarcot, vagy a Timer-nek külső frekit (TACTL TASSELx TACLK regiszter), amihez tudsz viszonyítani, és pontosítani.
(#) Erick válasza szitko hozzászólására (») Dec 10, 2013 /
 
Hétvégén beforrasztom a Launchpadhoz kapott kvarcot, remélem azzal pontosabb lesz.
(#) G-man hozzászólása Dec 11, 2013 /
 
Üdv mindenkinek!

A múlt héten megérkezett az MSP430 Launchpad-em. Ki is próbáltam a demo programokat és elhatároztam, hogy egy futófényt csinálok ezzel a kis eszközzel. A gond csak az, hogy a PIN-ek nem bírják meghajtani a LED-soromat. 6 db fehér LED-et kötöttem úgy, hogy 3-at-3-at sorba és a kettőt párhuzamosan.

Kérdés: hogyan tudnék LED sort meghajtani egyetlen ilyen PIN-en keresztül? Esetleg áramgenerátor kell vagy ilyesmi?
(#) icserny válasza G-man hozzászólására (») Dec 11, 2013 /
 
Az egyik lehetőség kapcsolótranzisztor, FET vagy tranzisztormező a LED katód lehúzására és soros ellenállás a LED(ek) áramának korlátozására.

A másik lehetőség speciális LED vezérlő IC-k meghajtása (pl. TLC5940, LT3599, MAX16809 stb). Ezek általában "áramgenerátoros" kimenetűek, ezekhez nem kell soros ellenállás.
(#) G-man válasza icserny hozzászólására (») Dec 11, 2013 /
 
Értem. Néztem ezt a TLC5940-est, de kicsit drágának tartom. A FET-es megoldás talán jobb lenne, de ahhoz nem értek. Melyik a legegyszerűbb megoldás a problémámra? Mellékelem a rajzot, hogy hogy is képzeltem el. Ez ugye így a rajzon azért nem működik, mert a PIN-eken csak kis áram és kis feszültség jön le. Szóval a egy LED sor és a hozzá tartozó pin közé kéne nekem valami egyszerű dolog, ami meghajtja a led sort.
(#) martonroli hozzászólása Dec 11, 2013 /
 
Köszönöm az eddigi segitséget, és az nagy baj ha a szervónak csak 2 vezetéke van?
(#) szitko válasza martonroli hozzászólására (») Dec 11, 2013 /
 
Nem baj, csak azt nem szervónak hívják. Amit beraktál képet, azon egy sima DC motort látunk.
Következő: »»   118 / 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