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   64 / 139
(#) icserny hozzászólása Jún 29, 2012 /
 
Egy indiai hobbista lépegető robotot készített egy Launchpad kártya és két szervó motor felhasználásával. A szellemes megoldás lényege az, hogy a motorokat tartó lap nem sík, hanem szögben megtörő, így az elfordulás egyúttal az elöl lévő láb kis emelésével is együtt jár. Bővebben: Link
(#) icserny hozzászólása Jún 30, 2012 /
 
Mégegy írás Indiából: Ishan Karve az 1-Wire DS18B20 kezeléséről írt egy cikket. A mintaprogram MSP430G2452-höz készült.
(#) icserny válasza icserny hozzászólására (») Jún 30, 2012 /
 
Idézet:
„a felhúzás hiánya miatt a program egyből lenyomottnak tekinti a vége gombot...”

A megoldás:
  1. pinMode(PUSH2, INPUT);

helyett azt kell írni, hogy:
  1. pinMode(PUSH2, INPUT_PULLUP);
(#) szitko válasza icserny hozzászólására (») Jún 30, 2012 /
 
Ez tetszik. Ezt lehet, hogy tovább lehetne fejleszteni, más eszközök 1 vezetékes vezérléséhez.
(#) icserny válasza szitko hozzászólására (») Jún 30, 2012 /
 
Csak sok sikert tudok kívánni hozzá, az én életemből ugyanis kimaradtak ezek az 1-wire ketyerék (őszintén szólva nem nagyon bánom...).
(#) szitko válasza icserny hozzászólására (») Jún 30, 2012 /
 
Az MSP430G2xxx sorozatban, azért jól jönne néha egy-két plus I/O kivezetés. Ha egy vezetéken meg lehet oldani valamit, és működik is, akkor már 1-el több kivezetés marad.
Mondjuk én most nagyon kacsingatok a 2-es, és az FR57xx-es sorozatokra.
(#) ZsoltiD hozzászólása Júl 3, 2012 /
 
Sziasztok!
Ha egy msp430g2452 uc-en a portbeállításoknál nem tudom, hogy mi hogyan lett elállítva, akkor hogyan tudom biztonságosan mondjuk beállítani egy ponttól kezdve a programban, hogy egy porton felélesszek egy MOSFET-et. Amit Icserny írt példaprogramokat, azoknál ugye minden alapbeállításon van, és a programnál már nem tudok eligazodni, hogy előtte a P1SEL vagy P1REN stb hogyan lett átállítva.
Például hogyan állítom be biztonságosan a P1.3-as porton egy MOSFET élesztését (pl:IRLR2705-öt)?
Ha valaki ezt le tudná írni példának, azért nagyon hálás lennék, mert én már annyit próbálgattam, de sehogy sem jön össze, és kezdek elkeseredni .
(#) ZsoltiD hozzászólása Júl 3, 2012 /
 
Mármint annál a programnál nem tudok eligazodni a portbeállításnál, amit fejlesztenem kéne (mert csak egy részét kell nekem megcsinálni), és nem a példaprogramoknál.
(#) icserny válasza ZsoltiD hozzászólására (») Júl 3, 2012 / 1
 
Idézet:
„Például hogyan állítom be biztonságosan a P1.3-as porton egy MOSFET élesztését (pl:IRLR2705-öt)?”
P1.3 nem egy port, hanem annak csak egyik bitje/kivezetése. (P1 és P2 a portok, egyenként 8 bitesek ennél a típusnál).

Az adatlap végén található az egyes I/O kivezetések részletes leírása (blokkvázlat és táblázat). Az MSP430G2452 esetében a 15. táblázat tartalmazza P1.3 üzemmódjainak beállítását. A MOS-FET élesztés nem tudom, hogy mit takar, de feltételezem, hogy digitális kimenetet. Ennek feltétele a PSEL.3=0, PSEL2.3=0, P1DIR.3=1, ADC10AE.3=0.

Az analóg komparátorral még nem foglalkoztam, de ha be van kapcsolva egyáltalán (közös fejlesztésnél nem árt a fejlesztő társakkal beszélő viszonyban lenni...), akkor a CAPD.3=1 beállítással lehet letiltani a P1.3-ra vonatkozóan a bemeneti buffert - ha van ennek értelme.

A P1REN.3=0 kikapcsolja a le- vagy felhúzást.

  1. P1SEL &= ~BIT3;
  2. P1SEL2 &= ~BIT3;
  3. P1OUT &= ~BIT3; //vagy P1OUT |= BIT3;
  4. P1REN &= ~BIT3;
  5. P1DIR |= BIT3;
  6. ADC10AE &= ~BIT3;
  7. CAPD |= BIT3;  //Ha szükséges...


Megjegyzés: A CAPD regiszter bitjeinek szerepét az adatlap és a Family Userg Guide pont ellentétesen írja le. Az adatlap szerint 0: tiltás, 1: engedélyezés, a Family User Guide szerint 1: tiltás, 0: engedélyezés. Az ördög sem tud ezen eligazodni!
(#) ZsoltiD válasza icserny hozzászólására (») Júl 3, 2012 /
 
Köszönöm a felvilágosítást, és a részletes magyarázatot!
Így érthetőbb számomra a működés, na meg ezentúl az adatlappal is többet fogok foglalkozni.
Egy dolog nem világos még számomra, hogy ugye a digitális módba történő állításhoz az adott lábhoz tartozó analóg funkciót le kell tiltani az ADC10AE regiszter megfelelő bitjének nullázásával. Viszont a fordító az
ADC10AE &= ~BIT3;
sornál azt írja error-al, hogy undefined.
Pedig G2452-nél elvileg jónak kéne lenni.
(#) szitko válasza ZsoltiD hozzászólására (») Júl 3, 2012 / 1
 
Idézet:
„hogy ugye a digitális módba történő állításhoz az adott lábhoz tartozó analóg funkciót le kell tiltani”
Igazából nem is nagyon kéne foglalkozz velel, mert az alapértelmezett beállítás, a digitális ki/bemenet, tehát amikor elindítod a vezérlőt, ADC10AE=0b00000000. Hacsak nem menet közben szeretnéd visszaállítani analógról digitálisra. Sajnos azt nem találtam meg, ahol az alapértelmezett beállítások vannak, de arra emlékszem, hogy olvastam valahol.
(#) ZsoltiD válasza szitko hozzászólására (») Júl 3, 2012 /
 
Értem.
Csak ugye nem tudom, hogy a program előtte lévő részében ez át lett-e állítva. Illetve, hogy ha igen, és nem állítom vissza, akkor okoz-e valami problémát. Már a P1.0 és a P1.1 nem működik, tegnap esti próbálgatás közben gondolom elromlott. :S
(#) szitko válasza ZsoltiD hozzászólására (») Júl 3, 2012 /
 
Idézet:
„Csak ugye nem tudom, hogy a program előtte lévő részében ez át lett-e állítva”

Én meg ezt nem értem. Bár lehet, hogy csak a meleg miatt lassú a felfogásom.
(#) ZsoltiD válasza szitko hozzászólására (») Júl 3, 2012 /
 
Idézet:
„Mármint annál a programnál nem tudok eligazodni a portbeállításnál, amit fejlesztenem kéne (mert csak egy részét kell nekem megcsinálni), és nem a példaprogramoknál.”

De amúgy kipróbáltam, és a ADC10AE &= ~BIT3; nélkül nem működik azon a helyen a programban, ahol programoznom kéne. Viszont ha a progi elejére beírom a ADC10AE &= ~BIT3; kihagyásával icserny sorait, akkor tutin működik. Tehát szerintem biztos, hogy ez is el lett állítva.
(#) icserny válasza ZsoltiD hozzászólására (») Júl 3, 2012 /
 
Idézet:
„a fordító az ADC10AE &= ~BIT3; sornál azt írja error-al, hogy undefined.”
Megkell nézni, hogy tényleg az MSP430G2452 típust állítottad be a projekt opcióknál. Megkel nézni, hogy az io430g2452.h állományban (ezt is vedd fel a kötelező olvasmányok közé!!!) mi és hogyan van definiálva.

Ha az io430g2452.h helyett az msp430g2452.h állományt használod, akkor értelemszerűen azt kell turkálni.

Ellenőrizni kell azt is, hogy a BIT3 (meg a többi BIT) definiálva van-e.

Ezek után már csak valami elgépelésre lehet tippelni.
(#) szitko válasza ZsoltiD hozzászólására (») Júl 3, 2012 /
 
Értem, és nem értem.
Ez olyan mintha 5-es írnánk egy programot, ahol mindenki csak egy részletet ír?
Ha pl. az első ember beállította az analóg modult, és Te letiltod, akkor hogy, fog működni a program?
Csak Icserny fórumtársunkat tudom idézni, miszerint "közös fejlesztésnél nem árt a fejlesztő társakkal beszélő viszonyban lenni..."
(#) ZsoltiD válasza szitko hozzászólására (») Júl 3, 2012 /
 
Értelek, és igazat is adok részben, de ha az én programrészletem végén visszaállítom, a beállításokat, akkor nincs probléma. Most nem tudok vele (a másik fejlesztővel) kommunikálni, mert külföldön van.
A kérdés arról szólt, hogy hogyan tudom beállítani, ha a P1.3 előző életét nem tudom. Ezt fogjuk fel egy gyakorlófeladatnak, és ehhez kell segítséget nyújtani.
Amit részben meg is kaptam, azt hiszem.
Köszönöm a válaszokat!
A hozzászólások alapján ha sikerült valamire jutnom, írok.
(#) ZsoltiD válasza ZsoltiD hozzászólására (») Júl 3, 2012 /
 
ADC10AE0 &= ~BIT3
A "0" hiányzott a végéről. Így már működik.

Köszi még1x!
(#) icserny válasza ZsoltiD hozzászólására (») Júl 3, 2012 /
 
Idézet:
„ha az én programrészletem végén visszaállítom, a beállításokat, akkor nincs probléma.”
Ez egyáltalán nem biztos, hiszen a P1.3-ra csatlakozó áramkör ottmarad. Ha valakinek a programrésze elkezdi matatni, akkor abból baj lesz.

Nem ismerem a feladatot, de ha lehetséges, akkor meg kellene egyezni, hogy ez a portláb az enyém, senki más ne babrálja el az ehhez tartozó biteket, mindenki csak azokat a biteket állítsa, amelyik hozzá tartozik.

Ez azt jelenti, hogy pl. a P1DIR = valami, vagy ADC10AE0 = valami kerülendő, a nemkívánt mellékhatások miatt.
(#) icserny válasza ZsoltiD hozzászólására (») Júl 3, 2012 /
 
Idézet:
„A "0" hiányzott a végéről.”
Akkor ez az én figyelmetlenségem volt, bocs! De látod, pont az ilyen bosszantó apróságok miatt kell a fejléc állományokat nézegetni, mert abból pillanatok alatt kiderül.
(#) icserny hozzászólása Júl 4, 2012 / 1
 
A belső hőmérő használata gyári kalibrációs adatokkal

Az MSP430G2452 és MSP430G2553 mikrovezérlők az ADC-hez is tartalmaznak gyári kalibrációs adatokat. A fejléc állományokban azonban nincs definiálva hozzájuk szimbolikus név, ezért vagy a programunkba, vagy a fejléc állományokba helyezzük el az alábbi sorokat:
  1. /* ADC10 Calibration Data - added by I. Cserny */
  2. __no_init unsigned __READ int CAL_ADC_25T85 @ 0x10EA;
  3. __no_init unsigned __READ int CAL_ADC_25T30 @ 0x10E8;
  4. __no_init unsigned __READ int CAL_ADC_25VREF_FACTOR @ 0x10E6;
  5. __no_init unsigned __READ int CAL_ADC_15T85 @ 0x10E4;
  6. __no_init unsigned __READ int CAL_ADC_15T30 @ 0x10E2;
  7. __no_init unsigned __READ int CAL_ADC_15VREF_FACTOR @ 0x10E0;
  8. __no_init unsigned __READ int CAL_ADC_OFFSET @ 0x10DE;
  9. __no_init unsigned __READ int CAL_ADC_GAIN_FACTOR @ 0x10DC;


A definíciókból kihagytam a volatile módosítót, feltételezve, hogy programfutás közben úgysem változnak ezek az adatok...

A CAL_ADC_GAIN_FACTOR és az CAL_ADC_OFFSET elvileg az ADC-ből kiolvasott eredmény korrekciójához kell. Nálam ezek annyira közel esnek 1-hez és 0-hoz, hogy nem érdemes veszkődni vele.

A mellékelt programban a 2,5 V-os belső referenciát használjuk, ezért a belső hőmérő kiolvasott értékének átszámításához a 2,5 V-os referenciával 30 és 85 fokon mért értékeket használjuk a C-fokra történő átszámításhoz, lineáris összefüggést feltételezve:

  1. TCelsius = 55 * (ADC10MEM - CAL_ADC_25T30)/(CAL_ADC_25T85 - CAL_ADC_25T30) + 30;


Vagyis a 30 fokhoz viszonyítunk, s az 55 fokos különbségnél (85 C - 30 C ) kapott gyári értékekből határozzuk meg a meredekséget is.

A tapasztalat szerint az így kiszámolt érték kb. 3 fokkal fölé lőtt a szobahőmérőnek, ezért a továbbiakban 30 fok helyett csak 27 fokot használok a képletben. Ha tizedfokokat is ki akarunk íratni (bár sok értelme nincs), akkor a fenti képletben 10-zel kell szorozni a konstansokat (tehát 55 helyett 550, 30 helyett 300, vagy 27 helyett 270).

A mellékelt mintaprogramban a P1.5 bemenetre kapcsolt feszültséget (0 - 2,5 V) is mérjük, valamint a 11. csatornában a VDD/2 feszültséget is. Utóbbiból meghatározhatjuk a tápfeszültséget, felhasználva, hogy most független referenciánk van. A feszültségeket millivoltokban célszerű kiszámolni.

Ha takarékoskodni akarunk a mérési idővel, akkor nem túl nagy csalás, ha 1023 helyett 1024-gyel osztunk (hogy léptetéssel megoldható legyen), de a programban nem éltem ezzel a lehetőséggel.

A kiírást a korábban már ismertetett outdec() függvénnyel végezzük, ahol második paraméterként a levágandó tizedesjegyek számát kell megadni (hőmérésnél 1, mV-ban kiszámolt feszültségnél pedig 3).

A program érdekessége, hogy nem használunk benne float változót, s a kiíratáshoz a korábban bemutatott egyirányú szoftveres UART kezelést használjuk.

A mellékelt képen P1.5 összevissza kóvályog, mert csak a felszedett zajt mérte...
(#) szitko hozzászólása Júl 4, 2012 /
 
Egy kicsit had dicsekedjek.
Két bontott "solar lámpa" napelemmel (sorba kötve), egy 1,2V 1500mA akksival, egy TPS61221-es Step up DC/DC converter segítségével, két hete megy, egy MSP430g2231-es, tesztüzemben, mely felváltva villogtatja a ledeket. Az akksit rendesen töltötte a napelem, a DC/DC konverter bemenő feszültsége 1,2V, a kimenő, stabil 3,274V. A TPS61221-est, max 200mA-ig lehet terhelni!
Most egy hőmérő áramkört fogok tesztelni, nokia lcd-vel.
Ha lesz időm, és valakit érdekel, csinálok róla videót.
(#) DecebaL válasza szitko hozzászólására (») Júl 4, 2012 /
 
Gratulálok, majd érdekelne a hőmérős áramkör tesztje is mert én is gondolkodok hasonlóban.
(#) icserny válasza szitko hozzászólására (») Júl 4, 2012 /
 
Gratulálok én is! Ezeknek a napelemeknek mi a fényigénye? A szabadban, napsütésben töltöd, vagy elég neki a szűrt/szórt fény is? Én egy kínai csodaketyerével próbálkozom, de ablaküveg mögött a saját töltésjelzőjét sem tudja kiszolgálni huzamosan.
(#) szitko válasza icserny hozzászólására (») Júl 5, 2012 /
 
Ha szűrt fényt kap akkor nem tölti fel teljesen az akksit egy nap, de mikor kiraktam a tűző napra, kb 5-6 óra elég volt, a teljes töltésre. Természetesen, ha már komoly áramkör meghajtására kerül a sor, akkor fogok venni egy, a méreteiben hasonló, ám teljesítményben nagyobb napelemet.
(#) szitko válasza szitko hozzászólására (») Júl 5, 2012 /
 
A link meg lemaradt: tehát valami ilyesmire gondoltam.
Ez nem ronditja el a háztetőt, és ha kiszámolom a költségeket, (220V-nál: trafó, elektronika stb...) hosszútávon jobban megéri, mint a 220.
Egyébként most egy kazántermosztáton dolgozom, amiben lesz: 2db hőmérő, szivattyúvezérlés, óra naptárral, színes lcd-vel, és ezt napelemmel szeretném üzemeltetni, úgy, hogy a töltésvezérlést is a uC szabályozza. (még szerencse, hogy csak télre kell)
(#) Mybuster hozzászólása Júl 5, 2012 /
 
Délutáni időtöltés.. MSP430 al vezérelt led cube.
Bővebben: Link
(#) szitko válasza Mybuster hozzászólására (») Júl 5, 2012 /
 
Gratulálok. Ez jó néz ki.
(#) Mybuster válasza szitko hozzászólására (») Júl 5, 2012 /
 
Köszönöm!
(#) szitko hozzászólása Júl 8, 2012 /
 
Egy kis matematikai segítséget szeretnék kérni, mert vagy túl meleg van, vagy már tényleg nem tudok számoni.
Egy timer-t szeretnék beállítani, egy ciklus lefutási idejének figyelésére. A timer modult úgy szeretném beállítani, hogy ne csorduljon túl (ha lehetséges).
Megpróbáltam úgy megmérni a lefutási időt, hogy a ciklus elején, egy kimenetet ki/bekapcsolok, és szkóppal rámértem. Így ~75kHz-re jött ki a ciklusidő, de nekem ez pontosan kéne, minden egyes lefutás után.
Odáig eljutottam, hogy ugye az adatlap szerint a mikrovezérlő (430g2xxx), egy utasítást 62,5ns alatt végez el. Nekem a uC 2,99MHz-en megy, akkor ~334,448ns alatt végez el egy utasítást.
De hogyan tudom kiszámolni, hogy mennyire állítsam a timer-t, hogy nem csurduljon túl?
Következő: »»   64 / 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