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   132 / 139
(#) neogeo2 válasza mechanika hozzászólására (») Jan 21, 2015 /
 
Ebben a topicban volt egy hozzászólás, ami ötletadónak jó lehet. Megkerestem: Bővebben: Link
(#) mechanika válasza neogeo2 hozzászólására (») Jan 21, 2015 /
 
Köszi nézem!
(#) icserny válasza mechanika hozzászólására (») Jan 22, 2015 / 1
 
Ebben a hozzászólásomban mutattam egy lehetőséget. Én nem használtam ki, de az alkalmazott OpenWRT wireless router vezeték nélküli elérést is lehetővé tesz.
(#) szitko válasza mechanika hozzászólására (») Jan 24, 2015 / 1
 
Egy egyszerű bluetooth modullal megoldható a probléma, pl. HC-05. Processing-ben lehet egyszerű Androidos progit írni hozzá, pl: Bővebben: Link
Igaz, hogy Arduino, de nem sok különbség van és részletes a leírás.
A bluetooth-nál viszont korlátozott a távolság!
A hozzászólás módosítva: Jan 24, 2015
(#) david1._0 hozzászólása Jan 29, 2015 / 1
 
MSP 430-at szeretnék programozni fényképező vezérléséhez.
A záridőt szeretném vele vezérelni és ezt egy hagyományos távirányítóval vezérelni.
Ha tudna valaki segíteni ebben hogy hogy tudnám Pythonban vagy C-ben ezt megoldani azt megköszönném
(#) mechanika válasza szitko hozzászólására (») Feb 4, 2015 /
 
Köszönöm!
Úgy tűnik, hogy sms-ben fogom elküldeni az adatot.
(#) vottokar válasza vottokar hozzászólására (») Feb 13, 2015 /
 
Sziasztok! A menü problémát megoldottam (nem vérprofi, de működik és ez perpillanat elég).
Viszont maradt még gondom. Négy darab float változót kellene valamiképp menthetővé tennem. A környezet Energia.
Az MspFlash-t néztem, de nem világos, hogy ezzel, hogy is tudnék változókat menteni-tölteni, hogy ki-be kapcsoláskor a beállított értékekkel "éledjen" a program. Keresgéltem, de erre nem találtam se példaprogramot, se valamiféle helpet.
A hozzászólás módosítva: Feb 13, 2015
(#) g1rdon válasza vottokar hozzászólására (») Feb 13, 2015 /
 
A példaprogram nem segít?

f0, f1, f2 és f3 a négy float változód.

  1. float arr[4] = { f0, f1, f2, f3 };
  2. Flash.write(SEGMENT_D, (unsigned char *)arr, sizeof(arr));

  1. float arr[4];
  2. Flash.read(SEGMENT_D, (unsigned char *)arr, sizeof(arr));
  3. f0 = arr[0];
  4. f1 = arr[1];
  5. f2 = arr[2];
  6. f3 = arr[3];


(Nem próbáltam ki)

Nyomatékosan javaslom, hogy az info segmentet mentsd el, mielőtt nekiállsz a flashbe írogatással játszani (mspdebug, help save_raw).
(#) vottokar válasza g1rdon hozzászólására (») Feb 13, 2015 /
 
Köszönöm.
Sajnos nem teljes mértékben segített a példaprogram. (fogalmazhatok nyugodtan úgy, hogy kezdő vagyok MSP430 - Energia fronton.) A flash törlést értettem. Az írás szintaktikájából valamennyit, de az olvasás? Sajnos nem igazán találtam valamiféle helpet az MspFlash pontos szintaktikájából, és sajna az angolom is csak alapfokú. Remélem a te példáddal már okosabb leszek. Tudom, hogy nem várhatom el, hogy más oldja meg a problémáimat, de egy kis segítség mindig jól jön.
A jövő héten délutános vagyok, megpróbálom értelmezni, majd kipróbálni az általad ajánlottat.
(#) g1rdon válasza vottokar hozzászólására (») Feb 13, 2015 /
 
Igazából az a helyzet, hogy hiába magas szintű izé az Energia, a C-vel való intim ismeretséget egy idő után úgysem lehet megúszni (mint azt már te is tapasztalod ). A pointerek és a pointeraritmetika csak a kezdet... Az Energia esetén mondjuk nagy előny, hogy ott a forrása, kilesheted belőle, mit csinál a háttérben. Tényleg nagy előny.

Kitartás .
(#) epok hozzászólása Feb 26, 2015 /
 
Sziasztok.

Szeretnék egy RTC modult csinálni MSP430-hoz.
Mivel fixen forrasztanék be mindent és csak ki szeretném előtte próbálni a DS1337-est,
érdeklődni szeretnék, hogy kristály nélkül fog nekem válaszolni? Bármit, csak hogy nem-e halott?
(#) DecebaL válasza epok hozzászólására (») Feb 27, 2015 /
 
Kristály nélkül nem fog menni.
(#) vottokar válasza g1rdon hozzászólására (») Márc 2, 2015 /
 
Bár csúsztam a silabizálással és értelmezéssel, de végre megtörtént. Programocskámba felhasználva tökéletesen működött. Köszönöm szépen a segítségedet!
(#) icserny hozzászólása Márc 21, 2015 /
 
Újabb Launchpad kártya jelent meg: MSP-EXP432P401R, melynek legfőbb érdekessége az új MSP432P401R mikrovezérlő. Az MSP432 család első tagja már 32 bites, 48 MHz-es ARM Cortex-M4F mikrovezérlő, 256 kB Flash, 64 kB RAM memóriával.
A hozzászólás módosítva: Márc 21, 2015
(#) vottokar hozzászólása Ápr 18, 2015 /
 
Sziasztok. Ismét itt vagyok. (piruló szmájli) Megint lenne egy problémám. MSP430G2553-at használva, Energia környezetben lehetséges-e az "analóg kimenetek" PWM frekvenciáját változtatni?
Arduinon találtam valamit regiszterek átírásával való megoldásról, de ugye ez nem megy ugyanúgy az MSP-n (ezt még én is értem).
P2.6-os kimeneten lenne szükségem egy igen kis frekvenciájú (cca 1Hz-es)PWM jelre.
Ha nem megy ezúton könnyen, akkor összedobok valamit szoftveresen a "millis" "változóval" valamiképp ahogy demó programok között láttam, de jó lenne, ha menne egyszerűbben is, mert úggy már szinte kész vagyok a program ezen részével.
(#) icserny válasza vottokar hozzászólására (») Ápr 19, 2015 /
 
Idézet:
MSP430G2553-at használva, Energia környezetben lehetséges-e az "analóg kimenetek" PWM frekvenciáját változtatni?”


Igen, lehet. A wiring_analog.c könyvtári állományban van is erre egy függvény:
  1. // Note set frequency before sending analog value
  2. // Lowest fequency is defined by clock frequency F_CPU, and max counter value 2^16-1
  3. // fmin = F_CPU / 2^16
  4. void analogFrequency(uint32_t freq)
  5. {
  6.   if ( freq <= F_CPU/(4*65334L) ) { analog_div = ID_3; freq *=8; }  
  7.   else if ( freq <= F_CPU/(2*65334L) ) { analog_div = ID_2; freq *=4; }
  8.   else if ( freq <= F_CPU/(1*65334L) ) { analog_div = ID_1; freq *=2; }
  9.   analog_period = F_CPU/freq;
  10. }


De 1 Hz-es frekvenciáról ne ábrándozz, amíg az SCLK jel MHz-es nagyságrendű!
(#) vottokar válasza icserny hozzászólására (») Ápr 19, 2015 /
 
Köszönöm, sejtettem én is, hogy megoldható. Meg sajnos azt is, hogy nem lehet lemenni a frekvenciával a nekem szükséges értékre.
Akkor marad a másik út....
(#) icserny hozzászólása Ápr 29, 2015 /
 
Ubuntu Linux 14.04 LTS alatt sikerült végre megoldani a cdc_acm kernel problémát (ez kellett az MSP430G2553 Launchpad kártya teljes értékű használatához).

A megoldás receptje Oren Kishon leírásában található: Bővebben: Link

Lényegében néhány sort ki kell venni a kernel forrásban található cdc-acm.c forrásállományból és újra kell fordítani. Mivel a forrásfájlok folyton változnak, nem lehet betűhíven követni a leírást (hogy mely sorokat kell kikommentálni). mellékelem a 3.13.0-46-generic kernel általam módosított cdc-acm.c állományát. Ez így nálam bevált. A cdc-acm.h állományt nem kellett módosítani.

A kernel modul módosítása és újrafordítása mellett az /etc/udev/rules.d mappában biztosítani kell egy olyan szabályt, amely a felhasználók számára hozzáférhetővé teszi a /dev/ttyACM[0-9] eszközt.

A CCS 6 telepítéskor nekem ezt tette fel:

#TI MSP430 Launchpad (eZ430 Development Tool)
ATTRS{idVendor}=="0451",ATTRS{idProduct}=="f432",MODE="0666"

Ez így egy kicsit durva megoldás, mert válogatás nélkül mindenkinek hozzáférési jogot ad. Ehelyett az Energia telepítési útmutatója ezt ajánlja:

# MSP-EXP430G2 and MSP-EXP430FR5739 LaunchPad
ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0660", GROUP="dialout"
# MSP-EXP430F5529LP and MSP-EXP430FR5969 LaunchPad
ATTRS{idVendor}=="1cbe", ATTR{idProduct}=="00fd", MODE="0660", GROUP="dialout"

Ez egyrészt csak a dialout csoportnak ad hozzáférést, másrészt az MSP430F5529 Launchpad kártyát is használhatóvá teszi.

A felhasználókat az alábbi paranccsal vehetjük fel a dialout csoportba:

sudo addgroup user_neve dialout

Az udev szabályok módosítása után az udev szolgáltatást újra kell indítani!

sudo service udev restart

vagy

sudo /etc/init.d/sudo restart


A /dev/ttyACM0 virtuális soros port sebességének beállítása:

stty -F /dev/ttyACM0 raw speed 9600

cdc-acm.c
    
(#) Ifjbockgaben hozzászólása Máj 25, 2015 /
 
Sziasztok! Szeretném kérni a segítségeteket. Terveztem egy MSP430G2553-ra alapuló hőmérséklet szabályzót. Ennek a programjának a megírásában szeretném segítségeteket kérni. A kapcsolási rajza: Bővebben: Link Erről lenne szó. a két nyomógomb 1.0 és 1.1-en ezzel lehetne beállítani a hőmérsékletet + és - gomb. Az R1es poti az a kijelző kontrasztjához tartozik. A kijelző 4 biten üzemel, és a DHT22-es szenzor által érzékelt hőmérsékletet és párát írja ki. A kimeneten 2db szilárdtest relé lesz ami a ventilátort és a fűtőszálat vezérli. Abba kérném a segítségeteket, hogy hogyan is lehetne ezt megvalósítani programozás szinten? Odáig megvan, hogy kiolvassa a szenzort, kiírja lcd-re és elküldi soroson. A további feladatom az lenne, hogy ez működne termosztát szinten. Előre is köszönöm a segítséget.
A hozzászólás módosítva: Máj 25, 2015
(#) Ifjbockgaben válasza Ifjbockgaben hozzászólására (») Máj 25, 2015 /
 
Elmentettem a programot. Eddig jutottam, a továbbiakban kérném a segítségeteket. Előre is köszönöm.

dht.ino
    
(#) icserny válasza Ifjbockgaben hozzászólására (») Máj 25, 2015 /
 
Mivel a programban a hardveres támogatású soros kapcsolatot is használod (Serial) ezért a P1.1 és P1.2 láb foglalt, oda nem lehet mást kötni. A P1.1-ről ezért át kellene tenni a nyomógombot egy nem használt lábra (pl. P1.3).

Mivel a nyomógomboknál nincs felhúzóellenállás, ügyelni kell rá, hogy a bemenetek belső felhúzással legyenek konfigurálva ( például pinMode(P1_0,INPUT_PULLUP); ).

A termosztát szabályozásának és a kívánt hőfok beállításának logikáját szerintem neked kellene kitalálni. Számomra az sem világos, hogy mi a ventilátor szerepe.
A hozzászólás módosítva: Máj 25, 2015
(#) Ifjbockgaben válasza icserny hozzászólására (») Máj 25, 2015 /
 
Köszönöm a válaszodat. A ventilátor keringteti a levegőt.
Én a felhúzást kicsit átértelmeztem:
int pushButton = 2;
pinMode(pushButton, INPUT_PULLUP);

De azt sem tudom, hogy hogy álljak neki mármint a termosztát résznek. Addig oké. hogy kiveszem beteszem az adatokat. De hogy jutok el odáig, hogy a +-gombbal beállítok pl 35 fokot, és addig fűt amíg el nem éri a 35 fokot.
A hozzászólás módosítva: Máj 25, 2015
(#) icserny válasza Ifjbockgaben hozzászólására (») Máj 25, 2015 /
 
Idézet:
„int pushButton = 2;”

Ebben két kifogásolható dolog van:
1. Fölöslegesen lefoglal 2 bájtot az amúgy is szűkre szabott RAM területből, miközben semmi szükség rá, hogy azt az információt a RAM-ban tároljuk.
2. A 2 helyett szerintem (bár ez nyilván erősen szubjektív) értelmesebb a megfelelő portbitre hivatkozni P1_0-lal.

Javaslat:
  1. #define pushButton P1_0


Kérdések:
- "A ventilátor keringteti a levegőt." Mindjárt gondoltam, de mikor és miért kell, hogy keringessen?
- Mi lesz a másik gombbal, melyik lábra teszed?
- Ugye, valami pergésmentesítést is beépítesz a nyomógomb kezelésbe?


Idézet:
„De hogy jutok el odáig, hogy a +-gombbal beállítok pl 35 fokot”
Hát pont ez az kellene neked kitalálni!
1. Ha a kijelzőn állandóan látható a beállított hőmérséklet, akkor annak az értékét kell léptetni fel vagy le minden gombnyomásra.
2. Ha a kijelzőn nem akarod állandóan mutatni a beállított értéket, akkor viszont két kijelzési mód között kell váltogatni. Minden gombnyomáskor az a mód lép életbe, amelyikben mutatjuk a beállított értéket, s ha "hosszabb idő" óta (pl. 2-3 másodperc) nem történt gombnyomás, akkor visszaállunk a normál. "alapértelmezett" kijelzési módba.
(#) Ifjbockgaben válasza icserny hozzászólására (») Máj 25, 2015 /
 
Teljesen igazad van a nyomógomb felhúzással kapcsolatban. Máris javítom a forráskódban. Adott egy 120cm^2-es doboz, amit 35fokra kellene fűteni. Én úgy gondoltam, hogyha elkezd fűteni akkor elinduljon a ventilátor és folyamatosan forgassa a levegőt. Igen A 2db nyomógombot terveztem úgy, hogy + és - állásba lehessen vele beállítani a hőmérsékletet. Erre viszont nem is gondoltam, hogy kellene mutatni a kívánt értéket, a páratartalmat és a doboz aktuális hőmérsékletét. Viszont arra is gondoltam hogyha a fűtés elindul akkor kiírja az LCD-n hogy "warm". Bár így a béta programot beleégetve inkább rajzolok a kapcsolási rajzba egy visszajelzőt ami ha fűt akkor világít. Ez egyszerűbb lesz és az LCD-n is marad hely a 2 hőmérsékletnek. Bár az normális, hogyha a DHT nincs rákötve és a páratartalom része az 63553.12%-os páratartalmat ír ki?
(#) icserny válasza Ifjbockgaben hozzászólására (») Máj 25, 2015 /
 
Nálam az isnsn(t) || isnan(h) feltétel vizsgálata szűri ki a hülyeségeket és a hibás DHT22 kiolvasásokat.

  1. #include "DHT.h"
  2. #define DHTPIN P2_3
  3. #define DHTTYPE DHT22   // DHT 22  (AM2302)
  4.  
  5. DHT dht(DHTPIN, DHTTYPE);
  6.  
  7. void setup() {
  8.  Serial.begin(9600);
  9.   pinMode(PUSH2, INPUT_PULLUP);    
  10.   dht.begin();
  11. }
  12.  
  13. void loop() {
  14.   float h = dht.readHumidity();
  15.   float t = dht.readTemperature();
  16.   if (isnan(t) || isnan(h)) {
  17.     Serial.println("Failed to read from DHT");
  18.   } else {
  19.     Serial.print("Humidity: ");
  20.     Serial.print(h,1);
  21.     Serial.print(" %\t");
  22.     Serial.print("Temperature: ");
  23.     Serial.print(t,1);
  24.     Serial.println(" *C");
  25.     delay(2000);  
  26.   }
  27. }
A hozzászólás módosítva: Máj 25, 2015
(#) Ifjbockgaben válasza icserny hozzászólására (») Máj 26, 2015 /
 
Szia! Ez benne van a forráskódban. De ugyan úgy írja a zöldséget
  1. #include "DHT.h"
  2. #include <LiquidCrystal.h>       //Becsatoljuk a programkönyvtárat
  3.  
  4. LiquidCrystal lcd(P2_0, P2_1, P2_2, P2_3, P2_4, P2_5);
  5. #define DHTPIN P2_6
  6. #define DHTTYPE DHT22
  7. DHT dht(DHTPIN, DHTTYPE);
  8.  
  9. void setup() {
  10.    lcd.clear();  
  11.    pinMode(P1_0, INPUT_PULLUP);
  12.    pinMode(P1_3, INPUT_PULLUP);  
  13.    Serial.begin(9600);         //Soros kapcsolat 9600 bit/s  
  14.    Serial.println("Kelteto");
  15.     Serial.print("\n\n\n*** DHT test starts \n");
  16.      lcd.setCursor(0,0);
  17.      lcd.print("DHT init");
  18.      delay(5000);
  19.   lcd.begin(16, 2);
  20.   lcd.clear();                   //Képernyő törlése
  21.  
  22. }
  23.  
  24. void loop() {
  25.   int buttonState = digitalRead(P1_0);
  26.   int buttonState2 = digitalRead(P1_3);
  27.   float h = dht.readHumidity();
  28.   float t = dht.readTemperature();
  29.   lcd.setCursor(0,2);
  30.     if (isnan(t) || isnan(h)) {
  31.     Serial.println("Failed to read from DHT");
  32.   lcd.print("Nincs Adat");
  33.   } else {
  34.     Serial.print("Humidity: ");
  35.     Serial.print(h,1);
  36.     Serial.print(" %\t");
  37.      lcd.setCursor(0, 0);    
  38.      lcd.print("Hum:");  
  39.      lcd.setCursor(4,0);
  40.      lcd.print(h,1);
  41.      lcd.setCursor(12,0);
  42.      lcd.print("%");
  43.     Serial.print("Temperature: ");
  44.     Serial.print(t,1);
  45.     Serial.println(" *C");
  46.     Serial.println(buttonState);
  47.     Serial.println(buttonState2);
  48.      lcd.setCursor(0, 2);    
  49.      lcd.print("Temp:");  
  50.      lcd.setCursor(5,2);
  51.      lcd.print(t,1);
  52.      lcd.setCursor(8,2);
  53.      lcd.print("*C");
  54.     delay(2000);
  55.  
  56.   }
  57. }
A hozzászólás módosítva: Máj 26, 2015
(#) Ifjbockgaben válasza icserny hozzászólására (») Máj 28, 2015 /
 
Na, nagynehezen megszultem a programnak egy reszet, viszont a nyomogombnak nem igazan kell pergesmentesites mert eleg sok kesleltetes van a szenzor kiolvasasa miatt. Mar csak a ventillator pwmje van vissza.
(#) szitko hozzászólása Jún 13, 2015 /
 
Sziasztok.

Mély alvásból (LPM_4) kellene felkeltenem egy g2xxx MCU-t, de nincs ötletem, hogy tudnék külső megszakítást előidézni.
Röviden: egy kis napelem tölt pár (3) NiMH akkut, mely táplálja az áramkört. A mikrovezérlő figyeli a napelem feszültség szintjét (analog méréssel) és ha X alá esik elmegy aludni LPM_4-es módba.
Tehát, ha beesteledik kikapcsol az áramkör, illetve minimális áramfelvétel üzembe megy.
Ha a napelem ismét normál feszültséget produkál a mikrovezérlőnek fel kéne ébrednie és ismét tenni a dolgát.

Ha esetleg eme problémára van valakinek ötlete, szívesen fogadom.
(#) kissi válasza szitko hozzászólására (») Jún 13, 2015 /
 
Szia!
Nem használom az általad említett vezérlőt, csak ötletelek !
Úgy veszem ki a leírásodból, hogy ha nincs megfelelő fény, akkor sleep és nem csinál semmit, majd ha van megint elég energia, akkor újraindul... Miért nem csinálsz egy komparátort, ami fel-le kapcsolja a kontroller tápellátását vagy a RESET lábat birizgálja ?
(#) szitko válasza kissi hozzászólására (») Jún 13, 2015 /
 
Nem indul újra, hanem folytatja a programot. Energia lenne, mert a napelem akkukat tölt, de éjjel nem kell csináljon semmit, ezért kapcsolom be az energia takarékos módot.
Következő: »»   132 / 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