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   98 / 139
(#) icserny válasza SBahadurD hozzászólására (») Márc 11, 2013 /
 
Idézet:
„Senki nem próbálkozott még ilyennel?”

Szerinted?
(#) colosseum hozzászólása Márc 11, 2013 /
 
Sziasztok!

Lenne egy gyors kérdésem! ADott egy int16_t változó , és ezt ki akarom lökni uarton a pcre!
Valaki tud nekem valami okosat mondani?
Mert én nem tudom minidg ilyen összevissza kricckracc jön fel
(#) kissi válasza colosseum hozzászólására (») Márc 11, 2013 /
 
Szia!
Byte-onként küldd át és a helyszínen ( a vétel után! ) rakd újra össze !
Steve
A hozzászólás módosítva: Márc 11, 2013
(#) icserny válasza colosseum hozzászólására (») Márc 11, 2013 /
 
Változót nem tudsz kiküldeni soros porton, csak karaktereket. Úgy, ahogy a papírra is leírnád a szám értékét: Előjel, tízezresek, ezresek, százasok, tízesek, egyesek. Vagy négy hexadecimális számjegy...
(#) colosseum válasza icserny hozzászólására (») Márc 11, 2013 /
 
Igen sejtettem, akkor keresek valami tiny printf-t , De azért köszönöm szépen
(#) icserny válasza colosseum hozzászólására (») Márc 11, 2013 /
 
Idézet:
„keresek valami tiny printf-t”
Nem kell túlbonyolítani, egy itoa() függvény is megteszi. Bővebben: Link
(#) Mdavid válasza Mdavid hozzászólására (») Márc 11, 2013 /
 
Senki?
(#) colosseum válasza Mdavid hozzászólására (») Márc 11, 2013 /
 
szia!
Persze megfelelő áramkört ha raksz mellé. De a többiek jobban tudják .
(#) szitko válasza Mdavid hozzászólására (») Márc 11, 2013 /
 
Persze, hogy működik. De ha visszalapoznál, találnál egy-két projektet ahol nem a LP-ban van a MCU.
A RESET lábat húzd fel egy 47k-s ellenállással, vagy old meg szoftveresen, és már megy is. Természetesen a digitális áramkörökre vonatkozó szabályok betartásával!
(#) colosseum hozzászólása Márc 11, 2013 /
 
Szitko neked a gyro-d milyen "pontosan érzékel"? Ilyenre gondolok , pl 2000fok per másodperc meg stb
(#) szitko válasza colosseum hozzászólására (») Márc 11, 2013 /
 
+-100deg/s. Analóg jelet ad ki, 0,67mV/deg/s, a referencia fesz 1350mV.
A program egyik fontos eleme, a válasz idő, mely ennél a gyro-nál 200Hz 90 fokos eltérés esetén. Ebből ki lehet számolni a lekérdezés ciklusidejét. Ha a segway-ről van szó!
(#) colosseum válasza szitko hozzászólására (») Márc 11, 2013 /
 
én csak egy kis buta egyensúlyozó pici robotot akarok építeni most bírtam működésre az én gyromat. még csak a nyers adatok jönnek, csak érdekelt , hogy a tied milyen érzékeny mert elég jól megáll a lábán. most nekem 2000deg/s van megadva és 4g gyursulás. még játszadozok vele majd felrakom a kódot ha szebb lesz.
(#) szitko hozzászólása Márc 12, 2013 /
 
Sziasztok.

Egy kicsit bizonytalan vagyok. Összehoztam egy egyszerű fordulatszámmérőt, de nem vagyok benne biztos, hogy jól számoltam-e.
A hardverről csak annyit, hogy egy CD-ből kioperált motorra ragasztottam egy mágnest, és elé raktam egy HALL szenzort (TLE4905), és a jelét egy ellenállás osztón keresztül kapja meg a g2231 capture modulja. (természetesen 100nF-al szűrve)
Beállítottam a motor fordulatszámát ~6000-re, de szerintem nem forog annyit a motor. Hogy tudnám azt leellenőrizni, hogy jó-e a mért értékem?
Prog:
  1. while(1){
  2.           if(uart){
  3.                _DINT();
  4.                P1OUT ^= BIT0;
  5.                long captured=0, cap_val=0;
  6.                unsigned int captured_rpm=0, captured_hz=0;
  7.                for(char j=1; j<6;j++){
  8.                     cap_val += capture_buffer[j];
  9.                }
  10.                captured = cap_val / 5;
  11.                captured_hz = frequency / captured;
  12.                captured_rpm = (captured_hz<<2)+(captured_hz<<1);
  13.                sw_uart_puts("\r\nFrequency = ");
  14.                sw_uart_outdec(captured_hz,0);
  15.                sw_uart_puts(" Hz Fordulat = ");
  16.                sw_uart_outdec(captured_rpm,0);
  17.                sw_uart_puts(" RPM");
  18.           }
  19.           __low_power_mode_0();
  20.      }
  21. }
  22.  
  23. #pragma vector=TIMERA1_VECTOR
  24. __interrupt void TimerA1(void){
  25.      new_capture = TACCR1;
  26.      capture_buffer[count++] = new_capture - old_capture;
  27.      if (count==6){
  28.           count=0;
  29.           uart=1;
  30.           TACCTL1 &= ~CCIFG;
  31.           __low_power_mode_off_on_exit();
  32.      }
  33.      old_capture = new_capture;
  34.      TACCTL1 &= ~CCIFG;
  35. }
A hozzászólás módosítva: Márc 12, 2013
(#) kissi válasza szitko hozzászólására (») Márc 12, 2013 /
 
Oszcilloszkóp?
Led-es stroboszkóp ( trafóval, 50 Hz-re ) ?
Steve
(#) szitko válasza kissi hozzászólására (») Márc 12, 2013 /
 
A szkóp, és a frekimérő is ugyanazt írja mint a program. Tehát elméletileg a program jó?!, csak szerintem a motor nem forog 6000-et. Stroboszkópom nincs, csak egy ilyenem, de ez megbízhatatlan.
(#) kissi válasza szitko hozzászólására (») Márc 12, 2013 /
 
Egy LED-et rákötsz egy trafóra, akkor jó közelítéssel 50 Hz-el villog !, azzal meg tudod nézni a 3000-es és a 6000-es fordulatot !
(#) szitko válasza kissi hozzászólására (») Márc 12, 2013 /
 
Ezt most nemigazán értem. Mitől fog biztosan pl. 3000-et forogni a motor? Vagy nem is arról van szó, hanem a freki mérésről? (Reggel jöttem haza a munkából, és nem hagytak aludni, ezért lehet, inkább biztos, hogy egy "kicsit " nehéz a felfogásom.)
(#) kissi válasza szitko hozzászólására (») Márc 12, 2013 / 1
 
Ragassz a motor tengelyére egy fehér szig.szalagot, amit megvillogtatsz a LED-el. Mivel a hálózati frekvencia elég jó közelítéssel 50 Hz, ez másodpercenként 50 villanást jelent, ami azt jelenti, hogy ha a motor percenként 3000-et fordul, akkor minden fordulatnál látsz egy villanást ( azaz 1 db "álló" szig. szalagot !) ! Ha a fordulat ennél kisebb vagy nagyobb, akkor más-más pozíciókban kapja a villanást --> több csíkot látsz! Ha a motor fordulatát alacsony fordulatról emeled, akkor az első 1 darabos állójelet 3000 1/min-nél láthatsz, másodszor ilyet pedig a dupla, azaz 6000-es fordulatnál!
Remélem lebírod követni a "bagolyüzemmód" után ?!
(#) szitko válasza kissi hozzászólására (») Márc 12, 2013 /
 
Ba...us! Magyarul, csináljak egy stroboszkópot. (Lehet, hogy neki se kellett volna állnom ennek ma.)

Köszönöm szépen a segítséget!
(#) kissi válasza szitko hozzászólására (») Márc 12, 2013 /
 
Nincs mit, de nem olyan nagy dolog, a pákatrafódról elmegy !
(#) szitko válasza kissi hozzászólására (») Márc 12, 2013 /
 
Van 20-30 ilyen olyan trafóm. Azzal nincs gond. A pákatrafóhoz meg nem férek hozzá, mert be van öntve, a kivezetéssel együtt. Egy nagy műanyagdarab az egész. (ERSA i-CON pico)
(#) szitko válasza kissi hozzászólására (») Márc 12, 2013 /
 
Működik! (Mint ahogy a Ladán a gyújtást állítottam)

A szkóp, a "frekimérő", és a g2231-es is pontosan 50Hz-et mért, és ekkor a fordulat 299x10-301x10 között ugrált, a fehér szigetelőszalag, meg állt mint a cövek.
A g2231-es SMCLK frekit megmértem, (0.981MHz) és a mért értékkel számolt a program. Most megpróbálom úgy megcsinálni, hogy visszavezetem egy másik capture modulba az SMCLK órajelet, és néha megméri a program. Így talán a hőmérséklet változása miatti frekiváltozást is tudom korrigálni, amire a megfigyelésem szerint nagyon kényes a g2231.
Még egyszer köszi!
(#) icserny válasza szitko hozzászólására (») Márc 12, 2013 /
 
Idézet:
„Most megpróbálom úgy megcsinálni, hogy visszavezetem egy másik capture modulba az SMCLK órajelet”
Minek ki- és bevezetni azt, ami már eleve benn van? Egyébként mihez viszonyítva szeretnéd ellenőrizni? Csak a 32 kHz-es órakvarchoz lehetne...
(#) szitko válasza icserny hozzászólására (») Márc 12, 2013 /
 
Benn, hogy tudom megmérni az SMCLK órajelet?
Idézet:
„Egyébként mihez viszonyítva szeretnéd ellenőrizni?”

Ez jó kérdés. Ezt megint nem gondoltam végig.
(#) icserny válasza szitko hozzászólására (») Márc 12, 2013 /
 
Idézet:
„Benn, hogy tudom megmérni az SMCLK órajelet?”
Számlálással (ökölszabály: nagyfrekvenciát számlálással, kisfrekvenciát periódusidő méréssel). A kérdés csak az, hogy mihez képest...
(#) kissi válasza szitko hozzászólására (») Márc 13, 2013 /
 
(#) szitko hozzászólása Márc 14, 2013 /
 
Sziasztok.

Ismét akadt egy kis problémám, de ez nem teljesen MSP430.
A gyönyörű szépen működő "kazánvezérlő"-ből ma, kíváncsiságból kiolvastam az EEPROM-ban tárolt adatokat, ami szintén jól működik. (pedig a két bluetooth között kb. 20m van)
A gondom a következő. A Processingben íródott program így menti el az adatokat:
Idézet:

30 6 13 3 13 20 32 21 32 21 32 20 32 21 32 20
32 20 32 20 31 20 31 20 31 20 31 20 31 20 30 20
30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20
30 20 29 20 29 20 29 20 29 20 29 19 29 19 29 19
29 19 29 19 28 19 28 19 28 19 28 19 28 19 28 19
28 19 28 19 27 19 27 19 27 19 27 19 27 19 27 19
27 19 27 19 26 19 26 19 26 19 29 19 33 19 35 19
37 19 40 19 42 19 45 20 48 20 49 20 51 20 255 255
19 18 13 3 13 20 52 21 53 21 59 21 73 22 83 22”

A gond vele az aláhúzott, kiemelt számoknál van. Amikor be akarom hívni az adatokat a fájlból, megjelenítés céljából, akkor a program leáll, és hibát ír, de ha a számok elé rakok egy nullát akkor minden jól megy, és megjelenik a grafikon (lásd kép). Hogy tudnám azt megcsinálni, hogy az 1 és 9 közötti számok elé rakjon egy nullát?
A számok értelmezése: 1=perc, 2=óra, 3=nap, 4=hónap, 5-6=év, 7- hőmérsékletek.

Capture_3.jpg
    
(#) icserny válasza szitko hozzászólására (») Márc 14, 2013 /
 
Idézet:
„Amikor be akarom hívni az adatokat a fájlból, megjelenítés céljából, akkor a program leáll, és hibát ír”
Ezt a "behívást" kellene közelebbről megnézni, mert láthatóan nem az adat hibás.
(#) szitko válasza icserny hozzászólására (») Márc 14, 2013 /
 
Az írás és az olvasás:
  1. // ------------ file write ---------------------------------
  2. void file_write(){
  3.   try {
  4.     file = new FileWriter("c:/Users/Gabcsi/Documents/Processing/kazan_v1/data.txt", true);
  5.     int j=0;
  6.     for(int i=0; i<file_count-1; i++){
  7.       print(" File írás! "+ i);
  8.       if(j==16){
  9.         file.write("\n");
  10.         j=0;
  11.       }
  12.       file.write(inbyte[i] + "  ");
  13.       j++;
  14.     }
  15.     file.write("\r\n");
  16.     file.close();
  17.     println(" Írás kész!");
  18.   }
  19.   catch(Exception e) {
  20.     println("Nem találom a filet!");
  21.   }
  22. }
  23. // ------------------------- file read --------------------
  24. void file_read() {
  25.   try {
  26.     fro = new FileReader( "c:/Users/gabcsi/Documents/Processing/kazan_v1/data.txt" );
  27.    
  28.     if (file_index < lines.length) {
  29.       nums = int(split(lines[file_index], "  "));
  30.       println("behívott sor "+file_index);
  31.       day_select = false;
  32.     }else{
  33.       file_index -= 16;
  34.       day_select = true;
  35.       println("vége");
  36.     }
  37.   }
  38.   catch(IOException e) {
  39.     println("Nem tudom olvasni a filet: "+e);
  40.   }
  41.   file_r = false;
  42. }

Szerintem meg az adattal, illetve a fájlba írással van baj, mert ahogy írtam, ha van előtte nulla nincs baj:
Idézet:
„30 06 13 03 13 20 32 21 32 21 32 20 32 21 32 20”

Ebben a sorba:"file.write(inbyte[i] + " ");" az " " jel közötti két szóközt, az átláthatóság miatt raktam be.
(#) icserny válasza szitko hozzászólására (») Márc 14, 2013 /
 
  1. if (file_index < lines.length) {
  2.       nums = int(split(lines[file_index], "  "));
  3.       println("behívott sor "+file_index);
  4.       day_select = false;
  5.     }else{ ....

Ezeket a sorokat kellene átgondolni.
- A sor hosszát mennyinek állítottad be? Lehet, hogy itt a bibi...
- A szövegből számmá alakítás biztos, hogy jó így? S a nums milyen típusú lesz így? Float-tal kinódtam a múltkor, s nekem csak akkor volt hibátlan a konverzió, ha előbb split()-tel szétdaraboltam, majd egyenként konvertáltam float()-tal.
Idézet:
„Szerintem meg az adattal, illetve a fájlba írással van baj”
Nézőpont kérdése. De szerintem az nem normális, ha értéktelen nullákat kell kiírni. Ennek íg azért sincs értelme, mert nem azonosak a mezőszélességek (volt 3 karakteres számod is).
A hozzászólás módosítva: Márc 14, 2013
Következő: »»   98 / 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